ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxÎļþËøµÄ¼¸¸öÒªµã

·¢²¼Ê±¼ä:2008-03-28 12:09:30À´Ô´:ºìÁª×÷Õß:wlike
Du XiaoGang <dugang@188.com>

ÎļþËøÊÇLinuxÉÏ×î³£ÓõĽø³Ì¼äͬ²½»úÖÆÖ®Ò»£¬Ïà±ÈsysvµÄÐźÅÁ¿£¬ÎļþËø¸üÈÝÒ×ʹÓã¨sysvÐźÅÁ¿µÄÂé·³Ö®´¦ÔÚÓÚËüµÄkey»ñÈ¡»úÖÆ£©¡£

APUE¶ÔÎļþËø×öÁËÏ꾡µÄÃèÊö£¬ÆäÖÐÐèҪעÒâµÄÓÐÒÔϼ¸µã£¬Ô­ÎĿɲμûAPUE2µÄ14.3½Ú£º

1£¬ÎļþËø£¨file_lock£©ÓëÎļþ£¨È·ÇеÄ˵ÊÇÎļþµÄinode£©¼°½ø³ÌÀ¦°ó£¬LinuxʵÏÖÖÐÎļþµÄfile_lock½á¹¹¹ÒÔÚ¸ÃÎļþ¶ÔÓ¦µÄinode½á¹¹ÖУ¬¶øfile_lock½á¹¹Öаüº¬Á˸ÃËøËùÊô½ø³ÌµÄpid¡£ÕâÖÖʵÏÖ·½Ê½Ôì³ÉÁËÁ½ÖÖºó¹û£º

a, ½ø³ÌÍ˳öʱ£¬ÊôÓڸýø³ÌµÄËùÓÐÎļþËø±»ÊÍ·Å¡£

b, ¹Ø±Õ¼ÓËø½ø³ÌËùÊôµÄÈκÎÒ»¸öÖ¸Ïò¼ÓËøÎļþµÄfd»òfileʱ£¬Ëø±»ÊÍ·Å¡£ÕâÊÇÓÉÓÚfile_lock½á¹¹Ñ¡Ôñ¹ÒÔÚinodeÉ϶ø²»ÊÇfd»òfile£¨Äں˽ṹ£¬fdµÄÏÂÒ»Õ¾£©£¬ËùÒÔÎÞ·¨¾ßÌåÇø·ÖÎļþËø¶ÔÓ¦µÄfd»òfileÉÏ¡£ÕâµãÐèÒªÌرð×¢Ò⣬APUEÉÏÁгöÁËÁ½¸öÀý×Ó£¬µÚÒ»¸ö¶ÔÓ¦fd¹Ø±Õ£¬µÚ¶þ¸ö¶ÔÓ¦file¹Ø±Õ£¬ÕâÁ½ÖÖÇéÐζ¼»áµ¼ÖÂËøÊÍ·Å£º

ÒýÓÃ:
fd1 = open(pathname, ...);
read_lock(fd1, ...);
fd2 = dup(fd1);
close(fd2);

fd1 = open(pathname, ...);
read_lock(fd1, ...);
fd2 = open(pathname, ...)
close(fd2);


APUEÖÐÓÐÒ»¸öFreeBSDµÄÎļþËøʵÏÖͼ¿ÉÒÔ°ïÖúÀí½âÒÔÉÏÄÚÈÝ£¬¸Ãͼ¶ÔLinuxÒ²ÊÇÊÊÓõġ£

2£¬fork()ºó×Ó½ø³Ì²»¼Ì³Ð¸¸½ø³ÌµÄËø£¬Õâ¸öºÜÈÝÒ×Àí½â£¬Ëø¾ÍÊDZ»½ø³ÌÓÃÀ´Ö´Ðл¥³âµÈÈÎÎñµÄ£¬Èç¹û³Ð¾ÍÂÒÁË¡£

3£¬exec()¿ÉÒԼ̳ÐËø£¬È¡¾öÓÚexec()ºó¼ÓËøfdÊÇ·ñ±»¹Ø±Õ£¨close-on-exec£©£¬ÕâÊÇÒòΪexec()Ç°ºó½ø³Ì»¹ÊÇÒ»¸ö¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