UNIXLinux環(huán)境高級(jí)編程教程文件.ppt

UNIXLinux環(huán)境高級(jí)編程教程文件.ppt

ID:59560985

大?。?76.00 KB

頁(yè)數(shù):41頁(yè)

時(shí)間:2020-11-11

UNIXLinux環(huán)境高級(jí)編程教程文件.ppt_第1頁(yè)
UNIXLinux環(huán)境高級(jí)編程教程文件.ppt_第2頁(yè)
UNIXLinux環(huán)境高級(jí)編程教程文件.ppt_第3頁(yè)
UNIXLinux環(huán)境高級(jí)編程教程文件.ppt_第4頁(yè)
UNIXLinux環(huán)境高級(jí)編程教程文件.ppt_第5頁(yè)
資源描述:

《UNIXLinux環(huán)境高級(jí)編程教程文件.ppt》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、UNIXLinux環(huán)境高級(jí)編程文件描述當(dāng)打開(kāi)一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。當(dāng)讀、寫(xiě)一個(gè)文件時(shí),用open或creat返回的文件描述符標(biāo)識(shí)該文件,將其作為參數(shù)傳送給read、write、lseek和close等。按照慣例,UNIXshell使文件描述符:0-stdin1-stdout2-stderr在POSIX.1應(yīng)用程序中,標(biāo)準(zhǔn)I/O描述符被定義為:0-STDIN_FILENO;1-STDOUT_FILENO;2-STDERR_FILENO這些常數(shù)都定義在頭文件中。文件描述符的范圍是0~OPEN_MAX。早期的UNIX版本采用

2、的上限值是19(即20),現(xiàn)在很多系統(tǒng)則將其增加至256且可以以?xún)?nèi)核參數(shù)的辦法設(shè)置,比方說(shuō)1024。原始系統(tǒng)數(shù)據(jù)類(lèi)型在UNIX/Linux的開(kāi)發(fā)過(guò)程中用到的以_t結(jié)尾的數(shù)據(jù)為系統(tǒng)原始數(shù)據(jù)。系統(tǒng)原始數(shù)據(jù)在頭文件中被定義。出錯(cuò)處理UNIX函數(shù)出錯(cuò)時(shí),往常返回一個(gè)負(fù)值,而且整型變量errno通常設(shè)置為具有特定信息的一個(gè)值。例如,open函數(shù)如成功執(zhí)行則返回一個(gè)非負(fù)文件描述符,如出錯(cuò)則返回-1。在open出錯(cuò)時(shí),有大約15種不同的errno值。某些函數(shù)并不返回負(fù)值而是使用另一種約定。例如,返回一個(gè)指向?qū)ο蟮闹羔樀拇蠖鄶?shù)函數(shù),在出錯(cuò)時(shí),將返回一個(gè)null指針(N

3、ULL)。文件中定義了變量errno以及可以賦與它的各種常數(shù)。這些常數(shù)都以E開(kāi)頭。在Linux系統(tǒng)中,errno定義在頭文件/usr/include/asm/errno.h,多達(dá)124條。errnoPOSIX定義errno為:externinterrno;對(duì)于errno應(yīng)當(dāng)知道兩條規(guī)則:1:如果沒(méi)有出錯(cuò),則其值不會(huì)被一個(gè)例程清除。因此,僅當(dāng)函數(shù)的返回值指明出錯(cuò)時(shí),才檢驗(yàn)其值。2:任一函數(shù)都不會(huì)將errno值設(shè)置為0,在中定義的所有常數(shù)都不為0。錯(cuò)誤處理的標(biāo)準(zhǔn)函數(shù)strerror():功能:以字符串方式打印錯(cuò)誤信息。用法:#include

4、ring.h>char*strerror(interrnum);返回:指向消息字符串的指針。perror()功能:在標(biāo)準(zhǔn)錯(cuò)誤上產(chǎn)生一條基于其參數(shù)串和errno的當(dāng)前值出錯(cuò)消息。用法:#includevoidperror(constchar*msg);輸出:首先輸出由msg指向的字符串,然后是一個(gè)冒號(hào),一個(gè)空格,然后是對(duì)應(yīng)于errno值的出錯(cuò)信息,然后是一個(gè)新行符。處理錯(cuò)誤的示例1#include#includemain(intargc,char*argv[]){fprintf(stderr,"EACCES=%d:%s",

5、EACCES,strerror(EACCES));errno=ENOENT;perror(argv[0]);}結(jié)果:假設(shè),編譯后生成a.out,則輸出為:EACCES=13:Permissiondenied./a.out:Nosuchfileordirectory處理錯(cuò)誤的示例2#include#includemain(intargc,char*argv[]){inti,fd;for(i=1;i

6、}open功能:打開(kāi)或創(chuàng)建一個(gè)文件,并返回一個(gè)文件描述符。用方:#include#include#includeintopen(constchar*name,intoflag);intopen(constchar*ame,intoflag,mode_tmode);返回值:成功時(shí)為文件描述符,出錯(cuò)則為-1。出錯(cuò)時(shí)errno被設(shè)置。open的參數(shù)pathname是要打開(kāi)或創(chuàng)建的文件的名字。oflag參數(shù)可用來(lái)說(shuō)明此函數(shù)的多個(gè)選擇項(xiàng)。用下列一個(gè)或多個(gè)常數(shù)進(jìn)行或運(yùn)算構(gòu)成oflag參數(shù)(在fcntl.h中):?O_RDO

7、NLY:只讀打開(kāi)。?O_WRONLY:只寫(xiě)打開(kāi)。?O_RDWR:讀寫(xiě)打開(kāi)?O_APPEND:追加方式。?O_CREAT:若不存在則創(chuàng)建它。需同時(shí)使用第三個(gè)參數(shù)mode。?O_EXCL:如果同時(shí)指定了O_CREAT,而文件已經(jīng)存在,則出錯(cuò)。這可測(cè)試一個(gè)文件是否存在,如果不存在則創(chuàng)建此文件成為一個(gè)原子操作。?O_TRUNC:果此文件存在,則將其長(zhǎng)度截短為0。?O_NOCTTY:如果pathname指的是終端設(shè)備,則不將此設(shè)備分配作為此進(jìn)程的控制終端。?O_NONBLOCK:如果pathname指

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。