Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <semaphore.h>
- #include <fcntl.h>
- #define BUFFER_SIZE 100
- int main() {
- int angel_to_ahrdie[2], ahrdie_to_angel[2];
- pid_t pid;
- char buffer[BUFFER_SIZE];
- if (pipe(angel_to_ahrdie) == -1 || pipe(ahrdie_to_angel) == -1) {
- perror("🚨 Pipe creation failed");
- exit(1);
- }
- sem_t *sem_angel_turn = sem_open("/sem_angel_turn", O_CREAT | O_EXCL, 0644, 1);
- sem_t *sem_ahrdie_turn = sem_open("/sem_ahrdie_turn", O_CREAT | O_EXCL, 0644, 0);
- if (sem_angel_turn == SEM_FAILED || sem_ahrdie_turn == SEM_FAILED) {
- perror("🚨 Semaphore creation failed");
- exit(1);
- }
- pid = fork();
- if (pid < 0) {
- perror("🚨 Fork failed");
- exit(1);
- }
- if (pid == 0) {
- close(angel_to_ahrdie[1]);
- close(ahrdie_to_angel[0]);
- while (1) {
- sem_wait(sem_ahrdie_turn);
- read(angel_to_ahrdie[0], buffer, BUFFER_SIZE);
- printf("😇 Angel: %s", buffer);
- if (strncmp(buffer, "exit", 4) == 0) {
- break;
- }
- printf("😎 Ahrdie: ");
- fgets(buffer, BUFFER_SIZE, stdin);
- write(ahrdie_to_angel[1], buffer, strlen(buffer) + 1);
- sem_post(sem_angel_turn);
- }
- close(angel_to_ahrdie[0]);
- close(ahrdie_to_angel[1]);
- sem_close(sem_angel_turn);
- sem_close(sem_ahrdie_turn);
- exit(0);
- } else {
- close(angel_to_ahrdie[0]);
- close(ahrdie_to_angel[1]);
- while (1) {
- sem_wait(sem_angel_turn);
- printf("😇 Angel: ");
- fgets(buffer, BUFFER_SIZE, stdin);
- write(angel_to_ahrdie[1], buffer, strlen(buffer) + 1);
- if (strncmp(buffer, "exit", 4) == 0) {
- break;
- }
- sem_post(sem_ahrdie_turn);
- read(ahrdie_to_angel[0], buffer, BUFFER_SIZE);
- printf("😎 Ahrdie: %s", buffer);
- }
- close(angel_to_ahrdie[1]);
- close(ahrdie_to_angel[0]);
- sem_close(sem_angel_turn);
- sem_close(sem_ahrdie_turn);
- sem_unlink("/sem_angel_turn");
- sem_unlink("/sem_ahrdie_turn");
- wait(NULL);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment