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

·¢ÐÅÈË: kxn (ÄÄЩ½ÌÑÐ×éÔÚÕÐÈËÄØ£¿faint), ÐÅÇø: Linux        
±ê  Ìâ: [×ªÔØ]-unix»·¾³¸ß¼¶±à³Ì--µÚ5Õ ±ê×¼I/O¿â  
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Wed Mar 15 14:11:07 2000) 
 
 
·¢ÐÅÈË: 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ˮľÇ廪վ¡Ã¾«»ªÇø