Linux open函數


Linux open函數

open 函數用於打開和創建文件。以下是 open 函數的簡單描述

#include <fcntl.h>
int open(const char *pathname, int oflag, ... );

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

 

對於 open 函數來說,第三個參數(...)僅當創建新文件時才使用,用於指定文件的訪問權限位(access permission bits)。pathname 是待打開/創建文件的路徑名(如 C:/cpp/a.cpp);oflag 用於指定文件的打開/創建模式,這個參數可由以下常量(定義於 fcntl.h)通過邏輯或構成。
O_RDONLY  只讀模式
O_WRONLY  只寫模式
O_RDWR  讀寫模式

 

打開/創建文件時,至少得使用上述三個常量中的一個。以下常量是選用的:

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.sina.com.cn/s/blog_54f82cc201010oow.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM