write函式定義如下:
#include
ssize_t write(int filedes, void *buf, size_t nbytes);
// 返回:若成功則返回寫入的位元組數,若出錯則返回-1
// filedes:檔案描述符
// buf:待寫入資料快取區
// nbytes:要寫入的位元組數
同樣,為了保證寫入資料的完整性,在《unix網路程式設計 卷1》中,作者將該函式進行了封裝,具體程式如下:
ssize_t /* write "n" bytes to a descriptor. */
writen(int fd, const
void *vptr, size_t n)
nleft -= nwritten;
ptr += nwritten;
}return(n);
}/* end writen */
void
writen(int fd, void *ptr, size_t nbytes)
read函式定義如下:
#include
ssize_t read(int filedes, void *buf, size_t nbytes);
// 返回:若成功則返回讀到的位元組數,若已到檔案末尾則返回0,若出錯則返回-1
// filedes:檔案描述符
// buf:讀取資料快取區
// nbytes:要讀取的位元組數
有幾種情況可使實際讀到的位元組數少於要求讀的位元組數:
1)讀普通檔案時,在讀到要求位元組數之前就已經達到了檔案末端。例如,若在到達檔案末端之前還有30個位元組,而要求讀100個位元組,則read返回30,下一次再呼叫read時,它將返回0(檔案末端)。
2)當從終端裝置讀時,通常一次最多讀一行。
3)當從網路讀時,網路中的快取機構可能造成返回值小於所要求讀的字結束。
4)當從管道或fifo讀時,如若管道包含的位元組少於所需的數量,那麼read將只返回實際可用的位元組數。
5)當從某些面向記錄的裝置(例如磁帶)讀時,一次最多返回乙個記錄。
6)當某乙個訊號造成中斷,而已經讀取了部分資料。
在《unix網路程式設計 卷1》中,作者將該函式進行了封裝,以確保資料讀取的完整,具體程式如下:
ssize_t /* read "n" bytes from a descriptor. */
readn(int fd, void *vptr, size_t n)
else
if (nread == 0)
break; /* eof */
nleft -= nread;
ptr += nread;
}return(n - nleft); /* return >= 0 */
}/* end readn */
ssize_t
readn(int fd, void *ptr, size_t nbytes)
參考: read 函式和 write 函式
read 函式和 write 函式 最近開始從事搜尋引擎的工作,所以又重新開始了c c 的旅程,時隔4年 不得不複習一下c c 其中的內容,以下內容有網上別的朋友發表的,也有我自己總結的.1.read include ssize t read int filedes,void buf,size t ...
read 函式和 write 函式
1.read include unistd.h ssize t read int filedes,void buf,size t nbytes 返回值 讀取到的位元組數 0 讀到 eof 1 出錯 read 函式從 filedes 指定的已開啟檔案中讀取 nbytes 位元組到 buf 中。以下幾種...
Python中read和write用法
讀操作有read readline和readlines函式 看示例 f open 1.txt r data f.read 讀出所有的內容 print data f.close 結果 i m ok i m fine hello world f open 1.txt r data f.readline ...