Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- #define N 5
- #define LMES 15
- int main() {
- char pathname[] = "c1.c";
- char msg[15] = "Hello, friend!";
- char resstring[15];
- int fd[2];
- int semid;
- key_t key;
- int resfork;
- int i = 0;
- ssize_t size;
- if ((key = ftok(pathname, 0)) < 0) { printf("e1\n"); exit(-1); }
- (void)umask(0000);
- if ((semid = semget(key, 1, 0666|IPC_CREAT)) < 0) { printf("e2\n"); exit(-1); }
- if (pipe(fd) < 0) { printf("e3\n"); exit(-1); }
- struct sembuf sembuf1;
- sembuf1.sem_flg = 0;
- sembuf1.sem_num = 0;
- resfork = fork();
- if (resfork < 0) {
- printf("e4\n");
- exit(-1);
- }
- else if (resfork == 0) {
- while (i < N) {
- if (write(fd[1], msg, LMES) != LMES) { printf("e5\n"); exit(-1); }
- sembuf1.sem_op = -1;
- if (semop(semid, &sembuf1, 1) < 0) { printf("e6\n"); exit(-1); }
- if ((read(fd[0], resstring, LMES) != LMES) || (strcmp(resstring, msg) != 0))
- { printf("e7\n"); exit(-1); }
- if (semop(semid, &sembuf1, 1) < 0) { printf("e8\n"); exit(-1); }
- ++i;
- }
- if (close(fd[0]) < 0) { printf("c1\n"); exit(-1); }
- if (close(fd[1]) < 0) { printf("c2\n"); exit(-1); }
- }
- else if (resfork > 0) {
- while (i < N) {
- if ((read(fd[0], resstring, LMES) != LMES) || (strcmp(resstring, msg) != 0))
- { printf("e9\n"); exit(-1); }
- if (write(fd[1], msg, LMES) != LMES) { printf("e10\n"); exit(-1); }
- sembuf1.sem_op = 2;
- if (semop(semid, &sembuf1, 1) < 0) { printf("e11\n"); exit(-1); }
- sembuf1.sem_op = 0;
- if (semop(semid, &sembuf1, 1) < 0) { printf("e12\n"); exit(-1); }
- ++i;
- }
- if (close(fd[0]) < 0) { printf("c3\n"); exit(-1); }
- if (close(fd[1]) < 0) { printf("c4\n"); exit(-1); }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment