如何在循环中将其写入C套接字中的二进制文件

问题描述 投票:0回答:1

我有以下代码片段,其中我使用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

}
c sockets tcp binaryfiles
1个回答
1
投票

您应在对n的调用中使用fwrite(),而不是sizen是您刚刚从套接字读取的数量,size是您仍在等待多少字节。

fwrite(buffer,sizeof(char),n,fp);

您也不应该在那里乘以sizeof。第二个参数是每个元素的大小,第三个参数是元素的数量; fwrite()在内部执行乘法。由于sizeof(char)始终为1,因此碰巧可以正常工作,因此乘法没有任何变化。

© www.soinside.com 2019 - 2024. All rights reserved.