如何重新打开已关闭的文件描述符

时间:2012-03-30 05:25:45

标签: c pipe

我有一个场景,我为两个孩子和父母之间的沟通创建了管道。 Parent将(​​使用写入函数)数据写入管道并关闭相应的文件描述符。问题是当我想再次将数据写入管道时,write函数返回错误代码-1。我认为这是因为写入结束在前一次迭代中已经关闭。然后如何在关闭一次后打开相应的文件描述符。

我尝试使用open()函数,它需要一些文件的路径作为争论。但我没有在我的应用程序中使用任何文件。我有简单的文件描述符(int arr [2])。

是否可以通过管道实现上述方案????

2 个答案:

答案 0 :(得分:11)

一旦管道关闭,它就会关闭。你不能把它带回来。

如果你想写更多内容,请不要先关闭它 - 就像那样简单。

答案 1 :(得分:1)

要知道unix下与文件相关的任何内容(管道也是某种文件):文件名仅用于打开文件。稍后直到文件打开,它将永久可用,直到关闭,名称永远不会再次使用。当有人在打开时删除另一个窗口中的文件时,只是名称消失了,而不是文件。这意味着:

  1. 文件仍在磁盘上
  2. 没有名字
  3. 它还在打开
  4. 当它关闭时,内核会永久删除它
  5. 了解这一点可能有助于理解,为什么再次“重新打开”文件,管道或任何类似的东西几乎是不可能的。文件名和描述符的生命周期不同。

    唯一的例外是stdout和stderr,其描述符总是被称为1和2。

相关问题