Я хочу, чтобы 2 дочерних процесса поместили их имена и подождали, пока другой процесс не поместит его имя. Например, если есть первый и второй процесс, он сначала поместит свое имя и будет ожидать другого имени на экране. Я хочу работать с процессами, и я хочу видеть, что они работают последовательно.c труба, как процессы работают последовательно
Выход:
first
second
first
second
first
second
Я просто пытался что-то о C (Linux).
int main(void)
{
pid_t child_a, child_b;
int pipe1[2], pipe2[2];
char mesazhi1[] = "first";
char mesazhi2[] = "second";
char buf[1024];
int first_pipe = pipe(pipe1);
pipe(pipe2);
if(first_pipe == -1){
perror("pipe");
exit(1);
}
child_a = fork();
if (child_a == 0)
{
/* Child A code */
int i;
for (i = 0; i < 3; i++)
{
write(pipe1[1],mesazhi1, strlen(mesazhi1) + 1);
//printf("first\n");
int a = read(pipe2[0], buf, strlen(mesazhi2) + 1);
printf("%s - %d\n", buf, a);
}
}
else
{
child_b = fork();
if (child_b == 0)
{
int i;
for (i = 0; i < 3; i++)
{
write(pipe2[1],mesazhi2, strlen(mesazhi2) + 1);
//printf("second\n");
int a = read(pipe1[0], buf, strlen(mesazhi1) + 1);
printf("%s - %d\n", buf, a);
}
}
else
{
/* Parent Code */
int returnStatusA,returnStatusB;
waitpid(child_a, &returnStatusA, 0); // Parent process waits here for child to terminate.
waitpid(child_b, &returnStatusB, 0); // Parent process waits here for child to terminate.
if (returnStatusA == 0 && returnStatusB == 0) // Verify child process terminated without error.
{
printf("%s\n", "The child processes terminated normally.\n");
}
if (returnStatusA == 1 && returnStatusB == 1)
{
printf("%s\n", "The child processes terminated with an error!. \n");
}
}
}
}
Он ставит имя случайно. Я имею в виду, что я думаю, иногда второй процесс работает быстрее, чем первый. Выход так:
first
second
second
first
second
...
SO почему второй процесс не ждать первого, потому что я думаю, что функция чтения() следует подождать, пока не будет что-то в Pipe1.
Возможно, вы захотите подумать о последствиях ** параллельного выполнения **. Найдите «синхронизацию процесса». Кстати: каков был ваш вопрос? – Olaf
Это не ваш настоящий выход. Я знаю, потому что ваша программа также печатает значение 'a'. Отправьте свой реальный результат (или его короткую часть) ... – immibis