printf("ok before fgets\n");
while ((fgets(buff, sizeof(buff), fi)) != NULL)
{
printf("ok after");
if(write(connfd,buff,strlen(buff)) != strlen(buff))
{
printf("write() failed\n");
close(connfd);
exit(1);
}
}
這是代碼。代碼在fgets之前打印「ok」,但它從不打印「ok after」。我不知道有什麼問題。fgets()在什麼情況下卡住了?
如果信息不夠,我正在寫網絡通信程序。一旦客戶端程序被終止,這個程序就不會被卡住並打印出幾個「ok after」。它似乎與網絡有關,但fgets()與網絡相關的本地文件又如何?我實際上是試圖發送這個文件到遠程客戶端,但似乎在發送之前發生了這個錯誤。
聊天討論後,人們清楚地看到,問題並不fgets()
可言,但網絡代碼。循環中的診斷消息沒有換行符,因此生成時診斷輸出未顯示。
由於Jonathan Leffler,問題就解決了。 printf(「ok after」);信息沒有出現,因爲沒有打印出新行。所以通過添加一個換行符:printf(在\ n之後確定);我們可以看到「ok after」打印出來。
您是否已成功打開'fi'? 「buff」有多大? – dmckee
@dmckee,如何檢查我是否成功打開它?但它不是NULL。 buff足夠大以容納整個文件。 – yoyosir
在循環的主體之後是否有'printf()'調用?這可能是文件是空的嗎?是否有機會打開某種特殊文件,如FIFO?如果是這樣,你打開它來閱讀和寫作 - 這將永久掛起fgets()。 –