#include
int open(const char *pathname, int oflag, ...../*mode_t mode*/); //成功返回檔案描述符,出錯返回-1
oflag(可多選) :
o_rdonly 唯讀
o_wronly 只寫
o_rdwr 讀、寫
mode :
o_creat 檔案不存在則建立
o_excl 如果同是指定o_creat,檔案存在則出錯
o_trunc 如果檔案存在,且只寫或讀寫開啟,長度截短為0
o_noctty 如是pathname終端裝置,則不將該裝置分配為此程序的控制終端
int creat(const char *pathname, mode_t mode); // 成功則返回只寫檔案描述符,出錯-1
等效於 open(pathname, o_wronly | o_creat | o_trunc, mode);
#include
int close(int filedes); //成功0,出錯-1
當程序終止時,核心自動關閉它所有開啟的檔案
off_t lseek(int filedes, off_t offset, int whence); //成功返回新檔案偏移量,出錯-1
offset 與 whence有關
whence :
seek_set 偏移檔案開始處offset個位元組
seek_cur 偏移檔案當前處offset(正負)個位元組
seek_end 偏移檔案未處offset(正負)個位元組
ssize_t read(int filedes, void *buf, size_t nbytes); //成功返回讀到的位元組數,已到檔案結尾返回0,出錯-1
ssize write(int filedes, const void *buf, size_t nbytes); //成功返回已寫位元組數,出錯-1
原子操作
ssize_t pread(int filedes, void *buf, size_t nbytes); //成功返回讀到的位元組數,已到檔案結尾返回0,出錯-1
相當於先呼叫lseek和read
ssize pwrite(int filedes, const void *buf, size_t nbytes); //成功返回已寫位元組數,出錯-1
相當於先呼叫lseek和write
int dup(int oldfd); //成功返回新的檔案描述符,出錯-1
int dup2(int oldfd, int newfd); //成功返回新的檔案描述符,出錯-1
例子 :
#define stdout 1
//標準輸出檔案描述符號
int main(void)
//結果就是msg寫到了檔案中而不是stdout
第三章 檔案I O
include include off t lseek int fileds,off t offset,int whence 成功返回新檔案的位移量,失敗返回 1 返回值可能為負數,所有測試它的返回值時應該確定是否為 1而不是是否為負數。stdin 屬於標準庫處理的輸入流,其宣告為 file 型的,...
第三章 檔案I O
1.檔案描述符 unix 系統 shell 把檔案描述符 0 與程序的標準輸入關聯,檔案描述符 1 與標準輸出關聯,檔案描述符 2 與標準錯誤關聯 上述 0 1 2 使用時應該替換為符號常量 stdin fileno stdout fileno 和 stderr fileno 檔案描述符的變化范文是...
APUE 第三章 檔案I O
linux對檔案操作有open read write close lseek,這些api都是不帶緩衝的函式,相對於c庫,這些可移植的api內部實現是有緩衝區的。int open char pathname,int flag,int read int fd,void buf,size t size i...