BBSˮľÇ廪վ¡Ã¾«»ªÇø
·¢ÐÅÈË: forest (ÇẮС¥~~С¼ªÆª), ÐÅÇø: Unix
±ê Ìâ: [×ªÔØ]-unix»·¾³¸ß¼¶±à³Ì--µÚ5Õ ±ê×¼I/O¿â (×ªÔØ)
·¢ÐÅÕ¾: BBS ˮľÇ廪վ (Fri Mar 17 17:50:22 2000)
¡¾ ÒÔÏÂÎÄ×Ö×ªÔØ×Ô Linux ÌÖÂÛÇø ¡¿
¡¾ ÔÎÄÓÉ kxn Ëù·¢±í ¡¿
·¢ÐÅÈË: taosm (128+64-->cool), ÐÅÇø: unix
±ê Ìâ: unix»·¾³¸ß¼¶±à³Ì--µÚ5Õ ±ê×¼I/O¿â
·¢ÐÅÕ¾: Î÷Ê®°ËBBS (Fri Mar 10 11:48:39 2000), תÐÅ
µÚÎåÕ¡þ±ê×¼I/O¿âª¤
5ª±1¡þÒýÑÔª¥
±¾ÕÂ˵Ã÷±ê×¼I/O¿â¡£ÒòΪ²»½öÔÚUnix¶øÇÒÔںܶà²Ù×÷ϵͳÉ϶¼ÊµÏִ˿⣬ËùÒÔËü
ÓÉANSI C
±ê׼˵Ã÷¡£±ê×¼I/O¿â´¦ÀíºÜ¶àϸ½Ú£¬ÀýÈ绺´æ·ÖÅ䣬ÒÔÓÅ»¯³¤¶ÈÖ´ÐÐI/OµÈ¡£ÕâÑù
ʹÓû§¾Í
²»±Øµ£ÐÄÈçºÎÑ¡ÔñʹÓÃÕýÈ·µÄ¿é³¤¶È(Èç3ª±9½ÚÖÐËùÊö)¡£±ê×¼I/O¿âÊÇÔÚϵͳµ÷ÓÃ
º¯Êý»ù´¡
ÉϹ¹ÔìµÄ£¬Ëü±ãÓÚÓû§Ê¹Ó㬵«ÊÇÈç¹û²»½ÏÉîÈëÁ˽â¿âµÄ²Ù×÷£¬Ò²»á´øÀ´Ò»Ð©ÎÊÌâ
¡£ª¥
±ê×¼I/O¿âÊÇÓÉDennis RitchieÔÚ1975Äê×óÓÒ±àдµÄ¡£ËüÊÇÓÉMike Lesk±àдµÄ¿ÉÒÆ
Ö²I/O¿â
µÄÖ÷ÒªÐ޸İ汾¡£ÁîÈ˾ªÒìµÄÊÇ£¬15ÄêºóÖÆ¶©µÄ±ê×¼I/O¿â¶ÔËüÖ»×÷¼«Ð¡µÄÐ޸ġ£
ª¤
5ª±2¡þÁ÷ºÍFILE¶ÔÏóª¥
ÔÚµÚÈýÕÂÖУ¬ËùÓÐI/Oº¯Êý¶¼ÊÇÕë¶ÔÎļþÃèÊö·ûµÄ¡£µ±´ò¿ªÒ»¸öÎļþʱ£¬¼´·µ»ØÒ»
¸öÎļþÃè
Êö·û£¬È»ºó¸ÃÎļþÃèÊö·û¾ÍÓÃÓÚºó¶ÁµÄI/O²Ù×÷¡£¶ø¶ÔÓÚ±ê×¼I/O¿â£¬ÄÇôËüÃǵIJÙ
×÷ÔòÊÇΧ
ÈÆÁ÷(streams)½øÐеġ£(ÇëÎ𽫱ê×¼I/OÊõÓïÁ÷ÓëϵͳVµÄSTREAMS I/OϵͳÏà»ìÏý
¡£)µ±Óñê
×¼I/O¿â´ò¿ª»ò´´½¨Ò»¸öÎļþʱ£¬ÎÒÃÇÒÑʹһ¸öÁ÷ÓëÒ»¸öÎļþÏà½áºÏ¡£ª¥
µ±´ò¿ªÒ»¸öÁ÷ʱ£¬±ê×¼I/Oº¯Êýfopen·µ»ØÒ»¸öÖ¸ÏòFILE¶ÔÏóµÄÖ¸Õë¡£¸Ã¶ÔÏóͨ³£ÊÇ
Ò»¸ö½á¹¹
£¬Ëü°üº¬ÁËI/O¿âΪ¹ÜÀí¸ÃÁ÷ËùÐèÒªµÄËùÓÐÐÅÏ¢£ºÓÃÓÚʵ¼ÊI/OµÄÎļþ²åÊö·û£¬Ö¸Ïò
Á÷»º´æµÄ
Ö¸Õ룬»º´æµÄ³¤¶È£¬µ±Ç°ÔÚ»º´æÖеÄ×Ö·ûÊý£¬³ö´í±êÖ¾µÈµÈ¡£ª¥
Ó¦ÓóÌÐòûÓбØÒª¼ìÑéÒ»¸öFILE¶ÔÏó¡£ÎªÁËÒýÓÃÒ»¸öÁ÷Ð轫FILEÖ¸Õë×÷Ϊ²ÎÊý´«µÝ
¸øÃ¿¸ö±ê
×¼I/Oº¯Êý¡£ÔÚ±¾ÊéÖУ¬ÎÒÃdzÆÖ¸ÏòFILE¶ÔÏóµÄÖ¸ÕëÀàÐÍΪFILE*)ΪÎļþÖ¸Õë¡£ª¥
ÔÚ±¾ÕÂÖУ¬ÎÒÃÇÒÔUnixϵͳΪÀý£¬ËµÃ÷±ê×¼I/O¿â¡£ÕýÈçǰÊö£¬´Ë±ê×¼¿âÒÑÒÆ¿òµ½
³ýUnixÒÔ
ÍâµÄºÜ¶àϵͳÖС£µ«ÊÇΪÁË˵Ã÷¸Ã¿âÈçºÎʵÏÖµÄһЩϸ½Ú£¬ÎÒÃÇÑ¡ÔñUnixʵÏÖ×÷Ϊ
µäÐͽøÐÐ
½éÉÜ¡£ª¤
5ª±3¡þ±ê×¼ÊäÈë¡¢±ê×¼Êä³öºÍ±ê×¼³ö´íª¥
¶ÔÒ»¸ö½ø³ÌÓ趨ÒåÁËÈý¸öÁ÷£¬ËüÃÇ×Ô¶¯µØ¿ÉΪ½ø³ÌʹÓ㺱ê×¼ÊäÈë¡¢±ê×¼Êä³öºÍ±ê
×¼³ö´í¡£
ÔÚ3ª±2½ÚÖÐÎÒÃÇÔøÓÃÎļþÃèÊö·ûSTDIN ¼£Ã£Ä££ª³£²¡½FILENO,STDOUT ¼£Ã£Ä££ª³£²
¡½FILENO
ºÍSTDERR ¼£Ã£Ä££ª³£²¡½FILENO·Ö±ð±íʾËüÃÇ¡£ª¥
ÕâÈý¸ö±ê×¼I/OÁ÷ͨ¹ýÓ趨ÒåÎļþÖ¸Õëstdin,stdoutºÍstderr¼ÓÒÔÒýÓá£ÕâÈý¸öÎÄ
¼þÖ¸Õëͬ
Ñù¶¨ÒåÔÚÍ·Îļþ<stdioª±h>ÖС£ª¤
5ª±4¡þ»º³å´æ´¢ª¥
±ê×¼I/OÌṩ»º³å´æ´¢µÄÄ¿µÄÊǾ¡¿ÉÄܼõÉÙʹÓÃreadºÍwriteµ÷ÓõÄÊýÁ¿¡£(»ØÒäͼ
3ª±1£¬Æä
ÖÐÏÔʾÁËÔÚ²»Í¬µÄ»º´æ³¤¶ÈÇé¿öÏ£¬ÎªÖ´ÐÐI/OËùÐèµÄCPUʱ¼äÁ¿¡£)ËüÒ²¶Ôÿ¸öI/
OÁ÷×Ô¶¯µØ
½øÐлº³å´æ´¢¹ÜÀí£¬±ÜÃâÁËÓ¦ÓóÌÐòÐèÒª¿¼ÂÇÕâÒ»µãËù´øÀ´µÄÂé·³¡£²»ÐÒµÄÊÇ£¬±ê
×¼I/O¿â
ÁîÈË×î¸ÐÃÔ»óµÄÒ²ÊÇËüµÄ»º³å´æ´¢¡£ª¥
±ê×¼I/OÌṩÁËÈýÖÖÀàÐ͵Ļº³å´æ´¢£ºª¥
1ª±È«»º³å¡£ÔÚÕâÖÖÇé¿öÏ£¬µ±ÌîÂú±ê×¼I/O»º´æºó²Å½øÐÐʵ¼ÊI/O²Ù×÷¡£¶ÔÓÚפÔÚ
´ÅÅÌÉϵÄ
Îļþͨ³£ÊÇÓɱê×¼I/O¿âʵʩȫ»º³åµÄ¡£ÔÚÒ»¸öÁ÷ÉÏÖ´ÐеÚÒ»´ÎI/O²Ù×÷ʱ£¬Í¨³£µ÷
ÓÃmalloc
(µÚ7ª±8½Ú)±ê×¼I/Oº¯Êý»ñµÃÐèʹÓõĻº´æ¡£ª¥
ÊõÓïË¢ÐÂ(flush)˵Ã÷±ê×¼I/O»º´æµÄд²Ù×÷¡£»º´æ¿ÉÓɱê×¼I/OÀý³Ì×Ô¶¯µØË¢ÐÂ(Àý
Èçµ±ÌîÂú
Ò»¸ö»º´æÊ±)£¬»òÕß¿ÉÒÔµ÷Óú¯ÊýfflushË¢ÐÂÒ»¸öÁ÷¡£ÖµµÃÒýÆð×¢ÒâµÄÊÇÔÚUnix»·
¾³ÖУ¬Ë¢
ÐÂÓÐÁ½ÖÖÒâ˼¡£ÔÚ±ê×¼I/O¿â·½Ã棬ˢÐÂÒâζ׎«»º´æÖеÄÄÚÈÝдµ½´ÅÅÌÉÏ(¸Ã»º´æ
¿ÉÒÔÖ»ÊÇ
¾Ö²¿ÌîдµÄ)¡£ÔÚÖÕ¶ËÇý¶¯³ÌÐò·½Ãæ(ÀýÈçÔÚµÚʮһÕÂÖÐËùÊöµÄteflushº¯Êý)£¬Ë¢ÐÂ
±íʾ¶ªÆú
ÒÑ´æÔÚ»º´æÖеÄÊý¾Ý¡£ª¥
2ª±Ðлº³å¡£ÔÚÕâÖÖÇé¿öÏ£¬µ±ÔÚÊäÈëºÍÊä³öÖÐÓöµ½ÐÂÐзûʱ£¬±ê×¼I/O¿âÖ´ÐÐI/O
²Ù×÷¡£Õâ
ÔÊÐíÎÒÃÇÒ»´ÎÊä³öÒ»¸ö×Ö·û(Óñê×¼I/O fputcº¯Êý)£¬µ«Ö»ÓÐдÁËÒ»ÐÐÖ®ºó²Å½øÐÐ
ʵ¼ÊI/O²Ù
×÷¡£µ±Á÷Éæ¼°Ò»¸öÖÕ¶Ëʱ(ÀýÈç±ê×¼ÊäÈëºÍ±ê×¼Êä³ö)£¬µäÐ͵ØÊ¹ÓÃÐлº³å¡£ª¥
¶ÔÓÚÐлº³å£¬ÓÐÁ½¸öÏÞÖÆ¡£µÚÒ»¸öÊÇ£ºÒòΪ±ê×¼I/O¿âÓÃÀ´ÊÕ¼¯Ã¿Ò»ÐеĻº´æµÄ³¤
¶ÈÊǹ̶¨
µÄ£¬ËùÒÔÖ»ÒªÌîÂúÁË»º´æ£¬ÄÇô¼´Ê¹»¹Ã»ÓÐдһ¸öÐÂÐзû£¬Ò²½øÐÐI/O²Ù×÷¡£µÚ¶þ
¸öÊÇ£ºÈÎ
ºÎʱºòֻҪͨ¹ý±ê×¼ÊäÈëÊä³öÓëÒªÇó´Ó(a)Ò»¸ö²»´ø»º³åµÄÁ÷£¬»òÕß(b)Ò»¸öÐлº³å
µÄÁ÷(Ëü
ÓèÏÈÒªÇó´ÓϵͳºËµÃµ½Êý¾Ý)µÃµ½ÊäÈëÊý¾Ý£¬ÄÇôÕâ¾Í»áÔì³ÉË¢ÐÂËùÓÐÐлº³åÊä³ö
Á÷¡£ª¥
ÔÚ(b)ÖдøÁËÒ»¸öÔÚÀ¨ºÅÖеÄ˵Ã÷µÄÀíÓÉÊÇ£¬ËùÐèµÄÊý¾Ý¿ÉÄÜÒÑÔڸûº´æÖУ¬Ëü²¢
²»ÒªÇóϵ
ͳºËÔÚÐèÒª¸ÃÊý¾Ý²Å½øÐиòÙ×÷¡£ºÜÃ÷ÏÔ£¬´Ó²»´ø»º³åµÄÒ»¸öÁ÷ÖнøÐÐÊäÈë((a)Ïî
)ÒªÇóµ±
ʱ´ÓϵͳºËµÃµ½Êý¾Ý¡£ª¥
3ª±²»´ø»º³å¡£±ê×¼I/O¿â²»¶Ô×Ö·û½øÐлº³å¡£Èç¹ûÓñê×¼I/Oº¯ÊýдÈô¸É×Ö·ûµ½²»
´ø»º³åµÄ
Á÷ÖУ¬ÔòÏ൱ÓÚÓÃwriteϵͳµÄÓú¯Êý½«ÕâЩ×Ö·ûдȫÏà±È½ÏµÄ´ò¿ªÎļþÉÏ¡£±ê×¼
³ö´í¿östd
errͨ³£ÊDz»´ø»º´æºó£¬Õâ¾ÍʹµÃ³ö´íÐÅÏ¢¿ÉÒÔ¾¡¿ìÏÔʾ³öÀ´£¬¶ø²»¹ÜËüÃÇÊÇ·ñº¬
ÓÐÒ»¸öÐÂ
ÐÐ×Ö·û¡£ª¥
ANSI CÒªÇóÏÂÁлº³åÌØÕ÷£ºª¥
1ª±µ±ÇÒ½öµ±±ê×¼ÊäÈëºÍ±ê×¼Êä³ö²¢²»Éæ¼°½»»¥×÷ÓÃÉ豸ʱ£¬ËüÃDzÅÊÇÈ«»º³åµÄ¡£
ª¥
2ª±±ê×¼³ö´í¾ö²»»áÊÇÈ«»º³åµÄ¡£ª¥
µ«ÊÇ£¬ÕⲢûÓиæËßÎÒÃÇÈç¹û±ê×¼ÊäÈëºÍÊä³öÉæ¼°½»»¥×÷ÓÃÉ豸ʱ£¬ËüÃÇÊDz»´ø»º
³åµÄ»¹ÊÇ
Ðлº³åµÄ£¬ÒÔ¼°±ê×¼Êä³öÊDz»´ø»º³åµÄ£¬»¹ÊÇÐлº³åµÄ¡£SVR4ºÍ4ª±3BSDµÄϵͳĬ
ÈÏʹÓÃÏÂ
ÁÐÀàÐ͵Ļº³å£ºª¥
¡¤±ê×¼³ö´íÊDz»´ø»º´æµÄ¡£ª¥
¡¤ÈçÈôÊÇÉæ¼°ÖÕ¶ËÉ豸µÄÆäËüÁ÷£¬ÔòËüÃÇÊÇÐлº³åµÄ£»·ñÔòÊÇÈ«»º³åµÄ¡£ª¥
¶ÔÈκÎÒ»¸ö¸ø¶¨µÄÁ÷£¬Èç¹ûÎÒÃDz¢²»Ï²»¶ÕâЩϵͳĬÈÏ£¬Ôò¿Éµ÷ÓÃÏÂÁÐÁ½¸öº¯ÊýÖÐ
µÄÒ»¸ö¸ü
¸Ä»º³åÀàÐÍ£ºª¥
#include<stdioª±h>ª¥
void setbuf(FILE *ª«fpª«,char¡¡*ª«bufª«);ª¥
int setvbuf(FILE *ª«fpª«,char *ª«bufª«,int ª«modeª«,size ¼£Ã£Ä££ª³£²¡½t
ª«size)
ª«;ª¥
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ·Ç0ª¥
ÕâЩº¯ÊýÒ»¶¨ÒªÔÚÁ÷Òѱ»´ò¿ªºóµ÷ÓÃ(ÕâÊÇÊ®·ÖÃ÷ÏԵģ¬ÒòΪÿ¸öº¯Êý¶¼ÒªÇóÒ»¸ö
ÓÐЧµÄÎÄ
¼þÖ¸Õë×÷ΪËüÃǵĵÚÒ»¸ö²ÎÊý)£¬¶øÇÒÒ²Ó¦ÔÚ¶Ô¸ÃÁ÷Ö´ÐÐÈκÎÒ»¸öÆäËü²Ù×÷֮ǰµ÷
Óᣪ¥
ʹÓÃsetbufº¯Êý£¬ÎÒÃÇ¿ÉÒÔ´ò¿ª»ò¹Ø±Õ»º³å»úÖÆ¡£ÎªÁË´ø»º´æ½øÐÐI/O£¬²ÎÊýbuf±Ø
ÐëÖ¸ÏòÒ»
¸ö³¤¶ÈΪBUFSIZµÄ»º´æ(¸Ã³£Êý¶¨ÒåÔÚ<stdioª±h>ÖÐ)¡£Í¨³£ÔÚ´ËÖ®ºó¸ÃÁ÷¾ÍÊÇÈ«»º
³åµÄ£¬µ«
ÊÇÈç¹û¸ÃÁ÷ÓëÒ»¸öÖÕ¶ËÉ豸Ïà¹Ø£¬ÄÇôijЩϵͳҲ¿É½«ÆäÉèÖÃΪÐлº³åµÄ¡£ÎªÁ˹Ø
±Õ»º³å£¬
½«bufÉèÖÃΪNULL¡£ª¥
ʹÓÃsetvbuf£¬ÎÒÃÇ¿ÉÒÔ¾«È·µØËµÃ÷ÎÒÃÇËùÐèµÄ»º³åÀàÐÍ¡£ÕâÊÇÒÀ¿¿mode²ÎÊýʵÏÖ
µÄ£ºª¥
¼£Ã£Ä££ª³£²¡½IOFBF¡þÈ«»º³åª¥
¼£Ã£Ä££ª³£²¡½IOLBF¡þÐлº³åª¥
¼£Ã£Ä££ª³£²¡½IONBF¡þ²»´ø»º³åª¥
Èç¹ûÎÒÃÇÖ¸¶¨Ò»¸ö²»´ø»º³åµÄÁ÷£¬ÔòºöÂÔbufºÍsize²ÎÊý¡£Èç¹ûÎÒÃÇÖ¸¶¨È«»º³å»ò
Ðлº³å£¬
ÔòbufºÍsize¿ÉÒÔÑ¡ÔñµØÖ¸¶¨Ò»¸ö»º´æ¼°Æä³¤¶È¡£Èç¹û¸ÃÁ÷Á¿´ø»º´æµÄ£¬¶øbufÊÇN
ULL£¬Ôò±ê
×¼I/O¿â½«×Ô¶¯µØÎª¸Ã·ÖÅäÊʵ±³¤¶ÈµÄ»º´æ¡£¶ÔÓÚÊʵ±³¤¶È£¬ÎÒÃÇÖ¸µÄÊÇÓÉstruct
½á¹¹ÖеÄ
³ÉÔ±st ¼£Ã£Ä££ª³£²¡½blksigeËùÖ¸¶¨µÄÖµ(¼û4ª±2½Ú)¡£Èç¹ûϵͳ²»ÄÜΪ¸ÃÁ÷ʧ¶¨
´ËÖµ(ÀýÈç
Èô´ËÁ÷Éæ¼°Ò»¸öÉ豸»òÒ»¸ö¹ÜµÀ)£¬Ôò·ÖÅ䳤¶ÈΪBUFSIZEµÄ»º´æ¡£ª¥
±´¿ËÀ³ÏµÍ³Ê×ÏÈʹÓÃst ¼£Ã£Ä££ª³£²¡½blksize±íʾ»º´æ³¤¶È¡£½ÏÔçµÄϵͳV°æ±¾Ê¹
Óñê×¼I/
O³£ÊýBUFSIZE
(ÆäµäÐÍÖµÊÇ1024)¡£¼´Ê¹4ª±3+BSDʹÓÃst ¼£Ã£Ä££ª³£²¡½blksize¾ö¶¨×î¼ÑµÄI/O»º
´æ³¤¶È£¬
ËüÈÔ½«BUFSIZEΪ1024¡£ª¥
ͼ5ª±1ÕªÒªÁгöÁËÕâÁ½¸öº¯ÊýµÄ¶¯×÷£¬ÒÔ¼°ËüÃǵĸ÷¸öÑ¡ÔñÏî¡£ª¤ª¤ª¤
ͼ5ª±1¡þsetbufºÍsetvbufº¯ÊýÕªÒªª¥
ÒªÁ˽⣬Èç¹ûÔÚÒ»¸öº¯ÊýÖзÖÅäÒ»¸ö×Ô¶¯±äÁ¿ÀàµÄ±ê×¼I/O»º´æ£¬Ôò´Ó¸Ãº¯Êý·µ»Ø
֮ǰ£¬ÎÒ
ÃDZØÐë¹Ø±Õ¸ÃÁ÷¡£(ÎÒÃǽ«ÔÚ7ª±8½Ú¶Ô´Ë×÷¸ü¶àÌÖÂÛ¡£)ÁíÍ⣬SVR4½«»ºµÄÒ»²¿·ÖÓÃ
ÓÚËü×Ô¼º
µÄ¹ÜÀí²Ù×÷£¬ËùÒÔ¿ÉÒÔ´æ·ÅÔÚ»º´æÖеÄʵ¼ÊÊý¾Ý×Ö½ÚÊýÉÙÓÚsize¡£Ò»°ã¶øÑÔ£¬Ó¦ÓÉ
ϵͳѡÔñ
»º´æµÄ³¤¶È£¬²¢×Ô¶¯·ÖÅ仺´æ¡£ÔÚÕâÑù´¦Àíʱ£¬±ê×¼I/OÔÚÎÒÃǹرմËÁ÷ʱ½«×Ô¶¯
ÊÍ·Å´Ë»º
´æ¡£ª¥
ÈκÎʱºò£¬ÎÒÃǶ¼¿ÉÇ¿ÖÆË¢ÐÂÒ»¸öÁ÷¡£ª¥
#include<stdioª±h>ª¥
int fflush(FILE *ª«fpª«);ª¥
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪEOFª¤
´Ëº¯Êýʹ¸ÃÁ÷ËùÓÐĩдµÄÊý¾Ý¶¼±»´«µÝÖÁϵͳºË¡£×÷ΪһÖÖÌØÊâÇéÐΣ¬ÈçÈôfpÊÇN
ULL£¬Ôò´Ë
º¯ÊýË¢ÐÂËùÓÐÊä³öÁ÷¡£ª¥
´«ËÍÒ»¸ö¿ÕÖ¸ÕëÒÔÇ¿ÆÈË¢ÐÂËùÓÐÊä³öÁ÷£¬ÕâÊÇÐÂÓÉANSI CÒýÈëµÄ¡£·ÇANSI C¿â(Àý
Èç½ÏÔçµÄ
ϵͳV°æ±¾ºÍ4ª±3BSD)²¢²»Ö§³Ö´ËÖÖÌØÕ÷¡£ª¤
5ª±5¡þ´ò¿ªÒ»¸öÁ÷ª¥
ÏÂÁÐÈý¸öº¯Êý´ò¿ªÒ»¸ö±ê×¼I/OÁ÷¡£ª¥
#include<stdioª±h>ª¥
FILE *fopen(const char *ª«pathname,ª«const char *ª«type);ª«ª¥
FILE *freopen(const char *ª«pathname,ª«const char *ª«typeª«,FILE *ª«fpª«
);ª¥
FILE *fdopen(int filedes,const char *ª«type);ª«ª¥
Èý¸öº¯ÊýµÄ·µ»Ø£ºÈô³É¹¦ÎªÎļþÖ¸Õ룬³ö´íΪNULLª¤
ÕâÈý¸öº¯ÊýµÄÇø±ðÊÇ£ºª¥
1ª± fopen´ò¿ªÂ·¾¶ÃûÓÉpathnameָʾµÄÒ»¸öÎļþ¡£ª¥
2ª± freopenÔÚÒ»¸öÌØ¶¨µÄÁ÷ÉÏÓÉfpָʾ´ò¿ªÒ»¸öÖ¸¶¨µÄÎļþ(Æä·¾¶ÃûÓÉpathnam
eָʾ)£¬
ÈçÈô¸ÃÁ÷ÒѾ´ò¿ª£¬ÔòÏȹرոÃÁ÷¡£´Ëº¯ÊýµäÐÍÓÃÓÚ½«Ò»¸öÖ¸¶¨µÄÎļþ´ò¿ªÎªÒ»¸ö
Ô¤¶¨ÒåµÄ
Á÷£º±ê×¼ÊäÈë¡¢±ê×¼Êä³ö¡¢»ò±ê×¼³ö´í¡£ª¥
3ª± fdopenȡһ¸öÏÖ´æµÄÎļþ²åÊö·û(ÎÒÃÇ¿ÉÄÜ´Óopen,dup,dup2,fcntl»òpipeº¯Êý
µÃµ½´ËÎÄ
¼þ²åÊö·û)£¬²¢Ê¹Ò»¸ö±ê×¼µÄI/OÁ÷Óë¸Ã²åÊö·ûÏà½áºÏ¡£´Ëº¯Êý³£ÓÃÓÚÓÉ´´½¨¹ÜµÀºÍ
ÍøÂçͨÐÅ
ͨµÀº¯Êý»ñµÃµÄ²åÊö·û¡£ÒòΪÕâÐ©ÌØÊâÀàÐ͵ÄÎļþ²»ÄÜÓñê×¼I/O fopenº¯Êý´ò¿ª
£¬ÎÒÃDZØ
ÐëÏȵ÷ÓÃÉ豸-רÓú¯ÊýÒÔ»ñµÃÒ»¸öÎļþÃèÊö·û£¬È»ºóÓÃfdopenʹһ¸ö±ê×¼I/OÁ÷Óë
¸ÃÃèÊö
·ûÏà½áºÏ¡£ª¥
fopenºÍfreopenÊÇANSI CµÄËùÊô²¿·Ö¡£ÒòΪANSI C²¢²»Éæ¼°ÎļþÃèÊö·û£¬ËùÒÔPOS
IXª±1¾ßÓÐ
fdopen¡£ª¥
type²ÎÊýÖ¸¶¨¶Ô¸ÃI/OÁ÷µÄ¶Á¡¢Ð´·½Ê½£¬ANSI C¹æ¶¨type²ÎÊý¿ÉÒÔÓÐ15ÖÖ²»Í¬µÄÖµ
£¬ËüÃÇʾ
ÓÚͼ5ª±2ÖС£ª¤ª¤ª¤
ͼ5ª±2¡þ´ò¿ª±ê×¼I/OÁ÷µÄtype²ÎÊýª¥
ʹÓÃ×Ö·ûb×÷ΪtypeµÄÒ»²¿·Ö£¬Ê¹µÃ±ê×¼I/Oϵͳ¿ÉÒÔÇø·ÖÎı¾ÎļþºÍÁ½½øÖÆÎļþ¡£
ÒòΪUnix
ϵͳºË²¢²»¶ÔÕâÁ½ÖÖÎļþ½øÐÐÇø·Ö£¬ËùÒÔÔÚUnixϵͳ»·¾³ÏÂÖ¸¶¨×Ö·ûb×÷ΪtypeµÄ
Ò»²¿·Öʵ
¼ÊÉϲ¢ÎÞ×÷Óᣪ¥
¶ÔÓÚfdopen,type²ÎÊýµÄÒâÒåÔòÉÔÓÐÇø±ð¡£ÒòΪ¸Ã²åÊö·ûÒѱ»´ò¿ª£¬ÎªÐ´¶ø´ò¿ª²¢
²»½Ø¶Ì¸Ã
Îļþ¡£ÀýÈ磬Èô¸Ã²åÊö·ûÔÀ´ÊÇÓÉopenº¯Êý´ò¿ªµÄ£¬¸ÃÎļþÄÇʱÒѾ´æÔÚ£¬ÔòÆäO
¼£Ã£Ä££
ª³£²¡½TRUNC±ê
Ö¾½«¾ö¶¨ÊÇ·ñ½Ø¶Ì¸ÃÎļþ¡£fdopenº¯Êý²»ÄܽضÌËüΪд¶ø´ò¿ªµÄÈÎÒ»Îļþ¡£)ÁíÍâ
£¬±ê×¼I/O
Ìí¼Ó·½Ê½Ò²²»ÄÜÓÃÓÚ´´½¨¸ÃÎļþ(ÒòΪÈçÈôÒ»¸ö²åÊö·ûÒýÓÃÒ»¸öÎļþ£¬Ôò¸ÃÎļþÒ»
¶¨ÒѾ´æ
ÔÚ)¡£ª¥
µ±ÓÃÌí¼ÓÀàÐÍ´ò¿ªÒ»Îļþºó£¬Ôòÿ´Îд¶¼½«Êý¾Ýдµ½ÎļþµÄµ±Ç°Î²¶Ë´¦¡£ÈçÈôÓжà
¸ö½ø³ÌÓÃ
±ê×¼I/OÌí¼Ó·½Ê½´ò¿ªÁËͬһÎļþ£¬ÄÇôÀ´×Ôÿ¸ö½ø³ÌµÄÊý¾Ý¶¼½«ÕýÈ·µØÐ´µ½Îļþ
ÖС£ª¥
4ª±3+BSDÒÔǰµÄ±´¿ËÀ³°æ±¾ÒÔ¼°KenighanºÍRitchie¡²1988¡³177Ò³ÉÏËùʾµÄ¼òµ¥°æ
±¾²¢²»ÄÜ
ÕýÈ·µØ´¦ÀíÌí¼Ó·½Ê½¡£ÕâЩ°æ±¾ÔÚ´ò¿ªÁ÷ʱ£¬µ÷ÓÃlsee£¬Ê¹ÎļþÎ»ÒÆÁ¿ÎªÎļþ½áβ
´¦¡£ÔÚÉæ
¼°¶à¸ö½ø³Ìʱ£¬ÎªÁËÕýÈ·µØÖ§³ÖÌí¼Ó·½Ê½£¬¸ÃÎļþ±ØÐëÓÃO ¼£Ã£Ä££ª³£²¡½APPEND
±êÖ¾´ò¿ª
£¬ÎÒÃÇÒÑÔÚ3ª±
3½ÚÖжԴ˽øÐÐÁËÌÖÂÛ¡£ÔÚÿ´Îдǰ£¬×öÒ»´Îlseek²Ù×÷ͬÑùÒ²²»ÄÜÕýÈ·¹¤×÷(Èçͬ
ÔÚ3ª±11½Ú
ÖÐÌÖÂÛµÄÒ»Ñù)¡£ª¥
µ±ÒÔ¶ÁºÍдÀàÐÍ´ò¿ªÒ»Îļþʱ(typeÖÐ+ºÅ)£¬¾ßÓÐÏÂÁÐÏÞÖÆ£ºª¥
¡¤Èç¹ûÖмäûÓÐfflushª±fseek¡¢fsetpos»òrewind£¬ÔòÔÚÊä³öµÄºóÃæ²»ÄÜÖ±½Ó¸úËæ
ÊäÈë¡£ª¥
¡¤Èç¹ûÖмäûÓÐfseek¡¢fsetpos»òrewind,»òÕßÒ»¸öÊä³ö²Ù×÷ûÓе½´ïÎļþβ¶Ë£¬
ÔòÔÚÊäÈë
²Ù×÷Ö®ºó²»ÄÜÖ±½Ó¸úËæÊä³ö¡£ª¥
°´ÕÕͼ5ª±2£¬ÎÒÃÇÔÚͼ5ª±3ÖÐÕªÒªÁгöÁË´ò¿ªÒ»¸öÁ÷µÄÁùÖÖ²»Í¬µÄ·½Ê½¡£ª¤ª¤ª¤
ͼ5ª±3¡þ´ò¿ªÒ»¸ö±ê×¼I/OÁ÷µÄÁùÖÖ²»Í¬µÄ·½Ê½ª¥
×¢Ò⣬ÔÚÖ¸¶¨w»òaÀàÐÍ´´½¨Ò»¸öÐÂÎļþʱ£¬ÎÒÃÇÎÞ·¨ËµÃ÷¸ÃÎļþµÄ´æÈ¡Êýλ¡£(ÔÚ
µÚÈýÕÂÖÐ
ËùÊöµÄopenº¯ÊýºÍcreatº¯ÊýÔòÄÜ×öµ½ÕâÒ»µã¡£)POSIXª±1ÒªÇóÒÔÕâÖÖ·½Ê½´´½¨µÄÎÄ
¼þ¾ßÓÐÏÂ
ÁдæÈ¡Êý£ºª¥
S ¼£Ã£Ä££ª³£²¡½IRUSR£üS ¼£Ã£Ä££ª³£²¡½IWUSR£üS ¼£Ã£Ä££ª³£²¡½IRGRP£üS¡¼£Ã
Ä££ª³£²
¡½IWGRP£üS ¼£Ã£Ä££ª³£²¡½IROTH£üS ¼£Ã£Ä££ª³£²¡½IWOTHª¥
³ý·ÇÒ»¸öÁ÷ÒýÓÃÒ»¸öÖÕ¶ËÉ豸£¬·ñÔò°´ÏµÍ³Ä¬ÈÏ£¬Ëü±»´ò¿ªÊ±ÊÇÈ«»º³åµÄ¡£ÈôÒ»¸ö
Á÷ÒýÓÃÒ»
ÖÕ¶ËÉ豸ʱ£¬¸ÃÁ÷ÊÇÐлº³åµÄ¡£Ò»µ©´ò¿ªÁËÁ÷£¬ÄÇôÔÚ¶Ô¸ÃÁ÷Ö´ÐÐÈκβÙ×÷֮ǰ£¬
Èç¹ûÏ£Íû
£¬Ôò¿ÉʹÓÃǰ½ÚËùÊöµÄsetbufºÍsetvbuf¸Ä±ä»º³åµÄÀàÐÍ¡£ª¥
µ÷ÓÃfclose¹Ø±ÕÒ»¸ö´ò¿ªµÄÁ÷¡£ª¥
#include <stdioª±h>ª¥
int fclose(FILE *ª«fpª«);ª¥
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪEOFª¤
ÔÚ¸ÃÎļþ±»¹Ø±Õ֮ǰ£¬Ë¢ÐÂÔÚ»º´æÖеÄÊä³öÊý¾Ý¡£ÔÚ»º´æÖеÄÊäÈëÊý¾ÝÔò±»¶ªÆú¡£
Èç¹û±ê×¼
I/O¿âÒѾΪ¸ÃÁ÷×Ô¶¯·ÖÅäÁËÒ»¸ö»º´æ£¬ÔòÊÍ·Å´Ë»º´æ¡£ª¥
µ±Ò»¸ö½ø³ÌÕý³£ÖÕֹʱ(Ö±½Óµ÷ÓÃexit£¬»ò´Ómainº¯Êý·µ»Ø)£¬ÔòËùÓдøÀ´Ð´µÄÒÑÔÚ
»º´æÖÐÊý
¾ÝµÄ±ê×¼I/OÁ÷¶¼±»Ë¢Ð£¬ËùÓдò¿ªµÄ±ê×¼I/OÁ÷¶¼±»¹Ø±Õ¡£ª¤
5ª±6¡þ¶Á¡¢Ð´Ò»¸öÁ÷ª¥
Ò»µ©´ò¿ªÁËÒ»¸öÁ÷£¬Ôò¿ÉÔÚÈýÖÖ²»Í¬ÀàÐ͵ķǸñʽ»¯I/OÖнøÐÐÑ¡Ôñ£¬¶ÔÆä½øÐжÁ
¡¢Ð´²Ù×÷
¡£(ÔÚ5ª±1)½ÚÖУ¬ÎÒÃÇ˵Ã÷Á˸ñʽ»¯I/Oº¯Êý£¬ÀýÈçprintfºÍscanf¡£)ª¥
1ª±Ã¿´ÎÒ»¸ö×Ö·ûµÄI/O¡£Ò»´Î¶Á»òдһ¸ö×Ö·û£¬Èç¹ûÁ÷ÐÇ´ø»º³åµÄ£¬Ôò±ê×¼I/Oº¯
Êý´¦ÀíËù
Óлº³å¡£ª¥
2ª±Ã¿´ÎÒ»ÐеÄI/O¡£Ê¹ÓÃfgetsºÍfputsÒ»´Î¶Á»òдһÐС£Ã¿Ðж¼ÒÔÒ»¸öÐÂÐзûÖÕÖ¹
¡£µ±µ÷ÓÃ
fgetsʱ£¬ÎÒÃÇӦ˵Ã÷ÎÒÃÇÄÜ´¦ÀíµÄ×î´óÐг¤¡£ÎÒÃǽ«ÔÚ5ª±7½ÚÖÐ˵Ã÷ÕâÁ½¸öº¯Êý
¡£ª¥
3ª±Ö±½ÓI/O¡£freadºÍfwriteº¯ÊýÖ§³ÖÕâÖÖÀàÐ͵ÄI/O¡£Ã¿´ÎI/O²Ù×÷¶Á»òдijÖÖÊý
Á¿µÄ¶ÔÏó
£¬¶øÃ¿¸ö¶ÔÏó¾ßÓÐÖ¸¶¨µÄ³¤¶È¡£ÕâÁ½¸öº¯Êý³£ÓÃÓÚ´Ó¶þ½øÖÆÎļþÖжÁдһ¸ö½á¹¹¡£
ÎÒÃÇÔÚ5
ª±9½ÚÖÐ˵Ã÷ÕâÁ½¸öº¯Êý¡£ª¥
Ö±½ÓI/OÕâ¸öÊõÓïÀ´×ÔANSI C±ê×¼£¬ÓÐʱҲ±»³ÆÎª£º¶þ½øÖÆI/O¡¢Ò»´ÎÒ»¸ö¶ÔÏóI/O
¡¢ÃæÏò¼Ç
¼µÄI/O¡¢»òÃæÏò½á¹¹µÄI/O¡£ª¤
ÊäÈ뺯Êýª¥
ÓÐÈý¸öº¯ÊýʹÎÒÃÇ¿ÉÒÔÒ»´Î¶ÁÒ»¸ö×Ö·û¡£ª¥
#include<stdioª±h>ª¥
int getc(FILE *ª«fpª«);ª¥
int fgetc(FILE *ª«fpª«);ª¥
int getchar(void);ª¥
Èý¸öº¯ÊýµÄ·µ»Ø£ºÈô³É¹¦ÎªÏÂÒ»¸ö×Ö·ûÒÑ´¦Îļþβ»ò³ö´íΪEOFª¤
º¯ÊýgetcharµÈͬÓÚgetc(stdin)¡£Ç°¶þ¸öº¯ÊýµÄÇø±ðÊÇgetc¿É±»ÊµÏÖΪºê£¬¶øfge
tcÔò²»ÄÜ
ʵÏÖΪºê¡£ÕâÒâζ×Å£ºª¥
1ª± getcµÄ²ÎÊý²»Ó¦µ±ÊǾßÓи±×÷Óõıí´ïʽ¡£ª¥
2ª±ÒòΪfgetcÒ»¶¨ÊǸöº¯Êý£¬ËùÒÔÎÒÃÇ¿ÉÒԵõ½ÆäµØÖ·¡£Õâ¾ÍÔÊÐíÎÒÃǽ«fgetcµÄ
µØÖ·×÷Ϊһ¸ö²ÎÊý´«Ë͸øÁíÒ»¸öº¯Êý¡£ª¥
3ª±µ÷ÓÃfgetcËùÐèʱ¼äºÜ¿ÉÄܳ¤ÓÚµ÷ÓÃgetc,ÒòΪµ÷Óú¯Êýͨ³£ËùÐèµÄʱ¼ä³¤ÓÚµ÷
Óúꡣȷ
ʵ£¬¼ìÑéÒ»ÏÂ<stdioª±h>Í·ÎļþµÄ´ó¶àÊýʵÏÖ£¬´ÓÖпɼûgetcÊÇÒ»¸öºê£¬Æä±àÂë¾ß
ÓнϸߵÄ
¹¤×÷ЧÂÊ¡£ª¥
ÕâÈý¸öº¯ÊýÒÔ²»´ø·ûºÅ×Ö·û(unsigned char)ÀàÐÍת»»ÎªintµÄ·½Ê½·µ»ØÏÂÒ»¸ö×Ö·û
¡£ËµÃ÷Ϊ
²»´ø·ûºÅµÄÀíÓÉÊÇ£¬Èç¹û×î¸ßλΪ1Ò²²»»áʹ·µ»ØÖµÎª¸º¡£ÒªÇóÕûÐÍ·µ»ØÖµµÄÀíÓÉ
ÊÇ£¬ÕâÑù
¾Í¿ÉÒÔ·µ»ØËùÓпÉÄܵÄ×Ö·ûÖµÔÙ¼ÓÉÏÒ»¸öÒÑ·¢Éú´íÎó»òÒѵ½´ïÎļþβ¶ËµÄָʾֵ¡£
ÔÚ<stdio
ª±h>Öеij£ÊýEOF±»ÒªÇóÊÇÒ»¸ö¸ºÖµ£¬ÆäÖµ¾³£ÊÇ-1¡£Õâ¾ÍÒâζ×ÅÎÒÃDz»Äܽ«ÕâÈý
¸öº¯ÊýµÄ
·µ»ØÖµ´æ·ÅÔÚÒ»¸ö×Ö·û±äÁ¿ÖУ¬ÎÒÃÇÔÚÒÔºó»¹Òª½«ÕâЩº¯ÊýµÄ·µ»ØÖµÓë³£ÊýEOFÏà
±È½Ï¡£ª¥
×¢Ò⣬²»¹ÜÊdzö´í»¹Êǵ½´ïÎļþβ¶Ë£¬ÕâÈý¸öº¯Êý¶¼·µ»ØÍ¬ÑùµÄÖµ¡£ÎªÁËÇø·ÖÕâÁ½
ÖÖ²»Í¬µÄ
Çé¿ö£¬ÎÒÃDZØÐëµ÷ÓÃferror»òfeof¡£ª¥
#include<stdioª±h>ª¥
int ferror(FILE *ª«fpª«);ª¥
int feof(FILE *ª«fpª«);ª¥
¶þ¸öº¯Êý·µ»Ø£ºÈôÌõ¼þÎªÕæÎª·Ç0(Õæ)£¬·ñÔòΪ0(¼Ù)ª¥
void clearerr(FILE *ª«fpª«);ª¤
ÔÚ´ó¶àÊýʵÏÖµÄFILE¶ÔÏóÖУ¬ÎªÃ¿¸öÁ÷±£³ÖÁËÁ½¸ö±êÖ¾£ºª¥
¡¤³ö´í±êÖ¾£¬ª¥
¡¤Îļþ½áÊø±êÖ¾¡£ª¤
µ÷ÓÃclearerrÔòÇå³ýÕâ¶þ¸ö±êÖ¾¡£ª¥
´ÓÒ»¸öÁ÷¶ÁÖ®ºó£¬¿ÉÒÔµ÷ÓÃungetc½«×Ö·ûÔÙËÍ»ØÁ÷ÖС£ª¥
#include<stdioª±h>ª¥
int ungetc(int c,FILE *ª«fpª«);ª¥
·µ»Ø£ºÈô³É¹¦ÎªC£¬³ö´íΪEOFª¤
Ëͻص½Á÷ÖеÄ×Ö·ûÒÔºóÓÖ¿É´ÓÁ÷ÖжÁ³ö£¬µ«¶Á³ö×Ö·ûµÄ˳ÐòÓëËͻصÄ˳ÐòÏà·´¡£Ó¦
µ±Á˽⣬
ËäÈ»ANSI CÔÊÐíÖ§³ÖÈκÎÊýÁ¿µÄ×Ö·û»ØË͵ÄʵÏÖ£¬µ«ÊÇËüÒªÇóÈκÎÒ»ÖÖʵÏÖ¶¼ÒªÖ§
³ÖÒ»¸ö×Ö
·ûµÄ»ØË͹¦ÄÜ¡£ª¥
»ØË͵Ä×Ö·û£¬²»±ØÒ»¶¨ÊÇÉÏÒ»´Î¶Áµ½µÄ×Ö·û¡£²»ÄÜ»ØËÍEOF¡£µ«Êǵ±ÒѾµ½´ïÎļþ
β¶Ëʱ£¬
ÎÒÃÇÈÔ¿ÉÒÔ»ØËÍÒ»×Ö·û¡£Ï´ζÁ½«·µ»Ø¸Ã×Ö·û£¬ÔٴζÁÔò·µ»ØEOF¡£ËùÒÔÄÜÕâÑù×ö
µÄÔÒòÊÇ
Ò»´Î³É¹¦µÄungetcµ÷ÓûáÇå³ý¸ÃÁ÷µÄÎļþ½áÊøÖ¸Ê¾¡£ª¥
µ±ÕýÔÚ¶ÁÒ»¸öÊäÈëÁ÷£¬²¢½øÐÐijÖÖÐÎʽµÄ·Ö×Ö»ò·ÖÅäºÅ²Ù×÷ʱ£¬¾³£Ê¹ÓûØËÍ×Ö·û
²Ù×÷¡£ÓÐ
ʱÎÒÃÇÐèÒªÏÈ¿´Ò»¿´ÏÂÒ»¸ö×Ö·û£¬ÒÔ¾ö¶¨ÈçºÎ´¦Àíµ±Ç°×Ö·û¡£È»ºó¾ÍÐèÒª·½±ãµØ½«
¸Õ²é¿´µÄ
×Ö·ûËͻأ¬ÒÔ±ãÏÂÒ»´Îµ÷ÓÃgetcʱ·µ»Ø¸Ã×Ö·û¡£Èç¹û±ê×¼I/O¿â²»Ìṩ»ØËÍÄÜÁ¦£¬
¾ÍÐ轫¸Ã
×Ö·û´æ·Åµ½Ò»¸öÎÒÃÇ×Ô¼ºµÄ±äÁ¿ÖУ¬²¢ÉèÖÃÒ»¸ö±êÖ¾ÒÔ±ã²î±ðÔÚÏÂÒ»´ÎÐèÒªÒ»¸ö×Ö
·ûʱÊǵ÷
ÓÃgetc£¬»¹ÊÇ´ÓÎÒÃÇ×Ô¼ºµÄ±äÁ¿ÖÐÈ¡Óᣪ¤
Êä³öº¯Êýª¥
¶ÔÓ¦ÓÚÉÏÃæËùÊöµÄÿ¸öÊäÈ뺯Êý¶¼ÓÐÒ»¸öÊä³öº¯Êý¡£ª¥
#include<stdioª±h>ª¥
int putc(int ª«cª«,FILE *ª«fpª«);ª¥
int fputc(int ª«cª«,FILE *ª«fpª«£©;ª¥
int putchar(int ª«cª«);ª¥
Èý¸öº¯Êý·µ»Ø£ºÈô³É¹¦ÎªC£¬³ö´íΪEOFª¤
ÓëÊäÈ뺯ÊýÒ»Ñù£¬putchar(c)µÈͬÓÚputc(c,stdout),putc¿É±»ÊµÏÖΪºê£¬¶øfput
cÔò²»ÄÜʵ
ÏÖΪºê¡£ª¤
5ª±7¡þÿ´ÎÒ»ÐÐI/Oª¥
ÏÂÃæ¶þ¸öº¯ÊýÌṩÿ´ÎÊäÈëÒ»ÐеŦÄÜ¡£ª¥
#include<stdioª±h>ª¥
char *fgets(char *ª«bufª«,int ª«nª«£¬FILE *ª«fpª«£©£»ª¥
char *gets(char *ª«bufª«);ª¥
¶þ¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îªbuf,ÒÑ´¦Îļþβ»ò³ö´íΪNULLª¤
ÕâÁ½¸öº¯Êý¶¼Ö¸¶¨ÁË»º´æµØÖ·£¬¶ÁÈëµÄÐн«ËÍÈëÆäÖС£gets´Ó±ê×¼ÊäÈë¶Á£¬¶øfge
tsÔò´ÓÖ¸
¶¨µÄÁ÷¶Á¡£ª¥
¶ÔÓÚfgets£¬ÎÒÃDZØÐëÖ¸¶¨»º´æµÄ³¤¶È£¬n¡£´Ëº¯ÊýÒ»Ö±¶Áµ½²¢°üÀ¨ÏÂÒ»¸öÐÂÐзûΪ
Ö¹£¬µ«ÊÇ
²»³¬¹ýn-1×Ö·û£¬¶ÁÈëµÄ×Ö·û¶¼ËÍÈ뻺´æ¡£¸Ã»º´æÒÔnull×Ö·û½áβ¡£ÈçÈô¸ÃÐУ¬°ü
À¨×îºóÒ»
¸öÐÂÐзûµÄ×Ö·ûÊý³¬¹ýn-1,ÔòÖ»·µ»ØÒ»¸ö²»ÍêÕûµÄÐУ¬¶øÇÒ»º´æ×ÜÊÇÒÔnull×Ö·û½á
β¡£¶Ôfg
etsµÄÏÂÒ»´Îµ÷ÓÃÔò»á¼ÌÐø¶Á¸ÃÐС£ª¥
getsÊÇÒ»¸ö²»ÍƼöʹÓõĺ¯Êý¡£ÎÊÌâÊǵ÷ÓÃÕßÔÚʹÓÃgetsʱ²»ÄÜÖ¸¶¨»º´æµÄ³¤¶È¡£
ÕâÑù¾Í¿É
ÄÜÔì³É»º´æÔ½½ç(ÈçÈô¸ÃÐг¤ÓÚ»º´æ³¤¶È)£¬Ð´µ½»º´æÖ®ºóµÄ´æ´¢¿Õ¼äÖУ¬´Ó¶ø²úÉú
²»¿ÉÓèÁÏ
µÄºó¹û¡£ÕâÖÖȱÏÝÔø±»ÀûÓÃÀ´¹¹³É1988µÄInternetÈ䳿¡£¹ØÓÚÕâÖÖÇé¿öµÄ˵Ã÷Çå¼û
ACMͨÐÅJ
une 1989(Volª±32,Noª±6)¡£getsÓëfgetsµÄÁíÒ»¸öÇø±ðÊÇ£¬gets²¢²»½«ÐÂÐзû´æÈë
»º´æÖС£
ª¥
ÕâÁ½¸öº¯Êý¶ÔÐÂÐзû½øÐд¦Àí·½ÃæµÄ²î±ðÓëUnixµÄ½øÕ¹Óйء£ÔçÔÚVersion 7µÄÊÖ
²áÖоÍ˵
Ã÷£º"ΪÁËÏòºó¼æÈÝ£¬getsɾ³ýÐÂÐзû£¬¶øfgetsÔò±£³ÖÐÂÐзû¡£"ª¤
ËäÈ»ANSI CÒªÇóÌṩgets,µ«Ç벻ҪʹÓÃËü¡£ª¥
fputsºÍputsÌṩÿ´ÎÊä³öÒ»ÐеŦÄÜ¡£ª¥
#include<stdioª±h>ª¥
int fputs(const char *ª«str,ª«FILE *ª«fpª«);ª¥
int puts(const char *ª«str);ª«ª¥
¶þ¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îª·Ç¸ºÖµ£¬³ö´íΪEOFª¤
º¯Êýfputs½«Ò»¸öÒÔnull·ûÖÕÖ¹µÄ×Ö·û´®Ð´µ½Ö¸¶¨µÄÁ÷£¬ÖÕÖ¹·ûnull²»Ð´³ö¡£×¢Òâ
£¬Õâ²¢²»
Ò»¶¨ÊÇÿ´ÎÊä³öÒ»ÐУ¬ÒòΪËü²¢²»ÒªÇóÔÚnull·û֮ǰһ¶¨ÊÇÐÂÐзû¡£Í¨³££¬ÔÚnul
l·û֮ǰÊÇ
Ò»¸öÐÂÐзû£¬µ«²¢²»ÒªÇó×ÜÊÇÈç´Ë¡£ª¥
puts½«Ò»¸öÒÔnull·ûÖÕÖ¹µÄ×Ö·û´®Ð´µ½±ê×¼Êä³ö£¬ÖÕÖ¹·û²»Ð´³ö¡£µ«ÊÇ£¬putsÈ»ºó
ÓÖ½«Ò»¸ö
ÐÂÐзûдµ½±ê×¼Êä³ö¡£ª¥
puts²¢²»ÏóËüËù¶ÔÓ¦µÄgetsÄÇÑù²»°²È«¡£µ«ÊÇÎÒÃÇ»¹ÊDZÜÃâʹÓÃËü£¬ÒÔÃâÐèÒª¼Çס
ËüÔÚ×îºó
ÓÖ¼ÓÉÏÁËÒ»¸öÐÂÐзû¡£Èç¹û×ÜÊÇʹÓÃfgetsºÍfputs,ÄÇô¾Í»áÊìϤÔÚÿÐÐÖÕÖ¹´¦ÎÒ
ÃDZØÐë×Ô
¼º¼ÓÒ»¸öÐÂÐзû¡£ª¥
5ª±8¡þ±ê×¼I/OµÄЧÂʪ¥
ʹÓÃÇ°Ãæ²¿·ÖËùÊöµÄº¯Êý£¬ÎÒÃÇ¿ÉÒÔ¶Ô±ê×¼I/OϵͳµÄЧÂÊÓÐËùÁ˽⡣³ÌÐò5ª±1Àà
ËÆÓÚ³ÌÐò
3ª±3£¬ËüʹÓÃgetcºÍputc½«±ê×¼ÊäÈë¸´ÖÆµ½±ê×¼Êä³ö¡£ÕâÁ½¸öº¯Êý¿ÉÒÔʵÏÖΪºê¡£
ª¤ª¤ª¤
³ÌÐò5ª±1¡þÓÃgetcºÍputc½«±ê×¼ÊäÈë¸´ÖÆµ½±ê×¼Êä³öª¤
ÎÒÃÇ¿ÉÒÔÓÃfgetcºÍfputc¸Äд¸Ã³ÌÐò£¬ÕâÁ½¸öÒ»¶¨ÊǺ¯Êý£¬¶ø²»ÊǺꡣ(ÎÒÃÇûÓÐ
ʾ³ö¶ÔÔ´
´úÂë¸ü¸ÄµÄϸ½Ú¡£)ª¥
×îºó£¬ÎÒÃÇ»¹±àдÁËÒ»¸ö¶Á¡¢Ð´Ðеİ汾£¬³ÌÐò5ª±2¡£ª¤ª¤ª¤
³ÌÐò5ª±2¡þÓÃfgetsºÍfputs½«±ê×¼ÊäÈë¸´ÖÆµ½±ê×¼Êä³öª¤
×¢Ò⣬ÔÚ³ÌÐò5ª±1ºÍ³ÌÐò5ª±2ÖУ¬ÎÒÃÇûÓÐÏÔʽµØ¹Ø±Õ±ê×¼I/OÁ÷¡£ÎÒÃÇÖªµÀexit
º¯Êý½«»á
Ë¢ÐÂÈκÎδдµÄÊý¾Ý£¬È»ºó¹Ø±ÕËùÓдò¿ªµÄÁ÷¡£(ÎÒÃǽ«ÔÚ8ª±5½ÚÌÖÂÛÕâÒ»µã¡£)½«
ÕâÈý¸ö³Ì
ÐòµÄʱ¼äÓëͼ3ª±1ÖеÄʱ¼ä½øÐбȽÏÊǺÜÓÐȤµÄ¡£ÎÒÃÇÔÚͼ5ª±4ÖÐÏÔʾÁ˶ÔͬһÎÄ
¼þ(1ª±5M
bytes,30,000ÐÐ)½øÐвÙ×÷ËùµÃµÄÊý¾Ý¡£ª¤ª¤ª¤
ͼ5ª±4¡þʹÓñê×¼I/OÀý³ÌµÃµ½µÄʱ¼ä½á¹ûª¥
¶ÔÓÚÕâÈý¸ö±ê×¼I/O°æ±¾µÄÿһ¸ö£¬ÆäÓû§CPUʱ¼ä¶¼ÊÇ´óÓÚͼ3ª±1ÖеÄ×î¼Ñread°æ
±¾£¬ÒòΪ
ÿ´Î¶ÁÒ»¸ö×Ö·û°æ±¾ÖÐÓÐÒ»¸öÒªÖ´ÐÐ150Íò´ÎµÄÑ»·£¬¶øÔÚÿ´Î¶Á1Ðеİ汾ÖÐÓÐÒ»
¸öÒªÖ´ÐÐ
30£¬000´ÎµÄÑ»·¡£ÔÚread°æ±¾ÖУ¬ÆäÑ»·Ö»ÐèÖ´ÐÐ180´Î(¶ÔÓÚ»º´æ³¤¶ÈΪ8192×Ö
½Ú)¡£ÒòΪ
ϵͳCPUʱ¼ä¶¼Ïàͬ£¬ËùÒÔÓû§CPUʱ¼äµÄ²î±ðÔì³ÉÁËʱÖÓʱ¼äµÄ²î±ð¡£ª¥
ϵͳCPUʱ¼äÏàͬµÄÔÒòÊÇÒòΪËùÒÔÕâЩ³ÌÐò¶ÔϵͳºËÌá³öµÄ¶Á¡¢Ð´ÇëÇóÊýÏàͬ¡£
×¢Ò⣬ʹ
Óñê×¼I/OÀý³ÌµÄÒ»¸öÓŵãÊÇÎÒÃÇÎÞÐ迼ÂÇ»º³å¼°×î¼ÑI/O³¤¶ÈµÄÑ¡Ôñ¡£ÎÒÃÇÔÚʹÓÃ
fgetsʱ
ÐèÒª¿¼ÂÇ×î´óÐг¤£¬µ«ÊÇ×î¼ÑI/O³¤¶ÈµÄÑ¡ÔñÒª·½±ãµÃ¶à¡£ª¥
ͼ5ª±4ÖеÄ×îºóÒ»ÁÐÊÇÿ¸ömainº¯ÊýµÄÎı¾¿Õ¼ä×Ö½ÚÊý(ÓÉC±àÒë²úÉúµÄ»úÆ÷Ö¸Áî)
¡£´ÓÖпÉ
¼û£¬Ê¹ÓÃgetcµÄ°æ±¾ÔÚÎı¾¿Õ¼äÖÐ×÷ÁËgetcºÍputcµÄºê´ú»»£¬ËùÒÔËüËùÐèʹÓõÄÖ¸
ÁîÊý³¬¹ý
Á˵÷ÓÃfgetcºÍfputcº¯ÊýËùÐèÖ¸ÁîÊý¡£¹Û²ìgetc°æ±¾ºÍfgetc°æ±¾ÔÚÓû§CPUʱ¼ä·½
ÃæµÄ²î±ð
£¬¿ÉÒÔ¿´µ½ÔÚ³ÌÐòÖÐ×÷ºê´ú»»ºÍµ÷ÓÃÁ½¸öº¯ÊýÔÚ½øÐб¾²âÊÔµÄϵͳÉϲ¢Ã»ÓÐÔì³É¶à
´ó²î±ð¡£
ª¥
ʹÓÃÿ´ÎÒ»ÐÐI/O°æ±¾ÆäËÙ¶È´óÔ¼ÊÇÿ´ÎÒ»¸ö×Ö·û°æ±¾µÄÁ½±¶(Óû§CPUʱ¼äºÍʱÖÓ
ʱ¼äÁ½Õß)
¡£Èç¹ûfgetsºÍfputsº¯ÊýÊÇÓÃgetcºÍputcʵÏÖµÄ(ÀýÈ磬¼ûKesnighanºÍRitchie¡²
1988¡³µÄ7
ª±7½Ú)£¬ÄÇô£¬¿ÉÒÔÓèÆÚfgets°æ±¾µÄʱ¼ä»áÓëgetc°æ±¾Ïà½Ó½ü¡£Êµ¼ÊÉÏ£¬ÎÒÃÇ¿É
ÒÔÓèÁÏÿ
´ÎÒ»Ðеİ汾»á¸üÂýһЩ£¬ÒòΪ³ýÁËÏÖÒÑ´æÔÚµÄ60£¬000´Îº¯Êýµ÷ÓÃÍ⻹ÐèÔö¼ÓÁË
°ÙÍò´Îºê
µ÷Ó᣶øÔÚ±¾²âÊÔÖÐËùÓõÄÿ´ÎÒ»Ðк¯ÊýÊÇÓÃmemccopy(3)ʵÏֵġ£Í¨³££¬ÎªÁËÌá
¸ßЧÂÊ£¬m
emccpyº¯ÊýÊÇÓûã±àÓïÑÔ¶ø·ÇCÓïÑÔ±àдµÄ¡£ª¥
ÕâЩʱ¼äÊý×ÖµÄ×îºóÒ»¸öÓÐȤÈýµãÊÇ£ºfgetc°æ±¾½Ïͼ3ª±1ÖÐBUFSIZE£½£±µÄ°æ±¾Òª
¿ìµÃ¶à¡£
Á½Õß¶¼Ê¹ÓÃÁËÔ¼3°Ù´ÎµÄº¯Êýµ÷Ó㬶øfgetc°æ±¾µÄËÙ¶ÈÔÚÓû§CPUʱ¼ä·½Ã棬´óÔ¼
ÊǺóÕßµÄ5
±¶£¬¶øÔÚʱÖÓʱ¼ä·½ÃæÔò¼¸ºõÊÇ100±¶¡£Ôì³ÉÕâÖÖ²î±ðµÄÔÒòÊÇ£ºÊ¹ÓÃreadµÄ°æ±¾
Ö´ÐÐÁË3°Ù
Íò´Îº¯Êýµ÷Óã¬ÕâÒ²¾ÍÒýÆð3°ÙÍò´Îϵͳµ÷Ó᣶ø¶ÔÓÚfgetc°æ±¾£¬ËüÒ²Ö´ÐÐ3°ÙÍò
´Îº¯Êýµ÷
Ó㬵«ÊÇÕâÖ»ÒýÆð360´Îϵͳµ÷Óá£ÏµÍ³µ÷ÓÃÓëÆÕͨµÄº¯Êýµ÷ÓÃÏà±ÈÊǺܻ¨·Ñʱ¼ä
µÄ¡£ª¥
ÐèÒªÉùÃ÷µÄÊÇÕâЩʱ¼ä½á¹ûÖ»ÔÚijЩϵͳֻ²ÅÊÇÓÐЧµÄ¡£ÕâÖÖʱ¼ä½á¹ûÒÀÀµÓںܶà
ʵÏÖµÄÌØ
Õ÷£¬¶øÕâÖÖÌØÕ÷¶ÔÓÚ²»Í¬µÄUnixϵͳȴ¿ÉÄÜÊDz»Í¬µÄ¡£¾¡¹ÜÈç´Ë£¬ÓÐÕâÑùÒ»×éÊý¾Ý
£¬²¢¶ÔËü
ÃǵIJî±ð×÷³ö½âÊÍ£¬ÕâÓÐÖúÓÚÎÒÃǸüºÃµØÁ˽âϵͳ¡£ª¥
ÔÚ±¾½Ú¼°3ª±9½ÚÖÐÎÒÃÇѧµ½µÄ»ù±¾ÊÂʵÊÇ£º±ê×¼I/O¿âÓëÖ±½Óµ÷ÓÃreadºÍwriteº¯Êý
Ïà±È²¢²»
ÂýºÜ¶à¡£ÎÒÃǹ۲쵽µÄ´óÖ´ú¼ÛÊÇʹÓÃgetcºÍputc¸´ÖÆ1MbyteÊý¾Ý´óÔ¼Ðè3ª±0ÃëC
PUʱ¼ä¡£
¶ÔÓÚ´ó¶àÊý±È½Ï¸´ÔÓµÄÓ¦ÓóÌÐò£¬×îÖ÷ÒªµÄÓû§CPUʱ¼äÊÇÓÉÓ¦Óñ¾ÉíµÄ¸÷ÖÖ´¦Àí
»¨·ÑµÄ£¬
¶ø²»ÊÇÓɱê×¼I/OÀý³ÌÏûºÄµÄ¡£ª¤
5ª±9¡þÁ½½øÖÆI/Oª¥
5ª±6½ÚÖеĺ¯ÊýÊÇÒÔÒ»´ÎÒ»¸ö×Ö·û»òÒ»´ÎÒ»Ðеķ½Ê½½øÐвÙ×÷µÄ¡£ÈçÈô×öÁ½½øÖÆ£É
£¯£Ï£¬ÄÇ
ôÎÒÃÇÒ»´ÎÔ¸¼É¶Á¡¢Ð´Ò»Õû¸ö½á¹¹¡£ÎªÁËʹÓÃgetc»òputc×öµ½ÕâÒ»µã£¬ÎÒÃDZØÐëÑ
»·Í¨¹ýÕû
¸ö½á¹¹£¬Ò»´Î¶Á¡¢Ð´Ò»¸ö×Ö½Ú¡£ÒòΪfputsÔÚÓöµ½null×Ö½Úʱ¾ÍÍ£Ö¹£¬¶øÔڽṹÖÐ
¿ÉÄܺ¬ÓÐn
ull×Ö½Ú£¬ËùÒÔÎÒÃDz»ÄÜʹÓÃÿ´ÎÒ»Ðк¯ÊýʵÏÖÕâÖÖÒªÇó¡£ÏàÀàËÆ£¬Èç¹ûÊäÈëÊý¾Ý
Öаüº¬ÓÐn
ull×Ö½Ú»òÐÂÐзû£¬ÔòfgetsÒ²²»ÄÜÕýÈ·¹¤×÷¡£Òò´Ë£¬ÌṩÁËÏÂÁÐÁ½¸öº¯ÊýÒÔÖ´ÐÐÁ½
½øÖÆI/O
²Ù×÷¡£ª¥
#include<stdioª±h>ª¥
size ¼£Ã£Ä££ª³£²¡½t fread(void *ª«ptrª«,size ¼£Ã£Ä££ª³£²¡½t ª«sizeª«£¬s
ize £Ã£Ä
£ª³£²¡½t ª«nobjª«,FILE *ª«fpª«);ª¥
size ¼£Ã£Ä££ª³£²¡½t fwrite(const void *ª«ptrª«,size ¼£Ã£Ä££ª³£²¡½t ª«si
zeª«£¬siz
e ¼£Ã£Ä££ª³£²¡½t ª«nobjª«,FILE *ª«fpª«);ª¥
¶þ¸öº¯ÊýµÄ·µ»Ø£º¶Á»òдµÄ¶ÔÏóÊýª¤
ÕâЩº¯ÊýÓÐÁ½¸ö³£¼ûµÄÓ÷¨¡£ª¥
1ª±¶Á»òдһ¸öÁ½½øÖÆÊý×é¡£ÀýÈ磬½«Ò»¸ö¸¡µãÊý×éµÄµÚ2ÖÁµÚ5¸öÔªËØÐ´ÖÁÒ»¸öÎÄ
¼þÉÏ£¬ÎÒ
ÃÇ¿ÉÒÔд³É£ºª¥
float data¡²10¡³;ª¥
if(fwrite(& data¡²£²¡³,sizeof(float),4,fp)!=4)ª¥
err ¼£Ã£Ä££ª³£²¡½sys(¡åfwrite error¡å);ª¥
ÆäÖУ¬Ö¸¶¨sizeΪÿ¸öÊý×éÔªËØµÄ³¤¶È£¬nobjΪÓûдµÄÔªËØÊý¡£ª¥
2ª±¶Á»òдһ¸ö½á¹¹£¬ÀýÈ磬ÎÒÃÇ¿ÉÒÔд³É£ºª¤
struct {ª¥
short count;ª¥
long total;ª¥
char name£ÛNAMESIZE£Ý£»ª¤
}item;ª¤
if(fwrite(&item,sizeof(item),1,fp)!=1)ª¥
err ¼£Ã£Ä££ª³£²¡½sys(¡åfwrite error¡å);ª¥
ÆäÖУ¬ÎÒÃÇÖ¸¶¨sizeΪ½á¹¹µÄ³¤¶È£¬nobjΪ1(ҪдµÄ¶ÔÏóÊý)¡£½«ÕâÁ½¸öÀý×Ó½áºÏ
ÆðÀ´¾Í¿É
¶Á»òдһ¸ö½á¹¹Êý×顣ΪÁË×öµ½ÕâÒ»µã£¬sizeÓ¦µ±ÊǸýṹµÄsizeof,nobjÓ¦ÊǸÃ
Êý×éÖеÄ
ÔªËØÊý¡£ª¥
fieadºÍfwrite·µ»Ø¶Á»òдµÄ¶ÔÏóÊý¡£¶ÔÓÚ¶Á£¬Èç¹û³ö´í»ò¶Áµ½ÁËÎļþβ¶Ë£¬Ôò´Ë
Êý×Ö¿ÉÒÔ
ÉÙÓÚnobj¡£ÔÚÕâÖÖÇé¿ö£¬Ó¦µ÷ÓÃferror»òfeof£¬ÒÔÅжϾ¿¾¹ÊÇÄÇÒ»ÖÖÇé¿ö¡£¶ÔÓÚд
£¬Èç¹û·µ
»ØÖµÉÙÓÚËùÒªÇóµÄnobj£¬Ôò³ö´í¡£ª¥
ʹÓÃÁ½½øÖÆI/OµÄ»ù±¾ÎÊÌâÊÇ£¬ËüÖ»ÄÜÓÃÓÚ¶ÁÔÚͬһϵͳÉÏÔÏÈдµÄÊý¾Ý¡£Ôںܶà
Äê֮ǰ£¬
Õâ²¢ÎÞÎÊÌâ(ÄÇʱ£¬ËùÓÐUnixϵͳ¶¼ÔÚppp-11ÉÏÔËÐÐ)£¬¶øÏÖÔÚ£¬ºÜ¶àÒ칹ϵͳͨ¹ý
ÍøÏ໥Á¬
½ÓÆðÀ´£¬¶øÇÒ£¬ÕâÖÖÇé¿öÒѾ·Ç³£ÆÕ±é¡£³£³£ÓÐÕâÖÖÇéÐΣ¬ÔÚÒ»¸öϵͳÉÏдµÄÊý¾Ý
£¬ÔÚÁíÒ»
¸öϵͳÉÏ´¦Àí¡£ÔÚÕâÖÖ»·¾³Ï£¬ÕâÁ½¸öº¯Êý¿ÉÄܾͲ»ÄÜÕý³£¹¤×÷£¬ÆäÔÒòÊÇ£ºª¥
1ª±ÔÚÒ»¸ö½á¹¹ÖУ¬Í¬Ò»³ÉÔ±µÄÎ»ÒÆÁ¿¿ÉÄÜËæ±àÒë³ÌÐòºÍϵͳµÄ²»Í¬¶øÒì¡£(ÓÉÓÚ²»
ͬµÄ¶Ô×¼
ÒªÇó¡£)ȷʵ£¬Ä³Ð©±àÒë³ÌÐòÓÐһѡÔñÏËüÔÊÐí½ôÃܰü×°½á¹¹(½ÚÊ¡´æ´¢¿Õ¼ä£¬¶ø
ÔËÐÐÐÔÄÜ
Ôò¿ÉÄÜÓÐËùϽµ)»ò׼ȷ¶ÔÆë£¬ÒÔ±ãÔÚÔËÐÐʱÒ×ÓÚ´æÈ¡½á¹¹Öи÷³ÉÔ±¡£ÕâÒâζ׿´
ʹÔÚµ¥Ò»
ϵͳÉÏ£¬Ò»¸ö½á¹¹µÄÁ½½øÖÆ´æ·Å½á¹¹Ò²¿ÉÄÜÒò±àÒë³ÌÐòµÄÑ¡ÔñÏî¶ø²»Í¬¡£ª¥
2ª±ÓÃÀ´´æ´¢¶à×Ö½ÚÕûÊýºÍ¸¡µãÖµµÄÁ½½øÖƸñʽÔÚ²»Í¬µÄϵͳ½á¹¹¼äÒ²¿ÉÄÜÊDz»Í¬
µÄ¡£ª¥
ÔÚ²»Í¬ÏµÍ³Ö®¼ä½»»»Á½½øÖÆÊý¾ÝµÄʵ¼Ê½â¾ö·½·¨ÊÇʹÓýϸ߲ã´ÎµÄÐÒé¡£¹ØÓÚÍøÂç
ÐÒé×÷ÓÃ
µÄ½»»»Á½½øÖÆÊý¾ÝµÄijЩ¼¼Êõ£¬Çë²ÎÔÄStevens¡²£±£¹£¹£°¡³µÄ18ª±2½Ú¡£ª¥
ÔÚ8ª±13½ÚÖУ¬ÎÒÃǽ«Ôٻص½freadº¯Êý£¬ÄÇʱ½«ÓÃËü¶ÁÒ»¸öÁ½½øÖƽṹ-UnixµÄ½ø
³Ì¼ÇÕ˼Ç
¼¡£ª¤
5ª±10¡þ¶¨Î»Ò»¸öÁ÷ª¥
ÓÐÁ½ÖÖ·½·¨¶¨Î»Ò»¸ö±ê×¼I/OÁ÷¡£ª¥
1ª± ftellºÍfseek¡£ÕâÁ½¸öº¯Êý×ÔVersion 7ÒÔÀ´¾Í´æÔÚÁË£¬µ«ÊÇËüÃǶ¼¼Ù¶¨Îļþ
µÄλÖÿÉ
ÒÔ´æ·ÅÔÚÒ»¸ö³¤ÕûÐÍÖС£ª¥
2ª± fgetposºÍfsetpos¡£ÕâÁ½¸öº¯ÊýÊÇÐÂÓÉANSI CÒýÈëµÄ¡£ËüÃÇÒý½øÁËÒ»¸öеijé
ÏóÊý¾ÝÀà
ÐÍ£¬fpos ¼£Ã£Ä££ª³£²¡½t,Ëü¼Ç¼ÎļþµÄλÖá£ÔÚ·ÇUnixϵͳÖУ¬ÕâÖÖÊý¾ÝÀàÐÍ¿É
ÒÔ¶¨ÒåΪ
¼Ç¼һ¸öÎļþµÄλÖÃËùÐèµÄ³¤¶È¡£ª¥
ÐèÒªÒÆÖ²µ½·ÇUnixϵͳÉÏÔËÐеÄÓ¦ÓóÌÐòÓ¦µ±Ê¹ÓÃfgetposºÍfsetpos¡£ª¥
#include<stdioª±h>ª¥
long ftell(FILE *ª«fpª«);ª¥
·µ»Ø£ºÈô³É¹¦Îªµ±Ç°ÎļþλÖÃָʾ£¬³ö´íΪ-1Lª¥
int fseek(FILE *ª«fpª«,long ª«offsetª«,int ª«whence);ª«ª¥
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ·Ç0ª¥
void rewind(FILE *ª«fp);ª«ª¥
¶ÔÓÚÒ»¸öÁ½½øÖÆÎļþ£¬ÆäλÖÃָʾÆ÷ÊÇ´ÓÎļþÆðʼλÖÿªÊ¼¶ÈÁ¿£¬²¢ÒÔ×Ö½ÚΪ¼ÆÁ¿
µ¥Î»µÄ¡£
ftellÓÃÓÚÁ½½øÖÆÎļþʱ£¬Æä·µ»ØÖµ¾ÍÊÇÕâÖÖ×Ö½ÚλÖá£ÎªÁËÓÃfseek¶¨Î»Ò»¸öÁ½½ø
ÖÆÎļþ£¬
±ØÐëÖ¸¶¨Ò»¸ö×Ö½ÚÎ»ÒÆÁ¿£¬ÒÔ¼°½âÊÍÕâÖÖÎ»ÒÆÁ¿µÄ·½Ê½¡£whenceµÄÖµÓë3ª±6½ÚÖÐl
seekº¯Êý
µÄÏàͬ£ºSEEK ¼£Ã£Ä££ª³£²¡½SET±íʾ´ÓÎļþµÄÆðʼλÖÿªÊ¼¼ÆËãÎ»ÒÆÁ¿£»SEEK¡¼
ãģ£ª³
£²¡½CVR±íʾ´Óµ±Ç°ÎļþλÖã»
SEEK ¼£Ã£Ä££ª³£²¡½END±íʾ´ÓÎļþµÄβ¶Ë¡£ANSI C²¢²»ÒªÇóÒ»¸öʵÏÖ¶ÔÁ½½øÖÆÎÄ
¼þÖ§³ÖSEE
K ¼£Ã£Ä££ª³£²¡½END¹æ¸ñ˵Ã÷
£¬ÆäÔÒòÊÇijЩϵͳҪÇóÁ½½øÖÆÎļþµÄ³¤¶ÈÊÇij¸ö»ÃÊýµÄÕûÊý±¶£¬²»ÊDz¿·ÖÔò³äÌî
Ϊ0¡£µ«
ÊÇÔÚUnixÖУ¬¶ÔÓÚÁ½½øÖÆÎļþSEEK ¼£Ã£Ä££ª³£²¡½ENDÊǵõ½Ö§³ÖµÄ¡£ª¥
¶ÔÓÚÎı¾Îļþ£¬ËüÃǵÄÎļþµ±Ç°Î»ÖÿÉÄܲ»ÒÔ¼òµ¥µÄ×Ö½ÚÎ»ÒÆÁ¿À´¶ÈÁ¿¡£ÔÙÒ»´Î£¬
ÕâÖ÷ÒªÒ²
ÊÇÔÚ·ÇUnixϵͳÖУ¬ËüÃÇ¿ÉÄÜÒÔ²»Í¬µÄ¸ñʽ´æ·ÅÎı¾Îļþ¡£ÎªÁ˶¨Î»Ò»¸öÎı¾Îļþ
£¬whence
Ò»¶¨ÒªÊÇSEEK ¼£Ã£Ä££ª³£²¡½SET,¶øÇÒoffsetÖ»ÄÜÓÐÁ½ÖÖÖµ£º0(±íʾ·´ÈÆÎļþ¹ØÆä
ÆðʼλÖÃ
)£¬»ò
ÊǶԸÃÎļþµÄftellËù·µ»ØµÄÖµ¡£Ê¹ÓÃrewindº¯ÊýÒ²¿É½«Ò»¸öÁ÷ÉèÖõ½ÎļþµÄÆðʼ
λÖᣪ¥
ÕýÈçÎÒÃÇÒÑÌá¼°µÄ£¬ÏÂÁÐÁ½¸öº¯ÊýÊÇC±ê×¼ÐÂÒý½øµÄ¡£ª¥
#include<stdioª±h>ª¥
int fgetpos(FILE *ª«fpª«,fpos ¼£Ã£Ä££ª³£²¡½t *ª«posª«);ª¥
int fsetpos(FILE *ª«fpª«,const fpos ¼£Ã£Ä££ª³£²¡½t *ª«posª«);ª¥
¶þ¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ·Ç0ª¤
fgetpos½«ÎļþλÖÃָʾÆ÷µÄµ±Ç°Öµ´æÈëÓÉposÖ¸ÏòµÄ¶ÔÏóÖС£ÔÚÒÔºóµ÷ÓÃfsetpos
ʱ£¬¿ÉÒÔ
ʹÓôËÖµ½«Á÷ÖØÐ¶¨Î»ÖÁ¸ÃλÖᣪ¤
5ª±11¡þ¸ñʽ»¯I/Oª¤
¸ñʽ»¯Êä³öª¥
Ö´Ðиñʽ»¯Êä³ö´¦ÀíµÄÊÇÈý¸öprintfº¯Êý¡£ª¥
#include<stdioª±h>ª¥
int printf(const char *ª«format,ª«ª±ª±ª±);ª¥
int fprintf(FILE *ª«fpª«,const char *ª«format,ª±ª±ª±ª«);ª¥
¶þ¸öº¯Êý·µ»Ø£ºÈô³É¹¦ÎªÊä³ö×Ö·ûÊý£¬ÈôÊä³öÁË´íΪ¸ºÖµª¥
int sprintf(char *ª«bufª«,const char *ª«format,ª«ª±ª±ª±);ª¥
·µ»Ø£º´æÈëÊý×éµÄ×Ö·ûÊýª¤
printf½«¸ñʽ»¯Êý¾Ýдµ½±ê×¼Êä³ö£¬fprintfдÖÁÖ¸¶¨µÄÁ÷£¬sprintf½«¸ñʽ»¯µÄ×Ö
·ûËÍÈëÊý
×ébufÖС£sprintfÔÚ¸ÃÊý×éµÄβ¶Ë×Ô¶¯¼ÓÒ»¸önull×Ö½Ú£¬µ«¸Ã×Ö½Ú²»°üÀ¨ÔÚ·µ»ØÖµ
ÖС£ª¥
4ª±3BSD¶¨Òåsprintf·µ»ØµÚÒ»¸ö²ÎÊý(»º´æÖ¸Õ룬ÀàÐÍΪchar*)£¬¶ø²»ÊÇÒ»¸öÕûÐÍ
¡£ANSI C
ÒªÇósprintf·µ»ØÒ»¸öÕûÐÍ¡£ª¥
×¢Ò⣬sprintf¿ÉÄÜ»áÔì³ÉÓÉbufÖ¸ÏòµÄ»º´æµÄÔ½½ç(Òç³ö)¡£±£Ö¤¸Ã»º´æÓÐ×ã¹»³¤¶È
Êǵ÷ÓÃÕß
µÄÔðÈΡ£ª¥
¶ÔÕâÈý¸öº¯Êý¿ÉÄÜʹÓõĸ÷ÖÖ¸ñʽ±ä»»£¬Çë²ÎÔÄUnixÊֲᣬ»òKesmighanºÍRitchi
e¡²1988¡³
µÄ¸½Â¼B¡£ª¥
ÏÂÁÐÈýÖÖprintf×åµÄ±äÌåÀàËÆÓÚÉÏÃæµÄÈýÖÖ£¬µ«Êǿɱä²ÎÊý±í(ª±ª±ª±)´ú»»³ÉÁËa
rg¡£ª¥
#include<stdargª±h>ª¥
#include<stdioª±h>ª¥
int vprintf(const char *ª«format,ª«va ¼£Ã£Ä££ª³£²¡½list ª«argª«)£»ª¥
int vfprintf(FILE *ª«fpª«,const char *ª«format,ª«va ¼£Ã£Ä££ª³£²¡½list ª«
argª«)£»
ª¥
Á½¸öº¯Êý·µ»Ø£ºÈô³É¹¦ÎªÊä³ö×Ö·ûÊý£¬ÈôÊä³öÁË´íΪ¸ºÖµª¥
int vsprintf(char *ª«bufª«,const char *ª«formatª«,va ¼£Ã£Ä££ª³£²¡½list
ª«argª«);
ª¥
·µ»Ø£º´æÈëÊý×éµÄ×Ö·ûÊýÔÚ¸½Â¼BµÄ³ö´íÀý³ÌÖУ¬ÎÒÃǽ«Ê¹ÓÃusprintfº¯Êý¡£ª¥
¹ØÓÚANSI C±ê×¼ÖÐÓйؿɱ䳤¶È²ÎÊý±íµÄÏêϸ˵Ã÷Çë²ÎÔÄKennighanºÍitchie¡²19
88¡³µÄ7ª±
3½Ú¡£Ó¦µ±Á˽âµÄÊÇ£¬ÓÉANSI CÌṩµÄ¿É±ä³¤¶È²ÎÊý±íÀý³Ì(<stdargª±h>Í·ÎļþºÍ
Ïà¹ØµÄÀý
³Ì)ÓëÓÉSVR3(ÒÔ¼°¸üÔç°æ±¾)ºÍ4ª±3BSDÌṩµÄ<varargsª±h>Àý³ÌÊDz»Í¬µÄ¡£ª¤
¸ñʽ»¯ÊäÈ몥
Ö´Ðиñʽ»¯ÊäÈë´¦ÀíµÄÊÇÈý¸öscanfº¯Êý¡£ª¥
#include<stdioª±h>ª¥
int scanf(const char *ª«format,ª«ª±ª±ª±);ª¥
int fscanf(FILE *ª«fpª«,const char *ª«format,ª«ª±ª±ª±);ª¥
int sscanf(const char *ª«bufª«,const char *ª«format,ª±ª±ª±);ª«ª¥
Èý¸öº¯Êý·µ»Ø£ºÖ¸¶¨µÄÊäÈëÏîÊý£¬ÈôÊäÈë³ö´í£¬ØÏÔÚÈÎÒ»±ä»»Ç°ÒÑÖÁÎļþβÔòΪE
OFª¤
Èçͬprintf×åÒ»Ñù£¬¹ØÓÚÕâÈý¸öº¯ÊýµÄ¸÷¸ö¸ñʽѡÔñÏîµÄÏêϸÇé¿ö£¬Çë²ÎÔÄUnixÊÖ
²á¡£ª¤
5ª±12¡þʵÏÖϸ½Úª¥
ÕýÈçÎÒÃÇÒÑÌá¼°µÄ£¬ÔÚUnixÖУ¬±ê×¼I/O¿â×îÖÕ¶¼Òªµ÷ÓõÚÈýÕÂÖÐ˵Ã÷µÄI/OÀý³Ì¡£
ÿ¸öI/O
Á÷¶¼ÓÐÒ»¸öÓëÆäÏà¹ØÁªµÄÎļþ²åÊö·û£¬¿ÉÒÔ¶ÔÒ»¸öÁ÷µ÷ÓÃfilenoÒÔ»ñµÃÆä²åÊö·û¡£
ª¥
#include<stdioª±h>ª¥
int fileno(FILE *ª«fpª«£©£»ª¥
·µ»Ø£ºÓë¸ÃÁ÷Ïà¹ØÁªµÄÎļþÃèÊö·ûª¤
Èç¹ûÒªµ÷ÓÃdup»òfcntlµÈº¯Êý£¬ÄÇô¾ÍÐèÒª´Ëº¯Êý¡£ª¥
ΪÁËÁ˽âÄãËùʹÓõÄϵͳÖбê×¼I/O¿âµÄʵÏÖ£¬×îºÃ´ÓÍ·Îļþ<stdioª±h>¿ªÊ¼¡£´Ó
ÖпÉÒÔ¿´
µ½
£»FILE¶ÔÏóÊÇÈçºÎ¶¨ÒåµÄ£»Ã¿¸öÁ÷µÄ±êÖ¾µÄ¶¨Ò壻¶¨ÒåΪºêµÄ¸÷¸ö±ê×¼I/OÀý³Ì(Àý
Èçgetc)
¡£KeinighanºÍRitche¡²1988¡³ÖеÄ8ª±5½Úº¬ÓÐÒ»¸ö¼òµ¥µÄʵÏÖ£¬´ÓÖпÉÒÔ¿´µ½ºÜ
¶àUnixʵ
ÏֵĻù±¾Ñùʽ¡£Plallger¡²1992¡³µÄµÚÊ®¶þÕÂÌṩÁ˱ê×¼I/O¿âÒ»ÖÖʵÏÖµÄÈ«²¿Ô´
´úÂë¡£4ª±
3£«BSDÖбê×¼I/O¿âµÄʵÏÖ(ÓÉChris Torek±àд)Ò²Êǹ«¿ª¿ÉÒÔʹÓõġ£ª¤
ʵÀýª¥
³ÌÐò5ª±3ΪÈý¸ö±ê×¼Á÷ÒÔ¼°Ò»¸öÓëÒ»¸öÆÕͨÎļþÏà¹ØÁªµÄÁ÷´òÓ¡Óйػº³å״̬ÐÅÏ¢
¡£×¢Ò⣬
ÔÚ´òÓ¡»º³å״̬ÐÅϢ֮ǰ£¬ÏȶÔÿ¸öÁ÷Ö´ÐÐI/O²Ù×÷£¬ÒòΪµÚÒ»¸öI/O²Ù×÷ͨ³£¾ÍÔì
³ÉΪ¸ÃÁ÷
·ÖÅ仺´æ¡£½á¹¹³ÉÔ± ¼£Ã£Ä££ª³£²¡½Flag¡¢ ¼£Ã£Ä££ª³£²¡½bufsizeÒÔ¼°³£Êý¡¼£Ã
Ä££ª³£²
¡½IONBFºÍ ¼£Ã£Ä££ª³£²¡½IOLBFÊÇÓÉ×÷ÕßËùʹÓõÄϵͳ¶¨ÒåµÄ¡£ª¥
Èç¹ûÎÒÃÇÔËÐгÌÐò5ª±3Á½´Î£¬Ò»´ÎʹÈý¸ö±ê×¼ÓëÖÕ¶ËÏàÁ¬½Ó£¬ÁíÒ»´ÎʹËüÃÇÖØ¶¨Ïò
µ½ÆÕͨÎÄ
¼þ£¬ÔòËùµÃ½á¹ûÊÇ£ºª¥
$ aª±out¡þª«stdin,stdoutºÍstderrª«¶¼Á¬ÖÁÖն˪¥
enter any character¡þ¼üÈëÐÂÐзûª¥
one line to standard errorª¥
stream=stdin,line buffered,buffer size=128ª¥
stream=stdout,line buffered,buffer size=128ª¥
stream=stderr,unbuffered,buffer size=8ª¥
stream=/etc/motd,fully buffered,buffer size=8192ª¥
$ aª±out</etc/termcap>stdª±out 2>stdª±err¡þÈý¸öÁ÷¶¼Öض¨Ïò£¬ÔÙ´ÎÔËÐиóÌ
Ðòª¥
$ cat stdª±errª¥
one line to standard errorª¥
$ cat stdª±outª¥
enter any characterª¥
stream=stdin,fully buffered,buffer size=8192ª¥
stream=stdout,fully buffered,buffer size=8192ª¥
stream=stderr,unbuffered,buffer size=8ª¥
stream=/etc/motd,fully buffered,buffer size=8192ª¤ª¤ª¤
³ÌÐò5ª±3¡þ¶Ô¸÷¸ö±ê×¼I/OÁ÷´òÓ¡»º³å״̬ÐÅÏ¢ª¥
´ÓÖпɼû£¬¸ÃϵͳµÄĬÈÏÊÇ£ºµ±±ê×¼ÊäÈë¡¢Êä³öÁ¬ÖÁÖÕ¶Ëʱ£¬ËüÃÇÊÇÐлº³åµÄ¡£ÐÐ
»º´æµÄ³¤
¶ÈÊÇ128bytes¡£×¢Ò⣬ÕⲢûÓн«ÊäÈë¡¢Êä³öµÄÐг¤ÏÞÖÆÎª128bytes,ÕâЩÊÇ»º´æ
µÄ³¤¶È¡£
½«512bytesµÄÐÐдµ½±ê×¼Êä³ö»áËĴε÷ÓÃwriteϵͳµ÷Óᣵ±½«ÕâÁ½¸öÁ÷ÖØÐ¶¨Ïò
µ½ÆÕͨÎÄ
¼þʱ£¬ËüÃÇÈűä»òÊÇÈ«»º³åµÄ£¬Æä»º´æ³¤¶ÈÊǸÃÎļþϵͳÓÅÏÈÑ¡ÓõÄI/O³¤¶È(´Ós
tat½á¹¹ÖÐ
µÃµ½µÄst ¼£Ã£Ä££ª³£²¡½blksize)¡£´ÓÖÐÒ²¿É¿´µ½£¬±ê×¼³ö´íÈçËüËùÓ¦¸ÃµÄÄÇÑùÊÇ
·Ç»º³åµÄ
£¬¶øÆÕͨÎļþ°´ÏµÍ³Ä¬ÈÏÊÇÈ«»º³åµÄ¡£ª¤
5ª±13¡þÁÙʱÎļþª¥
±ê×¼I/O¿âÌṩÁ˶þ¸öº¯ÊýÒÔ°ïÖú´´½¨ÁÙʱÎļþ¡£ª¥
#include<stdioª±h>ª¥
char *tmpnam(char *ª«ptrª«);ª¥
·µ»Ø£ºÖ¸Ïò-Ψһ·¾¶ÃûµÄÖ¸Õ몥
FILE *tmpfile(void);ª¥
·µ»Ø£ºÈô³É¹¦ÎªÎļþÖ¸Õ룬³ö´íΪNULLª¤
temnam²úÉúÒ»¸öÓëÏÖÔÚÎļþÃû²»Í¬µÄÒ»¸öÓÐЧ·¾¶Ãû×Ö·û´®¡£Ã¿´Îµ÷ÓÃËüʱ£¬Ëü¶¼
²úÉúÒ»¸ö
²»Í¬µÄ·¾¶Ãû£¬×î¶àµ÷ÓôÎÊýÊÇTMP ¼£Ã£Ä££ª³£²¡½MAX¡£TMP ¼£Ã£Ä££ª³£²¡½MAX¶¨
ÒåÔÚ<std
ioª±h>ÖС£ª¥
ËäÈ»TMP ¼£Ã£Ä££ª³£²¡½MAXÊÇÓÉANSI C¶¨ÒåµÄ¡£µ«¸ÃC±ê×¼Ö»ÒªÇóÆäÖµÖÁÉÙӦΪ25
¡£µ«ÊÇ£¬X
PG¶¼ÒªÇóÆäÖµ
ÖÁÉÙΪ10£¬000¡£ÔÚ´Ë×îСֵÔÊÐíÒ»¸öʵÏÖʹÓÃ4λÊý×Ö×÷ΪÁÙʱÎļþÃûµÄͬʱ(00
00¡«£¹£¹
£¹£¹£©£¬´ó¶àÊýUnixʵÏÖÓõÄÈ´ÊÇ´ó¡¢Ð¡Ð´×Ö·û¡£ª¥
ÈôptrÊÇNULL£¬ÔòËù²úÉúµÄ·¾¶Ãû´æ·ÅÔÚÒ»¸ö¾²Ì¬ÇøÖУ¬Ö¸Ïò¸Ã¾²Ì¬ÇøµÄÖ¸Õë×÷Ϊ
º¯ÊýÖµ·µ
»Ø¡£ÏÂÒ»´ÎÔÙµ÷ÓÃtmpnamʱ£¬»áÖØÐ´¸Ã¾²Ì¬Çø¡£(Õâ¼Éζ×Å£¬Èç¹ûÎÒÃǵ÷Óô˺¯Êý
¶à´Î£¬¶ø
ÇÒÏë±£´æÂ·¾¶Ãû£¬ÔòÎÒÃÇÓ¦µ±±£´æ¸Ã·¾¶ÃûµÄ¸±±¾£¬¶ø²»ÊÇÖ¸ÕëµÄ¸±±¾¡£)ÈçÈôpt
r²»ÊÇNULL
£¬ÔòÈÏΪËüÖ¸Ïò³¤¶ÈÖÁÉÙÊÇL ¼£Ã£Ä££ª³£²¡½tmpnam¸ö×Ö·ûµÄÊý×é¡£(³£ÊýL £Ã£Ä
£ª³£²¡½t
mpanam
¶¨ÒåÔÚÍ·Îļþ<stdioª±h>ÖС£)Ëù²úÉúµÄ·¾¶Ãû´æ·ÅÔÚ¸ÃÊý×éÖУ¬ptrÒ²×÷Ϊº¯ÊýÖµ
·µ»Ø¡£ª¥
tmpfile´´½¨Ò»¸öÁÙʱ¶þ½øÖÆÎļþ(ÀàÐÍwb+),ÔڹرոÃÎļþʱ£¬»ò³ÌÐò½áÊøÊ±½«×Ô
¶¯É¾³ýÕâ
ÖÖÎļþ¡£×¢Ò⣬UNIX¶Ô¶þ½øÖÆÎļþ¶¼²»×÷ÌØÊâÇø·Ö¡£ª¤
ʵÀýª¥
³ÌÐò5ª±4˵Ã÷ÁËÕâÁ½¸öº¯ÊýµÄÓ¦Óá£ÈôÖ´ÐгÌÐò5ª±4£¬ÔòµÃ£ºª¥
$ aª±outª¥
/usr/tmp/aaaa 00470ª¥
/usr/tmp/baaa 00470ª¥
one line of outputª¤
¼Óµ½ÁÙʱÎļþÃûÖеÄ5λÊý×Öºó׺Êǽø³ÌID¡£Õâ¾Í±£Ö¤Á˶Ը÷¸ö½ø³Ì²úÉúµÄ·¾¶Ãû
¶¼»á²»Í¬
¡£ª¥
tmpfileº¯Êý¾³£Ê¹Óõıê×¼Unix¼¼ÊõÊÇÏȵ÷ÓÃtempnam²úÉúÒ»¸öΨһµÄ·¾¶Ãû£¬È»
ºóÁ¢¼´un
linkËü¡£ª¤ª¤ª¤
³ÌÐò5ª±4¡þtmpnamºÍtmpfileº¯ÊýÓ¦ÓÃʵÀýª¤
Çë»ØÒä4ª±15½Ú£¬¶ÔÒ»¸öÎļþ½â³ýÁ¬½Ó£¬²¢²»É¾³ýÆäÄÚÈÝ£¬¹Ø±Õ¸ÃÎļþʱ²Åɾ³ýÆä
ÄÚÈÝ¡£ª¥
tempnamÊÇtmpnamµÄÒ»¸ö±äÌ壬ËüÔÊÐíµ÷ÓÃÕßΪËù²úÉúµÄ·¾¶ÃûÖ¸¶¨Ä¿Â¼ºÍǰ׺¡£
ª¤
¶ÔÓÚĿ¼ÓÐËÄÖÖ²»Í¬µÄÑ¡Ôñ£¬²¢ÇÒʹÓõÚÒ»¸öÎªÕæµÄ×÷ΪĿ¼£ºª¥
1ª±Èç¹û¶¨ÒåÁË»·¾³±äÁ¿TMPDIR£¬ÔòÓÃÆä×÷ΪĿ¼¡£(ÔÚ7ª±9½ÚÖн«ËµÃ÷»·¾³±äÁ¿¡£
)ª¥
2ª±Èç¹û²ÎÊýdirectory·ÇNULL£¬ÔòÓÃÆä×÷ΪĿ¼¡£ª¥
3ª±ÔÚ<stdioª±h>ÖеÄ×Ö·û´®P ¼£Ã£Ä££ª³£²¡½tmpdirÓÃ×÷ΪĿ¼¡£ª¥
4ª±±¾µØÄ¿Â¼£¬Í¨³£ÊÇ/tmp,ÓÃ×÷ΪĿ¼¡£ª¤
Èç¹ûprefix·ÇNULL£¬ÔòËüÓ¦¸ÃÊÇ×î¶à°üº¬5¸ö×Ö·ûµÄ×Ö·û´®£¬ÓÃÆä×÷ΪÎļþÃûµÄÍ·
¼¸¸ö×Ö·û
¡£ª¥
¸Ãº¯Êýµ÷ÓÃmallocº¯Êý·ÖÅ䶯̬´æ´¢Çø£¬ÓÃÆä´æ·ÅËù¹¹ÔìµÄ·¾¶Ãû¡£µ±ÎÒÃDz»ÔÙʹ
ÓôË·¾¶
Ãûʱ¾Í¿ÉÊÍ·Å´Ë´æ´¢Çø¡£(ÔÚ7ª±8½ÚÖÐ˵Ã÷mallocºÍfieeº¯Êý¡£)ª¥
tempnam²»ÊÇPOSIXª±1ºÍANSI CµÄËùÊô²¿·Ö£¬ËüÊÇXPG3µÄËùÊô²¿·Ö¡£ª¥
ÎÒÃÇËù˵Ã÷µÄʵÏÖ¶ÔÓ¦ÓÚSVR4ºÍ4ª±3£«£Â£Ó£Ä¡£³ýÁËXPG3°æ±¾£¬²»Ö§³Ö»·¾³±äÁ¿T
MPDIRÖ®Íâ
£¬ÆäËüÔòÓë´ËÏàͬ¡£ª¤
ʵÀýª¥
³ÌÐò5ª±5ÏÔʾÁËtempnamµÄÓ¦Óꤪ¤ª¤
³ÌÐò5ª±5¡þtempnamº¯ÊýµÄÓ¦Óê¤
×¢Ò⣬Èç¹ûÃüÁîÐвÎÊý(Ŀ¼»òǰ׺)ÖеÄÈÎÒ»¸öÒԿհ׿ªÊ¼£¬ÔòÎÒÃǽ«Æä×÷Ϊnul
lÖ¸Õë´«ËÍ
¸ø¸Ãº¯Êý¡£ÏÂÃæÏÔʾʹÓøóÌÐòµÄ¸÷ÖÖ·½Ê½¡£ª¥
ÉÏÃæËµÃ÷¹ýµÄÑ¡ÔñĿ¼ÃûµÄËĸö²½Öè°´ÐòÖ´ÐУ¬¸Ãº¯ÊýÒ²¼ì²éÏàÓ¦µÄĿ¼ÃûÊÇ·ñÓÐ
ÒâÒå¡£Èç
¹û¸ÃĿ¼²¢²»´æÔÚ(ÀýÈç/no/such/dir)£¬ÝøÕß¶Ô¸ÃĿ¼²¢ÎÞд´æÈ¡Êý(ÀýÈç/etc/u
ucp),ÔòÌø
¹ýÕâЩ£¬ÊÔ̽¶ÔĿ¼ÃûµÄÏÂÒ»´ÎÑ¡Ôñ¡£´Ó±¾ÀýÖпÉÒÔ¿´µ½ÔÚ·¾¶ÃûÖÐÈçºÎʹÓýø³Ì
ª¥
$ aª±out /home/stevens TEMP¡þÖ¸¶¨Ä¿Â¼ºÍǰ׺ª¥
/home/stevens/TEMPAAAa00571ª¥
$ aª±out¡å¡åPFX¡þʹÓÃĬÈÏĿ¼£ºp ¼£Ã£Ä££ª³£²¡½tmpdirª¥
/usr/tmp/PFXAAAa00572ª¥
$ TMPDIR=/tmp aª±out/usr/tmp¡å¡å¡þʹÓû·¾³±äÁ¿£»ÎÞǰ׺ª¥
/tmp/AAAa00573¡þ»·¾³±äÁ¿¸´Á¿Ä¿Â¼ª¥
$ TMPDIR=/no/such/dir aª±out/tmp QQQQª¥
/tmp/QQQQAAAa00574¡þºöÂÔÎÞЧ»·¾³Ä¿Â¼ª¥
$ TMPDIR=/no/such/file aª±out /etc/uucp MMMMMª¥
/usr/tmp/MMMMMAAAa00575¡þÎÞЧ»·¾³ºÍÎÞЧĿ¼Á½Õß½ÔºöÂÔID£¬Ò²¿É¿´³öÔÚ±¾Êµ
ÏÖÖУ¬P ¼£Ã£Ä££ª³£²¡½
mpdirÊÇ/usr/tmp¡£ÉèÖû·¾³±äÁ¿µÄ¼¼Êõ(ÔÚ³ÌÐòǰµÄTMPDIR=ª±ª±ª±)ÊÊÓÃÓÚBour
ne shellºÍ
Kornshell¡£ª¤
5ª±14¡þ±ê×¼I/OµÄ´úÌæÈí¼þª¥
±ê×¼I/O¿â²¢²»ÊǷdz£ÍêÉÆµÄ¡£KornºÍVO¡²1991¡³ÁгöËüµÄºÜ¶à²»ÊÇÖ®´¦-ijЩÊôÓÚ
Æä»ù±¾
Éè¼Æ£¬µ«ÊÇ´ó¶àÊýÔòÓë¸÷ÖÖ²»Í¬µÄʵÏÖÓйء£ª¥
ÔÚ±ê×¼I/O¿âÖУ¬Ò»¸öЧÂʲ»¸ßµÄ²»×ã´¦ÊÇÐèÒª¸´ÖƵÄÊý¾ÝÁ¿¡£µ±Ê¹ÓÃÿ´ÎÒ»Ðк¯
ÊýfgetsºÍ
fputsʱ£¬Í¨³£ÐèÒª¸´Öƶþ´ÎÊý¾Ý£ºÒ»´ÎÊÇÔÚϵͳºËºÍ±ê×¼I/O»º´æÖ®¼ä(µ±µ÷ÓÃre
adºÍwrite
ʱ)£¬µÚ¶þ´ÎÊÇÔÚ±ê×¼I/O»º´æºÍÓû§³ÌÐòÖеÄÐлº´æÖ®¼ä¡£¿ìËÙI/O¿â¡²AT&T 199
0aÖеÄfio
(3)¡³±ÜÃâÁËÕâÒ»µã£¬Æä·½·¨ÊÇʹ¶Á1Ðеĺ¯Êý·µ»ØÖ¸Ïò¸ÃÐеÄÖ¸Õ룬¶ø²»Êǽ«¸ÃÐÐ
¸´ÖƵ½Áí
Ò»¸ö»º´æÖС£H¡²1988¡³±¨¸æÁËÓÉÓÚ×÷ÁËÕâÖÖ¸ü¸Ä£¬grep(1)¹«ÓóÌÐòµÄËÙ¶ÈÔö¼ÓÁË
2±¶¡£ª¥
KornºÍVo¡²1991¡³ËµÃ÷Á˱ê×¼I/O¿âµÄÁíÒ»ÖÖ´úÌæ°æ£ºsfio¡£ÕâÒ»Èí¼þ°üÔÚËÙ¶ÈÉÏ
ÓëfioÏà½ü
£¬Í¨³£¿ìÓÚ±ê×¼I/O¿â¡£sfioÒ²ÌṩÁËһЩеÄÌØÕ÷£ºÍƹãÁËI/OÁ÷£¬Ê¹Æä²»½ö¿ÉÒÔ
´ú±íÎļþ
£¬Ò²¿É´ú±í´æ´¢Çø£»¿ÉÒÔ±àд´¦ÀíÄ£¿é£¬²¢ÒÔÕÒ·½Ê½½«ÆäѹÈëI/OÁ÷£¬ÕâÑù¾Í¿ÉÒÔ
¸Ä±äÒ»¸ö
Á÷µÄ²Ù×÷£»½ÏºÃµÄÒì³£´¦ÀíµÈ¡£ª¥
Krieger,StummºÍUnrau¡²1992¡³ËµÃ÷ÁËÁíÒ»¸ö´ú»»Èí¼þ°ü£¬ËüʹÓÃÁËÓ³ÕÕÎļþ-mm
apº¯Êý£¬
ÎÒÃǽ«ÔÚ12ª±9˵Ã÷´Ëº¯Êý¡£¸ÃÐÂÈí¼þ°ü³ÆÎªASI(Alloc Stream Interface)¡£´Ë³Ì
Ðò½çÃæÀà
ËÆÓÚUnix´æ´¢·ÖÅ亯Êý(malloc,reallocºÍfiee£¬ÕâЩÔÚ7ª±8½ÚÖÐ˵Ã÷)¡£ÓësfioÈí
¼þ°üÏàͬ
£¬ASIʹÓÃÖ¸ÕëÁ¦Í¼¼õÉÙÊý¾Ý¸´ÖÆÁ¿¡£ª¤
5ª±15¡þÕªÒªª¥
´ó¶àÊýUnixÓ¦ÓóÌÐò¶¼Ê¹Óñê×¼I/O¿â¡£ÎÒÃÇÔÚ±¾ÕÂÖÐ˵Ã÷Á˸ÿâÌṩµÄËùÓк¯Êý
£¬Ä³Ð©Êµ
ÏÖϸ½ÚºÍЧÂÊ·½ÃæµÄ¿¼ÂÇ¡£Ó¦¸Ã¿´µ½±ê×¼I/O¿âʹÓÃÁË»º´æ»úÖÆ£¬¶øÕâÖÖ»úÖÆÊDzú
ÉúºÜ¶àÎÊ
Ì⣬ÒýÆðºÜ¶à»ìÏýµÄÒ»¸öÁìÓò¡£ª¦
·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ££±ª¥
--
--
¡ù À´Ô´:¡¤BBS ˮľÇ廪վ smth.org¡¤[FROM: 166.111.136.178]
BBSˮľÇ廪վ¡Ã¾«»ªÇø