Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <signal.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <stdlib.h>
- #include <unistd.h>
- // serial - порядковый номер процесса-сына (1, 2)
- #include <stdio.h>
- // rfd - для ожидания своей очереди вывода
- // wfd - для уведомления другого процесса
- enum { INTEGER_BASE = 10 };
- void
- work(int serial, FILE *p1, FILE *p2, int maximum)
- {
- while (1) {
- // сами данные нас не интересуют, важно, чтобы был фиксированный
- int val;
- // ожидаем своей очереди для работы
- //read(p1, &val, sizeof(val));
- fscanf(p1, "%d", &val);
- // выводим свой порядковый номер
- if (val >= maximum) {
- _exit(0);
- }
- printf("%d %d\n", serial, val);
- fflush(stdout);
- // разрешаем работать другому процессу
- fprintf(p2, "%d\n", val+1);
- //write(p2, &val, sizeof(val));
- }
- }
- int
- main(int argc, char *argv[])
- {
- FILE *f1_r, *f1_w, *f2_r, *f2_w;
- int p1[2], p2[2], maximum;
- pipe(p1);
- pipe(p2);
- f1_w = fdopen(p1[1], "w");
- f2_r = fdopen(p2[0], "r");
- f1_r = fdopen(p1[0], "r");
- f2_w = fdopen(p2[1], "w");
- maximum = strtol(argv[1], NULL, INTEGER_BASE);
- if (!fork()) {
- work(1, f1_r, f2_w, maximum);
- _exit(0);
- }
- if (!fork()) {
- work(2, f2_r, f1_w, maximum);
- _exit(0);
- }
- fprintf(f1_r, "%d\n", 1);
- fclose(f1_r);
- fclose(f2_r);
- fclose(f1_w);
- fclose(f2_w);
- wait(NULL);
- printf("Done\n");
- fflush(stdout);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement