各位看官們,大家好,上一回中咱們說的是基於文件描述符進行文件操作的例子,這一回咱們繼續說該例子。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們在上一回中介紹了文件描述符,今天我們將和大家一起看看如何通過文件操作符來操作文件。
文件操作主要有以下三個 步驟:
1.打開文件 2.讀/寫文件 3.關閉文件我稱之為文件操作三步曲:打開,操作和關閉。在Linux系統中,這三步曲是借助系統調用實現的。接下來我們介紹與文件操作相關的系統調用。
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);(新版本的open)
該函數用來打開文件或者創建一個新文件; 該函數的第一個參數是文件名,該文件名表示要打開的文件或者創建的文件; 該函數的第二個參數是打開文件的方式,詳見下面的說明; 該函數的第三個參數是創建新文件後,新文件擁有的權限; 該函數運行成功時返回一個文件描述符;運行失敗時返回-1,並且設置設置全局變量error。
第二個參數的值可以是以下類型中的任意一個:
O_RDONLY(只讀的方式打開文件), O_WRONLY(只寫的方式打開文件), O_RDWR(讀和寫的方式打開文件),另外,該參數的值還可以是 O_APPEND(在文件尾添加數據)和O_CREAT(創建新文件)。這兩個值可以和上面三個值進行或操作,這樣對文件進行操作時會包含兩個值的意義。例如
open("test",O_WRONLY | O_CREAT,S_IRWXU )
會創建一個叫test的文件,並且可以對該文件進行寫操作。
這裡有兩個open函數,我們用哪個呢?看官莫急,通常使用第一個open函數來打開文件,如果創建文件時那麼就需要使用第二個open函數。這時也會用到第三個參數,該參數的值可以是 S_IRUSR類型的值,而且這些數據可以進行或操作。比如
S_IRWXU | S_IRWXG | S_IXOTH
ssize_t read(int fd, void *buf, size_t count);
該函數用來從文件中讀取數據; 該函數的第一個參數是文件描述符,它會讀取與該文件描述符相對應的文件中的數據; 該函數的第二個參數是緩沖區,它會把讀取到的數據存放到該緩沖區中; 該函數的第三個參數是每次讀取的字節數量; 該函數運行成功時返回讀取到的字節數量,如果為0說明已經到了文件末尾。如果運行失敗返回-1.並且設置全局變量error
ssize_t write(int fd, const void *buf, size_t count);
該函數用來向文件中寫入數據; 該函數的第一個參數是文件描述符,它會向與該文件描述符相對應的文件中的寫入數據; 該函數的第二個參數是緩沖區,它會把緩沖區中的數據寫入到文件中; 該函數的第三個參數是每次寫入的字節數量; 該函數運行成功時返回寫入到文件中的字節數量,如果為0說明沒有寫入數據。如果運行失敗返回-1.並且設置全局變量error。
int close(int fd);
該函數用來關閉文件; 該函數的參數表示文件描述符,它會把與該文件描述符相關聯的文件關閉掉,或者說釋放該文件描述符。 該函數運行成功時返回0,運行失敗時返回-1.
各位看官,關於文件操作:基於文件描述符的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。