我有,我收到使用寫入失敗,錯誤號0
read(socket, char_buf, BUF_SIZE)
數據,然後嘗試將其寫入使用
write(filefd, char_buf, strlen(char_buf))
奇怪的是失敗日誌文件(客戶端服務器的情況寫返回-1),然而errno被設置爲0,並且我可以打印該消息,並且日誌文件描述符起作用(我在此命令之前和之後向它寫入)。
這是怎麼回事?
(Linux內核工作2.4。(作業))
我有,我收到使用寫入失敗,錯誤號0
read(socket, char_buf, BUF_SIZE)
數據,然後嘗試將其寫入使用
write(filefd, char_buf, strlen(char_buf))
奇怪的是失敗日誌文件(客戶端服務器的情況寫返回-1),然而errno被設置爲0,並且我可以打印該消息,並且日誌文件描述符起作用(我在此命令之前和之後向它寫入)。
這是怎麼回事?
(Linux內核工作2.4。(作業))
int reads = read(socket, char_buf, BUF_SIZE);
if (reads != BUF_SIZE)
{
/* something might have gone wrong */
fprintf(stderr, "%s\n", strerror(errno));
}
int writes= = write(filedes, buffer, buffer_size);
if (writes != buffer_size)
{
/* something might have gone wrong */
fprintf(stderr, "%s\n", strerror(errno));
}
我會做這樣的事情總是跟着讀或寫或這樣的調用。
用調試程序遍歷代碼,並確保每條語句都按照您認爲應該執行的操作進行。我敢打賭,你會發現一個早期的錯誤。
此外,read()
的返回值很重要。它會告訴您實際讀取了多少個字節。要成功讀取,可以在1到BUF_SIZE
之間的任何值。
確保某些庫調用(由錯誤處理使用)不會覆蓋errno。嘗試在strace下運行程序。 – Dummy00001 2010-06-16 22:48:49
read()返回什麼?它是否像你期望的那樣工作?當你做一些像'fprintf(stderr,「%s \ n」,strerror(errno));'? – vpit3833 2010-06-16 22:59:24
我相當肯定read()不適用於套接字,只有文件,但是這不會影響寫入。你能顯示代碼來顯示你處理錯誤嗎? – 2010-06-16 22:59:56