Unix環境高階程式設計 一 檔案I O

2021-09-07 16:58:48 字數 2155 閱讀 9857

unix系統中大多數檔案i/o只需用到五個函式:open、read、write、lseek、close。本章說介紹的i/o是不帶緩衝的,即:每個read和write都呼叫核心中的乙個系統呼叫。不是iso c的組成部分。對於核心而言,所有開啟的檔案都通過檔案描述符引用。

在中定義三個標準的檔案描述符:

stdin_fileno   標準輸入

stdout_fileno  標準輸出

stderr_fileno  標準出錯輸出

具體函式描述:在標頭檔案下

int open(const char *path, int oflag, ... );  //開啟或者建立乙個檔案

int creat(const char *path, mode_t mode); //建立乙個檔案

int close(int fildes);//關閉乙個開啟的檔案

off_t lseek(int fildes, off_t offset, int whence);  //為開啟的檔案設定偏移量

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fildes, const void *buf, size_t nbyte);

1 #include 2 #include 3 #include 

4 #include 5 #include 6 #include 7 8 intmain() 9 21 printf("open file successfully.\n"); 22 printf("input a string: "); 23 gets(buf); 24 //寫入檔案 25 write(fd,buf,strlen(buf)); 26 close(fd); 27 printf("open file to read.\n"); 28 if((fd = open(filename, o_rdonly)) == -1) 29 33 //從檔案中讀取 34 read(fd,buf,100); 35 printf("read from file is: %s\n",buf); 36 close(fd); 37 return 0; 38 }

程式測試結果如下:

複製乙個現有的檔案描述符函式

int dup(int fildes);

int dup2(int fildes, int fildes2);

dup返回的新檔案描述符是當前可用檔案描述符中最小值,dup2則是用fildes2引數指定新檔案描述符的數值,若fildes2開啟則關閉,若fildes等於fildes2則不關閉,返回fildes2.在cgi程式用dup2將檔案描述符重新定位到標準輸入和標準輸出。即:dup2(fd,stdout_fileno)或dup2(fd,stdin_fileno)。

改變已開啟檔案的性質函式:

int fcntl(int fd, int cmd, ... /* arg */ );

函式功能:

複製乙個現有的描述符(cmd=f_dupfd)

獲得或設定檔案描述符(cmd=f_getfd|f_setfd)

獲得或設定檔案狀態標誌(cmd=f_getfl|f_setfl)

獲得或設定非同步i/o所有權(cmd=f_getown|f_setown)

獲得或設定記錄鎖(cmd=f_getlk|f_setlk、f_setlkw)

可以用fcntl函式設定檔案狀態,常用設定套接字描述符為非阻塞o_nonblock

下面寫個程式完成列印出指定檔案描述符的檔案狀態標誌。程式如下:

1 #include 2 #include 

程式測試結果如下:

Unix環境高階程式設計學習筆記(二) 檔案IO

談linux下的檔案操作,我們首先需要了解程序表,這是被每個程序所維護的一張開啟檔案的對映表,參照下圖。索引值是檔案描述符,與之相關聯的節點包含fd flag以及乙個指向file table的指標。其中fd flag主要包含close on exec標記,該標記的作用在於當開闢其他程序呼叫exec ...

unix環境高階程式設計 檔案i o

一 檔案描述符 對於核心,通過檔案描述符來管理檔案。什麼是檔案描述符?在unix中,用open或者create建立幾個檔案時候,核心向程序返回乙個整數,用來記錄此檔案。以後對檔案進行操作的時候,就用此檔案描述符做引用。二 open函式 open函式用於建立乙個檔案,函式返回檔案描述符。cpp vie...

unix環境高階程式設計 4 18 檔案時間

在unix系統中,每個檔案要保持三個時間字段,他們的意義分別如下 字段說明 例子ls選項 st atime st mtime st time 檔案資料的最後訪問時間 檔案按資料的最後修改時間 i節點狀體的最後更改時間 read write chmo,chown u預設 c注意st mtime 指的是...