1

我想使用 dup2 从输入文件中读取并将其重定向到 exec 函数的输入。但我的问题是我有三个正在运行的进程,它们都必须打开相同的输入文件,但它们做不同的工作。在这种情况下你有什么建议?我不知道是否可以使用“cat data.txt”来为其他三个进程提供输入,但我不知道如何做到这一点。

4

2 回答 2

1

如果每个读者都通过复制的文件描述符访问文件,那么他们都将共享可能导致问题的文件偏移量。

echo cat dog mouse fish bird | run_each prog1 prog2 prog3

如果在上面的示例中,程序 run_each 要打开作为命令行参数给出的运行程序,为它们每个提供标准输入的复制版本,那么 prog1 可能会读取“cat”,prog2 可能会读取“dog mouse”,prog3 可能会读取“ 鸟”。在这种情况下,从长远来看,调用 dup2 实际上不会做任何事情。

如果我们将 run_each 程序更改为采用参数 -stdin= 使其打开并 dup2 该文件作为每个子程序的标准输入,那么:

echo cat dog mouse fish bird > ./some-file.txt
run_each -stdin=./some-file.txt prog1 prog2 prog3

在此示例中,这可能与您正在处理的内容更接近,因为它使用可搜索的普通文件,您将遇到与第一个示例相同的问题,因为每个 prog# 的所有标准输入文件共享偏移量/寻找位置。

如果每个程序都调用了 pread 来读取它们(假设读取已经完成,但还有一个 pwrite),那么它在这个例子中可以工作(但第一个不起作用),但你真的应该打开文件多次,这样每个子程序就不必知道它的标准输入可能会发生什么。

于 2010-04-26T19:36:37.613 回答
0

只要您不写入此文件,仅读取它,那么有多少进程正在读取它并不重要。

于 2010-04-26T16:23:50.637 回答