付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Linux高級編程(一123文件I/O45能、進(jìn)程管理等接 在L間和用戶空(同互 此不許 作。調(diào)——7 用戶編程接口用戶編程接口89strerror(功能:以字符串方式打印錯(cuò)誤信用法#includechar*strerror(int返回功能:在標(biāo)準(zhǔn)錯(cuò)誤上產(chǎn)生一條基于其參數(shù)串和errno的當(dāng)前值出消息用法#includevoidperror(constchar*intmain(){FILEif((fp=fopen("1.txt","r"))=={}}fopen:Nosuchfileorfopen:
{inti;printf(“%d:}::Operationnot:Nosuchfileor:Nosuch:Interruptedsystem:Input/output:Devicenot:Argumentlisttoo:Execformat10:Badfile內(nèi)核如何區(qū)分 特定的文件呢這里用到了一個(gè)重要的概念——文件描述符Lx通常,一個(gè)進(jìn)程啟動時(shí),都會打開3個(gè)文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)出錯(cuò)處理。這3個(gè)文件分別對應(yīng)文件描述符為0、1和2(也就宏替換STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)包含在Linux下OPEN_MAX #include<sys/stat.h>#include<fcntl.h>intopen(constchar*pathname,intintopen(constchar*pathname,intflags,mode_t O_RDONLY只讀打開。O_WRONLY只寫打開。O_RDWR讀、寫打開。O_APPEND每次寫時(shí)都加到文件的尾O_CREAT若此文件不存在則創(chuàng)建它。使用此選擇項(xiàng)時(shí),需同三個(gè)參數(shù)mode,用其說明該新文件的存 權(quán)位O_EXCL如果同時(shí)指定了O_CREAT,而文件已經(jīng)存在,則出錯(cuò)。這測試一個(gè)文件是否存在,如果不存在則創(chuàng)建此文件成為一個(gè)原子 如果此文件存在,而且為只讀或只寫成功打開,則將其截短為0O_NONBLOCK如果pathname指的是一個(gè)塊特殊文件或一個(gè)字符特殊文件,則此選擇項(xiàng)為此文件的本次打開操作和后續(xù)的I/O操作設(shè)置非第三個(gè)參數(shù)mode指定文件權(quán)限,可以用八進(jìn)制數(shù)表示,比如0644示-rw-r--r--,也可以用S_IRUSR、S_IWUSR等宏定義按位或起來。#include#include#includeintcreat(constchar*name,mode_tmode)open(name,#includeintclose(int很多程序都使用這能而不顯式地用close關(guān)閉打開 打開文件例子例子#includessize_tread(intfeledes,void*buff,size_tnbytes)求讀100個(gè)字節(jié),則read返回30,下一次再調(diào)用read時(shí),它將返回0(文件尾端)。 用write函數(shù)向打開文件寫數(shù)據(jù)。#include<unistd.h>見例子errno{非堵塞read(設(shè)備if(設(shè)備1有數(shù)據(jù)到處理數(shù)據(jù)非堵塞read(設(shè)備2);if(設(shè)備2有數(shù)據(jù)到處理數(shù)據(jù)…}以設(shè)定堵塞等待的超時(shí)時(shí)間從而的解#include#includeoff_tlseek(intfilesdes,off_toffset,intwhence)返回:若成功為新的文件位移,若出錯(cuò)為-1對參數(shù)offset的解釋與參數(shù)whence的值有關(guān)若whence是SEEK_SET,則將該文件的位移量設(shè)置為距文件開始o(jì)ffset個(gè)字若whence是SEEK_CUR,則將該文件的位移量設(shè)置為其當(dāng)前值加offset可為正或若whence是SEEK_END,則將該文件的位移量設(shè)置為文件長度加offset可為正或若lseekoff_tcurr_pos=lseek(fd,0,見#include<sys/types.h>#include#includeintfcntl(intfd,intintfcntl(intfd,intcmd,longintfcntl(intfd,intcmd,structflock返回:若成功則依賴于cmd(見下),若出錯(cuò)為-1一個(gè)現(xiàn)存的描述符,新文件描述符作為函數(shù)值返(cmd=F_DUPFD)獲得/設(shè)置文件描述符標(biāo)記,對應(yīng)于filedes的文件描述符標(biāo)志作為函數(shù)返回.(cmd=F_GETFD或F_SETFD)獲得/設(shè)置文件狀態(tài)標(biāo)志,對應(yīng)于filedes的文件狀態(tài)標(biāo)志作為函數(shù)值回。(cmd=F_GETFL或F_SETFL)獲得/設(shè)置異步I/O 獲得/設(shè)置記錄鎖(cmd=F_SETLK,F_SETLKW)。用fcntl改變FileStatusFlag的例 #include<unistd.h>/*SVR4*/#includesys/ioctl.h>*4.3+BSD*數(shù)表示的IO操作通常都能用ioctl的函數(shù)代替ioctl進(jìn)行終端IO操作) 見ioctl例#includevoid*mmap(void*addr,size_tlen,intprot,intflag,intfiledes,off_toff);intmunmap(void*addr,size_tmmapPROT_EXEC表示映射的這一段可執(zhí)行,例flammap(2)P_SHRED如果aMPLE。mua解除una0。#include<unistd.h>#include<sys/types.h>inttruncate(constchar*path,off_tintftruncate(intfdoff_tlength);#includeintfsync(intfiledes數(shù)據(jù)和intfdatasync(intfiledes指定文件的數(shù)voidsync(void)修改部分排入磁盤寫隊(duì)見文件 操作的系統(tǒng)函101120213031
151625263536
252745476567標(biāo)準(zhǔn)I/O 文件分類按文件的邏輯結(jié)構(gòu)記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長和不定長)流式文件:由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成 介質(zhì)普通文件 介質(zhì)文件(磁盤、磁帶等)設(shè)備文件: 介質(zhì)(鍵盤、顯示器 等)按數(shù)據(jù)的組織形式ASCII文件(文本文件):每個(gè)字節(jié)存放ASCII碼,表示一個(gè)字符二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中 形式原樣存放od-tx1-tc-Ax例:整數(shù)
ASCII形內(nèi) 形
0二進(jìn)制形 od(octaldump)和xd(hexdump)命令可以以十進(jìn)制、八進(jìn)制、十六進(jìn)制和ASCII碼來顯示文件或者流,它們對于或可視地檢查文件中不能直接顯語法:od[選項(xiàng)]Ado八進(jìn)制(系統(tǒng)默認(rèn)值xtfo(系統(tǒng)默認(rèn)值為x#includeFILE*fopen(constchar*path,constchar或者叫句柄(Handle),F(xiàn)ILE*指針就像一個(gè)把手文件類型結(jié)構(gòu)體緩沖文件系統(tǒng)為每個(gè)正使用的文件在內(nèi)存開辟文件信息區(qū)文件信息用系統(tǒng)定義的名為FILE的結(jié)構(gòu)體描述FILE定義在stdio.htypedef{ unsignedflags;charfd;unsignedcharhold;shortbsize;
/*緩沖區(qū)滿/空程/*若無緩沖區(qū) 字符unsignedchar*buffer;/*數(shù)據(jù)傳送緩沖區(qū)位unsignedchar*curp;unsignedistemp;shorttoken;}FILE
/*結(jié)構(gòu)體類型名
FILE*文件結(jié)構(gòu)指針 用法 文件關(guān)閉操作系C程操作系C程文件類型指磁“rFILEif((fp=fopen("/tmp/file1","r"))=={perror("erroropenfile/tmp/file1");}#includeintfclose(FILE緩沖文件系統(tǒng)磁盤文程序數(shù)據(jù)磁盤文程序數(shù)據(jù)輸出文件緩沖aUNIX的傳統(tǒng)是Everythingisafile fp=fopen("/etc/shadow","r");if(fp==NULL){perror("Open}fopen也可以打開一個(gè),傳給fopen的第一個(gè)參數(shù)名末尾可以加/也可以fp=fopen("/home/zyt/","r+");if(fp==NULL){perror("Open/home/zyt");}#includeintfgetc(FILEint回#includeintfputc(intc,FILEintputchar(int#include<stdio.h>int{FILEintif((fp=fopen("file2","w+"))==NULL)perror("Openfilefile2\n");}while((ch=getchar())!=EOF)fputc(ch,fp);while((ch=fgetc(fp))!=EOF)return0;} $./mycpdir1/fileAdir2/fileB運(yùn)行這個(gè)程序可以#includeintfseek(FILE*stream,longoffset,intlong l(FILEvoidrewind(FILE#includechar*fgets(char*s,intsize,FILE*stream);char*gets(char*s);fgets從指定的文件中讀一行字符到調(diào)用者提供的緩沖區(qū)gets從標(biāo)準(zhǔn)輸入讀一行字符到調(diào)用者提供的緩沖區(qū)Warning心一點(diǎn)就可以避免出問題,而gets的輸入直接來自程序Warning斷緩沖區(qū)中的'\0'究竟是從文件讀上來的字符還是由fgets#includeintfputs(constchar*s,FILEintputs(constchar用fgets/fputs寫一個(gè)拷貝文件的程#includesize_tfread(void*ptr,size_tsize,size_tFILEsize_tfwrite(constvoid*ptr,size_tsize,size_tFILE 間中連續(xù)存放,共占size*nmemb個(gè)字節(jié),fread從文件stream中讀出size*nmemb個(gè)字節(jié)保存到ptr中,而fwrite把ptr中的size*nmemb#includei
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)宿舍管理制度
- 臨時(shí)麻醉管理制度
- 2026年高級IT項(xiàng)目管理專業(yè)試題庫及答案
- 2026年音樂創(chuàng)作與音樂理論專業(yè)題庫
- 輸尿管支架管拔除同意書
- 廣東省肇慶市高要區(qū)2025-2026學(xué)年九年級上學(xué)期1月期末化學(xué)試題(含答案)
- 2025年陜西省初中學(xué)業(yè)水平考試物理試卷(副題)(含答案)
- 2025年濰坊食品科技職業(yè)學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(必刷)
- 2024年綏江縣幼兒園教師招教考試備考題庫附答案解析
- 2025年連云港職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案解析
- 太空電梯能源供應(yīng)-洞察分析
- 人教版英語八年級全冊單詞默寫模板
- 環(huán)境影響評估投標(biāo)方案(技術(shù)方案)
- 危險(xiǎn)廢物管理臺賬(樣表)
- 磚瓦廠脫硝工藝
- GB/T 43731-2024生物樣本庫中生物樣本處理方法的確認(rèn)和驗(yàn)證通用要求
- 《沉積學(xué)復(fù)習(xí)提綱》課件
- 信訪工作課件
- 110kV旗潘線π接入社旗陌陂110kV輸電線路施工方案(OPGW光纜)解析
- 第5章 PowerPoint 2016演示文稿制作軟件
- 基坑支護(hù)降水施工組織設(shè)計(jì)
評論
0/150
提交評論