gpt4 book ai didi

c - 如何使用 C 缓冲低延迟输入并将其写入磁盘

转载 作者:太空狗 更新时间:2023-10-29 15:35:53 25 4
gpt4 key购买 nike

我需要编写 C 代码(不是 C# 或 C++)以从硬件分析器(通过 100Mb TCP/IP 网络)获取数据并将其写入磁盘。

为什么我说“低延迟”,嗯,硬件分析器有一个 9KB 的内部缓冲区,这是 2ms 的数据存储,之后它遇到缓冲区溢出,我丢失了信息包。

我的应用程序能够在不丢失任何数据包的情况下获取此缓冲区,但我注意到我无法以此速率将数据写入磁盘。

我的代码是这样的:

int main (int argc, char * argv [] )
{
pthread_t th_rx; /* Thread for receiving packets */

outputfile = fopen ("output.log", "wb");

link_open(); // open device link

pthread_create ( &th_rx, NULL, read_packets, 0 );

// running loop
fclose (outputfile);
pthread_exit(NULL);
link_close(); // close device link
return 0;
}

static thread_result read_packets (void *arg)
{
char rxbuf[40960];

while (receiving)
{
bytes_received = read_packet(); //read packet from device buffer
rxbuf = extract_data(bytes_received);
fwrite (rxbuf, 1, bytes_received, outputfile);
}
return thread_return;
}

我在这里需要的是关于如何做到这一点的想法。

  • 1:不要在收到数据包时写入数据包,创建一个通知?缓冲区
  • 2:创建 2 线程循环缓冲区?

关于如何改进我的代码以及我可以做些什么来获得稳定写入的任何想法?

代码示例将不胜感激,因为我感到迷茫:(

谢谢

最佳答案

正如您猜对的那样,您应该做的第一件事是,在从设备读取数据时不要写入磁盘。

  • 创建循环/环形缓冲区(或只是缓冲区列表)来存储从设备读取的数据。此操作将足够快,因此设备内存不会填满。

    • 但是,如果设备读取是非阻塞的,您可能希望决定休眠,这样您的循环就不会占用 CPU。
  • 一个线程从设备中读取数据并放入缓冲区。

  • 在另一个线程中,继续将缓冲区写入磁盘。

关于c - 如何使用 C 缓冲低延迟输入并将其写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com