C一次批量写入多个值



我试图写一堆值的FIFO管道-这工作得很好,但问题是,我有在FIFO管道的另一端的程序,最终读取所有写入之前的值(我假设内核调度不工作在我的青睐)。下面是我的代码(这在一半的情况下运行良好):

write(out_fd, (void *)struct_1, sizeof(struct part_1));
write(out_fd, (void *)struct_2, sizeof(struct part_2));
write(out_fd, (void *)struct_3, sizeof(struct part_3));

然而-我假设的是-内核调度本质上中断了顺序writes之间的某个地方,而在FIFO管道的另一端,另一个程序reads的所有值,因为它们进来,当它不匹配预期的完整(多个)值被写入-一次,我的程序无法正确操作,因为值不匹配预期的格式。

有没有人知道如何批量写入所有write,例如在所有write可以完成之前防止在应用程序之间切换调度。我最初的尝试是malloc足够的空间为所有的值,然后memcpy值对各自的偏移量-匹配每个间隔位置-然后写;然而,这最终会导致堆内存损坏(在free清除所有之后),这只会在进一步的行中出现。

有什么建议吗?谢谢你。

FIFO只是一个字节流;它不提供任何形式的框架。特别是,不能保证read()将读取与write()所写相同的块。修复你的接收器来处理这个

最新更新