![Linux系統(tǒng)調用和文件_第1頁](http://file4.renrendoc.com/view11/M02/0B/3F/wKhkGWWMQd6AD6M9AACy60Fdn4o025.jpg)
![Linux系統(tǒng)調用和文件_第2頁](http://file4.renrendoc.com/view11/M02/0B/3F/wKhkGWWMQd6AD6M9AACy60Fdn4o0252.jpg)
![Linux系統(tǒng)調用和文件_第3頁](http://file4.renrendoc.com/view11/M02/0B/3F/wKhkGWWMQd6AD6M9AACy60Fdn4o0253.jpg)
![Linux系統(tǒng)調用和文件_第4頁](http://file4.renrendoc.com/view11/M02/0B/3F/wKhkGWWMQd6AD6M9AACy60Fdn4o0254.jpg)
![Linux系統(tǒng)調用和文件_第5頁](http://file4.renrendoc.com/view11/M02/0B/3F/wKhkGWWMQd6AD6M9AACy60Fdn4o0255.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Linux系統(tǒng)調用和文件I/OLinux系統(tǒng)調用與文件I/OLinux系統(tǒng)調用所謂系統(tǒng)調用是指操作系統(tǒng)提供應用戶程序的一組“特殊〞接口,用戶程序可以經過這組“特殊〞接口來獲得操作系統(tǒng)內核提供的特殊效力。在Linux中用戶程序不能直接訪問內核提供的效力。為了更好的維護內核空間,將程序的運轉空間分為內核空間和用戶空間,他們運轉在不同的級別上,在邏輯上是相互隔離的。用戶程序接口〔API〕在Linux中用戶編程接口〔API〕遵照了在UNIX中最流行的運用編程界面規(guī)范—POSIX規(guī)范。這些系統(tǒng)調用編程接口主要經過C庫〔libc〕實現(xiàn)的。內核空間用戶空間系統(tǒng)調用用戶程序接口API系統(tǒng)命令系統(tǒng)調用、API與系統(tǒng)命令之間的關系文件I/O引見可用的文件I/O函數(shù)——翻開文件、讀文件、寫文件等等。大多數(shù)Linux文件I/O只需用到5個函數(shù):open、read、write、lseek以及close。不帶緩存指的是每個read和write都調用內核中的一個系統(tǒng)調用。這些不帶緩存的I/O函數(shù)不是ANSIC的組成部分,而是POSIX組成部分。文件描畫符對于內核而言,一切翻開文件都由文件描畫符援用。文件描畫符是一個非負整數(shù)。當翻開一個現(xiàn)存文件或創(chuàng)建一個新文件時,內核向進程前往一個文件描畫符。當讀、寫一個文件時,用open或creat前往的文件描畫符標識該文件,將其作為參數(shù)傳送給read或write。文件描畫符在POSIX.1運用程序中,整數(shù)0、1、2應被代換成符號常數(shù):STDIN_FILENOSTDOUT_FILENOSTDERR_FILENO這些常數(shù)都定義在頭文件<unistd.h>中。文件描畫符的范圍是0~OPEN_MAX。早期的UNIX版本采用的上限值是19(允許每個進程翻開20個文件),如今很多系統(tǒng)那么將其添加至256。open函數(shù)#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>intopen(constchar*pathname,intoflag, …/*,mode_tmode*/);功能:翻開文件前往:假設勝利為文件描畫符,假設出錯為-1open函數(shù)pathname是要翻開或創(chuàng)建的文件的名字。oflag參數(shù)可用來闡明此函數(shù)的多個選擇項。對于open函數(shù)而言,僅當創(chuàng)建新文件時才運用第三個參數(shù)。用以下一個或多個常數(shù)進展或運算構成oflag參數(shù)(這些常數(shù)定義在<fcntl.h>頭文件中):O_RDONLY只讀翻開。O_WRONLY只寫翻開。O_RDWR讀、寫翻開。O_APPEND每次寫時都加到文件的尾端。O_CREAT假設此文件不存在那么創(chuàng)建它。運用此選擇項時,需同時闡明第三個參數(shù)mode,用其闡明該新文件的存取答應權位。O_EXCL假好像時指定了O_CREAT,而文件曾經存在,那么出錯。這可測試一個文件能否存在,假設不存在那么創(chuàng)建此文件成為一個原子操作。O_TRUNC假設此文件存在,而且為只讀或只寫勝利翻開,那么將其長度截短為0。O_NOCTTY假設pathname指的是終端設備,那么不將此設備分配作為此進程的控制終端。O_NONBLOCK假設pathname指的是一個FIFO、一個塊特殊文件或一個字符特殊文件,那么此選擇項為此文件的本次翻開操作和后續(xù)的I/O操作設置非阻塞方式。O_SYNC使每次write都等到物理I/O操作完成。creat函數(shù)#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>intcreat(constchar*pathname,mode_tmode);功能:創(chuàng)建一個新的文件。前往:假設勝利為只寫翻開的文件描畫符,假設出錯為-1。留意,此函數(shù)等效于:open(pathname,O_WRONLY|O_CREAT|O_TRUNC,mode);creat的一個缺乏之處是它以只寫方式翻開所創(chuàng)建的文件。close函數(shù)#include<unistd.h>intclose(intfiledes);功能:封鎖一個翻開文件前往:假設勝利為0,假設出錯為-1 當一個進程終止時,它一切的翻開文件都由內核自動封鎖。很多程序都運用這一功能而不顯式地用close封鎖翻開的文件。lseek函數(shù)每個翻開文件都有一個與其相關聯(lián)的“當前文件偏移量〞。它是一個非負整數(shù),用以度量從文件開場處計算的字節(jié)數(shù)。通常,讀、寫操作都從當前文件偏移量處開場,并使偏移量添加所讀或寫的字節(jié)數(shù)。按系統(tǒng)默許,當翻開一個文件時,除非指定O_APPEND選擇項,否那么該位移量被設置為0。可以調用lseek顯式地定位一個翻開文件。lseek函數(shù)#include<sys/types.h>#include<unistd.h>off_tlseek(intfilesdes,off_toffset,intwhence);功能:設置文件內容讀寫位置前往:假設勝利為新的文件位移,假設出錯為-1。對參數(shù)offset的解釋與參數(shù)whence的值有關。假設whence是SEEK_SET,那么將該文件的位移量設置為距文件開場處offset個字節(jié)。假設whence是SEEK_CUR,那么將該文件的位移量設置為其當前值加offset,offset可為正或負。假設whence是SEEK_END,那么將該文件的位移量設置為文件長度加offset,offset可為正或負。read函數(shù)#include<unistd.h>ssize_tread(intfd,void*buf,size_tcount);功能:從翻開文件中讀數(shù)據(jù)前往:讀到的字節(jié)數(shù),假設已到文件尾為0,假設出錯為-1。read函數(shù)有多種情況可使實踐讀到的字節(jié)數(shù)少于要求讀字節(jié)數(shù):讀普通文件時,在讀到要求字節(jié)數(shù)之前已到達了文件尾端。例如,假設在到達文件尾端之前還有30個字節(jié),而要求讀100個字節(jié),那么read前往30,下一次再調用read時,它將前往0(文件尾端)。當從終端設備讀時,通常以行為單位,讀到換行符就前往。當從網絡讀時,網絡中的緩沖機構能夠呵斥前往值小于所要求讀的字節(jié)數(shù)。某些面向記錄的設備,例如磁帶,一次最多前往一個記錄。讀操作從文件的當前位移量處開場,在勝利前往之前,該位移量添加實踐讀得的字節(jié)數(shù)。write函數(shù)#include<unistd.h>ssize_twrite(intfd,constvoid*buf,size_tcount);功能;向翻開文件寫數(shù)據(jù)。前往:假設勝利為已寫的字節(jié)數(shù),假設出錯為-1。其前往值通常與參數(shù)count的值不同,否那么表示出錯。write出錯的一個常見緣由是:磁盤已寫滿,或者超越了對一個給定進程的文件長度限制。對于普通文件,寫操作從文件的當前位移量處開場。假設在翻開該文件時,指定了O_APPEND選擇項,那么在每次寫操作之前,將文件位移量設置在文件的當前結尾處。在一次勝利寫之后,該文件位移量添加實踐寫的字節(jié)數(shù)。fcntl函數(shù)#include<unistd.h>#include<fcntl.h>intfcntl(intfiledes,intcmd,...);功能:改動曾經翻開文件的性質前往:假設勝利那么依賴于cmd(),假設出錯為-1。fcntl函數(shù)fcntl函數(shù)有五種功能:復制一個現(xiàn)存的描畫符,新文件描畫符作為函數(shù)值返(cmd=F_DUPFD〕。獲得/設置文件描畫符標志,對應于filedes的文件描畫符標志作為函數(shù)值前往.〔cmd=F_GETFD或F_SETFD〕。獲得/設置文件形狀標志,對應于filedes的文件形狀標志作為函數(shù)值前往?!瞔md=F_GETFL或F_SETFL〕。獲得/設置異步I/O〔cmd=F_GETOWN或F_SETOWN〕。獲得/設置記錄鎖〔cmd=F_SETLK,F_SETLKW〕。O_RDONLY只讀打開O_WRONLY只寫打開O_RDWR讀/寫打開O_APPEND寫時都添加至文件尾O_NONBLOCK非阻塞方式O_SYNC等待寫完成O_ASYNC異步I/O文件形狀標志闡明ioctl函數(shù)ioctl函數(shù)是I/O操作的雜物箱。不能用本章中其他函數(shù)表示的I/O操作通常都能用ioctl表示。終端I/O是ioctl的最大運用方面,主要用于設備的I/O控制。#include<sys/ioctl.h>intioctl(intfiledes,intrequest,...);前往:假設出錯那么為-1,假設勝利那么為其他值。ioctl函數(shù)例如:串口線上傳送的數(shù)據(jù)經過read、write來操作,而串口的波特率、校驗位、停頓位可以經過ioctl來設置。規(guī)范文件I/O操作fopen函數(shù)#include<stdio.h>FILE*fopen(constchar*path,constchar*mode)函數(shù)功能:翻開一個文件前往值:文件順利翻開后,指向該流的文件指針就會被前往。假設文件翻開失敗那么前往NULL,并把錯誤代碼存在error中。參數(shù)闡明path字符串包含欲翻開的文件途徑及文件名,參數(shù)mode字符串那么代表著流形狀。Mode有以下幾種形狀字符串:r翻開只讀文件,該文件必需存在r+翻開可讀寫的文件,該文件必需存在w翻開只寫文件,假設文件存在那么文件長度清為0,即該文件內容會消逝。假設文件不存在那么建立該文件。w+翻開可讀寫文件,假設文件存在那么文件長度清為0,即該文件內容會消逝。假設文件不存在那么建立該文件。a以附加的方式翻開只寫文件。假設文件不存在那么建立,存在那么把數(shù)據(jù)添加在文件末尾a+以附加的方式翻開讀寫文件,同a。fclose函數(shù)#include<stdio.h>Intfclose(FILE*stream)功能:封鎖一個流。留意:運用fclose函數(shù)就可以把緩沖區(qū)內最后剩下的數(shù)據(jù)輸出到磁盤文件中,并釋放文件指針和有關的緩沖區(qū)。fputc函數(shù)#include<stdio.h>intfputc(intch,FILE*stream);功能:送一個字符到一個流中。fgetc函數(shù)#include<stdio.h>intfgetc(FILE*stream);功能:fgetc()從參數(shù)stream所指的文件中讀取一個字符。假設讀到文件尾而無數(shù)據(jù)時便前往EOFfseek函數(shù)include<stdio.h>intfseek(FILE*stream,longoffset,intfromwhere);類似lseek();ftelllongftell(FILE*stream);fgets函數(shù)#inlcude<stdio.h>Char*fgets(char*s,intsize,FILE*stream);函數(shù)闡明:函數(shù)fgets用來從參數(shù)stream所指的文件內讀入字符并存入到參數(shù)s所指的內存空間,直到出現(xiàn)換行符、讀到文件尾或是已讀了size-1個字符為止,最后會加上NULL作為字符串終了。前往值:勝利前往s指針,錯誤前往NULLfputs函數(shù)fprintf函數(shù)#include<stdio.h>intfprintf(FILE*stream,constchar*format,…);功能:fprintf()函數(shù)根據(jù)指定的format〔格式〕〔格式〕發(fā)送信息〔參數(shù)〕到由stream〔流〕指定的文件。fprintf()只能和printf()一樣任務。Fprintf()的前往值是輸出的字符數(shù),發(fā)送錯誤時前往一個負值。fscanf函數(shù)#include<stdio.h>Intfscanf(FILE*stream,char*format,…);功能:從一個流中執(zhí)行格式化輸入fread函數(shù)#include<stdio.h>Intfread(void*ptr,intsize,intnitems,FILE*stream);功能:從一個流中讀數(shù)據(jù)參數(shù):用于接受數(shù)據(jù)的地址〔指針〕〔ptr〕單個元素的大小〔size〕:單位是字節(jié)而不是位,例如:讀取一個整數(shù)值就是4元素個數(shù)〔nitems〕提供數(shù)據(jù)的文件指針〔stream〕前往值:勝利讀取的元素個數(shù)fwrite函數(shù)#include<stdio.h>Intfwrite(constvo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中學市場營銷專員聘請合同
- 2025年電商培訓項目申請報告
- 2025年個人施工合同規(guī)范文本
- 2025年水分計項目立項申請報告模式
- 2025年公務員勞動合同官方版
- 2025年五金制品購銷合同樣本大全
- 2025年甾體藥物項目規(guī)劃申請報告
- 2025年婚約取消財產恢復協(xié)議標準化范本
- 2025年個人車位共享合同樣本
- 2025官方版土地買賣合同協(xié)議范本
- 2024年《公務員法》相關法律法規(guī)知識考試題庫含完整答案(必刷)
- 手術室氣體的使用
- 數(shù)字證書使用承諾函
- 汽車銷售經理年終總結
- 《社區(qū)康復》課件-第十章 養(yǎng)老社區(qū)康復實踐
- 《社區(qū)康復》課件-第八章 視力障礙患者的社區(qū)康復實踐
- 透析患者的血糖管理
- 2024大型活動標準化執(zhí)行手冊
- 瀝青拌合站講義課件
- 《快遞實務》 教案 項目三 快遞收件業(yè)務操作、項目七 快遞保價與賠償業(yè)務
- 《逆向建模與產品創(chuàng)新設計》課程標準
評論
0/150
提交評論