2010-06-16 79 views
2

我有,我收到使用寫入失敗,錯誤號0

read(socket, char_buf, BUF_SIZE) 

數據,然後嘗試將其寫入使用

write(filefd, char_buf, strlen(char_buf)) 

奇怪的是失敗日誌文件(客戶端服務器的情況寫返回-1),然而errno被設置爲0,並且我可以打印該消息,並且日誌文件描述符起作用(我在此命令之前和之後向它寫入)。

這是怎麼回事?

(Linux內核工作2.4。(作業))

+0

確保某些庫調用(由錯誤處理使用)不會覆蓋errno。嘗試在strace下運行程序。 – Dummy00001 2010-06-16 22:48:49

+0

read()返回什麼?它是否像你期望的那樣工作?當你做一些像'fprintf(stderr,「%s \ n」,strerror(errno));'? – vpit3833 2010-06-16 22:59:24

+0

我相當肯定read()不適用於套接字,只有文件,但是這不會影響寫入。你能顯示代碼來顯示你處理錯誤嗎? – 2010-06-16 22:59:56

回答

2
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)); 
} 

我會做這樣的事情總是跟着讀或寫或這樣的調用。

0

你檢查你的閱讀狀態()?它可能有錯誤,導致char_buf的長度爲零。

+0

我在閱讀後立即打印它,因此它不能爲0。 – EpsilonVector 2010-06-16 22:54:07

0

用調試程序遍歷代碼,並確保每條語句都按照您認爲應該執行的操作進行。我敢打賭,你會發現一個早期的錯誤。

此外,read()的返回值很重要。它會告訴您實際讀取了多少個字節。要成功讀取,可以在1到BUF_SIZE之間的任何值。

相關問題