3.14 文件I/O_fcntl函數

    fcntl函數可以改變已打開的文件的性質。

  • #include <fcntl.h>
  • int fcntl(it filedes, int cmd, .../* int arg */);

返回值:成功則依賴於cmd,出錯返回-1

    fcntl函數有5中功能:

  • 複製一個現有的描述符(cmd=F_DUPFD)。
  • 獲得/設置文件描述符標記(cmd=FD_GETFD或F_SETFD)。
  • 獲得/設置文件狀態標誌(cmd=FD_GETFL或F_SETFL)。
  • 獲得/設置異步I/O所有權(cmd=FD_GETOWN或F_SETOWN)。
  • 獲得/設置記錄鎖(cmd=FD_GETLK、F_SETLK或F_SETLKW)。
  • F_DUPFD: 複製文件描述符filedes。新文件描述符作爲函數值返回。它是尚未打開的各描述符中大於或等於第三個參數值中各值的最小值。新描述符與filedes共享同一個文件表項。但是,新描述符有它自己的一套文件描述符標誌,其FD_CLOEXEC文件描述符標誌被清除。
  • F_SETFD: 對於filedes設置文件描述符標誌。新標誌按第三個參數設置。
  • F_GETFL: 三個訪問方式標誌(O_RDONLY、O_WRONLY以及O_RDWR)並不各佔1位。因此首先必須用屏蔽字O_ACCMODE取得訪問模式位,然後將結果與這三種值中的任一種作比較。
  • F_GETOWN: 取當前接收SIGIO和SIGURG信號的進程ID或進程組ID。
  • F_SETOWN: 設置接收SIGIO和SIGURG信號的進程ID或進程組ID。正的arg指定一個進程ID,負的arg表示等於arg絕對值的一個進程組ID。

    下列四個命令有特定返回值:F_DUPFD、F_GETFD、F_GETFL以及F_GETOWN。第一個返回新的文件描述符,接下來的兩個返回相應標誌,最後一個返回一個正的進程ID或負的進程組ID。

    在修改文件描述符標誌或文件狀態標誌時必須謹慎,先要取得現有的標誌值,然後根據需要修改它,最後設置新標誌值。不能只是執行F_SETFD或F_SETFL命令,這樣會關閉以前設置的標誌位。

    將fsync和fdatasync函數與O_SYNC標誌相比較,fsync和fdatasync在我們需要時更新文件內容,O_SYNC標誌則在我們每次寫至文件時更新文件內容。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章