linux的open函數

來源:互聯網
上載者:User

open 函數用於開啟和建立檔案。以下是 open 函數的簡單描述

        #include <fcntl.h>       //千萬記得加這個標頭檔哦

        int open(const char *pathname, int oflag, ... /* mode_t mode */);

傳回值:成功則返迴文件描述符,否則返回 -1

其中,第三個參數(...)僅當建立新檔案時才使用,用於指定檔案的存取權限位(access permission bits)。

pathname 是待開啟/建立檔案的路徑名(如 /home/gouwa/);

oflag     用於指定檔案的開啟/建立模式,這個參數可由以下常量(定義於 fcntl.h)通過邏輯或構成:
1> O_RDONLY      唯讀模式
2> O_WRONLY     唯寫模式
3> O_RDWR         讀寫入模式
開啟/建立檔案時,至少得使用上述三個常量中的一個,而且三種旗標是互斥的,也就是不可同時使用,但可與下列的旗標利用 OR(|)運算子組合。以下常量是選用的 :
O_CREAT        如果指定檔案不存在,則建立這個檔案
O_APPEND      每次寫操作都寫入檔案的末尾O_CREAT
O_EXCL           如果要建立的檔案已存在,則返回 -1,並且修改 errno 的值
O_TRUNC        如果檔案存在,並且以唯寫/讀寫方式開啟,則清空檔案全部內容
O_NOCTTY      如果路徑名指向終端裝置,不要把這個裝置用作控制終端。
O_NONBLOCK     如果路徑名指向 FIFO/塊檔案/字元檔案,則把檔案的開啟和後繼 I/O設定為非阻塞模式(nonblocking mode)

以下三個常量同樣是選用的,它們用於同步輸入輸出:
O_DSYNC     等待物理 I/O 結束後再 write。在不影響讀取新寫入的資料的前提下,不等待檔案屬性更新。 O_RSYNC     read 等待所有寫入同一地區的寫操作完成後再進行
O_SYNC        等待物理 I/O 結束後再 write,包括更新檔案屬性的 I/O

open 返回的檔案描述符一定是最小的未被使用的描述符。

        如果 NAME_MAX(檔案名稱最大長度,不包括'\0')是14,而我們想在目前的目錄下建立檔案名稱長度超過 14
位元組的檔案,早期的 System V 系統(如 SVR2)會截斷超出部分,只保留前 14 個位元組;而由 BSD
衍生的(BSD-derived)系統會返回錯誤資訊,並且把 errno 置為 ENAMETOOLONG。

POSIX.1 引入常量 _POSIX_NO_TRUNC 用於決定是否截斷長檔名/長路徑名。如果POSIX_NO_TRUNC 設定為禁止截斷,並且路徑名長度超過 PATH_MAX(包括 '\0'),或者組成路徑名的任意檔案名稱長度超過NAME_MAX,則返回錯誤資訊,並且把 errno 置為 ENAMETOOLONG。

參考文章:http://blog.chinaunix.net/u3/94916/showart_1908438.html

From:http://hi.baidu.com/igouwa/blog/item/d755e32dd12930e58b1399ec.html/cmtid/297563cbf4c6ee4af21fe7c6

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.