【问题标题】:Piping Concurrency and Files管道并发和文件
【发布时间】:2014-03-26 04:09:29
【问题描述】:

我有一个 C 程序,它将文件作为参数,清理文件并将清理后的数据写入新的临时文件。然后它接受一些标准输入,将其清理并发送标准输出。

我有第二个文件,它对该临时文件和标准输入执行操作。

./file_cleanse <file1.txt> | ./file_operation <temp.txt>

我要么没有从 ./file_operation 获得标准输出,要么没有得到无意义的标准输出,我相信这是因为它正在从仍在写入/此时不存在的文件中读取。

有没有办法让 ./file_operation 等到 ./file_cleanse 在 bash 中返回一个值?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请尽快阅读About 页面。 file_operation 是在读取 file_cleanse 在其标准输出(管道)上写的内容,还是从进入 file_cleanse 的标准输入中读取更多数据?你的描述至少是模棱两可的。 file_cleanse如何确定临时文件名?为什么不告诉它写入哪个文件?

标签: c bash shell piping


【解决方案1】:

怎么样:

./file_cleanse <file1.txt> > /tmp/temporaryFile
./file_operation <temp.txt> < /tmp/temporaryFile

【讨论】:

    【解决方案2】:

    据我了解,file_operation 在处理临时文件后需要读取file_cleanse 的标准输出,但在file_cleanse 将一些数据写入其标准输出( file_operation 的标准输入)。

    如果这是正确的,那么一个简单的同步是让file_operation 从其标准输入中读取(一个字节或任何方便的大量数据)。成功后,file_cleanse 必须已完成临时文件;因此file_operation 可以处理临时文件,然后读取其标准输入的其余部分并进行适当的处​​理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多