c - 在 popen 上使用 fread 很慢
问题描述
我有一个收集日志文件并在套接字上写入的应用程序(类似于用户通过 Web 浏览器下载文件)。
以下是执行此操作的核心逻辑。
FILE *fp = NULL;
char au1Data[1500];
fp = popen("script.sh", "r");
while ((i4Count = fread(au1Data, 1, sizeof(au1Data), fp)) > 0)
{
for (size_to_send = i4Count; size_to_send > 0; )
{
sent = write(web_socket_fd,au1Data,i4Count);
size_to_send -= sent;
}
}
script.sh 负责收集日志并准备文件的 tar。
使用 fread 从 popen 读取信息。此信息被写入套接字。
我能够实现该功能。但是读取操作似乎很慢。
为了完成这个过程,下载一个 9MB 的文件大约需要 20 分钟。
我很困惑是什么导致了如此多的延迟。
解决方案
推荐阅读
- java - 使用 SHA-384 签署 ECDSA 时出现“标量不在区间 [1, n - 1] 内”异常
- node.js - 如何在 Node JS 中调试 ssl 日志
- reactjs - 创建反应应用程序 - 如何将 pdf.worker.js 文件从 pdfjs-dist/build 复制到项目的输出文件夹?
- google-apps-script - Googel Apps 脚本测试部署 - “很抱歉,发生服务器错误。请稍候,然后重试。”
- php - 如何在输入类型按钮中有日期选择器值?
- asp.net-core - 本地化适用于数据注释和视图,但不适用于身份页面 ASP.NET Core MVC 3.1
- java - 有没有办法让它更快更通用地做这个问题?
- html - 使用 URL 插入数据
- json - 解析 JSON 返回 EOF
- spring - 如何在不编写主要方法的情况下自启动 Spring 应用程序?