Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- #include <sys/stat.h>
- int main() {
- char pathname[] = "main.c";
- key_t key;
- if ((key = ftok(pathname, 0)) < 0) { printf("e1\n"); exit(-1); }
- (void)umask(0000);
- int semid;
- if((semid = semget(key, 3, 0666|IPC_CREAT)) < 0) { printf("%de2\n", semid); exit(-1); }
- struct sembuf s[3];
- unsigned short i = 0;
- for (i; i < 3; ++i) {
- s[i].sem_flg = 0;
- s[i].sem_num = i;
- }
- s[0].sem_op = 1;
- s[1].sem_op = 1;
- s[2].sem_op = 0;
- if(semop(semid, s, 3) < 0) { printf("e3\n"); exit(-1); }
- int resfork;
- resfork = fork(); // creating 64 processes, half of which are on the main road and half on the side road
- if (resfork < 0) { printf("ef\n"); exit(-1); }
- else {
- resfork = fork();
- if (resfork < 0) { printf("ef\n"); exit(-1); }
- else {
- resfork = fork();
- if (resfork < 0) { printf("ef\n"); exit(-1); }
- else {
- resfork = fork();
- if (resfork < 0) { printf("ef\n"); exit(-1); }
- else {
- resfork = fork();
- if (resfork < 0) { printf("ef\n"); exit(-1); }
- else {
- resfork = fork();
- if (resfork < 0) { printf("ef\n"); exit(-1); }
- else if (resfork == 0) {
- s[0].sem_num = 0;
- s[0].sem_op = -1;
- s[1].sem_num = 2;
- s[1].sem_op = 1;
- if(semop(semid, s, 2) < 0) { printf("e4\n"); exit(-1); }
- s[0].sem_num = 0;
- s[0].sem_op = 1;
- s[1].sem_num = 1;
- s[1].sem_op = -1;
- if(semop(semid, s, 2) < 0) { printf("e5\n"); exit(-1); }
- s[0].sem_num = 1;
- s[0].sem_op = 1;
- s[1].sem_num = 2;
- s[1].sem_op = -1;
- if(semop(semid, s, 2) < 0) { printf("e6\n"); exit(-1); }
- }
- else if (resfork > 0) {
- s[0].sem_num = 1;
- s[0].sem_op = -1;
- s[1].sem_num = 2;
- s[1].sem_op = 0;
- if(semop(semid, s, 2) < 0) { printf("e7\n"); exit(-1); }
- s[0].sem_num = 2;
- s[0].sem_op = 1;
- if(semop(semid, s, 1) < 0) { printf("e8\n"); exit(-1); }
- s[0].sem_num = 1;
- s[0].sem_op = 1;
- s[1].sem_num = 2;
- s[1].sem_op = -1;
- if(semop(semid, s, 2) < 0) { printf("e9\n"); exit(-1); }
- }
- }}}}}
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment