//Pierwszy program #include #include #include #include #include #include #include #include #include int main(int argc,char **argv) { char bufor[50]; int file_read,file_open,file_open_p,file_read_p; srand(time(0)); if (argc != 3) { printf ("%s ", argv[0]); return 1; } mkfifo("potok",0640); file_open=open(argv[2],O_WRONLY | O_CREAT,0640); if (file_open==-1) { perror("write_only_file error"); exit(EXIT_FAILURE); } file_read=open(argv[1],O_RDONLY,0640); if (file_read==-1) { perror("read_only_file error"); exit(EXIT_FAILURE); } switch (fork()) { case -1: perror("fork error"); exit(EXIT_FAILURE); case 0: file_open_p=open("potok",O_RDONLY,0640); if (file_open_p==-1) { perror("write_p error"); exit(EXIT_FAILURE); } while(read(file_open_p,&bufor,25)>0) { write(STDOUT_FILENO, &bufor, 25); write(file_open,&bufor,25); } close(file_open); close(file_open_p); printf("\n"); _exit(EXIT_SUCCESS); break; default: file_read_p=open("potok",O_WRONLY | O_CREAT,0640); if (file_read_p==-1) { perror("read_p error"); exit(EXIT_FAILURE); } while(read(file_read,&bufor,50)>0) { sleep(rand()%3); write(file_read_p,&bufor,50); } close(file_read); close(file_read_p); wait(NULL); exit(EXIT_SUCCESS); break; }; return 0; } //Drugi program w dwoch osobnyach plikach do uruchamiania na dwoch konsolach //producent #include #include #include #include #include #include #include #include #include int main(int argc,char **argv) { char bufor[50]; int file_read,file_read_p; srand(time(0)); if (argc != 2) { printf ("%s ", argv[0]); return 1; } file_read=open(argv[1],O_RDONLY,0640); if (file_read==-1) { perror("read_only_file error"); exit(EXIT_FAILURE); } switch (fork()) { case -1: perror("fork error"); exit(EXIT_FAILURE); case 0: file_read_p=open("potok",O_WRONLY | O_CREAT,0640); if (file_read_p==-1) { perror("read_p error"); exit(EXIT_FAILURE); } while(read(file_read,&bufor,50)>0) { sleep(rand()%3); write(file_read_p,&bufor,50); } close(file_read); close(file_read_p); wait(NULL); exit(EXIT_SUCCESS); break; default:; }; return 0; } //konsument #include #include #include #include #include #include #include #include #include int main(int argc,char **argv) { char bufor[50]; int file_open,file_open_p; srand(time(0)); if (argc != 2) { printf ("%s ", argv[0]); return 1; } file_open=open(argv[1],O_WRONLY | O_CREAT,0640); if (file_open==-1) { perror("write_only_file error"); exit(EXIT_FAILURE); } switch (fork()) { case -1: perror("fork error"); exit(EXIT_FAILURE); case 0: file_open_p=open("potok",O_RDONLY,0640); if (file_open_p==-1) { perror("write_p error"); exit(EXIT_FAILURE); } while(read(file_open_p,&bufor,25)>0) { write(STDOUT_FILENO, &bufor, 25); write(file_open,&bufor,25); } close(file_open); close(file_open_p); printf("\n"); _exit(EXIT_SUCCESS); break; default: break; }; return 0; } /makefile nie wiem do konca czy dobry Fifo: zadanie5.c gcc zadanie5.c -o Fifo.o && ./Fifo.o wejscie.txt wyjscie.txt clean: potok rm potok Potok: mkfifo -m 644 potok ProdKons: producent.c gcc producent.c -o Prod.o && ./Prod.o wejscie1.txt gcc konsument.c -o Kons.o && ./Kons.o wyjscie1.txt cleano: rm -f *.o