位元組流套接字上的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 中。以下幾種...