Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- int main(char argument)
- {
- int pipa[2];
- int pipa_2[2];
- int des_fifo;
- const char* subor_fifo="FIFO_PIPA";
- char BUFFER_MAIN[BUFSIZ];
- char buffer[BUFSIZ];
- char buffer_B[BUFSIZ];
- pid_t fork_1;
- pid_t fork_2;
- // vytvorenie fifo + prist.prava
- des_fifo=mkfifo(subor_fifo,0777);
- if(des_fifo==0) printf("\nFIFO PIPA VYTVORENA\n");
- else { perror("\nNASTALA CHYBA V FIFO => ");
- printf("\n"); }
- if (pipe(pipa) != 0){ // pipa 1
- perror("\nNASTALA CHYBA V PIPE_1 => ");
- exit(EXIT_FAILURE); }
- else {printf("PIPA_1 VYTVORENA.");}
- if (pipe(pipa_2) != 0){
- perror("\nNASTALA CHYBA V PIPE_2 => "); // pipa 2
- printf("\n");
- exit(EXIT_FAILURE); }
- else {printf("\nPIPA_2 VYTVORENA.\n");}
- fork_1 = fork(); // vytvorenie potomka 1
- if (fork_1 == -1) {
- printf("\nNASTALA CHYBA V PROCESE FORK_1 => ");
- printf("\n");
- exit(EXIT_FAILURE);
- }
- if (fork_1 == 0) {
- printf("\nPOTOMOK 1 BOL USPESNE VYTVORENY.\n");
- fork_2 = fork(); // vytvorenie potomka 2
- if (fork_2 == -1) {
- perror("\nNASTALA CHYBA V PROCESE FORK_2 => ");
- printf("\n");
- exit(EXIT_FAILURE);
- }
- if (fork_2 == 0){
- printf("POTOMOK 2 BOL USPESNE VYTVORENY.\n");
- // -- potomok2 --
- read(pipa_2[0], buffer, 1);
- if (buffer[0]=='2'){ // ak je "2", zapis do FIFA potomok 2
- int des = open(subor_fifo,O_WRONLY);
- if (des<0){
- perror("\nNASTALA CHYBA V OTVORENI FIFO => ");
- printf("\n");
- exit(EXIT_FAILURE);
- }
- write(des,"POTOMOK 2",9);
- close(des);
- }
- exit(EXIT_SUCCESS);
- }
- else { // -- potomok1 --
- read(pipa[0], buffer_B, 1);
- if (buffer_B[0]=='1'){
- int des = open(subor_fifo,O_WRONLY);
- if (des<0){
- perror("\nCHYBA FIFO : ");
- printf("\n");
- exit(EXIT_FAILURE);
- }
- write(des,"POTOMOK 1",9);
- close(des);
- }
- write(pipa_2[1], buffer_B, 1);
- exit(EXIT_SUCCESS);
- }
- }
- else { // -- RODIC + argumenty--
- memset(BUFFER_MAIN, '\0', sizeof(BUFFER_MAIN));
- printf("\nVLOZTE ARGUMENT (1-2): ");
- scanf("%c",&argument);
- printf("\n");
- if (argument == '2' || argument == '1' ){
- write(pipa[1],&argument,1);
- int des = open(subor_fifo,O_RDONLY);
- if (des<0){
- perror("\nFIFO CHYBA : ");
- exit(EXIT_FAILURE);
- }
- read(des,BUFFER_MAIN,BUFSIZ);
- printf("-----------------------------------------------------\n");
- printf("Rodic z FIFA NACITAL HLASKU : >>>> %s <<<<\n" ,BUFFER_MAIN);
- printf("-----------------------------------------------------\n");
- close(des);
- }
- else printf("CHYBA - ZADAL SI INY ARGUMENT AKO {1} alebo {2}\n");
- printf("\n");
- exit(EXIT_FAILURE);
- }
- exit(EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement