開啟檔案open()函式的使用方法詳解
標頭檔案:#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 指向欲開啟的檔案路徑字串. 下列是引數flags 所能使用的旗標: O_RDONLY 以只讀方式開啟檔案 O_WRONLY 以只寫方式開啟檔案 O_RDWR 以可讀寫方式開啟檔案. 上述三種旗標是互斥的, 也就是不可同時使用, 但可與下列的旗標利用OR(|)運算子組合. O_CREAT 若欲開啟的檔案不存在則自動建立該檔案. O_EXCL 如果O_CREAT 也被設定, 此指令會去檢查檔案是否存在. 檔案若不存在則建立該檔案, 否則將導致開啟檔案錯誤. 此外, 若O_CREAT 與O_EXCL 同時設定, 並且欲開啟的檔案為符號連線, 則會開啟檔案失敗. O_NOCTTY 如果欲開啟的檔案為終端機裝置時, 則不會將該終端機當成程序控制終端機. O_TRUNC 若檔案存在並且以可寫的方式開啟時, 此旗標會令檔案長度清為0, 而原來存於該檔案的資料也會消失. O_APPEND 當讀寫檔案時會從檔案尾開始移動, 也就是所寫入的資料會以附加的方式加入到檔案後面. O_NONBLOCK 以不可阻斷的方式開啟檔案, 也就是無論有無資料讀取或等待, 都會立即返回程序之中. O_NDELAY 同O_NONBLOCK. O_SYNC 以同步的方式開啟檔案. O_NOFOLLOW 如果引數pathname 所指的檔案為一符號連線, 則會令開啟檔案失敗. O_DIRECTORY 如果引數pathname 所指的檔案並非為一目錄, 則會令開啟檔案失敗。注:此為Linux2. 2 以後特有的旗標, 以避免一些系統安全問題. 引數mode 則有下列數種組合, 只有在建立新檔案時才會生效, 此外真正建檔案時的許可權會受到umask 值所影響, 因此該檔案許可權應該為 (mode-umaks).
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
int fd, size;
char s[] = "Linux Programmer!n", buffer[80];
fd = open("/tmp/temp", O_WRONLY|O_CREAT);
write(fd, s, sizeof(s));
close(fd);
fd = open("/tmp/temp", O_RDONLY);
size = read(fd, buffer, sizeof(buffer));
close(fd);
printf("%s", buffer);
}
執行 Linux Programmer!