gpt4 book ai didi

C - 多个 fork 子项的命名管道

转载 作者:行者123 更新时间:2023-12-01 12:40:00 24 4
gpt4 key购买 nike

如果你有多个通过fork()创建的children,并且与parent通信的方式是“命名管道”,你是否需要多个命名管道?每个 child 一个?或者您可以制作一个并让家长阅读吗?

基本上,您还有什么需要做的吗?我知道如果几个 child 同时写入同一个命名管道,可能会导致从一个 child 那里读取整条消息时出现问题。有没有办法确保写入是原子的?

最佳答案

一个管道可以有多个写入器。但是,正如您所说,通信是在 fork() 子级和父级之间进行的,您可能根本不需要命名管道。命名管道在文件系统中可见,可用于非父/子进程之间的通信。

关于原子性:如果你写的小于PIPE_BUF(不少于512字节,Linux上4096字节,来自limits.h),那么这个写是原子的,不会有来自不同写者的消息混合。如果您写入的内容超过 PIPE_BUF,则不要依赖原子写入。

PIPE(7) manual page说:

PIPE_BUF

  POSIX.1-2001 says that write(2)s of less than PIPE_BUF bytes must be
atomic: the output data is written to the pipe as a contiguous
sequence. Writes of more than PIPE_BUF bytes may be nonatomic: the
kernel may interleave the data with data written by other processes.
POSIX.1-2001 requires PIPE_BUF to be at least 512 bytes. (On Linux,
PIPE_BUF is 4096 bytes.)

关于C - 多个 fork 子项的命名管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772728/

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