系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux中文件I/O操作

Linux下文件I/O操作的相關(guān)知識

時間:2014-12-26 15:58:35 作者:qipeng 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20141226/33535.html 手機查看 評論

  Linux文件I/O主要指的是文件的輸入輸出,很多初學(xué)者對文件的I/O不是很了解,Linux文件I/O的操作較多,下面小編就給大家詳細介紹下Linux文件I/O。

 Linux下文件I/O操作的相關(guān)知識

  linux 文件I/O教程(1)

  一,文件描述符

  對內(nèi)核而言,所以打開的文件都通過文件描述符引用。每個進程都有一些與之關(guān)聯(lián)的文件描述符。文件描述符是一個非負整數(shù)。當打開一個現(xiàn)有文件或創(chuàng)建一個新文件時,內(nèi)核向進程返回一個文件描述符。當讀或?qū)懸粋文件時,使用open或creat返回的文件描述符標識該文件,將其作為參數(shù)傳送給read和write。

  一般有三個以及打開的文件描述符,他們是:

  代碼如下:

  0:標準輸入 STDIN_FILENO

  1:標準輸出 STDOUT_FILENO

  2標準錯誤輸出 STDERR_FILENO

  每行后面的符號常量是依從POSIX而定的。

  open函數(shù)

  代碼如下:

  #include 《sys/types.h》

  #include 《sys/stat.h》

  #include 《fcntl.h》

  int open(const char *pathname, int flags);

  int open(const char *pathname, int flags,mode_t mode);

  pathname是要打開或創(chuàng)建文件的名字。

  flag用來定義打開文件所采取的的動作,必須調(diào)用以下模式之一

  O_RDONLY, O_WRONLY, O_RDWR分別代表只讀,只寫,讀寫方式打開。

  open還可以包括以下可選模式的組合

  O_APPEND:把寫入數(shù)據(jù)追加到文件的尾端

  O_CREAT:若文件不存在,則創(chuàng)建它。使用此選項時,需要第三個參數(shù)mode,用其指定該新文件的訪問權(quán)限。

  O_EXCL:如果同時指定了O_CREAT,而文件存在,則會出錯。用此可以測試一個文件是否存在,如果存在,則創(chuàng)建文件,這使測試和創(chuàng)建兩者成為一個原子操作。

  O_TRUNC: 如果此文件存在,而且為只寫或讀寫成功打開,則將其長度截為0。

  open返回的文件描述符一定是最小的未用描述符數(shù)值。這一點被某些應(yīng)用程序用在標準輸入,標準輸出或標準錯誤輸出上。如,一個程序關(guān)閉了自己的標準輸出,然后再次調(diào)用open,文件描述符1就會被調(diào)用,并且標準輸出將被有效的重定向到另一個文件或設(shè)備。

  POSIX規(guī)范還標準化了一個creat調(diào)用,此函數(shù)等效于

  open(pathname,O_WONLY |O_CREAT | O_TRUNC, mode);

  close函數(shù)

  #include 《unistd.h》

  int close(int fd);

  close調(diào)用終止一個文件描述符fd與對應(yīng)文件之間的關(guān)聯(lián)。文件描述符被釋放后并能重新使用。close調(diào)用成功返回0,出錯返回-1.

  關(guān)閉一個文件時會釋放該進程加在文件上的所有記錄鎖。當一個進程終止時,內(nèi)核自動關(guān)閉它所有打開的文件。

  lseek函數(shù)

  每個打開的文件都有一個與其相關(guān)聯(lián)的”當前文件偏移量”。按系統(tǒng)默認情況,當打開一個文件時,除非指定O_APPEND選項,否則該偏移量被設(shè)置為0。lseek可以為一個打開的文件設(shè)置偏移量。

  代碼如下:

  #include 《sys/types.h》

  #include 《unistd.h》

  off_t lseek(int fd, off_t offset, intwhence);

  offset用來指定位置,whence參數(shù)定義該偏移值的用法。whence可取以下值:

  代碼如下:

  SEEK_SET: The offset is set to offset bytes.

  SEEK_CUR: The offset is set to its current locationplus offset bytes.

  SEEK_END: The offset is set to the size of the fileplus offset bytes.

  成功調(diào)用返回從文件頭到文件指針被設(shè)置處的字節(jié)偏移值,失敗返回-1。參數(shù)offset定義在《sys/types.h》中。

  當偏移量大于文件長度時,出現(xiàn)空洞,空洞不占用存儲區(qū)。

  read函數(shù)

  代碼如下:

  #include 《unistd.h》

  ssize_t read(int fd, void *buf, size_tcount);

  將與文件描述符fd關(guān)聯(lián)的文件中讀入count個字符放到buf中。返回讀入的字節(jié)數(shù),它可能小于請求的字節(jié)數(shù)。如果read調(diào)用返回0,就表示未讀入任何數(shù)據(jù),已到達了文件尾。返回-1,就表示出錯。

  write函數(shù)

  代碼如下:

  #include 《unistd.h》

  ssize_t write(int fd, const void *buf,size_t count);

  把緩沖區(qū)buf的前count個字節(jié)寫入與文件描述符fd相關(guān)聯(lián)的文件中。返回實際寫入的字節(jié)數(shù),通常與count值相同;否則表示出錯。出錯的一個常見原因是:磁盤已寫滿,或者超出了一個給定進程的文件長度限制。

  實例:創(chuàng)建一個文件,寫入數(shù)據(jù),移動當前偏移量,在讀數(shù)據(jù)。

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

官方交流群 軟件收錄