Linux 文件IO函數(open/close/read/write/lseek)

文件描述符,非負整數。當爲負數時(通常是-1),代表打開/創建文件出錯。
其中文件描述默認值如下:
/* Standard file descriptors.  */
#define STDIN_FILENO0/* Standard input.  */
#define STDOUT_FILENO1/* Standard output.  */
#define STDERR_FILENO2/* Standard error output.  */

文件IO函數,通常包括 open,read,write,lseek,close這五個函數。
還有creat函數,但是現在用open已經可以完全替代creat。
creat = open  + oflag(O_WRONLY|O_CREAT|O_TRUNC)


int open(const char *pathname , int oflag, mode_t mode);//其中mode_t 是unsigned int類型
打開pathname文件
其中oflag的組成:第一組必選其一,第二組任選[0-n]個。
第一組:文件的打開方式
O_RDONLY    //只讀
O_WRONLY   //只寫
O_RDWR       //讀寫
第二組:其他選項
O_APPEND   //將當前偏移量指向文件末尾,否則初始值爲0
O_CREAT
O_EXCL
O_TRUNC
O_NOCTTY
O_NONBLOCK
O_DSYNC
O_RSYNC
O_SYNC

int close(int filedes);

關閉指定文件


off_t lseek(int filedes, off_t offset, int whence);
修改文件當前指針偏移量,成功返回執行完成後新的文件偏移量,失敗返回-1;
whence取值如下:
SEEK_SET:從文件開始處(偏移量爲0處);
SEEK_CUR:從當前偏移量處;
SEEK_END:從文件結尾處;
因此類似ftell函數的功能(獲取當前偏移量)可以用lseek(fd, 0, SEEK_CUR);實現。

ssize_t read (int fd, void *buf, size_t nbytes);
讀取描述符fd所指向文件,讀取到的內容存放到buf中,讀取nbytes字節。


ssize_t write (int fd, const void *buf, size_t nbytes);
向描述符fd所指向文件寫入從buf中讀取的數據,共寫入nbytes字節。


返回值彙總:
open,成功返回非負數文件描述符,失敗返回-1;
close,成功返回0,失敗返回-1;
lseek,成功返回執行完成後新的文件偏移量,失敗返回-1;
read,成功返回讀取到的字節數,失敗返回-1;
write,成功返回成功寫入字節數,失敗返回-1;

其他:
關閉一個文件時,還會釋放該進程加在該文件上的所有記錄鎖。
當一個進程終止時,內核自動關閉它所有打開的文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章