如何在C套接字中将循环写入二进制文件
我有以下代码片段,其中我使用read读取发送的字节,并将数据存储在一个工作正常的缓冲区中。但我如何使它,使我可以继续写在二进制文件后,每次读取。我的假设是,这可能与没有重置缓冲区有关。谢谢你的帮助如何在C套接字中将循环写入二进制文件,c,sockets,tcp,binaryfiles,C,Sockets,Tcp,Binaryfiles,我有以下代码片段,其中我使用read读取发送的字节,并将数据存储在一个工作正常的缓冲区中。但我如何使它,使我可以继续写在二进制文件后,每次读取。我的假设是,这可能与没有重置缓冲区有关。谢谢你的帮助 fp = fopen (filename, "wb"); //create a file while (size > 0){ n = read(socket,buffer,size*sizeof(char)); if (n <=0) ret
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
}
在对fwrite的调用中应该使用n,而不是size。n是您刚刚从套接字读取的量,size是您仍在等待的字节数
fwrite(buffer,sizeof(char),n,fp);
你也不应该乘以sizeof。第二个参数是每个元素的大小,第三个参数是元素的数量;fwrite在内部执行乘法。在您的情况下,它正好起作用,因为sizeofchar始终为1,所以乘法没有改变任何东西。是的,这实际上就是问题所在!非常感谢。如果fopen成功,你应该证明fp。