【问题标题】:pipe() function in linuxlinux中的pipe()函数
【发布时间】:2016-04-15 16:11:33
【问题描述】:

我的问题是关于 linux 中的 pipe() 函数:http://linux.die.net/man/2/pipe

我的问题是:“linux 中只有一个管道吗?”。我的意思是,如果我有多个进程写入管道,它是同一个管道,这意味着一旦我从管道读取数据,我可能会在同一个 read() 操作中从不同进程获取数据?

【问题讨论】:

  • 这是一个非常困惑的问题。为什么不包括让你首先想到这一点的东西?您是否有一个程序可以向您显示来自不同进程的数据?

标签: linux pipe


【解决方案1】:

没有。 pipe() 函数创建一个有两端的新管道。

可能发生的情况是文件描述符可以复制。 dupdup2 函数可以做到这一点。 fork 也是。

如果您以某种方式有两个程序具有重复的管道文件描述符,那么是的,它们都会显示在管道的输出中。

它与显示在前台和后台运行的程序的输出的终端窗口相同。

【讨论】:

  • 所以你的意思是在 fork() 中创建的子进程继承了管道的文件描述符,所以它实际上是完全相同的数据?
  • @CrazySynthax:就像从命令行启动新程序时程序如何从 shell 继承终端的文件描述符一样。是的。
【解决方案2】:

不仅要阅读pipe(2),还要阅读pipe(7),最重要的是Advanced Linux Programming

我的意思是,如果我有多个进程写入管道

一般来说,你不应该让这成为可能......

它是同一个管道,这意味着一旦我从管道中读取数据,我可能会在同一个 read() 操作中从不同进程中获取数据?

是的,但你通常不会那样做。

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 2012-01-18
    • 2018-06-10
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多