国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

C標(biāo)準(zhǔn)庫源碼解剖(13):輸入輸出函數(shù)stdio.h

2024-07-10 13:27:20
字體:
供稿:網(wǎng)友

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵宝市| 思茅市| 桐梓县| 苍南县| 高淳县| 洛南县| 易门县| 武鸣县| 沈丘县| 且末县| 光山县| 浙江省| 沁水县| 巴林右旗| 深水埗区| 灯塔市| 阿鲁科尔沁旗| 青神县| 东山县| 阿坝县| 上犹县| 七台河市| 仁化县| 石阡县| 阳高县| 玉环县| 黑龙江省| 蓝山县| 醴陵市| 泰来县| 淅川县| 高雄市| 邵阳市| 沂南县| 抚顺市| 抚州市| 新田县| 绍兴市| 北辰区| 成安县| 岱山县|