我想使用dup2从输入文件中读取并将其重定向到exec函数的输入。但我的问题是我有三个运行过程,所有这些都必须打开相同的输入文件,但他们做不同的工作。在这种情况下你的建议是什么?我不知道是否可以使用“cat data.txt”为其他三个进程提供输入,但我不知道如何做到这一点。
答案 0 :(得分: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)那么它可以在这个例子中工作(但第一个不起作用),但是你真的应该多次打开文件,以便每个子程序都不必知道它的标准输入可能会发生什么。
答案 1 :(得分:0)
只要您没有写入此文件,只读取它,那么读取它的进程数量无关紧要。