第三章 檔案I O

2021-06-03 16:46:35 字數 1458 閱讀 7636

#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...