Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1 │ #include <sys/types.h>
- 2 │ #include <sys/wait.h>
- 3 │ #include <unistd.h>
- 4 │ #include <stdio.h>
- 5 │ #include <stdlib.h>
- 6 │
- 7 │ int main(int argc, char* argv[]) {
- 8 │ int fds[2];
- 9 │ pipe(fds);
- 10 │
- 11 │ int pid1 = fork();
- 12 │ if (!pid1) {
- 13 │ close(fds[1]);
- 14 │ int pid2 = fork();
- 15 │ if (!pid2) {
- 16 │ int v;
- 17 │ long long sum = 0;
- 18 │ while (read(fds[0], &v, sizeof(v))) {
- 19 │ sum += v;
- 20 │ }
- 21 │ close(fds[0]);
- 22 │ printf("%lld\n", sum);
- 23 │ fflush(stdout);
- 24 │ _exit(0);
- 25 │ }
- 26 │ close(fds[0]);
- 27 │ while (wait(NULL) > 0);
- 28 │ _exit(0);
- 29 │ }
- 30 │ close(fds[0]);
- 31 │
- 32 │ int v = 0;
- 33 │ while (scanf("%d", &v) > 0) {
- 34 │ write(fds[1], &v, sizeof(v));
- 35 │ }
- 36 │ close(fds[1]);
- 37 │ while (wait(NULL) > 0);
- 38 │ return 0;
- 39 │ }
- 1 │ #include <sys/types.h>
- 2 │ #include <sys/wait.h>
- 3 │ #include <unistd.h>
- 4 │ #include <stdio.h>
- 5 │ #include <stdlib.h>
- 6 │ #include <fcntl.h>
- 7 │
- 8 │ int main(int argc, char* argv[]) {
- 9 │ if (argc != 2) {
- 10 │ return 1;
- 11 │ }
- 12 │
- 13 │ int n = strtol(argv[1], NULL, 10) - 1;
- 14 │
- 15 │ int fds[2][2];
- 16 │ pipe(fds[0]);
- 17 │ pipe(fds[1]);
- 18 │
- 19 │ for (int t = 1; t <= 2; ++t) {
- 20 │ int pid = fork();
- 21 │ int fdr = fds[t == 1][0];
- 22 │ int fdw = fds[t == 2][1];
- 23 │ if (!pid) {
- 24 │ FILE* file1 = fdopen(fdr, "r");
- 25 │ FILE* file2 = fdopen(fdw, "w");
- 26 │ if (n != 0) {
- 27 │ if (t == 1) {
- 28 │ printf("1 1\n");
- 29 │ fflush(stdout);
- 30 │ fprintf(file2, "1\n");
- 31 │ fflush(file2);
- 32 │ }
- 33 │ if (n != 1) {
- 34 │ int value;
- 35 │ for (;;) {
- 36 │ fscanf(file1, "%d", &value);
- 37 │ if (value == n) break;
- 38 │ ++value;
- 39 │ printf("%d %d\n", t, value);
- 40 │ fflush(stdout);
- 41 │ fprintf(file2, "%d\n", value);
- 42 │ fflush(file2);
- 43 │ if (value == n) break;
- 44 │ }
- 45 │ }
- 46 │ }
- 47 │ if (t == 1) {
- 48 │ close(fds[t == 2][0]);
- 49 │ close(fds[t == 1][1]);
- 50 │ }
- 51 │ fclose(file1);
- 52 │ fclose(file2);
- 53 │ exit(0);
- 54 │ }
- 55 │ close(fdr);
- 56 │ close(fdw);
- 57 │ }
- 58 │ while (wait(NULL) > 0);
- 59 │ printf("Done\n");
- 60 │ fflush(stdout);
- 61 │ return 0;
- 62 │ }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement