C基礎檔案輸入輸出操作之write和read函式

2021-10-10 12:08:25 字數 2461 閱讀 5653

ssize_t write(int handle, void * buf, int len);

handle----檔案控制代碼,主要是通過open函式開啟指定檔案得到的對應指定檔案的索        引

void * buf----表明要寫入指定檔案的資料,如char *型字元陣列

int len----寫入指定檔案的資料大小(資料的長度)

返回寫入指定檔案操作的結果,代表實際寫入資料的大小(長度),返回-1表明讀取失敗

將需要的資料寫入到指定檔案中

#include // 標頭檔案unistd.h提供write函式

#include // 提供open和close檔案函式,用於開啟檔案操作

#include // 提供strlen函式,用作計算字元陣列的實際長度(不包含最後的'\0'字元長度)

#include // 提供o_rdwr和o_creat

#include #define buf_len 20

int main(void)

len = write(fd, buf, strlen(buf));

printf("success write buf into file!!! len = %d\n", len);

close(fd);

return 0;

}

輸出

success write buf into file!!! len = 16
如果在執行上述**後,將buf改為如下

const char buf[buf_len] = "china!!";

之後,再次編譯執行,abc.txt檔案中寫入的資料如下:

china!!china!!!!

也就是說,write函式往檔案中寫入外來資料,只會覆蓋檔案中原始資料的對應外來資料長度的字元,而超出該字元長度的原始資料不會變

這邊需要使用到lseek函式,此函式可以將當前操作的檔案控制代碼的位置指向某乙個特定的位置,如 lseek(fd, 0l, seek_end);表示的是,將當前操作該檔案的位置指向該檔案的結尾處,因此

lseek(fd, 0l, seek_end);

len = write(fd, buf, strlen(buf));

如此,即可實現在檔案的最後追加資料的目的

int read(int handle,void *buf,int len);

int handle ---- 指被讀取資料對應的檔案的檔案控制代碼

void * buf ---- 指讀取出來的資料存入的緩衝區

int len ----計畫讀取資料的長度

返回具體讀取到資料的長度,返回-1表示讀取失敗

讀取指定檔案中的資料

#include // 標頭檔案unistd.h提供read函式

#include // 提供open和close函式,用於開啟檔案操作

#include // 提供strlen函式,用作計算字元陣列的實際長度(不包含最後的'\0'字元長度)

#include // 提供o_rdonly

#include #define buf_len 20

int main(void)

len = read(fd, buf, buf_len);

printf("read buffer : %s, len = %d\n", buf, len);

len = strlen(buf);

printf("length = %d\n", len);

close(fd);

return 0;

}

輸出結果:

read buffer : china!, len = 6

length = 6

在read的例項中,經常會出現一些莫名列印出亂碼的結果,如上述的**,假設abc.txt檔案中的字段為:china!----------

結果列印的是

read buffer : china!----------@g`)�, len = 16

length = 22

可以看到,abc.txt檔案中的字元個數為16個,因此read函式讀取到的是正常的,那麼這個欄位的後續6位亂碼是哪兒來的呢?

經過測試確認,原因是read函式在讀取檔案中的資料的時候,獲取到的資料字串為16位,但是由於這個字元陣列並未有獲取到以'\0'結尾的字元,因此,我們在列印的時候,通過%s列印的字串並未有獲取到結尾識別符號,因此會繼續列印,直到找到'\0'結束符。

因此,上述的列印結果,在不同的機器上顯示的結果是不同的

所以,要列印正確的結果,就需要經過如下的變化

char buf[buf_len + 1];

len = read(fd, buf, buf_len);

buf[len] = '\0';

如此,結果才為正確的

C 中檔案的輸入 輸出操作

1 ifstream類,從istream 類派生而來,該類的物件用來支援檔案的輸入 2 ofstream類,從ostream派生而來,該類的物件用來支援檔案的輸出 3 fstream類 由iostream派生而來,可以支援檔案的輸入輸出 檔案的寫入 int main else ofile close...

C與C 的輸入輸出操作

在printf和scanf中可以使用以 開頭的控制符,指明要輸入或輸出的 資料的型別以及格式。這裡提醒一下,vs在使用scanf時候會說scanf不安全而報錯,有兩種解決方案 1.你就按他說的,乖乖用scanf s就好了 2.你就在標頭檔案中忽視這個報錯 pragma warning disable...

unix的輸入輸出操作

unix的輸入輸出操作 使用的標頭檔案 include include 函式說明 從fd 中最多讀入 count 個資訊到 buf 中。當 fd 的為 stdin fileno 這個巨集定義的時候,表示標準輸入。將最多 count 個資訊從 buf 中寫道 fd 所指向的檔案中,當 fd 的為 st...