c - 如何在循环中写入 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
}
解决方案
您应该n
在对 的调用中使用fwrite()
,而不是size
. n
是您刚刚从套接字读取的数量,size
是您仍在等待的字节数。
fwrite(buffer,sizeof(char),n,fp);
你也不应该乘以sizeof
那里。第二个参数是每个元素的大小,第三个参数是元素个数;fwrite()
在内部执行乘法。它恰好适用于您的情况,因为sizeof(char)
is always 1
,所以乘法没有改变任何东西。
推荐阅读
- excel - 我需要帮助用这个旧宏的新函数替换 Application.Find
- javascript - 应用程序中谷歌表格的错误日期格式
- mysql - 寻找 Woocommerce 批量定价数量范围数据库表
- css - Why LESS css width results in MORE visual width?
- python - 如何在列中填充句点?
- java - LinkedIn API with /v2/clientAwareMemberHandles?q=handleString
- powershell - Cannot find an overload for “ExecuteQuerySegmentedAsync” and the argument count: “2” in Get-AzTableRow
- node.js - 使用 npm 请求 POST 请求
- exception - RISC-V 规范如何管理挂起的异常?
- unity3d - 如何统一重复碰撞?