Несколько открытых файлов для чтения одновременно - PullRequest
1 голос
/ 26 апреля 2010

Я хочу использовать dup2 для чтения из входного файла и перенаправления его на вход функции exec.но моя проблема в том, что у меня три запущенных процесса, все они должны открывать один и тот же входной файл, но они выполняют разные задания.что вы предлагаете в таком случае?я не знаю, возможно ли использовать «cat data.txt» для подачи ввода для трех других процессов, но я не знаю, как это сделать.

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Если каждый читатель получает доступ к файлу через дубликаторы файлов, то все они будут совместно использовать смещение файла, что может вызвать проблемы.

echo cat dog mouse fish bird | run_each prog1 prog2 prog3

Если в вышеприведенном примере программа run_each открывала запущенные программы, заданные в качестве аргументов командной строки, давая каждой из них дублированную версию своего стандартного ввода, тогда prog1 может читать «cat», prog2 может читать «dog mouse» и prog3 может читать «птица». В этом случае вызов dup2 на самом деле ничего бы не сделал в долгосрочной перспективе.

Если мы заменим нашу программу run_each на параметр -stdin =, который откроет этот файл и дублирует этот файл в качестве стандартного ввода для каждой дочерней программы, то:

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

В этом примере, который, вероятно, немного ближе к тому, с чем вы имеете дело, поскольку он использует обычный файл для поиска, у вас будут те же проблемы, что и в первом примере, потому что все стандартные входные файлы каждой программы # разделить позицию смещения / поиска.

Если бы каждая из программ вызывала pread для всего своего чтения (при условии, что чтение - это все, что было сделано, но есть и pwrite), тогда это будет работать в этом примере (но первая не будет работать), но вы на самом деле следует открывать файл несколько раз, чтобы каждая из дочерних программ не имела представления о том, что еще может происходить при его стандартном вводе.

0 голосов
/ 26 апреля 2010

Пока вы не пишете в этот файл, а только читаете из него, не должно иметь значения, сколько процессов читает его.

...