首页 > 解决方案 > 如何在循环中写入 C 套接字中的二进制文件

问题描述

我有以下片段,其中我使用读取发送的字节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

}

标签: csocketstcpbinaryfiles

解决方案


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

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

你也不应该乘以sizeof那里。第二个参数是每个元素的大小,第三个参数是元素个数;fwrite()在内部执行乘法。它恰好适用于您的情况,因为sizeof(char)is always 1,所以乘法没有改变任何东西。


推荐阅读