Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Napisz program, który stworzy potok i wykorzysta go do komunikacji mi ę dzy
- dwoma spokrewnionymi procesami. Zadanie wykonaj dla dwóch przypadków:
- z ustawion ą flag ą O_NONBLOCK i bez.
- */
- #define _GNU_SOURCE
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <wait.h>
- #include <string.h>
- #define SOME_MESSAGE "Wiadomosc"
- #define BUFFER_SIZE 128
- int main(void)
- {
- int fd[2];
- char buffer[BUFFER_SIZE];
- pid_t pid;
- if(pipe2(fd, O_NONBLOCK) == -1){
- perror("pipe");
- return EXIT_FAILURE;
- }
- printf("Flaga O_NONBLOCK ustawiona\n\n");
- pid = fork();
- if(pid == -1){
- perror("fork");
- return EXIT_FAILURE;
- }
- else if(pid == 0){
- if(write(fd[1], SOME_MESSAGE, strlen(SOME_MESSAGE)) == -1){
- perror("write");
- return EXIT_FAILURE;
- }
- printf("Potomek: Wiadomosc wyslana [%s]!\n", SOME_MESSAGE);
- if(close(fd[1]) == -1){
- perror("close");
- return EXIT_FAILURE;
- }
- }
- else{
- wait(NULL);
- memset(buffer, '\0', BUFFER_SIZE);
- if(read(fd[0], buffer, BUFFER_SIZE) == -1){
- perror("read");
- return EXIT_FAILURE;
- }
- printf("Rodzic: Wiadomosc otrzymana [%s]!\n", buffer);
- if(close(fd[0]) == -1){
- perror("close");
- return EXIT_FAILURE;
- }
- }
- return EXIT_FAILURE;
- }
Add Comment
Please, Sign In to add comment