UDP通訊中資料不能寫入檔案的問題

2021-06-29 06:53:05 字數 1213 閱讀 3278

寫了乙個簡單的udp通訊程式,客戶端讀檔案,把資料寫到伺服器端;服務端讀取資料,寫到另乙個檔案裡面。

伺服器端**是這樣的:

//#include	"unp.h"

#include #include #include #include #include #include #include int

main(int argc, char **argv)

count += nwrite;

printf("write: %d bytes\n", count);

fsync(fileno(fp));

} else

}fclose(fp);

return 0;

}

客戶端**:

//#include	"unp.h"

#include #include #include #include #include #include #include #include #include int

main(int argc, char **argv)

count += nsend;

printf("write: %d bytes\n", count);

} //setsockopt(sockfd, ipproto_udp, udp_cork, &disable_cork, sizeof(disable_cork));

fclose(fp);

exit(0);

}

測試的時候,發現乙個問題,服務端已經讀取了所有資料,並且每次 fwrite都是成功的,但是新檔案總是比原始檔案小。

所以懷疑有資料在buffer裡,沒有寫入到檔案。

所以在**中加了 fsync().

重新編譯,測試,還是有同樣的問題。

後來在csdn論壇上問了一下,有高手建議用fflush()試試。

經過驗證,用了fflush()就沒有問題了。

看來,fflush()和 fsync()還是不一樣的。

fflush()能夠把file stream的 buffer寫入到硬碟,但是 fsync就不行。

usefsync()with not streaming files (integer file descriptors)

usefflush()with file streams.

關於本機IIS在NTFS下不能寫入資料庫的解決方法

關於本機iis在ntfs下不能寫入資料庫的解決方法 隨便開啟個資料夾 工具選單 資料夾選項 檢視 去掉 使用簡單共享 的選擇 確定 關閉資料夾 重新整理下 找到iis根目錄 檢視根目錄屬性 安全 設定目錄讀寫許可權 選中users名,並把下面的users許可權設定為完全控制即可!原因 由於ntfs檔...

Access資料庫不能寫不能更新的解決方法

access資料庫不能寫,造成這種問題的原因是web共享資料夾在ntfs分割槽裡,而iusr internet來賓帳戶 沒有足夠許可權。解決方法 1.在資料夾選項裡,將 使用簡單檔案共享 前的對勾去掉。2.在web共享資料夾屬性裡面的安全選項卡中點新增。3.在選擇使用者或組的對話方塊中點高階。4.點...

串列埠通訊中垃圾資料的處理

在雙機串列埠通訊中,開關機 串列埠開閉 期間傳送方有時候會發一些無效的垃圾資料,同時因為有的協議解析只有接收到一定數量才能解析。這就會出現乙個現象 如果開頭的資料是錯誤的,又沒有及時丟棄,後面正確的資料接著位置儲存,最終造成解析失敗。現象就是有時候資料互動正確,有時候錯誤 冷啟動第一次出現錯誤的機率...