亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

C標準庫源碼解剖(13):輸入輸出函數stdio.h

2024-07-10 13:27:20
字體:
來源:轉載
供稿:網友

 C標準中的I/O庫是一個比較龐大的庫,實現也比較復雜。顯然I/O庫的實現是依賴于操作系統的,不同的系統上I/O庫的實現機理是不一樣的。glibc中,I/O庫的核心實現在libio目錄下。有4個頭文件libio.h, iolibio.h, libioP.h, strfile.h, stdio.h,其中stdio.h是導出的標準C頭文件,其余都是內部實現。這里并不打算解剖整個I/O庫的源代碼(那樣可能一本書也說不完),只是概述性的介紹一下它的輪廓和所有標準接口的功能。我們學習I/O庫也是為了能在實踐中應用它,因此因此對C標準中所有的I/O接口要有個全面的了解。
    輸入/輸出函數主要在stdio.h中,對應的寬字符版本在wchar.h中,下面列出標準C中定義的所有接口:
    1、相關類型和常量:FILE、EOF在stdio.h中;wchar_t、wint_t、WEOF、WCHAR_MAX、WCHAR _MIN等在wchar.h中定義。size_t和NULL在stdio.h, wchar.h和stddef.h均會定義,同時使用其中的多個頭文件是無害的。
    2、fopen,fclose,fflush,frepoen,fwide,FOPEN_MAX,FILENAME_MAX:打開文件并返回數據流、關閉文件、清空數據流的緩沖區、將文件重新關聯到一個數據流、fwide在wchar.h中用于設置與測試流定向、可以同時打開的數據流最大個數、文件名的最大長度。
    文件訪問方式:”r”、”w”、”a”、”r+”、”w+”、”a+”,所有訪問方式后面都可以加上字母b,表示數據流保存二進制數據,而不是字符數據。
    3、setvbuf,setbuf,BUFSIZ,_IOFBF,_IOLBF,_IONBF:設置數據流的緩沖區、BUFSIZ緩沖區的默認長度、后面三個是緩沖模式,為數完全緩沖、行緩沖(寫入換行符或緩沖區滿時刷新緩沖區)、數據流不緩沖。
    4、stdin,stdout,stderr:標準輸入流、輸出流、錯誤流。除stderr之外,另外兩個數據流都緩沖。C語言程序執行時,會預先打開這3種文本流。
    5、fseek,ftell,rewind,fgetops,fsetpos:設置流的讀寫位置、返回流的當前讀寫位置、將流的位置恢復到開頭、fgetpos/fsetpos用于獲取或設置流的位置,其值放在fpos_t類型的參數中。定位碼有SEEK_SET, SEEK_CUR,SEEK_END。
    6、fgetc,fgetwc,getc,getwc,getchar,getwchar,ungetc,ungetwc:從流中讀取下一個字符并作為int類型的值返回、getchar則從標準輸入流中讀取、ungetc系列將字符c推回到輸入流中。
    7、fgets,fgetws,gets:從流中讀取一個長為n的字符串到s中,直到遇到換行符、文件末尾或讀取了n-1個字符,然后在字符串末尾加上終止符、gets則從標準輸入流中讀取。
    8、fscanf,fwscanf,scanf,wscanf,sscanf,swscanf:格式化輸入函數。從流中讀取字符并根據控制字符串把字符轉換成相應的值??刂谱址竺娴拿總€參數應為指針,從輸入流讀取的值轉換之后存放在指針指向的對象中。
    控制字符串:除空白符和%號以外的任何其他字符都要匹配輸入流中下一個字符。如果不匹配,則發生沖突,終止轉換操作。指針參數要有正確的個數和正確的類型,符合控制字符串中的轉換說明。
    scanf系列的轉換說明以%號開始,然后依次出現下列元素:
    (1)可選的賦值取消標志符:*
    (2)可選的最大字段寬度:表示為正的十進制整數
    (3)可選的長度說明符:有hh,h,l,ll,j,z,t或L
    (4)必要的轉換說明符:有a,c,d,e,f,g,i,n,o,p,s,u,x,%或[...]。
    常用的轉換說明:%d,%i,%u,%o,%x,%c,%s,%f,%e,%%。
    9、fputc,fputwc,putc,putwc,putchar,putwchar:向輸出流中寫入一個字符、putchar則向標準輸出流寫入。
    10、fputs,fputws,puts:向輸出流中寫入一個字符串,不包括null終止符、puts則向標準輸出流寫入。
    11、fprintf,printf,sprintf,snprintf,fwprintf,wprintf,swprintf:格式化輸出函數。根據控制字符串表示的格式,把輸出轉換成一系列格式發送到輸出流中。
    printf系列的轉換說明以%號開始,然后依次出現下列元素:
    (1)0個或多個標志字符:-,+,0,#或空格,修改轉換操作的含義
    (2)可選的最小字段寬度:表示為十進制整數常量
    (3)可選的精度說明:表示為小數點加一個十進制整數
    (4)可選的長度說明符:有ll,l,L,h,hh,j,z或t
    (5)轉換操作:a,A,c,d,e,E,f,g,G,i,n,o,p,s,u,x,X或%。
    常用的轉換操作:%d,%12d,%u,%o,%c,%s,%p,%f,%e,%%。
    12、vfprintf,vprintf,vsprintf,vfscanf,vscanf,vsscanf,vfwprintf,vwprintf,vswprintf,vfwscanf,vwscanf,vswscanf:與上面的printf和scanf系列類似,只不過不是用省略號作為可變參數,而用stdarg.h中的va_list類型作為一個參數,這就允許編程人員定義自己的格式化輸入輸出函數。
    13、fread,fwrite:從流中讀取count個指定長度的元素到數組中、把數組中的count個指定的長度的元素寫入到流中,返回實際讀取或寫入的項數。
    14、feof,ferror,clearerr:判斷流是否到達末尾(到達返回非0,沒到達返回0)、返回流的錯誤狀態(有錯誤返回非0,沒錯誤返回0)、清除流中的任何文件結束標志或錯誤標志。
    15、remove,rename:刪除指定文件、重命名指定文件。
    16、tmpfile,tmpnam,L_tmpnam,TMP_MAX:tmpfile生成一個臨時文件并以可讀方式打開,文件關閉或程序終止時文件會被刪除、tmpnam生成一個不與當前各個文件名沖突的新文件名,保存在參數buf中、L-tmpnam為buf的最小字符個數、TMP_MAX為連續調用tmpnam的最大次數,不小于25。

    17、perror:打印保存在errno全局變量中的當前錯誤碼的消息描述。
    
    每個標準I/O函數的代碼并不長,因為glibc在內部實現了一個基本的I/O庫,標準I/O函數都是調用這些內部函數來完成工作的。所有的內部函數接口都在iolibio.h中聲明,基本上每個標準I/O函數都對應一個內部函數。內部函數名在標準函數名前加了__IO_字樣,數據流類型也使用內部__IO_FILE類型,標準的FILE類型就是直接用__IO_FILE類型定義的。libio.h中則聲明了一些內部實現需要使用的類型和常量,strfile.h聲明了與緩沖區、緩沖字符有關的一些特性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩一区二区久久久| 久久激情五月丁香伊人| 欧美日韩亚洲一区二区| 国产精品91在线观看| 亚洲国产天堂久久综合| 欧美精品性视频| 欧美与黑人午夜性猛交久久久| 欧美重口另类videos人妖| 91av在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美成人激情图片网| 亚洲欧美日韩成人| 黑人极品videos精品欧美裸| 亚洲成人黄色在线观看| 国产精品91久久| 日韩国产欧美精品在线| 国产成人精品亚洲精品| 欧美主播福利视频| 91在线免费视频| 欧美日韩中文在线| 欧美精品做受xxx性少妇| 国产91在线高潮白浆在线观看| 91高清视频在线免费观看| 亚洲福利视频在线| 国产偷亚洲偷欧美偷精品| 综合网中文字幕| 亚洲精品视频久久| 欧美激情在线有限公司| 日韩第一页在线| 亚洲精品国产综合久久| 国内精品中文字幕| 欧美理论电影在线观看| 欲色天天网综合久久| 中文字幕亚洲无线码a| 大伊人狠狠躁夜夜躁av一区| 欧美成人免费播放| 亚洲国产精品小视频| 久久免费国产精品1| 国产精品直播网红| 久久久精品中文字幕| 亚洲直播在线一区| 欧美日本高清一区| 欧美www视频在线观看| 日本一区二区在线免费播放| 国产欧美一区二区三区在线看| 欧美日韩国产综合视频在线观看中文| 亚洲国产精品va在线看黑人动漫| 日韩视频免费中文字幕| 在线成人中文字幕| 亚洲午夜激情免费视频| 久久久中精品2020中文| 性视频1819p久久| 国产精品青青在线观看爽香蕉| 免费91麻豆精品国产自产在线观看| 国产精品一区二区av影院萌芽| 国产精品88a∨| 欧美激情a∨在线视频播放| 欧美另类在线播放| 欧美成人在线免费| 国产婷婷成人久久av免费高清| 日韩精品欧美国产精品忘忧草| 这里只有精品久久| 韩国一区二区电影| 91久久综合亚洲鲁鲁五月天| 亚洲国产精久久久久久| 国产一区二区丝袜| 欧美激情视频在线免费观看 欧美视频免费一| 精品亚洲夜色av98在线观看| 欧美成人精品影院| 日韩禁在线播放| 成人黄色av免费在线观看| 亚洲97在线观看| 久久精品色欧美aⅴ一区二区| 亚洲精品久久久久中文字幕二区| 欧美大胆a视频| 欧美性xxxxxxx| 日本不卡高字幕在线2019| 亚洲在线视频福利| 亚洲男人天堂网站| xvideos国产精品| 欧美成人精品一区二区| 成人欧美一区二区三区黑人| 久久99久国产精品黄毛片入口| 欧美激情精品久久久久久蜜臀| 日韩在线小视频| 日韩欧美在线视频免费观看| 国产成人精品久久二区二区91| 在线播放日韩欧美| 国产精品久久久久7777婷婷| 成人免费在线视频网址| 91亚洲一区精品| 国产精品视频精品视频| 国产精品v日韩精品| 国内精久久久久久久久久人| 久久精品福利视频| 久久的精品视频| 亚洲经典中文字幕| 国语自产精品视频在线看抢先版图片| 在线激情影院一区| 久久全球大尺度高清视频| 国产精品久久久久7777婷婷| 欧美精品久久久久久久免费观看| 亚洲男人天堂网| 亚洲欧洲激情在线| 精品av在线播放| 成人网址在线观看| 亚洲精品久久在线| 亚洲国产成人精品一区二区| 久久精品免费电影| 这里只有精品在线播放| 庆余年2免费日韩剧观看大牛| 精品女厕一区二区三区| 国产97在线视频| 日韩中文字幕免费看| 亚洲视频视频在线| 97超碰国产精品女人人人爽| 日韩第一页在线| 国产精品18久久久久久麻辣| 午夜精品蜜臀一区二区三区免费| 美女国内精品自产拍在线播放| 美日韩精品视频免费看| 日韩av片免费在线观看| 亚洲日本成人女熟在线观看| 欧美韩国理论所午夜片917电影| 久久精视频免费在线久久完整在线看| 在线电影中文日韩| 一级做a爰片久久毛片美女图片| 91视频88av| 亚洲自拍偷拍在线| 欧美电影院免费观看| 国产日本欧美一区二区三区在线| 91精品国产自产在线| 久久免费观看视频| 久久久久久亚洲精品不卡| 中文字幕在线视频日韩| 欧美日韩免费在线| 黄色91在线观看| 伊人av综合网| 亚洲成色999久久网站| 91精品免费久久久久久久久| 亚洲三级 欧美三级| 国产欧美亚洲视频| 久久伊人色综合| 国产精品视频资源| 久久久欧美一区二区| 久久久爽爽爽美女图片| 国产在线视频91| 色综合91久久精品中文字幕| 伊人青青综合网站| 欧美高清视频在线播放| 欧美色道久久88综合亚洲精品| 久久亚洲国产精品成人av秋霞| 亚洲wwwav| 亚洲美女精品成人在线视频| 久久久亚洲网站| 91中文字幕在线观看| 91极品女神在线| 亚洲色图35p| 欧美精品电影在线| 亚洲在线观看视频网站| 一区二区三区动漫| 欧美性猛交xxxx黑人| 欧洲一区二区视频| 日韩av免费在线|