Я написал PingPong на C по 1 сигналу и 1 трубе, поэтому мне нужно отправить pid1
на son2
и pid2
на son1
, где pid1
, pid2
это pids of son1
, son2
.
Но я вижу эту картинку:
Waiting..
PID: 4021
Waiting..
И у меня есть этот код:
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
int pidN;
int pid = -1;
int fd[2];
int max;
void SIGUSR1_hdl(int sig)
{
// Set pid
if (pid == -1) {
printf("Waiting..\n");
fflush(stdout);
scanf("%d", &pid);
printf("PID: %d\n", pid);
fflush(stdout);
kill(pid, SIGUSR1);
signal(SIGUSR1, SIGUSR1_hdl);
return;
}
// Read x
..
}
int main(int argc, const char **argv)
{
signal(SIGUSR1, SIGUSR1_hdl);
sscanf(argv[1], "%d", &max);
pipe(fd);
dup2(fd[0], STDIN_FILENO);
close(fd[0]);
int pid1;
if (!(pid1 = fork())) {
pidN = 1;
for (;;) pause();
}
int pid2;
if (!(pid2 = fork())) {
pidN = 2;
for (;;) pause();
}
kill(pid1, SIGUSR1);
dprintf(fd[1], "%d\n%d\n%d\n", pid2, pid1, 1);
close(fd[1]);
wait(NULL);
wait(NULL);
return 0;
}
Этотусоваться до scanf
в son2 в SIGUSR1_hdl.Что я делаю неправильно?Я не могу наследовать pids
вилкой.Я должен отправить его только через мой канал (fd).