UNIX系統文件I/O總結

    UNIX 系統中文件I/O的五個主要函數是:open(),read(),write(),close(),ioctl()。

    open函數原型:

#include<fcntl.h>

int open(const char *pathname, int oflag, ...mode_t mode);

對於open函數而言,僅當創建新文件時才使用第三個參數。pathname是要打開或創建的文件名,oflag參數用來說明此函數的多個選項,如O_RDONLY、O_WRONLY、O_RDWR等分別代表只讀、只寫、可讀可寫等,可用or構成或運算。若執行成功,函數返回打開或創建的文件描述符,否則返回-1,並置全局變量errno用來說明失敗原因。

    read函數原型:

#include<unistd.h>

ssize_t read(int fields, void *buf, size_t nbytes);

若執行成功返回讀到的字節數,若已到文件末尾則返回0,若出錯則返回-1,並置errno值。返回的字節數有可能不等於nbytes,但並不代表讀取出錯。

    write函數原型:

#include<unistd.h>

ssize_t write(int fields, const void *buffer, size_t nbytes);

若執行成功返回寫的字節數,若出錯則返回-1.返回的字節數通常等於nbytes,否則表示出錯。

    lseek函數原型:

#include<unistd.h>

off_t lseek(int fields, off_t offset, int where);

lseek函數用於顯式的爲打開的文件設置其偏移值,where有三個選項,SEEK_SET、SEEK_CUR、SEEK_END,分別表示從文件開始處計算、從當前值開始計算、從文件末尾開始計算。若成功則返回新的文件偏移量,出錯則返回-1.

    close函數原型:

#include<unist.h>

int close(int fields);
執行成功返回0,出錯返回-1。

    ioctl函數原型:

#include<unistd.h>

int ioctl(int fields, int cmd, ...);

ioctl函數對描述符引用的對象執行cmd參數值哦i給出的操作,根據特定設備的不同,可能會有第三個參數。

fsat、stat和lstat系統調用

#include<unistd.h>
#include<sys/stat>
#include<sys/types.h>

int fstat(int fields, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);

這三個函數都返回與打開文件描述符相關的文件的狀態信息,該信息會被存儲到struct stat *buf中。fstat通過文件描述符,而後兩個函數通過文件名,效果相同。但是當文件是一個符號鏈接時,lstat返回的是該符號鏈接本身的信息,而stat返回的是該鏈接指向的文件的信息。

dup和dup2系統調用

#include<unistd.h>

int dup(int fildes);
int dup2(int fildes, int newfildes);
這兩個函數用於複製文件描述符,使我們可以通過兩個或多個文件描述符去訪問文件。dup複製文件描述符並返回一個新的描述符,而dup2則指定一個新的文件描述符來將一個文件描述符複製爲另一個。



發佈了15 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章