我有以下代码片段,其中我使用read()
读取发送的字节,并将数据存储在工作良好的缓冲区中。但是我该怎么做,以便每次读取后都可以继续以二进制文件形式写入。我的假设是它可能与不重置缓冲区有关。感谢您的帮助!
fp = fopen (filename, "wb"); //create a file
while (size > 0){
n = read(socket,buffer,size*sizeof(char));
if (n <=0)
return -1;
p += n;
size -= n;
fwrite(buffer,sizeof(char),size*sizeof(char),fp); //write the content to the file
}
您应在对n
的调用中使用fwrite()
,而不是size
。 n
是您刚刚从套接字读取的数量,size
是您仍在等待多少字节。
fwrite(buffer,sizeof(char),n,fp);
您也不应该在那里乘以sizeof
。第二个参数是每个元素的大小,第三个参数是元素的数量; fwrite()
在内部执行乘法。由于sizeof(char)
始终为1
,因此碰巧可以正常工作,因此乘法没有任何变化。