Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <unistd.h>
- // классический пинг-понг между отцом и сыном с сигналами
- enum { BASE = 10 };
- int fd[2];
- FILE *frd;
- FILE *fwr;
- int nom;
- int max;
- void handler(int s)
- {
- int pid;
- int x;
- //if (!pid) pid = getppid();
- //read(fd[0], &x, sizeof(x));
- fscanf(frd, "%d%d", &x, &pid);
- printf("%d %d\n", nom, x);
- fflush(stdout);
- x++;
- //nom++;
- //write(fd[1], &x, sizeof(x));
- if (x >= max) {
- exit(0);
- }
- fprintf(fwr, "%d % d\n", x, getpid());
- fflush(fwr);
- kill(pid, SIGUSR1);
- }
- int main(int argc, char *argv[])
- {
- pipe(fd);
- signal(SIGUSR1, handler);
- //max = (int)strtol(argv[1], NULL, BASE);
- max = 15;
- frd = fdopen(fd[0], "r");
- fwr = fdopen(fd[1], "w");
- int pid1;
- pid1 = fork();
- if (!pid1) {
- //pid1 = getppid();
- nom = 1;
- while (1) { pause(); }
- }
- int pid2;
- pid2 = fork();
- if (!pid2) {
- //pid2 = getppid();
- nom = 2;
- while (1) { pause(); }
- }
- int z = 1;
- //write(fd[1], &z, sizeof(z));
- fprintf(fwr, "%d %d\n", z, pid1);
- kill(pid1, SIGUSR1);
- wait(NULL);
- printf("Done\n");
- kill(pid1, SIGKILL);
- kill(pid2, SIGKILL);
- fclose(fwr);
- fclose(frd)
- //while (1) { pause(); }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement