BBSˮľÇ廪վ¡Ã¾«»ªÇø

·¢ÐÅÈË: kxn (ÄÄЩ½ÌÑÐ×éÔÚÕÐÈËÄØ£¿faint), ÐÅÇø: Linux        
±ê  Ìâ: [×ªÔØ]unix»·¾³¸ß¼¶±à³Ì--µÚ3Õ ÎļþI/O  
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Wed Mar 15 13:59:11 2000) 
 
·¢ÐÅÈË: taosm (128+64-->cool), ÐÅÇø: unix  
 
±ê  Ìâ: unix»·¾³¸ß¼¶±à³Ì--µÚ3Õ ÎļþI/O  
 
·¢ÐÅÕ¾: Î÷Ê®°ËBBS (Fri Mar 10 11:33:13 2000), ×ªÐÅ  
 
   
 
µÚÈýÕÂ--ÎļþI/Oª¥  
 
3.1--ÒýÑÔª¥  
 
±¾Õ¿ªÊ¼ÌÖÂÛUnixϵͳ£¬ÏÈ˵Ã÷¿ÉÓõÄÎļþI/Oº¯Êý¡¼CD2¡½´ò¿ªÎļþ¡¢¶ÁÎļþ¡¢Ð´  
 
ÎļþµÈµÈ¡£´ó¶àÊýUnixÎļþI/OÖ»ÒªÓÃ5¸öº¯Êý£ºopen¡¢read¡¢write¡¢lseetpÒÔ¼°  
 
close¡£È»ºó˵Ã÷²»Í¬»º³åÆ÷³¤¶È¶ÔreadºÍwriteº¯ÊýµÄÓ°Ïì¡£ª¥  
 
±¾ÕÂËù˵Ã÷µÄº¯Êý¾­³£±»³ÆÖ®Îª²»´ø»º³åµÄI/O(Ó뽫ÔÚµÚÎåÕÂÖÐ˵Ã÷µÄ±ê×¼I/Oº¯  
 
ÊýÏà¶ÔÕÕ)¡£ÊõÓï---²»´ø»º³åÖ¸µÄÊÇÿ¸öreadºÍwrite¶¼µ÷ÓÃÒ»¸öºËÖеÄϵͳµ÷Óᣠ 
 
ÕâЩ²»´ø»º³åµÄI/Oº¯Êý²»ÊÇANSI CµÄ×é³É²¿·Ö£¬µ«ÊÇÊÇPOSIX1ºÍXPG3µÄ×é³É²¿·Ö¡£ª¥  
 
Ö»ÒªÉæ¼°ÔÚ¶à¸ö½ø³Ì¼ä¹²Ïí×ÊÔ´£¬Ô­×Ó²Ù×÷µÄ¸ÅÄî¾Í±ä³É·Ç³£ÖØÒª¡£ÎÒÃǽ«Í¨¹ýÎÄ  
 
¼þI/OºÍ´«Ë͸øOpenº¯ÊýµÄ²ÎÊýÀ´ÌÖÂ۴˸ÅÄî¡£Õ⽫µ¼ÖÂÌÖÂÛÔÚ¶à¸ö½ø³Ì¼äÊÇÈçºÎ  
 
¹²ÏíÎļþµÄ£¬²¢É漰ϵͳºËµÄÓйØÊý¾Ý½á¹¹¡£ÔÚÌÖÂÛÁËÕâÐ©ÌØÕ÷ºó£¬ÎÒÃǽ«ËµÃ÷  
 
dup¡¢fcntlºÍioctlº¯Êý¡£ª¥  
 
   
 
3.2--ÎļþÃèÊö·ûª¥  
 
¶ÔÓÚϵͳºË¶øÑÔ£¬ËùÓдò¿ªÎļþ¶¼ÓÉÎļþÃèÊö·ûÒýÓá£Ò»¸öÎļþÃèÊö·ûÊǸö·Ç¸ºÕû  
 
Êý¡£µ±´ò¿ªÒ»¸öÏÖ´æÎļþ»ò´´½¨Ò»¸öÐÂÎļþʱ£¬ÏµÍ³ºËÏò½ø³Ì·µ»ØÒ»¸öÎļþÃèÊö·û¡£  
 
ÓëÎÒÃÇÒª¶Á¡¢Ð´Ò»¸öÎļþʱ£¬ÓÃopen»òcreat·µ»ØµÄÎļþÃèÊö·û±êʶ¸ÃÎļþ£¬½«Æä  
 
×÷Ϊ²ÎÊý´«Ë͸øread»òwrite¡£ª¥  
 
°´ÕÕ¹ßÀý£¬Unix ShellʹÎļþÃèÊö·ûOÓëÒ»¸ö½ø³ÌµÄ±ê×¼ÊäÈëÏà½áºÏ£¬Ê¹ÎļþÃèÊö·û1  
 
Óë±ê×¼Êä³öÏà½áºÏ£¬Ê¹ÎļþÃèÊö·û2Óë±ê×¼³ö´íÊä³öÏà½áºÏ¡£ÕâÊÇUnix shellÒÔ¼°ºÜ  
 
¶àÓ¦ÓóÌÐòʹÓõĹßÀý£¬¶øÓëϵͳºËÎ޹ء£¾¡¹ÜÈç´Ë£¬Èç¹û²»×ñÕÕÕâÖÖ¹ßÀýÄÇôºÜ¶à  
 
UnixÓ¦ÓóÌÐò¾Í»á²»Äܹ¤×÷¡£ª¥  
 
ÔÚPOSIX1Ó¦ÓóÌÐòÖУ¬ÕâЩ»ÃÊý0£¬1£¬2Ó¦±»´ú»»³É·ûºÅ³£ÊýSTDIN_FILENO,STDOUT_F-  
 
ILENOºÍSTDERR_FILENO¡£ÕâЩ³£Êý¶¼¶¨ÒåÔÚÍ·Îļþ<unistd.h>ÖÐ.ÎļþÃèÊö·ûµÄ·¶Î§  
 
ÊÇ0-OPEN_MAX(Çë»ØÒäͼ2.7)¡£½ÏÔçµÄUnix°æ±¾²ÉÓõÄÉÏÏÞÖµÊÇ19(ÔÊÐíÿ¸ö½ø³Ì´ò¿ª  
 
20¸öÎļþ)£¬ÏÖÔںܶàϵͳÔò½«ÆäÔö¼ÓΪ63¡£SVR4ºÍ4.3+BSD¶ÔÎļþÃèÊö·ûµÄ±ä»¯·¶Î§  
 
ûÓÐ×÷¹æ¶¨£¬ËüÖ»Êܵ½ÏµÍ³ÅäÖõĴ洢Æ÷µÄ×ÜÁ¿¡¢ÕûÐÍ×ÖµÄ×Ö³¤ÒÔ¼°ÏµÍ³¹ÜÀíÔ±ËùÅä  
 
ÖõÄÈíÐÔ»òÓ²ÐÔÏÞÖÆµÄÔ¼Êø¡£ª¥  
 
   
 
3.3--Openº¯Êýª¥  
 
µ÷ÓÃOpenº¯Êý´ò¿ª»ò´´½¨Ò»¸öÎļþ¡£ª¥  
 
#include <sys/types.h>ª¥  
 
#include <sys/stat.h>ª¥  
 
#include <fcntl.h>ª¥  
 
int open(const char *pathname, int oflag, /* mode_t mode */);  
 
·µ»Ø£ºÈô³É¹¦ÎªÎļþÃèÊö·û£¬³ö´íΪ-1ª¥  
 
ÎÒÃǽ«µÚ3¸ö²ÎÊýдΪ/* */£¬ÕâÊÇANSI C˵Ã÷ÓàϲÎÊýµÄÊýÄ¿ºÍÀàÐÍ¿ÉÒԱ仯µÄ·½·¨¡£  
 
¶ÔÓÚOpenº¯Êý¶øÑÔ£¬½öµ±´´½¨ÐÂÎļþʱ²ÅʹÓõÚ3¸ö²ÎÊý(ÎÒÃǽ«ÔÚÉÔºó¶Ô´Ë½øÐÐ˵Ã÷)  
 
ÔÚº¯ÊýÔ­ÐÍÖÐÎÒÃǽ«´Ë²ÎÊý·ÅÖÃÔÚ×¢ÊÍÖС£pathnameÊÇÒª´ò¿ª»ò´´½¨µÄÎļþµÄÃû×Ö¡£  
 
flag²ÎÊý¿ÉÓÃÀ´ËµÃ÷´Ëº¯ÊýµÄ¶à¸ö¿ÉÑ¡ÔñÏî¡£ÓÃÏÂÁÐÒ»¸ö»ò¶à¸ö³£ÊýÏà»ò(OR)¹¹³Éflag  
 
²ÎÊý(ÕâЩ³£Êý¶¨ÒåÔÚ<fcntl.h>Í·ÎļþÖÐ)¡£  
 
O_RDONLY Ö»¶Á´ò¿ª, O_WRONLY Ö»Ð´´ò¿ª,O_RDWR ¶Á¡¢Ð´´ò¿ª.ºÜ¶àʵÏÖ½«O_RDONLY¶¨  
 
ÒåΪ0,O_WRONLY¶¨ÒåΪ1,O_RDWR¶¨ÒåΪ2£¬ÒÔÓë½ÏÔçµÄϵͳ¼æÈÝ.ÔÚÕâÈý¸ö³£ÊýÖÐÓ¦µ±Ò²  
 
Ö»Ó¦Ö¸¶¨Ò»¸ö.ÏÂÁг£ÊýÔòÊÇ¿ÉÑ¡ÔñµÄ£ºª¥  
 
O_APPEND--ÔÚÿ´Îдʱ¶¼¼Óµ½ÎļþµÄβ¶Ë¡£ÎÒÃǽ«ÔÚ3.11ÖÐÏêϸ˵Ã÷´ËÑ¡ÔñÏî¡£ª¥  
 
O_CREAT--Èô´ËÎļþ²»´æÔÚÔò´´½¨Ëü¡£Ê¹Óô˿ÉÑ¡Ïîʱ£¬Ðèͬʱ˵Ã÷µÚÈý¸ö²ÎÊýmode£¬  
 
ÓÃÆä˵Ã÷¸ÃÐÂÎļþµÄ´æÈ¡Ðí¿ÉȨλ¡£(ÎÒÃǽ«ÔÚ4ª±5½ÚÖÐ˵Ã÷ÎļþµÄÐí¿ÉȨλ,ÄÇʱ¾ÍÄÜ  
 
Á˽âÈçºÎ˵Ã÷mode£¬ÒÔ¼°ÈçºÎÓýø³ÌµÄvmaskÖµÐÞ¸ÄËü¡£)ª¥  
 
O_EXCL--Èç¹ûͬʱָ¶¨ÁËO_CREAT,¶øÎļþÒѾ­´æÔÚ,Ôò³ö´í.ÕâʹµÃ²âÊÔÒ»¸öÎļþÊÇ·ñ´æ  
 
ÔÚ,Èç¹û²»´æÔÚÔò´´½¨´ËÎļþ³ÉΪһ¸öÔ­×Ó²Ù×÷.ÎÒÃǽ«ÔÚ3.11½ÚÖнÏÏêϸµÄ˵Ã÷Ô­×Ó²Ù×÷  
 
O_TRUNC--Èç¹û´ËÎļþ´æÔÚ,¶øÇÒΪֻ¶Á»òֻд³É¹¦´ò¿ª,Ôò½«Æä³¤¶È½Ø¶ÌΪ0¡£ª¥  
 
O_NOCTTY--Èç¹ûpathnameÖ¸µÄÊÇÖÕ¶ËÉ豸£¬Ôò²»½«´ËÉ豸·ÖÅä×÷Ϊ´Ë½ø³ÌµÄ¿ØÖÆÖÕ¶Ë.ÎÒ  
 
ÃÇÔÚ9.6½ÚÖÐ˵Ã÷¿ØÖÆÖÕ¶Ë¡£ª¥  
 
O_NONBLOCK--Èç¹ûpathnameÖ¸µÄÊÇÒ»¸öFIFO¡¢Ò»¸ö¿éÌØÊâÎļþ»òÒ»¸ö×Ö·ûÌØÊâÎļþ,Ôò´Ë  
 
Ñ¡ÔñÏîΪ´ËÎļþµÄ±¾´Î´ò¿ª²Ù×÷ºÍºóÐøµÄI/O²Ù×÷ÉèÖ÷Ç×èÈû·½Ê½¡£ÔÚ12.2ÖÐÎÒÃǽ«ËµÃ÷  
 
´Ë¹¤×÷·½Ê½¡£ª¥  
 
½ÏÔçµÄϵͳ¢õ°æ±¾ÒýÈëÁËO_NDELAY(²»ÑÓ³Ù)±êÖ¾£¬ËüÓëO_NONBLOCK(²»×èÈû)Ñ¡ÔñÏîÀàËÆ£¬  
 
µ«ÔÚ¶Á²Ù×÷µÄ·µ»ØÖµÖоßÓÐÁ½ÒåÐÔ¡£Èç¹û²»ÄܴӹܵÀ¡¢FIFO»òÉ豸¶ÁµÃÊý¾Ý£¬Ôò²»ÑÓ³Ù  
 
Ñ¡ÔñÏîʹread·µ»Ø0£¬ÕâÓë±íʾÒѶÁµ½Îļþβ¶ËµÄ·µ»ØÖµ0Ïà³åÍ»¡£SVR4ÈÔÖ§³ÖÕâÖÖÓïÒå  
 
µÄ²»ÑÓ³ÙÑ¡ÔñÏµ«ÊÇеÄÓ¦ÓóÌÐòÓ¦µ±Ê¹Óò»×èÈûÑ¡ÔñÏîÒÔ´úÌæÖ®¡£ª¥  
 
