我想在C中編寫小文件傳輸程序(我正在使用Linux)。 我對套接字編程相當陌生,但我已經設法編寫一點服務器和客戶端程序。獲取套接字讀取操作的進度
我的問題:
如果我有這樣的事情:
int read_bytes = read(socket_id, buffer, 4096);
雖然從插座上讀書,我怎麼能得到閱讀的進展如何? 例如,我想每隔100ms顯示有多少個字節已經被傳送到目前爲止 。我很確定我必須在這裏使用線程或其他異步函數。 有沒有功能,我可以得到number of bytes read
和number of bytes to read
?
更新1: 積累閱讀()
int total_read_bytes=0, read_bytes;
char buffer[4096];
do {
read_bytes = read(socket_id, buffer, 4096);
total_read_bytes += read_bytes;
} while(read_bytes > 0); /* Read to end or read failed */
這不是非常非常低效? (例如傳輸一個1MiB文件)
謝謝
您需要計算每次調用讀取多個字節到read/reicv並報告總預期值 – quantdev
您可以使用較小的緩衝區大小對讀取進行細化。這將根據情況而變得高效或低效。 – Krumia
你可以跳過使用線程,如果你使套接字非阻塞 – Asaf