У меня есть следующий код:C Параллельные процессы и трубы
for(i=0; i < argc; i++)
{
pipe(fd[2]);
pid=fork();
if (pid > 0)
{
close(fd[1]);
// read the string, and print it
}
else if (pid == 0)
{
close(fd[0]);
// write the file name to the main process
break;
}
}
// wait for all processes to finish
Так в основном, это выводит имя каждого файла в последовательном порядке:
file1
file2
file3
Но если я ставлю printf("%d\n", getpid())
после того, как цикл , выходы кажутся параллельными. Сначала обрабатываются некоторые процессы с более высоким идентификатором процесса.
Вопрос в том, как я могу читать или записывать трубу внутри цикла for, является ли она последовательной или параллельной?
Отсутствует значительная часть кода, то есть чтение/запись на трубе. Опубликуйте полный код или, по крайней мере, достаточно, чтобы другие могли воспроизвести вашу проблему. – dbush
Кажется, что это будет последовательным из-за того, что родительский процесс читает из канала и который читает блоки, пока ребенок не напишет на него. Это также означает, что родитель не будет делать следующую 'fork', пока каждый ребенок, который был только разветвлен, не выполнил свою запись. Это предполагает, что каждое 'чтение' потребляет все, что было написано, что на самом деле не гарантируется. – kaylum
путь «child» должен заканчиваться вызовом 'exit()', а не просто выходить из цикла. – user3629249