O_SYNC--ʹÿ´Îwrite¶¼µÈµ½ÎïÀíI/O²Ù×÷Íê³É¡£ÎÒÃǽ«ÔÚ3.13ʹÓôËÑ¡ÔñÏî¡£ª¥  
 
ÓÉOpen·µ»ØµÄÎļþÃèÊö·ûÒ»¶¨ÊÇ×îСµÄδÓÃÃèÊö·ûÊý×Ö¡£ÕâÒ»Àà±»ºÜ¶àÓ¦ÓóÌÐòÓÃÀ´ÔÚ  
 
±ê×¼ÊäÈë¡¢±ê×¼Êä³ö»ò±ê×¼³ö´íÊä³öÉÏ´ò¿ªÒ»¸öеÄÎļþ¡£ÀýÈ磬һ¸öÓ¦ÓóÌÐò¿ÉÒÔÏÈ  
 
¹Ø±Õ±ê×¼Êä³ö(ͨ³£ÊÇÎļþÃèÊö·û1)£¬È»ºó´ò¿ªÁíÒ»¸öÎļþ£¬ÊÂÏȾÍÄÜÁ˽⵽¸ÃÎļþÒ»¶¨  
 
»áÔÚÎļþÃèÊö·û1ÉÏ´ò¿ª¡£ÔÚ3.12½Ú˵Ã÷dupº¯ÊýʱÎÒÃÇ¿ÉÒÔÁ˽⵽ÓиüºÃµÄ·½·¨Äܱ£Ö¤ÔÚ  
 
Ò»¸ö¸ø¶¨µÄÃèÊö·ûÉÏ´ò¿ªÒ»¸öÎļþ¡£ª¥  
 
ÎļþÃûºÍ·¾¶Ãû½Ø¶Ì--Èç¹ûNAME_MAXÊÇ14£¬¶øÎÒÃÇÈ´ÊÔͼÔÚµ±Ç°Ä¿Â¼Öд´½¨Ò»¸öÆäÎļþÃû  
 
°üº¬15¸ö×Ö·ûµÄÐÂÎļþ£¬´Ëʱ»á·¢ÉúÊ²Ã´ÄØ?°´ÕÕ´«Í³µÄϵͳ¢õ°æ±¾£¬ÔÊÐíÕâÖÖʹÓ÷½·¨,  
 
µ«ÊÇ×ÜÊǽ«ÎļþÃû½Ø¶ÌΪ14¸ö×Ö·û£¬¶øBSDÀàµÄϵͳÔò·µ»Ø³ö´íENAMETOOLONG¡£ÕâÒ»ÎÊÌâ  
 
²»½ö½öÓë´´½¨ÐÂÎļþÓйØ.Èç¹ûNAME_MAXÊÇ14£¬¶ø´æÔÚÒ»¸öÆäÎļþÃûǡǡ¾ÍÊÇ14¸ö×Ö·ûµÄ  
 
Îļþ£¬ÄÇôÒÔpathname×÷ΪÆä²ÎÊýµÄÈÎÒ»º¯Êý(open,statµÈ)¶¼»áÓöµ½ÕâÒ»ÎÊÌâ¡£ª¥  
 
ÔÚPOSIX.1ÖУ¬³£Êý_POSIX_NO_TRUNC¾ö¶¨ÁËÊÇ·ñÒª½Ø¶Ì¹ý³¤µÄÎļþÃû»ò·¾¶Ãû£¬»òÕß·µ»Ø  
 
Ò»¸ö³ö´í¡£ÔÚµÚÊ®¶þÕÂÖУ¬ÎÒÃǽ«ËµÃ÷´ËÖµ¿ÉÒÔÕë¶Ô¸÷¸ö²»Í¬µÄÎļþϵͳ½øÐиü±ä¡£ª¥  
 
FIPS151-1ÒªÇ󷵻سö´í.SVR4¶Ô´«Í³µÄϵͳ¢õÎļþϵͳ(S5)²¢²»±£Ö¤·µ»Ø³ö´í(¼ûͼ2.6),  
 
µ«ÊǶÔBSD·ç¸ñµÄÎļþϵͳ(UFS)£¬SVR4±£Ö¤·µ»Ø³ö´í£¬4.3+BSD×ÜÊÇ·µ»Ø³ö´í.Èô  
 
_POSIX_NO_TRUNCÓÐЧ£¬ÔòÔÚÕû¸ö·¾¶Ãû³¬¹ýPATH_MAX£¬»ò·¾¶ÃûÖеÄÈÎÒ»ÎļþÃû·ÖÁ¿³¬  
 
¹ýNAME_MAXʱ£¬·µ»Ø³ö´íENAMETOOLONG¡£ª¥  
 
   
 
3.4--Creatº¯Êýª¥  
 
Ò²¿ÉÓÃcreatº¯Êý´´½¨Ò»¸öÐÂÎļþ¡£ª¥  
 
#include <sys/types.h>ª¥  
 
#include <sys/stat.h>ª¥  
 
#include <fcntl.h>ª¥  
 
int creat(const char *ª«pathname,mode_t mode);ª¥  
 
·µ»Ø£ºÈô³É¹¦ÎªÖ»Ð´´ò¿ªµÄÎļþÃèÊö·û£¬³ö´íΪ-1ª¥  
 
×¢Ò⣬´Ëº¯ÊýµÈЧÓÚ£ºª¥  
 
open(pathname,O_WRONLY£üO_CREAT£üO_TRUNC,mode);ª¥  
 
ÔÚÔçÆÚµÄUnix°æ±¾ÖУ¬openµÄµÚ2¸ö²ÎÊýÖ»ÄÜÊÇ0£¬1»ò2¡£Ã»Óа취´ò¿ªÒ»¸öÉÐδ´æ  
 
ÔÚµÄÎļþ,Òò´ËÐèÒªÁíÒ»¸öϵͳµ÷ÓÃcreatÒÔ´´½¨ÐÂÎļþ¡£ÏÖÔÚ£¬openº¯ÊýÌṩÁË¿ÉÑ¡Ïî  
 
O_CREATºÍO_TRUNC£¬ÓÚÊÇÒ²¾Í²»ÔÙÐèÒªcreatº¯ÊýÁË.ÔÚ4.5½ÚÖÐÏêϸ˵Ã÷Îļþ´æÈ¡È¨Ê±£¬  
 
ÎÒÃǽ«ËµÃ÷ÈçºÎÖ¸¶¨mode¡£ª¥  
 
creatµÄÒ»¸ö²»×ãÖ®´¦ÊÇËüÒÔֻд·½Ê½´ò¿ªËù´´½¨µÄÎļþ¡£ÔÚÌṩopenµÄа汾֮  
 
ǰ£¬Èç¹ûÎÒÃÇÒª´´½¨Ò»¸öÁÙʱÎļþ£¬²¢ÒªÏÈд¸ÃÎļþ£¬È»ºóÓÖ¶Á¸ÃÎļþ£¬Ôò±ØÐëÏȵ÷Óà 
 
creat£¬close£¬È»ºóÔÙµ÷ÓÃopen¡£ÏÖÔÚÔò¿ÉÓÃÏÂÁз½Ê½µ÷ÓÃopen£ºª¥  
 
open(pathname,O_RDWR£üO_CREAT£üO_TRUNC,mode);ª¥  
 
   
 
3.5--closeº¯Êýª¥  
 
ÓÃcloseº¯Êý¹Ø±ÕÒ»¸ö´ò¿ªÎļþ£ºª¥  
 
#include <unistd.h>  
 
int close (int ª«filedes)£»ª¥  
 
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ-1ª¥  
 
¹Ø±ÕÒ»¸öÎļþʱҲÊͷŸýø³Ì¼ÓÔÚ¸ÃÎļþÉϵÄËùÓмÇÂ¼Ëø¡£½«ÔÚ12.3½ÚÖÐÌÖÂÛÕâÒ»µã¡£ª¥  
 
µ±Ò»¸ö½ø³ÌÖÕֹʱ£¬ËüÃÇËùÓдò¿ªÎļþ¶¼ÓÉϵͳºË×Ô¶¯¹Ø±Õ¡£ºÜ¶à³ÌÐò¶¼Ê¹ÓÃÕâÒ»¹¦ÄÜ  
 
¶ø²»ÏÔʽµØÓÃclose¹Ø±Õ´ò¿ªÎļþ¡£ÊµÀý¼û³ÌÐò1.2¡£ª¥  
 
   
 
3.6--lseekº¯Êýª¥  
 
·µ»Ø£ºÈô³É¹¦ÎªÖ»Ð´´ò¿ªµÄÎļþÃèÊö·û£¬³ö´íΪ-1ª¥  
 
×¢Ò⣬´Ëº¯ÊýµÈЧÓÚ£ºª¥  
 
open(pathname,O_WRONLY£üO_CREAT£üO_TRUNC,mode);ª¥  
 
ÔÚÔçÆÚµÄUnix°æ±¾ÖУ¬openµÄµÚ2¸ö²ÎÊýÖ»ÄÜÊÇ0£¬1»ò2¡£Ã»Óа취´ò¿ªÒ»¸öÉÐδ´æ  
 
ÔÚµÄÎļþ,Òò´ËÐèÒªÁíÒ»¸öϵͳµ÷ÓÃcreatÒÔ´´½¨ÐÂÎļþ¡£ÏÖÔÚ£¬openº¯ÊýÌṩÁË¿ÉÑ¡Ïî  
 
O_CREATºÍO_TRUNC£¬ÓÚÊÇÒ²¾Í²»ÔÙÐèÒªcreatº¯ÊýÁË.ÔÚ4.5½ÚÖÐÏêϸ˵Ã÷Îļþ´æÈ¡È¨Ê±£¬  
 
ÎÒÃǽ«ËµÃ÷ÈçºÎÖ¸¶¨mode¡£ª¥  
 
creatµÄÒ»¸ö²»×ãÖ®´¦ÊÇËüÒÔֻд·½Ê½´ò¿ªËù´´½¨µÄÎļþ¡£ÔÚÌṩopenµÄа汾֮  
 
ǰ£¬Èç¹ûÎÒÃÇÒª´´½¨Ò»¸öÁÙʱÎļþ£¬²¢ÒªÏÈд¸ÃÎļþ£¬È»ºóÓÖ¶Á¸ÃÎļþ£¬Ôò±ØÐëÏȵ÷Óà 
 
creat£¬close£¬È»ºóÔÙµ÷ÓÃopen¡£ÏÖÔÚÔò¿ÉÓÃÏÂÁз½Ê½µ÷ÓÃopen£ºª¥  
 
open(pathname,O_RDWR£üO_CREAT£üO_TRUNC,mode);ª¥  
 
   
 
3.5--closeº¯Êýª¥  
 
ÓÃcloseº¯Êý¹Ø±ÕÒ»¸ö´ò¿ªÎļþ£ºª¥  
 
#include <unistd.h>  
 
int close (int ª«filedes)£»ª¥  
 
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ-1ª¥  
 
¹Ø±ÕÒ»¸öÎļþʱҲÊͷŸýø³Ì¼ÓÔÚ¸ÃÎļþÉϵÄËùÓмÇÂ¼Ëø¡£½«ÔÚ12.3½ÚÖÐÌÖÂÛÕâÒ»µã¡£ª¥  
 
µ±Ò»¸ö½ø³ÌÖÕֹʱ£¬ËüÃÇËùÓдò¿ªÎļþ¶¼ÓÉϵͳºË×Ô¶¯¹Ø±Õ¡£ºÜ¶à³ÌÐò¶¼Ê¹ÓÃÕâÒ»¹¦ÄÜ  
 
¶ø²»ÏÔʽµØÓÃclose¹Ø±Õ´ò¿ªÎļþ¡£ÊµÀý¼û³ÌÐò1.2¡£ª¥  
 
   
 
3.6--lseekº¯Êýª¥  
 
ÿ¸ö´ò¿ªÎļþ¶¼ÓÐÒ»¸öÓëÆäÏà¹ØÁªµÄ"µ±Ç°ÎļþÎ»ÒÆÁ¿"¡£ËüÊÇÒ»¸ö·Ç¸ºÕûÊý£¬ÓÃÒÔ  
 
¶ÈÁ¿´ÓÎļþ¿ªÊ¼´¦¼ÆËãµÄ×Ö½ÚÊý¡£(ÔÚ±¾½ÚÉԺ󴦣¬ÎÒÃǽ«¶Ô"·Ç¸º"ÕâÒ»ÐÞÊδʵÄijЩÀý  
 
Íâ½øÐÐ˵Ã÷)ͨ³££¬¶Á¡¢Ð´²Ù×÷¶¼´Óµ±Ç°ÎļþÎ»ÒÆÁ¿´¦¿ªÊ¼£¬²¢Ê¹Î»ÒÆÁ¿Ôö¼ÓËù¶Á»òд  
 
µÄ×Ö½ÚÊý¡£°´ÏµÍ³Ä¬ÈÏ£¬µ±´ò¿ªÒ»¸öÎļþʱ£¬³ý·ÇÖ¸¶¨O_APPENDÑ¡ÔñÏ·ñÔò¸ÃÎ»ÒÆÁ¿  
 
±»ÉèÖÃΪ0.¿ÉÒÔµ÷ÓÃlseekÏÔʽµØ¶¨Î»Ò»¸ö´ò¿ªÎļþ¡£ª¥  
 
#include <sys/types.h>ª¥  
 
#include <unistd.h>ª¥  
 
off_t lseek(int ª«filedesª«,off_t ª«offsetª«,int ª«whence);ª¥  
 
·µ»Ø£ºÈô³É¹¦ÎªÐµÄÎļþÎ»ÒÆ£¬³ö´íΪ-1ª¥  
 
¶Ô²ÎÊýoffsetµÄ½âÊÍÓë²ÎÊýwhenceµÄÖµÓйء£ª¥  
 
¡¤ÈôwhenceÊÇSEEK_SET£¬Ôò½«¸ÃÎļþµÄÎ»ÒÆÁ¿ÉèÖÃΪ¾àÎļþ¿ªÊ¼´¦offset¸ö×Ö½Ú¡£ª¥  
 
