【发布时间】:2017-06-25 18:56:15
【问题描述】:
我的递归复制功能适用于文件,但不适用于套接字到文件。我相信这是因为文件是“缓冲的”输入/输出。套接字没有缓冲对吗?那么如何让我的复印机同时处理缓冲/非缓冲输入输出呢?
这是我的复印机功能。
/* file_download() - function to download a file.
*/
size_t file_download(int sockfd, FILE *fout) {
char data[CHUNK_SIZE];
int bytesRead, bytesWritten;
static size_t total_bytes = 0;
bytesRead = read(sockfd, data, sizeof(data));
if(bytesRead > 0)
bytesWritten = fwrite(data, 1, bytesRead, fout); /* Fixed this line */
if(bytesWritten == bytesRead)
return total_bytes;
else
total_bytes += bytesWritten;
file_download(sockfd, fout);
}
它所做的只是在没有缓冲时复制一个字节的数据。但是,它在缓冲输入/输出时会复制整个内容。解决此问题的任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
你为什么要用递归做这样的事情?
-
递归出了什么问题。
-
fwrite(data, bytesRead, 1, fout)应该是fwrite(data, 1, bytesRead, fout)。阅读fwrite文档。 -
好的,谢谢,我也会阅读 fwrite 的文档。