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

首頁(yè) > 學(xué)院 > 操作系統(tǒng) > 正文

標(biāo)準(zhǔn)I/O庫(kù)之打開(kāi)和關(guān)閉流

2024-06-28 13:28:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
標(biāo)準(zhǔn)I/O庫(kù)之打開(kāi)和關(guān)閉流

下列三個(gè)函數(shù)打開(kāi)一個(gè)標(biāo)準(zhǔn)I/O流。

#include <stdio.h>FILE *fopen( const char *restrict pathname, const char *restrict type );FILE *freopen( const char *restrict pathname, const char *restrict type, FILE *restrict fp );FILE *fdopen( int filedes, const char *type );三個(gè)函數(shù)的返回值:若成功則返回文件指針,若出錯(cuò)則返回NULL

這三個(gè)函數(shù)的區(qū)別是:

(1)fopen打開(kāi)一個(gè)指定的文件。

(2)freopen在一個(gè)指定的流上打開(kāi)一個(gè)指定的文件,如若該流已經(jīng)打開(kāi),則先關(guān)閉該流。若該流已經(jīng)定向,則freopen清除該定向。此函數(shù)一般用于將一個(gè)指定的文件打開(kāi)為一個(gè)預(yù)定義的流:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)出錯(cuò)。

(3)fdopen獲取一個(gè)現(xiàn)有的文件描述符(我們可能從open、dup、dup2、fcntl、pipe、socket、socketpair或accept函數(shù)得到此文件描述符),并使一個(gè)標(biāo)準(zhǔn)的I/O流與該描述符相結(jié)合。此函數(shù)常用于由創(chuàng)建管道和網(wǎng)絡(luò)通信通道函數(shù)返回的描述符。因?yàn)檫@些特殊類(lèi)型的文件不能用標(biāo)準(zhǔn)I/O fopen函數(shù)打開(kāi),所以我們必須先調(diào)用設(shè)備專(zhuān)用函數(shù)以獲得一個(gè)文件描述符,然后用fdopen使一個(gè)標(biāo)準(zhǔn)I/O流與該描述符相關(guān)聯(lián)。

type參數(shù)指定對(duì)該I/O流的讀、寫(xiě)方式,ISO C規(guī)定type參數(shù)可以有15種不同的值,見(jiàn)表5-2。

1365473716_7201

使用字符b作為type的一部分,這使得標(biāo)準(zhǔn)I/O系統(tǒng)可以區(qū)分文本文件和二進(jìn)制文件。因?yàn)閁NIX內(nèi)核并不對(duì)這兩種文件進(jìn)行區(qū)分,所以在UNIX系統(tǒng)環(huán)境下指定字符b作為type的一部分實(shí)際上并無(wú)作用。

對(duì)于fdopen,type參數(shù)的意義稍有區(qū)別。因?yàn)樵撁枋龇驯淮蜷_(kāi),所以fdopen為寫(xiě)而打開(kāi)并不截短該文件。另外,標(biāo)準(zhǔn)I/O添寫(xiě)方式也不能用于創(chuàng)建該文件(因?yàn)槿缛粢粋€(gè)描述符引用一個(gè)文件,則該文件一定已經(jīng)存在)。

當(dāng)用添寫(xiě)方式打開(kāi)一文件后,則每次寫(xiě)都將數(shù)據(jù)寫(xiě)到文件的當(dāng)前尾端處。如若有多個(gè)進(jìn)程用標(biāo)準(zhǔn)I/O添寫(xiě)方式打開(kāi)了同一文件,那么來(lái)自每個(gè)進(jìn)程的數(shù)據(jù)都將正確地寫(xiě)到文件中。

當(dāng)以讀和寫(xiě)類(lèi)型打開(kāi)一文件時(shí)(type中+符號(hào)),具有下列限制:

如果中間沒(méi)有fflush、fseek、fsetpos或rewind,則在輸出的后面不能直接跟隨輸入。

如果中間沒(méi)有fseek、fsetpos或rewind,或者一個(gè)輸入操作沒(méi)有到達(dá)文件尾端,則在輸入操作之后不能直接跟隨輸出。

對(duì)應(yīng)于表5-2,我們?cè)诒?-3中列出了打開(kāi)一個(gè)流的6種不同的方式。

表5-3 打開(kāi)一個(gè)標(biāo)準(zhǔn)I/O流的6種不同的方式

限制

r

w

a

r+

w+

a+

文件必須已存在@@
擦除文件以前的內(nèi)容@@
流可以讀@@@@
流可以寫(xiě)@@@@@
流只可在尾端寫(xiě)@@

注意,在指定w或a類(lèi)型創(chuàng)建一個(gè)新文件時(shí),我們無(wú)法說(shuō)明該文件的訪問(wèn)權(quán)限位。

除非流引用終端設(shè)備,否則按系統(tǒng)默認(rèn)的情況,流被打開(kāi)時(shí)是全緩沖的。若流引用終端設(shè)備,則該流是行緩沖的。一旦打開(kāi)了流,那么在對(duì)該流執(zhí)行任何操作之前,如果希望,則可使用setbuf和setvbuf改變緩沖的類(lèi)型。

調(diào)用fclose關(guān)閉一個(gè)打開(kāi)的流。

#include <stdio.h>int fclose( FILE *fp );返回值:若成功則返回0,若出錯(cuò)則返回EOF

在該文件被關(guān)閉之前,沖洗緩沖區(qū)中的輸出數(shù)據(jù)。丟棄緩沖區(qū)中的任何輸入數(shù)據(jù)。如果標(biāo)準(zhǔn)I/O庫(kù)已經(jīng)為該流自動(dòng)分配了一個(gè)緩沖區(qū),則釋放此緩沖區(qū)。

當(dāng)一個(gè)進(jìn)程正常終止時(shí)(直接調(diào)用exit函數(shù),或從main函數(shù)返回),則所有帶未寫(xiě)緩沖數(shù)據(jù)的標(biāo)準(zhǔn)I/O都會(huì)被沖洗,所有打開(kāi)的標(biāo)準(zhǔn)I/O流都會(huì)被關(guān)閉。

本篇博文內(nèi)容摘自《UNIX環(huán)境高級(jí)編程》(第二版),僅作個(gè)人學(xué)習(xí)記錄所用。關(guān)于本書(shū)可參考:http://www.apuebook.com/


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 菏泽市| 吴江市| 定结县| 大足县| 柳州市| 泰顺县| 元谋县| 和硕县| 苏州市| 齐齐哈尔市| 阿尔山市| 蒙城县| 芜湖市| 平泉县| 巴彦淖尔市| 富阳市| 海淀区| 冀州市| 额济纳旗| 秦安县| 泗水县| 平遥县| 江阴市| 肥东县| 广河县| 杨浦区| 玉环县| 天全县| 西藏| 隆林| 海晏县| 莎车县| 合作市| 类乌齐县| 张掖市| 新昌县| 祁门县| 宁安市| 岳阳市| 巴东县| 巴东县|