網路程式設計中read函式和write函式使用規範

2021-09-23 07:41:36 字數 1266 閱讀 1329

位元組流套接字上的read和write函式所表現的行為不同於通常的檔案io。位元組流套接字上呼叫read和write輸入或輸出的位元組數可能比請求的數量少,因為核心中用於套接字的緩衝區是有限制的,需要呼叫者多次呼叫read或write函式。

從描述符fd中讀取n個位元組,存入vptr指標的位置。思路如下:

當剩餘長度大於0的時候就一直讀啊讀

當read的返回值小於0的時候,做異常檢測

當read的返回值等於0的時候,退出迴圈

當read的返回值大於0的時候,拿剩餘長度減read的返回值,拿到新的剩餘長度,讀的入口指標加上read的返回值,進入步1

返回引數n減去剩餘長度,即實際讀取的總長度

/* include readn */

/* read "n" bytes from a descriptor. */

ssize_t 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)

像描述符fd中寫入n個位元組,從vptr位置開始寫。思路如下:

當要寫入的剩餘長度大於0的時候就一直寫啊寫

當write的返回值小於0的時候,做異常檢測

當write的返回值等於0的時候,出錯退出程式

當write的返回值大於0的時候,拿剩餘長度減去write的返回值,拿到新的剩餘長度,寫的入口指標加上write的返回值,進入步驟1

返回引數n的值,即期望寫入的總長度

/* write "n" bytes to a descriptor. */

ssize_t 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)

Linux程式設計 read函式 write函式

目錄 read函式 write函式 典型應用案例 include ssize t read int fd,void buf,size t count size t fread void ptr,size t size,size t nmemb,file stream fd buf count 讀操作...

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 中。以下幾種...