¡¤ÈôwhenceÊÇSEEK[CD#*2]CUR£¬Ôò½«¸ÃÎļþµÄÎ»ÒÆÁ¿ÉèÖÃΪÆäµ±Ç°Öµ¼Óoffset¡£offset  
 
  ¿ÉΪÕý»ò¸º¡£ª¥  
 
¡¤ÈôwhenceÊÇSEEK[CD#*2]END£¬Ôò½«¸ÃÎļþµÄÎ»ÒÆÁ¿ÉèÖÃΪÎļþ³¤¶È¼Óoffset,offset¿É  
 
  ÎªÕý»ò¸º¡£ª¥  
 
Èôlseek³É¹¦Ö´ÐУ¬Ôò·µ»ØÐµÄÎļþÎ»ÒÆÁ¿£¬Îª´Ë¿ÉÒÔÓÃÏÂÁз½Ê½È·¶¨Ò»¸ö´ò¿ªÎÄ  
 
¼þµÄµ±Ç°  
 
Î»ÒÆÁ¿£ºª¥  
 
off[CD#*2]t currpos;ª¥  
 
currpos=lseek(fd,0,SEEK[CD#*2]CUR);ª¥  
 
ÕâÖÖ·½·¨Ò²¿ÉÓÃÀ´È·¶¨ËùÉæ¼°µÄÎļþÊÇ·ñÊÇ¿ÉÒÔÉèÖÃÎ»ÒÆÁ¿µÄ¡£Èç¹ûÎļþÃèÊö·ûÒý  
 
ÓõÄÊÇÒ»  
 
¸ö¹ÜµÀ»òFIFO£¬Ôòlseek·µ»Ø-1£¬²¢½«errnoÉèÖÃΪEPIPE¡£ª¥  
 
Èý¸ö·ûºÅ³£ÊýSEEK[CD#*2]SET£¬SEEK[CD#*2]CURºÍSEEK[CD#*2]ENDÊÇÓÉϵͳ¢õÒý½ø  
 
µÄ¡£ÔÚϵ  
 
ͳ¢õ֮ǰ£¬whence±»Ö¸¶¨Îª0(¾ø¶ÔÎ»ÒÆÁ¿)£¬1(Ïà¶ÔÓÚµ±Ç°Î»ÖõÄÎ»ÒÆÁ¿)»ò2(Ïà¶Ô  
 
Îļþβ¶Ë  
 
µÄÎ»ÒÆÁ¿)¡£ºÜ¶àÈí¼þÈÔÖ±½ÓʹÓÃÕâЩÊý×Ö½øÐбàÂë¡£ª¥  
 
ÔÚlseekÖеÄ×Ö·ûl±íʾ³¤ÕûÐÍ¡£ÔÚÒýÈëoff[CD#*2]tÊý¾ÝÀàÐÍ֮ǰ£¬offset²ÎÊýºÍ  
 
·µ»ØÖµÊÇ  
 
³¤ÕûÐ͵ġ£lseekÊÇÓÉVersion 7Òý½øµÄ£¬µ±Ê±CÓïÑÔÖÐÔö¼ÓÁ˳¤ÕûÐÍ¡£(ÔÚVersion  
 
 6ÖУ¬Óà 
 
º¯ÊýseekºÍtellÌṩÀàËÆ¹¦ÄÜ¡£)ª¥  
 
ʵÀý  
 
ª¥  
 
³ÌÐò3ª±1²âÊÔÆä±ê×¼ÊäÈëÄÜ·ñ±»ÉèÖÃÎ»ÒÆÁ¿¡£ª¥  
 
³ÌÐò3ª±1¡þ²âÊÔ±ê×¼ÊäÈëÄÜ·ñ±»ÉèÖÃÎ»ÒÆÁ¿¡£ª¥  
 
Èç¹ûÎÒÃÇÓý»»¥·½Ê½µ÷Óô˳ÌÐò£¬Ôò¿ÉµÃ£ºª¥  
 
$ aª±out < /etc/motdª¥  
 
seek OKª¥  
 
$ cat < /etc/motd £üaª±outª¥  
 
cannot seekª¥  
 
$ aª±out < /var/spool/cron/FIFOª¥  
 
cannot seekª¥  
 
ͨ³££¬Ò»¸öÎļþµÄµ±Ç°Î»ÒÆÁ¿Ó¦µ±ÊÇÒ»¸ö·Ç¸ºÕûÊý£¬µ«ÊÇ£¬Ä³Ð©É豸Ҳ¿ÉÄÜÔÊÐí¸º  
 
µÄÎ»ÒÆÁ¿  
 
¡£µ«¶ÔÓÚÆÕͨÎļþ£¬ÔòÆäÎ»ÒÆÁ¿±ØÐëÊǷǸºÖµ¡£ÒòÎªÎ»ÒÆÁ¿¿ÉÄÜÊǸºÖµ£¬ËùÒÔÔڱȠ 
 
½Ïlseek  
 
µÄ·µ»ØÖµÊ±Ó¦½÷É÷£¬²»Òª²âÊÔËüÊÇ·ñСÓÚ0£¬¶øÒª²âÊÔËüÊÇ·ñµÈÓÚ-1¡£ª¥  
 
ÔÚ80386ÉÏÔËÐеÄSVR4Ö§³Ö/dev/kmemÉ豸¿ÉÒÔ¾ßÓиºµÄÎ»ÒÆÁ¿¡£ª¥  
 
ÒòÎªÎ»ÒÆÁ¿ÊÇ´ø·ûºÅÊý¾ÝÀàÐÍ(off[CD#*2]t)(¼ûͼ2ª±8)£¬ËùÒÔ×î´óÎļþ³¤¶È¼õÉÙ  
 
Ò»°ë¡£Àý  
 
È磬Èôoff[CD#*2]tÊÇ32λÕûÐÍ£¬Ôò×î´óÎļþ³¤¶ÈÊÇ2ª¬ª©£³£±ªª×Ö½Ú¡£ª¥  
 
lseek½ö½«µ±Ç°µÄÎļþÎ»ÒÆÁ¿¼Ç¼ÔÚϵͳºËÄÚ£¬Ëü²¢²»ÒýÆðÈκÎI/O²Ù×÷¡£È»ºó£¬¸Ã  
 
Î»ÒÆÁ¿Óà 
 
ÓÚÏÂÒ»¸ö¶Á»òд²Ù×÷¡£ª¥  
 
ÎļþÎ»ÒÆÁ¿¿ÉÒÔ´óÓÚÎļþµÄµ±Ç°³¤¶È£¬ÔÚÕâÖÖÇé¿öÏ£¬¶Ô¸ÃÎļþµÄÏÂÒ»´Îд½«ÑÓ³¤  
 
¸ÃÎļþ£¬  
 
²¢ÔÚÎļþÖй¹³ÉÒ»¸ö¿Õµ÷£¬ÕâÒ»µãÊÇÔÊÐíµÄ¡£Î»ÓÚÎļþÖе«Ã»ÓÐд¹ýµÄ×Ö½Ú¶¼±»¶Á  
 
Ϊ0¡£ª¥  
 
ʵÀýª¥  
 
³ÌÐò3ª±2´´½¨Ò»¸ö¾ßÓпն´µÄÎļþª¥  
 
³ÌÐò3ª±2´´½¨Ò»¸ö¾ßÓпն´µÄÎļþª¥  
 
ÔËÐиóÌÐòµÃµ½£ºª¥  
 
$ aª±outª¥  
 
$ ls -1 fileª±hole ¡þ¡þ¡þ¡þ¡þ¡þ¡¼WB¡½¼ì²éÆä´óСª¥  
 
-rw-r--r--¡þ1 stevens¡þ50 Jul 31 05:50 fileª±holeª¥  
 
$ od -c fileª±hole¡¼DW¡½¹Û²ìʵ¼ÊÄÚÈݪ¥  
 
000000¡þ¡¼WB¡½a¡þb¡þc¡þd¡þe¡þf¡þg¡þh¡þi¡þj  £Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°  
 
¡þ£Ü£°ª¥  
 
000020¡¼DW ½£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ  
 
  £°¡þ£Ü  
 
£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°ª¥  
 
000040¡¼DW ½£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Ü£°¡þ£Á¡þ£Â¡þ£Ã¡þ  
 
£Ä¡þ£Å¡þ  
 
£Æ¡þ£Ç¡þ£Èª¥  
 
000060¡¼DW¡½£É¡þ£Êª¥  
 
000062ª¥  
 
ÎÒÃÇʹÓÃod(1)ÃüÁî¹Û²ì¸ÃÎļþµÄʵ¼ÊÄÚÈÝ¡£ÃüÁîÐÐÖеÄ-C±êÖ¾±íʾÒÔ×Ö½Ú·½Ê½´ò  
 
Ó¡ÎļþÄÚ  
 
ÈÝ¡£´ÓÖпÉÒÔ¿´µ½£¬ÎļþÖмäµÄ30¸öδд×Ö½Ú¶¼±»¶Á³ÉΪ0¡£Ã¿Ò»ÐпªÊ¼µÄÒ»¸öÆß  
 
λÊýÊÇÒÔ  
 
°Ë½øÖÆÐÎʽ±íʾµÄ×Ö½ÚÎ»ÒÆÁ¿¡£ÔÚ±¾ÀýÖУ¬ÎÒÃǵ÷ÓÃÁ˽«ÔÚ3ª±8½ÚÖÐ˵Ã÷µÄwrite  
 
º¯Êý¡£ÔÚ4  
 
ª±12½ÚÖÐÎÒÃǽ«¶Ô¾ßÓпն´µÄÎļþ½øÐиü¶à˵Ã÷¡£ª¥  
 
3ª±7¡þreadº¯Êýª¥  
 
ÓÃreadº¯Êý´Ó´ò¿ªÎļþÖжÁÊý¾Ý¡£ª¥  
 
#include <unistdª±h>  
 
ssize[CD#*2]t read(int ª«filedesª«,void *ª«buffª«,size[CD#*2]t ª«nbytes  
 
ª«);ª¥  
 
·µ»Ø£º¶Áµ½µÄ×Ö½ÚÊý£¬ÈôÒѵ½ÎļþβΪ0£¬³ö´íΪ-1ª¥  
 
Èçread³É¹¦Ôò·µ»Ø¶Áµ½µÄ×Ö½ÚÊý¡£Èç¹ûÒѵ½´ïÎļþµÄβ¶Ë£¬Ôò·µ»Ø0¡£ª¥  
 
ÓжàÖÖÇé¿ö¿Éʹʵ¼Ê¶Áµ½µÄ×Ö½ÚÊýÉÙÓÚÒªÇó¶Á×Ö½ÚÊý£ºª¥  
 
¶ÁÆÕͨÎļþʱ£¬ÔÚ¶Áµ½ÒªÇó×Ö½ÚÊý֮ǰÒѵ½´ïÁËÎļþβ¶Ë¡£ÀýÈ磬ÈôÔÚµ½´ïÎļþβ  
 
¶Ë֮ǰ»¹  
 
ÓÐ30¸ö×Ö½Ú£¬¶øÎÒÃÇÈ´ÒªÇó¶Á100¸ö×Ö½Ú£¬Ôòread·µ»Ø30£¬ÏÂÒ»´ÎÎÒÃÇÔÙµ÷ÓÃread  
 
ʱ£¬Ëü½«  
 
·µ»Ø0(Îļþβ¶Ë)¡£ª¥  
 
¡¤µ±´ÓÖÕ¶ËÉ豸¶Áʱ£¬Í¨³£Ò»´Î×î¶à¶ÁÒ»ÐÐ(ÔÚµÚʮһÕÂÖн«½éÉÜÈçºÎ¸Ä±äÕâÒ»µã  
 
)¡£ª¥  
 
¡¤µ±´ÓÍøÂç¶Áʱ£¬ÍøÂçÖеĻº³å»ú¹¹¿ÉÄÜÔì³É·µ»ØÖµÐ¡ÓÚËùÒªÇó¶ÁµÄ×Ö½ÚÊý¡£ª¥  
 
¡¤Ä³Ð©ÃæÏò¼Ç¼µÄÉ豸£¬ÀýÈç´Å´ø£¬Ò»´Î×î¶à·µ»ØÒ»¸ö¼Ç¼¡£ª¥  
 
¶Á²Ù×÷´ÓÎļþµÄµ±Ç°Î»ÒÆÁ¿´¦¿ªÊ¼£¬Ôڳɹ¦·µ»ØÖ®Ç°£¬¸ÃÎ»ÒÆÁ¿Ôö¼Óʵ¼Ê¶ÁµÃµÄ×Ö  
 
½ÚÊý¡£ª¥  
 
POSIXª±1ÔÚ¼¸¸ö·½Ãæ¶Ô´Ëº¯ÊýµÄÔ­ÐÍ×÷Á˸ü¸Ä¡£Æä¾­µä¶¨ÒåÊÇ£ºª¥  
 
int read(int fildes,char *buff,unsigned nbytes);ª¥  
 
Ê×ÏÈ£¬ÎªÁËÓëANSI CÒ»Ö£¬ÆäµÚ2¸ö²ÎÊýÓÉchar *¸ÄΪvoid *¡£ÔÚANSI CÖУ¬ÀàÐÍ  
 
void *Óà 
 
ÓÚ±íʾÀàÊôÖ¸Õë¡£Æä´Î£¬Æä·µ»ØÖµ±ØÐëÊÇÒ»¸ö´ø·ûºÅÕûÊý(ssize[CD#*2]t)£¬ÒÔ·µ  
 
»ØÕý×Ö½Ú  
 
Êý¡¢0(±íʾÎļþβ¶Ë)»ò-1(³ö´í)¡£×îºó£¬µÚ3¸ö²ÎÊýÔÚÀúÊ·ÉÏÊǸö²»´ø·ûºÅÕûÊý£¬  
 
ÒÔÔÊÐíÒ»  
 
¸ö16λµÄʵÏÖ¿ÉÒÔÒ»´Î¶Á»òдÖÁ65534¸ö×Ö½Ú¡£ÔÚ1990 POSIXª±1±ê×¼ÖУ¬Òý½øÁËР 
 
µÄ»ù±¾Ïµ  
 
ͳÊý¾ÝÀàÐÍssize[CD#*2]tÒÔÌṩ´ø·ûºÅµÄ·µ»ØÖµ£¬size[CD#*2]tÔò±»ÓÃÓÚµÚ3¸ö²Î  
 
Êý(»ØÒä  
 
ͼ2ª±7ÖеÄSSIZE¡¼CD#*2]MAX³£Êý¡£)ª¥  
 
3ª±8¡þwriteº¯Êýª¥  
 
ÓÃwriteº¯ÊýÏò´ò¿ªÎļþдÊý¾Ý¡£ª¥  
 
#include <unistdª±h>ª¥  
 
ssize[CD#*2]t write(int ª«filedesª«,const void *ª«buffª«,size[CD#*2]t ª«  
 
nbytesª«  
 
);ª¥  
 
·µ»Ø£ºÈô³É¹¦ÎªÒÑдµÄ×Ö½ÚÊý£¬³ö´íΪ-1ª¥  
 
Æä·µ»ØÖµÍ¨³£µ¼ÓÚ²ÎÊýnbyte£¬·ñÔò±íʾ³ö´í¡£write³ö´íµÄÒ»¸ö³£¼ûÔ­ÒòÊÇ£º»òÕß  
 
´ÅÅÌÒÑд  
 
Âú£¬»òÕß³¬¹ýÁ˶ÔÒ»¸ö¸ø¶¨½ø³ÌµÄÎļþ³¤¶ÈÏÞÖÆ(¼û7ª±11½Ú¼°Á·Ï°10ª±11)ª¥  
 
¶ÔÓÚÆÕͨÎļþ£¬Ð´²Ù×÷´ÓÎļþµÄµ±Ç°Î»ÒÆÁ¿´¦¿ªÊ¼¡£Èç¹ûÔÚ´ò¿ª¸ÃÎļþʱ£¬Ö¸¶¨ÁË  
 
O[CD#*2]  
 
APPENDÑ¡ÔñÏÔòÔÚÿ´Îд²Ù×÷֮ǰ£¬½«ÎļþÎ»ÒÆÁ¿ÉèÖÃÔÚÎļþµÄµ±Ç°½áβ´¦£¬ÔÚ  
 
Ò»´Î³É¹¦  
 
д֮ºó£¬¸ÃÎļþÎ»ÒÆÁ¿Ôö¼Óʵ¼ÊдµÄ×Ö½ÚÊý¡£ª¥  
 
3ª±9¡þI/OµÄЧÂʪ¥  
 
³ÌÐò3ª±3ֻʹÓÃreadºÍwriteº¯ÊýÀ´¸´ÖÆÒ»¸öÎļþ¡£¹ØÓڸóÌÐòӦעÒâÏÂÁи÷µã£º  
 
ª¥  
 
¡¤Ëü´Ó±ê×¼ÊäÈë¶Á£¬Ð´ÖÁ±ê×¼Êä³ö£¬Õâ¾Í¼Ù¶¨ÔÚÖ´Ðб¾³ÌÐò֮ǰ£¬ÕâЩ±ê×¼ÊäÈë¡¢  
 
Êä³öÒÑÓÉ  
 
shell°²Åźá£È·Êµ£¬ËùÓг£ÓõÄUnix shell¶¼ÌṩһÖÖ·½·¨£¬ËüÔÚ±ê×¼ÊäÈëÉÏ´ò  
 
¿ªÒ»¸öÎÄ  
 
¼þÓÃÓÚ¶Á£¬ÔÚ±ê×¼Êä³öÉÏ´´½¨(»òÖØÐ´)Ò»¸öÎļþ¡£ª¥  
 
¡¤ºÜ¶àÓ¦ÓóÌÐò¼Ù¶¨±ê×¼ÊäÈëÊÇÎļþÃèÊö·û0£¬±ê×¼Êä³öÊÇÎļþÃèÊö·û1¡£ÔÚ±¾ÀýÖР 
 
£¬ÎÒÃÇÔò  
 
ÓÃÁ½¸öÔÚ<unistdª±h>Öж¨ÒåµÄÃû×ÖSTDIN[CD#*2]FILENOºÍSTDOUT[CD#*2]FILENO¡£  
 
ª¥  
 
¡¤¿¼Âǵ½½ø³ÌÖÕֹʱ£¬Unix»á¹Ø±ÕËùÓдò¿ªÎļþÃèÊö·û£¬ËùÒԴ˳ÌÐò²¢²»closeÊä  
 
ÈëºÍÊä³ö  
 
Îļþ¡£ª¥  
 
¡¤ÔÚ³ÌÐò¶ÔÎı¾ÎļþºÍÁ½½øÖÆ´úÂëÎļþ¶¼Äܹ¤×÷£¬ÒòΪ¶ÔUnixϵͳºË¶øÑÔ£¬ÕâÁ½ÖÖ  
 
Îļþ²¢ÎÞ  
 
Çø±ð¡£ª¥  
 
³ÌÐò3ª±3¡þ½«±ê×¼ÊäÈë¸´ÖÆµ½±ê×¼Êä³öª¥  
 
ÎÒÃÇûÓлشðµÄÒ»¸öÎÊÌâÊÇÈçºÎѡȡBUFFSIZEÖµ¡£Ôڻشð´ËÎÊÌâ֮ǰ£¬ÈÃÎÒÃÇÏÈÓà 
 
¸÷ÖÖ²»Í¬  
 
µÄBUFFSIZEÖµÀ´ÔËÐд˳ÌÐò¡£Í¼3ª±1ÏÔʾÁËÓÃ18ÖÖ²»Í¬µÄ»º´æ³¤¶È£¬¶Á1£¬468£¬8  
 
02×Ö½ÚÎÄ  
 
¼þËùµÃµ½µÄ½á¹û¡£ª¥  
 
³ÌÐò3ª±3¶ÁÎļþ£¬Æä±ê×¼Êä³öÔò±»ÖØÐ¿ÕÏòµ½/dev/nullÉÏ¡£´Ë²âÊÔËùÓõÄÎļþϵ  
 
ͳÊDZ´¿Ë  
 
À³¿ìËÙÎļþϵͳ£¬Æä¿é³¤Îª8192×Ö½Ú¡£(¿é³¤ÓÉst[CD#*2]blksize±íʾ£¬ÔÚ4ª±12ÖР 
 
˵Ã÷Ϊ81  
 
92)¡£ÏµÍ³CPUʱ¼äµÄ×îСֵ¿ªÊ¼³öÏÖÔÚBUFFSIZEΪ8192´¦£¬¼ÌÐøÔö¼Ó»º´æ³¤¶È¶Ô´Ë  
 
ʱ¼ä²¢ÎÒ  
 
Ó°Ïì¡£ª¥  
 
ÎÒÃÇÒÔºó»¹½«»Øµ½ÕâһʵÀýÉÏ¡£ÔÚ3ª±13½ÚÖÐÎÒÃǽ«ÓôË˵Ã÷ͬ²½Ð´µÄЧ¹û£¬ÔÚ5ª±  
 
8½ÚÖУ¬  
 
Ôò½«±È½Ï²»´ø»º´æËùÓõÄʱ¼ä¼°±ê×¼I/O¿âËùÓõÄʱ¼ä¡£ª¥  
 
3ª±10¡þÎļþ¹²Ïíª¥  
 
UnixÖ§³ÖÔÚ²»Í¬½ø³Ì¼ä¹²Ïí´ò¿ªÎļþ¡£ÔÚ½éÉÜdupº¯ÊýÖ®¼ä£¬ÎÒÃÇÐèÒªÏÈ˵Ã÷ÕâÖÖ  
 
¹²Ïí¡£Îª  
 
´ËÏÈ˵Ã÷ϵͳºËÓÃÓÚËùÓÐI/OµÄÊý¾Ý½á¹¹¡£ª¥  
 
ϵͳºËʹÓÃÁËÈý¸öÊý¾Ý½á¹¹£¬ËüÃÇÖ®¼äµÄ¹ØÏµ¾ö¶¨ÁËÎļþ¹²Ïí·½ÃæÒ»¸ö½ø³Ì¶ÔÁíÒ»  
 
¸ö½ø³Ì¿É  
 
ÄܲúÉúµÄÓ°Ïì¡£ª¥  
 
1ª±Ã¿¸ö½ø³ÌÔÚ½ø³Ì±íÖж¼ÓÐÒ»¸ö¼Ç¼Ïÿ¸ö¼Ç¼ÏîÖÐÓÐÒ»ÕÅ´ò¿ªÎļþÃèÊö·û±í  
 
£¬ÎÒÃǿɠ 
 
½«ÆäÊÓΪһ¸öʸÁ¿£¬Ã¿¸öÃèÊö·ûÕ¼ÓÃÒ»Ïî¡£Óëÿ¸öÎļþÃèÊö·ûÏà¹ØÁªµÄÊÇ£ºª¥  
 
(a)ÎļþÃèÊö·û±êÖ¾£¬ª¥  
 
(b)Ö¸ÏòÒ»¸öÎļþ±íÏîµÄÖ¸Õë¡£ª¥ª¥ª¥ª¥  
 
ͼ3ª±1¡þ²»Í¬»º´æ³¤¶È½øÐжÁ²Ù×÷µÄʱ¼ä½á¹ûª¥  
 
2ª±ÏµÍ³ºËΪËùÓдò¿ªÎļþά³ÖÒ»ÕÅÎļþ±í¡£Ã¿¸öÎļþ±íÏî°üº¬£ºª¥  
 
(a)Îļþ״̬±êÖ¾(¶Á£¬Ð´£¬Ôöд£¬Í¬²½£¬·Ç×èÈûµÈ)£¬ª¥  
 
(b)µ±Ç°ÎļþÎ»ÒÆÁ¿£¬ª¥  
 
(c)Ö¸Ïò¸ÃÎļþv-node(v×Ö½Ú)±íÏîµÄÖ¸Õë¡£ª¥  
 
3ª±Ã¿¸ö´ò¿ªÎļþ(»òÉ豸)¶¼ÓÐÒ»¸öV[CD#*2]node½á¹¹¡£V[CD#*2]node°üº¬ÁËÎļþ  
 
ÀàÐͺͶԠ 
 
´ËÎļþ½øÐи÷ÖÖ²Ù×÷µÄº¯ÊýµÄÖ¸ÕëÐÅÏ¢¡£¶ÔÓÚ´ó¶àÊýÎļþ£¬v[CD#*2]node»¹°üº¬ÁË  
 
¸ÃÎļþµÄ  
 
i[CD#*2]node(Ë÷Òý½Úµã)¡£ÕâЩÐÅÏ¢ÊÇÔÚ´ò¿ªÎļþʱ´ÓÅÌÉ϶ÁÈëÄÚ´æµÄ£¬ËùÒÔËùÓР 
 
¹ØÓÚÎļþ  
 
µÄÐÅÏ¢¶¼ÊÇ¿ìËٿɹ©Ê¹Óõġ£ÀýÈ磬i[CD#*2]node°üº¬ÁËÎļþµÄÊôÖ÷¡¢Îļþ³¤¶È¡¢  
 
ÎļþËùÔÚ  
 
µÄÉ豸¡¢Ö¸ÏòÎļþÔÚÅÌÉÏËùʹÓõÄʵ¼ÊÊý¾Ý¿éµÄÖ¸ÕëµÈµÈ¡£(ÔÚ4ª±14½ÚÖнÏÏêϸµØ  
 
˵Ã÷Unix  
 
Îļþϵͳʱ£¬»á¸ü¶àµØËµÃ÷i[CD#*2]node)¡£ª¥  
 
ÎÒÃǺöÂÔÁËijЩ²¢²»Ó°ÏìÎÒÃÇÌÖÂÛµÄʵÏÖϸ½Ú¡£ÀýÈ磬´ò¿ªÎļþÃèÊö·û±íͨ³£ÔÚÓà 
 
»§Çø¶ø²»  
 
ÔÚ½ø³Ì±íÖС£ÔÚSVR4ÖУ¬´ËÊý¾Ý½á¹¹ÊÇÒ»¸öÁ´½Ó±í½á¹¹¡£Îļþ±í¿ÉÒÔÓöàÖÖ·½·¨Êµ  
 
ÏÖÒ»Ëü²»  
 
Ò»¶¨ÊÇÎļþ±íÏîÊý×é¡£ÔÚ4ª±3+BSDÖУ¬V[CD#*2]node°üº¬ÁËʵ¼Êi[CD#*2]node(Èç  
 
ͼ3ª±2ÖР 
 
Ëùʾ)¡£SVR4¶ÔÓÚ´ó¶àÊýÎļþϵͳÀàÐÍ£¬½«v[CD#*2]node´æ·ÅÔÚi[CD#*2¡½nodeÖС£  
 
ÕâЩʵÏÖ  
 
ϸ½Ú²¢²»Ó°ÏìÎÒÃǶÔÎļþ¹²ÏíµÄÌÖÂÛ¡£ª¥  
 
ͼ3ª±2ͼʾÁËÒ»¸ö½ø³ÌµÄÕâÈýÕűíÖ®¼äµÄ¹ØÏµ¡£¸Ã½ø³ÌÓÐÁ½¸ö²»Í¬µÄ´ò¿ªÎļþ¡¼C  
 
D2¡½Ò»¸ö  
 
Îļþ´ò¿ªÎª±ê×¼ÊäÈë(ÎļþÃèÊö·û0)£¬ÁíÒ»´ò¿ªÎª±ê×¼Êä³ö(ÎļþÃèÊö·ûΪ10¡£ª¥ª¥  
 
ª¥ª¥  
 
ͼ3ª±2¡þ´ò¿ªÎļþµÄϵͳºËÊý¾Ý½á¹¹ª¥  
 
´ÓUnixµÄÔçÆÚ°æ±¾¡²Thompson1978¡³ÒÔÀ´£¬ÕâÈýÕűíÖ®¼äµÄ»ù±¾¹ØÏµÒ»Ö±±£³ÖÖÁ½ñ  
 
¡£ÕâÖÖ°²  
 
ÅŶÔÓÚÔÚ²»Í¬½ø³ÌÖ®¼ä¹²ÏíÎļþµÄ·½Ê½ÊǷdz£ÖØÒªµÄ¡£ÔÚÒÔºóµÄÕ½ÚÖÐÊö¼°ÆäËüµÄ  
 
Îļþ¹²Ïí  
 
·½Ê½Ê±»¹»á»Øµ½ÕâÕÅͼÉÏÀ´¡£ª¥  
 
v[CD#*2]node½á¹¹ÊǽüÀ´ÔöÉèµÄ¡£µ±ÔÚÒ»¸ö¸ø¶¨µÄϵͳÉ϶ԶàÖÖÎļþϵͳÀàÐÍÌṩ  
 
Ö§³Öʱ£¬  
 
¾ÍÐèÒªÕâÖֽṹ£¬ÕâÒ»¹¤×÷ÊÇÓÉPeter Weinberger(BellʵÑéÊÒ)ºÍBill Joy(Sun  
 
Microsyst  
 
ems)·Ö±ð¶ÀÁ¢Íê³ÉµÄ¡£Sun³Æ´ËÖÖÎļþϵͳΪÐéÄâÎļþϵͳ(Virtual File System  
 
)£¬³ÆÓëÎÄ  
 
¼þϵͳÀàÐÍÎ޹صÄi[CD#*2]node²¿·ÖΪv[CD#*2]node¡²Kleiman 1986¡³¡£µ±¸÷¸öÖÆ  
 
ÔìÉ̵Äʵ  
 
ÏÖÔö¼ÓÁ˶ÔSunÍøÂçÎļþϵͳ(NFS)µÄÖ§³Öʱ£¬ËüÃǶ¼¹ã·º²ÉÓÃÁËv[CD#*2]node½á¹¹  
 
¡£ª¥  
 
ÔÚSVR4ÖУ¬v[CD#*2]node´ú»»ÁËSVR3ÖеÄÓëÎļþϵͳÀàÐÍÎ޹صÄi[CD#*2]node½á¹¹  
 
¡£ª¥  
 
Èç¹ûÁ½¸ö¶ÀÁ¢½ø³Ì¸÷×Ô´ò¿ªÁËͬһÎļþ£¬ÔòÓÐͼ3ª±3ÖÐËùʾµÄ°²ÅÅ¡£ÎÒÃǼٶ¨µÚÒ»  
 
¸ö½ø³Ìʹ  
 
¸ÃÎļþÔÚÎļþÃèÊö·û3ÉÏ´ò¿ª£¬¶øÁíÒ»¸ö½ø³ÌÔòʹ´ËÎļþÔÚÎļþÃèÊö·û4ÉÏ´ò¿ª¡£´ò  
 
¿ª´ËÎļþ  
 
µÄÿ¸ö½ø³ÌµÃµ½Ò»¸öÎļþ±íÏµ«¶ÔÒ»¸ö¸ø¶¨µÄÎļþÖ»ÓÐÒ»¸öv[CD#*2]node±íÏî¡£  
 
ÿ¸ö½ø³Ì  
 
¶¼ÓÐ×Ô¼ºµÄÎļþ±íÏîµÄÒ»¸öÀíÓÉÊÇ£ºÕâÖÖ°²ÅÅʹÿ¸ö½ø³Ì¶¼ÓÐËü×Ô¼ºµÄ¶Ô¸ÃÎļþµÄ  
 
µ±Ç°Î»ÒÆ  
 
Á¿¡£ª¥ª¥ª¥ª¥ª¥  
 
ͼ3ª±3¡þÁ½¸ö¶ÀÁ¢½ø³Ì¸÷×Ô´ò¿ªÍ¬Ò»¸öÎļþª¥  
 
¸ø³öÁËÕâЩÊý¾Ý½á¹¹ºó£¬ÎÒÃÇÏÖÔÚ¶ÔÇ°ÃæËùÊöµÄ²Ù×÷×÷½øÒ»²½ËµÃ÷¡£ª¥  
 
¡¤ÔÚÍê³Éÿ¸öwriteºó£¬ÔÚÎļþ±íÏîÖеĵ±Ç°ÎļþÎ»ÒÆÁ¿¼´Ôö¼ÓËùдµÄ×Ö½ÚÊý¡£Èç  
 
¹ûÕâʹµ±  
 
ǰÎļþÎ»ÒÆÁ¿³¬¹ýÁ˵±Ç°Îļþ³¤¶È£¬ÔòÔÚi¡¼CD#*2¡½node±íÏîÖеĵ±Ç°Îļþ³¤¶È±»  
 
ÉèÖÃΪµ±  
 
ǰÎļþÎ»ÒÆÁ¿(Ò²¾ÍÊǸÃÎļþ¼Ó³¤ÁË)¡£ª¥  
 
¡¤Èç¹ûÓÃO[CD#*2]APPEND±êÖ¾´ò¿ªÁËÒ»¸öÎļþ£¬ÔòÏàÓ¦±êÖ¾Ò²±»ÉèÖõ½Îļþ±íÏîµÄ  
 
Ëü×Ô¼ºµÄ  
 
Îļþ±íÏÔÚÆäÖÐÒ²¾ÍÓÐËü×Ô¼ºµÄµ±Ç°ÎļþÎ»ÒÆÁ¿¡£µ«ÊÇ£¬µ±¶à¸ö½ø³ÌдͬһÎļþ  
 
ʱ£¬Ôò¿É  
 
ÄܲúÉú·ÇÔ¤ÆÚµÄ½á¹û¡£ÎªÁË˵Ã÷ÈçºÎ±ÜÃâÕâÖÖÇé¿ö£¬ÎÒÃÇÐèÒªÀí½âÔ­×Ó²Ù×÷µÄ¸ÅÄî  
 
¡£ª¥  
 
3ª±11¡þÔ­×Ó²Ù×÷ª¥  
 
ÌíдÖÁÒ»¸öÎļþª¥  
 
¿¼ÂÇÒ»¸ö½ø³Ì£¬ËüÒª½«Êý¾ÝÌíдµ½Ò»¸öÎļþβ¶Ë¡£½ÏÔçµÄUnix°æ±¾²¢²»Ö§³ÖopenµÄ  
 
O[CD#*2]  
 
APPENDÑ¡ÔñÏËùÒÔ³ÌÐò±»±àд³ÉÏÂÁÐÐÎʽ£ºª¥  
 
if(lseek(fd,OL,2)<0)¡þ¡þ¡þ¡þ¡þ¡þ¡¼WB¡½/*¶¨Î»ÖÁÎļþβ¶Ë*/ª¥  
 
err[CD#*2]sys("lseek error");ª¥  
 
if (write(fd,buff,100)!=100)¡¼DW¡½/*д*/ª¥  
 
err[CD#*2]sys("write error");ª¥  
 
¶Ôµ¥¸ö½ø³Ì¶øÑÔ£¬Õâ¶Î³ÌÐòÄÜÕý³£¹¤×÷£¬µ«ÈôÓжà¸ö½ø³ÌʹÓÃÕâÖÖ¼¼ÊõÌíдµ½Í¬Ò»  
 
ÎļþÖУ¬  
 
Ôò¾Í»á²úÉúÎÊÌâ¡£(Èç¹û´Ë³ÌÐòÓɶà¸ö½ø³ÌͬʱִÐУ¬¸÷×Ô½«ÏûÏ¢Ìíдµ½Ò»¸öÈռǠ 
 
ÎļþÖУ¬  
 
Ôò¾Í»á²úÉúÕâÖÖÇé¿ö¡£)ª¥  
 
¼Ù¶¨Óжþ¸ö¶ÀÁ¢µÄ½ø³ÌAºÍB£¬¶¼¶ÔͬһÎļþ½øÐÐÌíд²Ù×÷¡£Ã¿¸ö½ø³Ì¶¼ÒÑ´ò¿ªÁ˸à 
 
Îļþ£¬µ«  
 
δʹÓÃO[CD#*2]APPEND±êÖ¾¡£´Ëʱ¸÷Êý¾Ý½á¹¹Ö®¼äµÄ¹ØÏµÈçͼ3ª±3ÖÐËùʾһÑù¡£Ã¿  
 
¸ö½ø³Ì¶¼  
 
ÓÐËü×Ô¼ºµÄÎļþ±íÏµ«Êǹ²ÏíÒ»¸öv[CD#*2]node±íÏî¡£¼Ù¶¨½ø³ÌAµ÷ÓÃÁËlseek£¬  
 
Ëü½«¶ÔÓÚ  
 
½ø³ÌAµÄ¸ÃÎļþµ±Ç°Î»ÒÆÁ¿ÉèÖÃΪ1500×Ö½Ú(µ±Ç°Îļþβ¶Ë´¦)¡£È»ºóϵͳºËÇл»½ø  
 
³Ìʹ½ø³ÌB  
 
ÔËÐС£½ø³ÌBÖ´ÐÐlseek£¬Ò²½«Æä¶Ô¸ÃÎļþµÄµ±Ç°Î»ÒÆÁ¿ÉèÖÃΪ1500×Ö½Ú(µ±Ç°Îļþ  
 
β¶Ë´¦)¡£  
 
È»ºóBµ÷ÓÃwrite£¬Ëü½«BµÄ¸ÃÎļþµ±Ç°ÎļþÎ»ÒÆÁ¿ÔöÖÁ1600¡£ÒòΪ¸ÃÎļþµÄ³¤¶ÈÒÑ  
 
¾­Ôö¼ÓÁË  
 
£¬ËùÒÔϵͳºË¶Ôv[CD#*2]nodeÖеĵ±Ç°Îļþ³¤¶È¸üÐÂΪ1600¡£È»ºó£¬ÏµÍ³ºËÓÖ½øÐР 
 
½ø³ÌÇл»  
 
ʹ½ø³ÌA»Ö¸´ÔËÐС£µ±Aµ÷ÓÃwriteʱ£¬¾Í´ÓÆäµ±Ç°ÎļþÎ»ÒÆÁ¿(1500)´¦½«Êý¾Ýдµ½  
 
ÎļþÖÐÈ¥  
 
¡£ÕâÑùÒ²¾Í´ú»»Á˽ø³ÌB¸Õдµ½¸ÃÎļþÖеÄÊý¾Ý¡£ª¥  
 
ÕâÀïµÄÎÊÌâ³öÔÚÂß¼­²Ù×÷"¿Õµµµ½Îļþβ¶Ë´¦£¬È»ºóд"ʹÓÃÁ˶þ¸ö·Ö¿ªµÄº¯Êýµ÷Óà 
 
¡£½â¾ö  
 
ÎÊÌâµÄ·½·¨ÊÇʹÕâÁ½¸ö²Ù×÷¶ÔÓÚÆäËü½ø³Ì¶øÑÔ³ÉΪһ¸öÔ­×Ó²Ù×÷¡£ÈκÎÒ»¸öÒªÇó¶à  
 
ÓÚ1¸öº¯  
 
Êýµ÷ÓõIJÙ×÷¶¼²»ÄܳÉΪԭ×Ó²Ù×÷£¬ÒòΪÔÚÁ½¸öº¯Êýµ÷ÓÃÖ®¼ä£¬ÏµÍ³ºËÓпÉÄÜ»áÁÙ  
 
ʱ¹ÒÆð¸Ã  
 
½ø³Ì(ÕýÈçÎÒÃÇÇ°ÃæËù¼Ù¶¨µÄ)¡£ª¥  
 
UnixÌṩÁËÒ»ÖÖ·½·¨Ê¹ÕâÖÖ²Ù×÷³ÉΪԭ×Ó²Ù×÷£¬Æä·½·¨¾ÍÊÇÔÚ´ò¿ªÎļþʱÉèÖÃO[C  
 
D#*2]APPE  
 
ND±êÖ¾¡£ÕýÈçÎÒÃÇÔÚǰһ½ÚÖÐËù˵Ã÷µÄ£¬Õâ¾ÍʹϵͳºËÔÚÿ´Î¶ÔÕâÖÖÎļþ½øÐÐд֮  
 
ǰ£¬¶¼½«  
 
½ø³ÌµÄµ±Ç°Î»ÒÆÁ¿ÉèÖõ½¸ÃÎļþµÄ±Ø¶Ë´¦£¬ÓÚÊÇÔÚÿ´Îд֮ǰ¾Í²»ÔÙÐèÒªµ÷ÓÃlse  
 
ek¡£ª¥  
 
´´½¨Ò»¸öÎļþª¥  
 
ÔÚ¶Ôopenº¯ÊýµÄO[CD#*2]CREATºÍO[CD#*2]EXCLÑ¡ÔñÏî½øÐÐ˵Ã÷ʱ£¬ÎÒÃÇÒѼûµ½ÁË  
 
ÁíÒ»¸öÓР 
 
¹ØÔ­×Ó²Ù×÷µÄÀý×Ó¡£µ±Í¬Ê±Ö¸¶¨ÕâÁ½¸öÑ¡ÔñÏ¶ø¸ÃÎļþÓÖÒѾ­´æÔÚʱ£¬open½«Ê§  
 
°Ü¡£ÎÒÃÇ  
 
ÔøÌá¼°¼ì²é¸ÃÎļþÊÇ·ñ´æÔÚÒÔ¼°´´½¨¸ÃÎļþÕâÁ½¸ö²Ù×÷ÊÇ×÷Ϊһ¸öÔ­×Ó²Ù×÷Ö´ÐеĠ 
 
¡£Èç¹ûÎÒ  
 
ÃÇûÓÐÕâÑùÒ»¸öÔ­×Ó²Ù×÷£¬ÄÇô¿ÉÄÜ»á±àдÏÂÁгÌÐò¶Î£ºª¥  
 
if ((fd=open(pathname,O[CD#*2]WRONLY)) <0)ª¥  
 
¡þ¡þif (errno==ENOENT) {ª¥  
 
¡þ¡þ¡þ¡þif ((fd=creat (pathname,mode))<0)ª¥  
 
¡þ¡þ¡þ¡þ¡þ¡þerr[CD#*2]sys("creat error");ª¥  
 
¡þ¡þ} elseª¥  
 
¡þ¡þ¡þ¡þerr[CD#*2]sys("open error");ª¥  
 
Èç¹ûÔÚ´ò¿ªºÍ´´½¨Ö®¼ä£¬ÁíÒ»¸ö½ø³Ì´´½¨Á˸ÃÎļþ£¬ÄÇô¾Í»á·¢ÉúÎÊÌâ¡£Èç¹ûÔÚÕâ  
 
Á½¸öº¯Êý  
 
µ÷ÓÃÖ®¼ä£¬ÁíÒ»¸ö½ø³Ì´´½¨Á˸ÃÎļþ£¬¶øÇÒÓÖÏò¸ÃÎļþд½øÁËһЩÊý¾Ý£¬ÄÇôִÐР 
 
Õâ¶Î³ÌÐò  
 
ÖеÄcreatʱ£¬¸ÕдÉÏÈ¥µÄÊý¾Ý¾Í»á±»²ÁÈ¥¡£½«ÕâÁ½Õߺϲ¢ÔÚÒ»¸öÔ­×Ó²Ù×÷ÖУ¬´Ë  
 
ÖÖÎÊÌâÒ²  
 
¾Í²»»á²úÉú¡£ª¥  
 
Ò»°ã¶øÑÔ£¬ÊõÓïÔ­×Ó²Ù×÷Ö¸µÄÊÇÓɶಽ×é³ÉµÄ²Ù×÷¡£Èç¹û¸Ã²Ù×÷Ô­×ÓµØÖ´ÐУ¬Ôò»ò  
 
ÕßÖ´ÐÐÍê  
 
ËùÓв½£¬»òÕßÒ»²½Ò²²»Ö´ÐУ¬Ã»ÓпÉÄÜÖ»Ö´ÐÐËùÓв½µÄÒ»¸ö×Ó¼¯¡£ÔÚ4ª±15½ÚÊö¼°  
 
linkº¯Êý  
 
ÒÔ¼°ÔÚ12ª±3½ÚÖÐÊö¼°¼ÇÂ¼ËøÊ±£¬ÎÒÃÇ»¹½«ÌÖÂÛÔ­×Ó²Ù×÷¡£ª¥  
 
3ª±12¡þdupºÍdup2º¯Êýª¥  
 
ÏÂÃæÁ½¸öº¯Êý¶¼¿ÉÓÃÀ´¸´ÖÆÒ»¸öÏÖ´æµÄÎļþÃèÊö·û£ºª¥  
 
#include <unistdª±h>ª¥  
 
int dup(int ª«filedesª«);ª¥  
 
int dup2(int ª«filedesª«,int ª«filedes2ª«);ª¥  
 
Á½º¯ÊýµÄ·µ»Ø£ºÈô³É¹¦ÎªÐµÄÎļþÃèÊö·û£¬³ö´íΪ-1ª¥  
 
ÓÉdup·µ»ØµÄÐÂÎļþÃèÊö·ûÒ»¶¨Êǵ±Ç°¿ÉÓÃÎļþÃèÊö·ûÖеÄ×îСÊýÖµ¡£ÓÃdup2ÎÒÃÇ  
 
Ôò¿ÉÒÔÓÃf  
 
iledes2²ÎÊýÖ¸¶¨ÐÂÃèÊö·ûµÄÊýÖµ¡£Èç¹ûfiledes2ÒѾ­´ò¿ª£¬ÔòÏȽ«Æä¹Ø±Õ¡£ÈçÈô  
 
filedesµÈ  
 
ÓÚfiledes2£¬Ôòdup2·µ»Øfiledes2£¬¶ø²»¹Ø±ÕËü¡£ª¥  
 
ÕâЩº¯Êý·µ»ØµÄÐÂÎļþÃèÊö·ûÓë²ÎÊýfiledes¹²Ïíͬһ¸öÎļþ±íÏͼ3ª±4ÏÔʾÁË  
 
ÕâÖÖÇé¿ö  
 
¡£ª¥  
 
ª¥ª¥ª¥ª¥  
 
ͼ3ª±4¡þdup(1)ºóϵͳºËÊý¾Ý½á¹¹ª¥  
 
ÔÚ´ËͼÖУ¬ÎÒÃǼٶ¨½ø³ÌÖ´ÐÐÁË£ºª¥  
 
newfd=dup(1);ª¥  
 
µ±´Ëº¯Êý¿ªÊ¼Ö´ÐÐʱ£¬ÎÒÃǼٶ¨ÏÂÒ»¸ö¿ÉÓõÄÃèÊö·ûÊÇ3(ÕâÊǷdz£ÓпÉÄܵģ¬ÒòΪ  
 
0£¬1ºÍ2  
 
ÊÇÓÉshell´ò¿ªµÄ)¡£ÒòΪÁ½¸öÃèÊö·ûÖ¸ÏòͬһÎļþ±íÏËùÒÔËüÃǹ²ÏíͬһÎļþ×´  
 
̬±êÖ¾(  
 
¶Á¡¢Ð´¡¢ÌíдµÈ)ÒÔ¼°Í¬Ò»µ±Ç°ÎļþÎ»ÒÆÁ¿¡£ª¥  
 
ÿ¸öÎļþÃèÊö·û¶¼ÓÐËü×Ô¼ºµÄÒ»Ì×ÎļþÃèÊö·û±êÖ¾¡£ÈçÎÒÃÇÔÚÏÂÒ»½ÚÖн«ËµÃ÷µÄÄÇ  
 
Ñù£¬ÐÂÃè  
 
Êö·ûµÄÖ´ÐÐʱ¹Ø±Õ(close[CD#*2]on[CD#*2]exec)ÎļþÃèÊö·û±êÖ¾×ÜÊÇÓÉdupº¯ÊýÇå  
 
³ý¡£ª¥  
 
¸´ÖÆÒ»¸öÃèÊö·ûµÄÁíÒ»ÖÖ·½·¨ÊÇʹÓÃfcntlº¯Êý£¬ÎÒÃǽ«ÔÚÏÂÒ»½Ú¶Ô¸Ãº¯Êý½øÐÐ˵  
 
Ã÷¡£È·Êµ  
 
£¬µ÷Óꥠ 
 
dup(filedes);ª¥  
 
µÈЧÓÚª¥  
 
fcntl (filedes,F[CD#*2]DUPFD,0);ª¥  
 
¶øµ÷Óꥠ 
 
dup2(filedes,filedes2)£»ª¥  
 
µÈЧÓÚª¥  
 
close(filedes2);ª¥  
 
fcntl(filedes,F[CD#*2]DUPFD,filedes2);ª¥  
 
ÔÚºóÒ»ÖÖÇé¿öÏ£¬dup2²¢²»ÍêÈ«µÈͬÓÚclose£¬È»ºó¸ú¸½fcntl¡£ËüÃÇÖ®¼äµÄÇø±ðÊÇ  
 
£ºª¥  
 
1ª±dup2ÊÇÒ»¸öÔ­×Ó²Ù×÷£¬¶øclose¼°fcntlÔò°üÀ¨Á½¸öº¯Êýµ÷Óá£ÓпÉÄÜÔÚcloseºÍ  
 
fcntlÖ®  
 
¼ä²åÈëÖ´ÐÐÐźŲ¶»ñº¯Êý£¬Ëü¿ÉÄÜÐÞ¸ÄÎļþÃèÊö·û(ÎÒÃǽ«ÔÚµÚÊ®ÕÂ˵Ã÷Ðźš£)ª¥  
 
   
 
2ª±ÔÚdup2ºÍfcntlÖ®¼äÓÐijЩ²»Í¬µÄerrno¡£ª¥  
 
dup2ϵͳµ÷ÓÃÆðÔ´ÓÚVersion 7£¬È»ºó´«²¥ÖÁËùÓÐBSD°æ±¾¡£¶ø¸´ÖÆÎļþÃèÊö·ûµÄf  
 
cntl·½·¨  
 
ÔòÊ×ÏÈÓÉϵͳ¢óʹÓã¬ÏµÍ³¢õÔò¼ÌÐø²ÉÓÃÖ®¡£SVR3ª±2È¡ÓÃÁËdup2º¯Êý£¬4ª±2BSDÔò  
 
È¡ÓÃÁËfc  
 
ntlº¯Êý¼°F[CD#*2]DUPFD¹¦ÄÜ¡£POSIXª±1ÒªÇódup2¼°fcntlµÄF[CD#*2]DUPFD¹¦ÄÜÁ½  
 
Õß¡£ª¥  
 
3ª±13¡þfcntlº¯Êýª¥  
 
fcntlº¯Êý¿ÉÒԸıäÒѾ­´ò¿ªµÄÎļþµÄÐÔÖÊ¡£ª¥  
 
#include <sys/typesª±h>ª¥  
 
#include <unistdª±h>ª¥  
 
#include <fcntlª±h>ª¥  
 
int fcntl(int ª«filedes,ª«int ª«cmdª«,ª±ª±ª±/* int ª«argª« */);ª¥  
 
·µ»Ø£ºÈô³É¹¦£¬ÒÀÀµÓÚcmd(¼ûÏÂ)£¬³ö´íΪ-1ª¥  
 
ÔÚ±¾½ÚµÄ¸÷ʵÀýÖУ¬µÚ3¸ö²ÎÊý×ÜÊÇÒ»¸öÕûÊý£¬ÓëÉÏÃæËùʾº¯ÊýÔ­ÐÍÖеÄ×¢ÊͲ¿·Ö  
 
Ïà¶ÔÓ¦¡£  
 
µ«ÊÇÎÒÃÇÔÚ12ª±3½ÚÖÐ˵Ã÷¼ÇÂ¼ËøÊ±£¬µÚ3¸ö²ÎÊýÔòÊÇÖ¸ÏòÒ»¸ö½á¹¹µÄÖ¸Õë¡£ª¥  
 
fcntlº¯ÊýÓÐÎåÖÖ¹¦ÄÜ£ºª¥  
 
¡¤¸´ÖÆÒ»¸öÏÖ´æµÄÃèÊö·û(cmd ½£Æ¡¼£Ã£Ä££ª³£²¡½DUPFD)£¬ª¥  
 
¡¤»ñµÃ/ÉèÖÃÎļþÃèÊö·û±ê¼Ç(cmd=F[CD#*2]GETFD»òF[CD#*2]SETFD),ª¥  
 
¡¤»ñµÃ/ÉèÖÃÎļþ״̬±êÖ¾(cmd=F[CD#*2]GETFL»òF[CD#*2]SETFL),ª¥  
 
¡¤»ñµÃ/ÉèÖÃÒì²½I/OÊôÖ÷Ȩ(cmd=F[CD#*2]GETOWN»òF[CD#*2]SETOWN),ª¥  
 
¡¤»ñµÃ/ÉèÖüÇÂ¼Ëø(cmd=F[CD#*2]GETLK,F[CD#*2]SETLK»òF[CD#*2]SETLKW)¡£ª¥  
 
ÎÒÃÇÏÈ˵Ã÷ÕâÊ®ÖÖÃüÁîÖµÖеÄǰÆßÖÖ(ÔÚ12ª±3½ÚÖÐ˵Ã÷ºóÈýÖÖ£¬ËüÃǶ¼Óë¼ÇÂ¼ËøÓР 
 
¹Ø)ÎÒÃÇ  
 
½«Éæ¼°Óë½ø³Ì±íÏîÖи÷ÎļþÃèÊö·ûÏà¹ØÁªµÄÎļþÃèÊö·û±êÖ¾ÒÔ¼°Ã¿¸öÎļþ±íÏîÖеĠ 
 
Îļþ״̬  
 
±êÖ¾£¬ËùÒÔÇë²ÎÔÄͼ3ª±2¡£ª¥  
 
F[CD#*2]DUPFD¡þ¸´ÖÆÎļþÃèÊö·ûfiledes£¬ÐÂÎļþÃèÊö·û×÷Ϊº¯ÊýÖµ·µ»Ø¡£ËüÊÇÉР 
 
δ´ò¿ªµÄ  
 
¸÷ÃèÊö·ûÖдóÓÚ»òµÈÓÚµÚÈý¸ö²ÎÊýÖµ(ȡΪÕûÐÍÖµ)Öи÷ÖµµÄ×îСֵ¡£ÐÂÃèÊö·ûÓëf  
 
iledes¹²  
 
ÏíͬһÎļþ±íÏî(²Î¼ûͼ3ª±4)µ«ÊÇ£¬ÐÂÃèÊö·ûÓÐËü×Ô¼ºµÄÒ»Ì×ÎļþÃèÊö·û±êÖ¾£¬Æä  
 
FD[CD#*2  
 
]CLOEXECÎļþÃèÊö·û±êÖ¾Ôò±»Çå³ý(Õâ±íʾ¸ÃÃèÊö·ûÔÚexecʱÈÔ±£³Ö¿ª·Å£¬ÎÒÃǽ«  
 
ÔÚµÚ°ËÕ  
 
¶Ô´Ë½øÐÐÌÖÂÛ¡£)ª¥  
 
F[CD#*2]GETFD¡þ¶ÔÓ¦ÓÚfiledesµÄÎļþÃèÊö·û±êÖ¾×÷Ϊº¯ÊýÖµ·µ»Ø¡£µ±Ç°Ö»¶¨ÒåÁË  
 
Ò»¸öÎļþ  
 
ÃèÊö·û±êÖ¾FD[CD#*2]CLOEXEC±êÖ¾¡£ª¥  
 
F[CD#*2]SETFD¡þ¶ÔÓÚfiledesÉèÖÃÎļþÃèÊö·û±êÖ¾¡£Ð±êÖ¾ÖµÊǰ´µÚ3¸ö²ÎÊý(ȡΪ  
 
ÕûÐÍÖµ)  
 
ÉèÖõġ£ª¥  
 
Ó¦µ±Á˽âºÜ¶àÏÖ´æµÄÉæ¼°ÎļþÃèÊö·û±êÖ¾µÄ³ÌÐò²¢²»Ê¹Óó£ÊýFD[CD#*2]CLOEXEC¡£  
 
´úÌæÖ®£¬  
 
³ÌÐò»ò½«´Ë±êÖ¾ÉèÖÃΪ0(ϵͳĬÈÏ£¬ÔÚexecʱ²»¹Ø±Õ)£¬»ò1(ÔÚexecʱ¹Ø±Õ)¡£ª¥  
 
F[CD#*2]GETFL¡þ¶ÔÓ¦ÓÚfiledesµÄÎļþ״̬±êÖ¾×÷Ϊº¯ÊýÖµ·µ»Ø¡£ÔÚÎÒÃÇ˵Ã÷ope  
 
nº¯Êýʱ£¬  
 
ÒÑ˵Ã÷ÁËÎļþ״̬±êÖ¾¡£ËüÃÇÁÐÓÚͼ3ª±5ÖЪ¥ª¥ª¥ª¥  
 
ͼ3ª±5¡þ¶ÔÓÚfcntlµÄÎļþ״̬±êÖ¾ª¥  
 
²»ÐÒµÄÊÇÈý¸ö´æÈ¡·½Ê½±êÖ¾(O[CD#*2]RDONLY,O[CD#*2]WRONLY,ÒÔ¼°O[CD#*2]RDWR  
 
)²¢²»¸÷Õ¼  
 
1λ¡£(ÕýÈçǰÊö£¬ÕâÈýÖÖ±êÖ¾µÄÖµ¸÷ÊÇ0£¬1ºÍ2ÓÉÓÚÀúÊ·Ô­Òò¡£ÕâÈýÖÖÖµÊÇ»¥³âµÄ  
 
¡¼CD2¡½Ò»  
 
¸öÎļþÖ»ÄÜÓÐÕâ3ÖÖÖµÖ®1¡£)Òò´ËÊ×ÏȱØÐëÓÃÆÁ±Î×ÖO[CD#*2]ACCMODEÈ¡µÃ´æÈ¡·½Ê½  
 
λ£¬È»ºó  
 
½«½á¹ûÓëÕâÈýÖÖÖµÏà±È½Ï¡£ª¥  
 
F[CD#*2]SETFL¡þ½«Îļþ״̬±êÖ¾ÉèÖÃΪµÚ3¸ö²ÎÊýµÄÖµ(ȡΪÕûÐÍÖµ)¡£¿ÉÒÔ¸ü¸ÄµÄ  
 
¼¸¸ö±êÖ¾  
 
ÊÇ£ºO[CD#*2]APPEND£¬O[CD#*2]NONBLOCK£¬O[CD#*2]SYNCºÍO[CD#*2]ASYNC¡£ª¥  
 
F[CD#*2]GETOWN¡þÈ¡µ±Ç°½ÓÊÕSIGIOºÍSIGURGÐźŵĽø³ÌID»ò½ø³Ì×éID¡£ÔÚ12ª±6ª±  
 
2½ÚÖн«  
 
˵Ã÷ÕâÁ½ÖÖ4ª±3+BSDÒì²½I/OÐźš£ª¥  
 
F[CD#*2]SETOWN¡þÉèÖýÓÊÕSIGIOºÍSIGURGÐźŵĽø³ÌID»ò½ø³Ì×éID¡£ÕýµÄargÖ¸¶¨  
 
Ò»¸ö½ø³Ì  
 
ID¡£¸ºµÄarg±íʾµÈÓÚarg¾ø¶ÔÖµµÄÒ»¸ö½ø³Ì×éID¡£ª¥  
 
fcntlµÄ·µ»ØÖµÓëÃüÁîÓйء£Èç¹û³ö´í£¬ËùÓÐÃüÁî¶¼·µ»Ø-1£¬Èç¹û³É¹¦Ôò·µ»ØÄ³¸ö  
 
ÆäËüÖµ¡£  
 
ÏÂÁÐÈýÖÖÃüÁîÓÐÌØ¶¨·µ»ØÖµ£ºF[CD#*2]DUPFD,F[CD#*2]GETFDÒÔ¼°F[CD#*2]GETOWN  
 
¡£µÚÒ»¸ö  
 
·µ»ØÐµÄÎļþÃèÊö·û£¬µÚ¶þ¸ö·µ»ØÏàÓ¦±êÖ¾£¬×îºóÒ»¸ö·µ»ØÒ»¸öÕýµÄ½ø³ÌID»òÒ»¸ö  
 
¸ºµÄ½ø³Ì  
 
×éID¡£ª¥  
 
ʵÀýª¥  
 
³ÌÐò3ª±4ȡָ¶¨Ò»¸öÎļþÃèÊö·ûµÄÃüÁîÐвÎÊý£¬²¢¶ÔÓÚ¸ÃÃèÊö·û´òÓ¡ÆäÎļþ±ê־˵  
 
Ã÷¡£ª¥ª¥  
 
³ÌÐò3ª±4¡þ¶ÔÓÚÖ¸¶¨µÄÃèÊö·û´òÓ¡Îļþ±êÖ¾ª¥  
 
×¢Ò⣬ÎÒÃÇʹÓÃÁ˹¦ÄܲâÊÔºê[CD#*2]POSIX[CD#*2]SOURCE£¬²¢ÇÒÌõ¼þ±àÒëÁËPOSI  
 
Xª±1ÖÐû  
 
Óж¨ÒåµÄÎļþ´æÈ¡±êÖ¾¡£ÏÂÃæÏÔʾÁË´ÓKornshellµ÷ÓøóÌÐòʱµÄ¼¸ÖÖÇé¿ö£ºª¥  
 
$ aª±out 0</dev/ttyª¥  
 
read onlyª¥  
 
$ aª±out 1>tempª±fooª¥  
 
$ cat tempª±fooª¥  
 
write onlyª¥  
 
$ aª±out 2 2>>tempª±fooª¥  
 
write only,appendª¥  
 
$ aª±out 5 5<>tempª±fooª¥  
 
read writeª¥  
 
Kornshell×Ó¾ä5<>tempª±foo±íʾÔÚÎļþÃèÊö·û5ÉÏ´ò¿ªÎļþtempª±foo¹©¶Á¡¢Ð´¡£  
 
ª¥  
 
ʵÀýª¥  
 
µ±ÐÞ¸ÄÎļþÃèÊö·û±êÖ¾»òÎļþ״̬±ê־ʱ£¬±ØÐë½÷É÷£¬ÏÈҪȡµÃÏÖÔڵıêÖ¾Öµ£¬È»  
 
ºó°´ÕÕÏ£  
 
ÍûÐÞ¸ÄËü£¬×îºóÉèÖÃбêÖ¾Öµ¡£²»ÄÜÖ»ÊÇÖ´ÐÐF[CD#*2]SETFD»òF[CD#*2]SETFLÃüÁî  
 
£¬ÕâÑù»á  
 
¹Ø±ÕÒÔǰÉèÖõıê־λ¡£ª¥  
 
³ÌÐò3ª±5ÊÇÒ»¸ö¶ÔÓÚÒ»¸öÎļþÃèÊö·ûÉèÖÃÒ»¸ö»ò¶à¸öÎļþ״̬±êÖ¾µÄº¯Êý¡£ª¥ª¥ª¥  
 
ª¥  
 
³ÌÐò3ª±5¡þ¶ÔÒ»¸öÎļþÃèÊö·û´ò¿ªÒ»¸ö»ò¶à¸öÎļþ״ָ̬±êª¥  
 
Èç¹ûÎÒÃǽ«ÖмäµÄÒ»ÌõÓï¾ä¸ÄΪª¥  
 
Õâ¾Í¹¹³ÉÁËÁíÒ»¸öº¯Êý£¬ÎÒÃÇ³ÆÆäΪclr[CD#*2]fl£¬²¢½«ÔÚij¸öºóÃæµÄÀý×ÓÖÐÓõ½  
 
Ëü¡£´ËÓï  
 
¾äʹµ±Ç°Îļþ״̬±êÖ¾ÖµvalÓëflagsµÄ·´ÂëÂß¼­Óë¡£ª¥  
 
Èç¹ûÔÚ³ÌÐò3ª±3µÄ¿ªÊ¼´¦£¬¼ÓÉÏÏÂÃæ1ÐÐÒÔµ÷ÓÃset[CD#*2]fl£¬Ôò´ò¿ªÁËͬ²½Ð´±ê  
 
Ö¾¡£Õâ¾Í  
 
Ôì³Éÿ´Îwrite¶¼ÒªµÈ´ý£¬Ö±ÖÁÊý¾ÝÒÑдµ½ÅÌÉÏÔÙ·µ»Ø¡£ÔÚUnixÖУ¬Í¨³£writeÖ»ÊÇ  
 
½«Êý¾ÝÅÅ  
 
Èë¶ÓÁУ¬¶øÊµ¼ÊµÄI/O²Ù×÷Ôò¿ÉÄÜÔÚÒÔºóµÄij¸öʱ¿Ì½øÐС£Êý¾Ý¿âϵͳºÜ¿ÉÄÜÐèÒª  
 
ʹÓÃO[CD#  
 
*2]SYNC£¬ÕâÑù£¬ÔÚϵͳ±ÀÀ£Çé¿öÏ£¬Ëü´Ówrite·µ»ØÊ±¾ÍÖªµÀÊý¾ÝÒÑȷʵдµ½ÁËÅÌ  
 
ÉÏ¡£ª¥  
 
ÔÚ³ÌÐòÔËÐÐʱ£¬ÉèÖÃO[CD#*2]SYNC±êÖ¾»áÔö¼ÓʱÖÓʱ¼ä¡£ÎªÁ˲âÊÔÕâÒ»µã£¬ÎÒÃÇÔË  
 
ÐгÌÐò3  
 
ª±3£¬Ëü´ÓÅÌÉϵÄÒ»¸öÎļþÖн«1ª±5Mbyle¸´ÖƵ½ÁíÒ»¸öÎļþÖС£È»ºó£¬Ôڴ˳ÌÐòÖР 
 
ÉèÖÃO[CD  
 
#*2]SYNC±êÖ¾£¬Ê¹ÆäÔËÐÐ×öÉÏÊöͬÑù¹¤×÷£¬½«Á½Õߵõ½µÄ½á¹û½øÐбȽϣ¬ÕâʾÓÚͼ  
 
3ª±6ÖС£  
 
ª¥ª¥ª¥ª¥  
 
ͼ3ª±6¡þÓÃͬ²½Ð´(O[CD#*2]SYNC)µÄʱ¼ä½á¹ûª¥  
 
ͼ3ª±6ÖеÄ3Ðж¼ÊÇÔÚBUFSIZΪ8192µÄÇé¿öϲâÁ¿µÃµ½µÄ¡£Í¼3ª±1ÖеĽá¹ûËù²âÁ¿  
 
µÄÇé¿öÊÇ  
 
¶ÁÒ»¸öÅÌÎļþ£¬È»ºóдµ½/dev/null£¬ËùÒÔûÓÐÅÌÊä³ö¡£Í¼3ª±6ÖеĵÚ2ÐжÔÓ¦ÓÚ¶Á  
 
Ò»¸öÅÌÎÄ  
 
¼þ£¬È»ºóдµ½ÁíÒ»¸öÅÌÎļþÖС£Õâ¾ÍÊÇΪʲôͼ3ª±6ÖеÚ1£¬2ÐÐÓвî±ðµÄÔ­Òò¡£ÔÚ  
 
дÅÌÎļþ  
 
ʱ£¬ÏµÍ³Ê±¼äÔö¼ÓÁË£¬ÆäÔ­ÒòÊÇϵͳºËÐèÒª´Ó½ø³ÌÖи´ÖÆÊý¾Ý£¬²¢½«Êý¾ÝÅÅÈë¶ÓÁР 
 
ÒÔ±ãÓÉÅÌ  
 
Çý¶¯Æ÷½«Æäдµ½ÅÌÉÏÈ¥¡£µ±Ð´ÖÁÅÌÎļþʱ£¬Ê±ÖÓʱ¼äÒ²Ôö¼ÓÁË¡£µ±½øÐÐͬ²½Ð´Ê±£¬  
 
ϵͳʱ¼ä  
 
ÉÔÉÔÔö¼Ó£¬¶øÊ±ÖÓʱ¼äÔòÔö¼ÓΪ6±¶¡£ª¥  
 
ÔÚÕâÒ»Àý×ÓÖУ¬ÎÒÃÇ¿´µ½ÁËfcntlµÄ±ØÒªÐÔ¡£ÎÒÃǵijÌÐòÔÚÒ»¸öÃèÊö·û(±ê×¼Êä³ö)  
 
ÉϽøÐв٠ 
 
×÷£¬µ«ÊǸù±¾²»ÖªµÀÓÉshell´ò¿ªµÄÏàÓ¦ÎļþµÄÎļþÃû¡£ÒòΪÕâÊÇshell´ò¿ªµÄ£¬ÓÚ  
 
ÊÇ¿ÉÄÜÔÚ  
 
´ò¿ªÊ±£¬°´ÎÒÃǵÄÒªÇóÉèÖÃO[CD#*2]SYNC±êÖ¾¡£fcntlÔòÔÊÐíµ±Ö»ÖªµÀ´ò¿ªÎļþµÄ  
 
ÃèÊö·ûʱ  
 
¿ÉÒÔÐÞ¸ÄÆäÐÔÖÊ¡£ÔÚ˵Ã÷·Ç×èÈû¹ÜµÀʱ(14ª±2½Ú)£¬ÎÒÃÇÒ²½«Á˽⵽£¬ÓÉÓÚÎÒÃǶԠ 
 
pipeËù¾ß  
 
ÓеıêʶֻÊÇÆäÃèÊö·û£¬ËùÒÔÒ²ÐèҪʹÓÃfcntlµÄ¹¦ÄÜ¡£ª¥  
 
3ª±14¡þioctlº¯Êýª¥  
 
ioctlº¯ÊýÊÇI/O²Ù×÷µÄÔÓÎïÏä¡£²»ÄÜÓñ¾ÕÂÖÐÆäËüº¯Êý±íʾµÄI/O²Ù×÷ͨ³£¶¼ÄÜÓà 
 
ioctl±íʾ  
 
¡£ÖÕ¶ËI/OÊÇioctlµÄ×î´óʹÓ÷½Ãæ(ÔÚµÚʮһÕÂÖУ¬ÎÒÃÇ»áÁ˽⵽POSIXª±1ÒѾ­Óà 
 
еĺ¯Êý  
 
´úÌæioctl½øÐÐÖÕ¶ËI/O²Ù×÷¡£)ª¥  
 
#include <unistdª±h> /* SVR4 */ª¥  
 
#include <sys/ioctlª±h>/* 4ª±3+BSd */ª¥  
 
int ioctl(int ª«filedesª«,int ª«requestª«,ª±ª±ª±);ª¥  
 
·µ»Ø£º³ö´íΪ-1£¬Èô³É¹¦ÔòΪÆäËüÔ´ª¥  
 
ioctlº¯Êý²»ÊÇPOSIXª±1µÄÒ»²¿·Ö£¬µ«ÊÇ£¬SVR4ºÍ4ª±3+BSDÓÃÆä½øÐкܶàÔÓÏîÉ豸  
 
²Ù×÷¡£ª¥  
 
ÎÒÃÇËùʾµÄÔ­ÐÍÊÇSVR4ºÍ4ª±3+BSDËùʹÓõ쬶ø½ÏÔçµÄ±´¿ËÀ³ÏµÍ³Ôò½«µÚ2¸ö²ÎÊý  
 
˵Ã÷Ϊuns  
 
igned long¡£ÒòΪµÚ2¸ö²ÎÊý×ÜÊÇÒ»¸öÍ·ÎļþÖе͍ÒåÃû£¬ËùÒÔÕâÖÖϸ½Ú²¢Ã»ÓÐʲ  
 
ôӰÏì¡£  
 
ª¥  
 
¶ÔÓÚANSI CÔ­ÐÍ£¬ËüÓÃÊ¡ÂԺűíʾÆäÓà²ÎÊý¡£µ«ÊÇ£¬Í¨³£Ö»ÓÐÁíÍâÒ»¸ö²ÎÊý£¬Ëü³£  
 
³£ÊÇÖ¸Ïò  
 
Ò»¸ö±äÁ¿»ò½á¹¹µÄÖ¸Õë¡£ª¥  
 
ÔÚ´ËÔ­ÐÍÖУ¬ÎÒÃDZíʾµÄÖ»ÊÇioctlº¯Êý±¾ÉíËùÒªÇóµÄÍ·Îļþ¡£Í¨³££¬»¹ÒªÇóÁíÍâ  
 
µÄÉ豸ר  
 
ÓÃÍ·Îļþ¡£ÀýÈ磬ÔÚPOSIXª±1Ëù˵Ã÷µÄ»ù±¾²Ù×÷Ö®Í⣬ÖÕ¶Ëioctl¶¼ÐèҪͷÎļþ<t  
 
ermiosª±h  
 
£¾¡£ª¥  
 
Ŀǰ£¬ioctlµÄÖ÷ÒªÓÃ;ÊÇÊ²Ã´ÄØ?ÎÒÃǽ«4ª±3+BSDµÄioctl²Ù×÷·ÖÀàʾÓÚͼ3ª±7ÖР 
 
¡£ª¥ª¥ª¥  
 
ª¥  
 
ͼ3ª±7¡þ4ª±3+BSD ioctl²Ù×÷ª¥  
 
´Å´ø²Ù×÷ʹÎÒÃÇ¿ÉÒÔÔÚ´Å´øÉÏдһ¸öÎļþ½áÊø±êÖ¾£¬·´ÈÆ´Å´ø£¬Ô½¹ýÖ¸¶¨¸öÊýµÄÎÄ  
 
¼þ»ò¼Ç¼  
 
µÈµÈ£¬Óñ¾ÕÂÖÐµÄÆäËüº¯Êý(read,write,lseekµÈ)¶¼ÄÑÓÚ±íʾÕâЩ²Ù×÷£¬ËùÒÔ£¬Óà 
 
ioctlÊÇ  
 
¶ÔÕâЩÉ豸½øÐвÙ×÷µÄ×îÈÝÒ×·½·¨¡£ª¥  
 
ÔÚ11ª±12½ÚÖдæÈ¡ºÍÉèÖÃÖÕ¶Ë´°¿Úʱ£¬ÔÚ12ª±4ÖÐ˵Ã÷Á÷ϵͳʱ£¬ÒÔ¼°ÔÚ19ª±7½ÚÖР 
 
Êö¼°·ÂÖÕ  
 
¶ËµÄ¸ß¼¶¹¦ÄÜʱ£¬ÎÒÃǶ¼½«Ê¹ÓÃioctl¡£ª¥  
 
3ª±15¡þ/dev/fdª¥  
 
±È½ÏеÄϵͳ¶¼ÌṩÃûΪ/dev/fdµÄĿ¼£¬ÆäĿ¼ÏîÊÇÃûΪ0£¬1£¬2µÈµÄÎļþ¡£´ò¿ª  
 
Îļþ/dev  
 
/fd/nµÈЧÓÚ¸´ÖÆÃèÊö·ûn(¼Ù¶¨ÃèÊö·ûnÊÇ´ò¿ªµÄ)¡£ª¥  
 
/dev/fdÕâÖÖÌØÕ÷ÊÇÓÉTom Duff¿ª·¢µÄ£¬ËüÊ×ÏȳöÏÖÔÚresearch Unix SystemµÄµÚ  
 
8°æÖУ¬SV  
 
R4ºÍ4ª±3+BSDÖ§³ÖÕâÖÖÌØÕ÷¡£Ëü²»ÊÇPOSIXª±1µÄ×é³É²¿·Öª¥  
 
ÔÚº¯ÊýÖе÷Óꥠ 
 
fd=open("/dev/fd/0",mode)£»ª¥  
 
´ó¶àÊýϵͳºöÂÔËùÖ¸¶¨µÄmode£¬¶øÁíÍâһЩÔòÒªÇómodeÊÇËùÉæ¼°µÄÎļþ(ÔÚÎÒÃÇÕâ  
 
ÀïÔòÊDZꠠ
 
×¼ÊäÈë)Ô­ÏÈ´ò¿ªÊ±ËùʹÓõÄmodeµÄ×Ó¼¯¡£ÒòΪÉÏÃæµÄ´ò¿ªµÈЧÓÚ£ºª¥  
 
fd=dup(0);ª¥  
 
ÃèÊö·û0ºÍfd¹²ÏíͬһÎļþ±íÏî(ͼ3ª±4)¡£ÀýÈ磬ÈôÃèÊö·û0±»Ö»¶Á´ò¿ª£¬ÄÇôÎÒÃÇ  
 
Ò²Ö»¶Ôfd  
 
½øÐжÁ²Ù×÷¡£¼´Ê¹ÏµÍ³ºöÂÔ´ò¿ª·½Ê½£¬²¢ÇÒÏÂÁе÷Óóɹ¦£ºª¥  
 
fd=open("/dev/fd/0",O[CD#*2]RDWR);ª¥  
 
ÎÒÃÇÈÔÈ»²»ÄܶÔfd½øÐÐд²Ù×÷¡£ª¥  
 
ÎÒÃÇÒ²¿ÉÒÔÓÃ/dev/fd×÷Ϊ·¾¶Ãû²ÎÊýµ÷ÓÃcreat£¬»òµ÷ÓÃopen£¬²¢Í¬Ê±Ö¸¶¨O[CD#  
 
*2]CREAT  
 
¡£Õâ¾ÍÔÊÐíµ÷ÓÃcreatµÄ³ÌÐò£¬Èç¹û·¾¶Ãû²ÎÊýÊÇ/dev/fd/1µÈÈÔÄܹ¤×÷¡£ª¥  
 
ijЩϵͳÌṩ·¾¶Ãû/dev/stdin,/dev/stdoutºÍ/dev/stderr¡£ÕâЩµÈЧÓÚ/dev/f  
 
d/0,/dev/  
 
fd/1ºÍ/dev/fd/2¡£ª¥  
 
/dev/fdÎļþÖ÷ÒªÓÉshellʹÓã¬ÕâÔÊÐí³ÌÐòÒÔ¶Ô´ýÆäËü·¾¶ÃûÒ»ÑùµÄ·½Ê½Ê¹Ó÷¾¶  
 
Ãû²ÎÊýÀ´  
 
´¦Àí±ê×¼ÊäÈëºÍ±ê×¼Êä³ö¡£ÀýÈ磬cat(1)³ÌÐò½«ÃüÁîÐÐÖеÄÒ»¸öµ¥¶ÀµÄ'-'ÌØ±ð½â  
 
ÊÍΪһ  
 
¸öÊäÈëÎļþÃû£¬¸ÃÎļþÖ¸µÄÊDZê×¼ÊäÈë¡£ÀýÈ磬ª¥  
 
filter file2 £ücat file1£­file3£ülprª¥  
 
Ê×ÏÈcat¶Áfile1£¬½Ó×ŶÁÆä±ê×¼ÊäÈë(Ò²¾ÍÊÇfilter file2ÃüÁîµÄÊä³ö)£¬È»ºó¶Áf  
 
ile3£¬Èç  
 
ÈôÖ§³Ö/dev/fd£¬Ôò¿ÉÒÔɾ³ýcat¶ÔÒ»µÄÌØÊâ´¦Àí£¬ÓÚÊÇÎÒÃǾͿɼüÈëÏÂÁÐÃüÁîÐУº  
 
ª¥  
 
filter file2 £ücat file1 /dev/fd/0 file3 £ülprª¥  
 
ÔÚÃüÁîÐÐÖÐÓÃ'-'×÷Ϊһ¸ö²ÎÊýÌØÖ¸±ê×¼ÊäÈë»ò±ê×¼Êä³öÒÑÓɺܶà³ÌÐò²ÉÓᣵ«ÊÇ  
 
Õâ»á´ø  
 
À´Ò»Ð©ÎÊÌ⣬ÀýÈçÈôÓÃ'-'Ö¸¶¨µÚÒ»¸öÎļþ£¬ÄÇôËü¿´À´¾ÍÏóÊÇ¿ªÊ¼ÁËÁíÒ»¸öÃüÁî  
 
ÐеÄÑ¡  
 
ÔñÏî¡£/dev/fdÔòÌá¸ßÁËÎļþÃû²ÎÊýµÄÒ»ÖÂÐÔ£¬Ò²¸ü¼ÓÇåÎú¡£ª¥  
 
3ª±16¡þÕªÒªª¥  
 
±¾ÕÂ˵Ã÷ÁË´«Í³µÄUnix I/Oº¯Êý¡£ÒòΪÿ¸öread,write¶¼Òòµ÷ÓÃϵͳµ÷Óöø½øÈëϵ  
 
ͳºË£¬Ëù  
 
ÒÔ³ÆÕâЩº¯ÊýΪ²»´ø»º´æµÄI/Oº¯Êý¡£ÔÚֻʹÓÃreadºÍwriteÇé¿öÏ£¬ÎÒÃǹ۲ìÁ˲»  
 
ͬI/O³¤  
 
¶È£¬¶Ô¶ÁÒ»¸öÎļþËùÐèʱ¼äµÄÓ°Ïì¡£ª¥  
 
ÔÚ˵Ã÷¶à¸ö½ø³Ì¶ÔͬһÎļþ½øÐÐÌíд²Ù×÷ÒÔ¼°¶à¸ö½ø³Ì´´½¨Í¬Ò»Îļþʱ£¬±¾Õ½éÉÜ  
 
ÁËÔ­×Ó²Ù  
 
×÷¡£ÎÒÃÇÒ²½éÉÜÁËϵͳºËÓÃÀ´¹²Ïí´ò¿ªÎļþÐÅÏ¢µÄÊý¾Ý½á¹¹¡£ÔÚ±¾ÊéµÄÉԺ󲿷ÖÎÒ  
 
ÃÇ»¹½«Éæ  
 
¼°ÕâЩÊý¾Ý½á¹¹¡£ª¥  
 
ÎÒÃÇҲ˵Ã÷ÁËioctlºÍfcntlº¯Êý¡£ÔÚµÚÊ®¶þÕÂÖУ¬»¹½«Ê¹ÓÃÕâÁ½¸öº¯Êý£¬½«ioctl  
 
ÓÃÓÚÁ÷I/Oϵͳ£¬½«fcntlÓÃÓÚ¼ÇÂ¼Ëø¡£  
 
   
 
--  
 
¡ù ÐÞ¸Ä:£®bebe ÓÚ Mar 10 16:39:26 Ð޸ı¾ÎÄ£®[FROM: 202.38.248.204]  
 
 
-- 
¡ù À´Ô´:¡¤BBS Ë®Ä¾Ç廪վ smth.org¡¤[FROM: 166.111.136.178] 

BBSˮľÇ廪վ¡Ã¾«»ªÇø