#include #include #include #include #include #include #define DL_NAZWY 1024 #define DL_BUFORA 10 int main(){ int pipe_server_write[2]; int pipe_client_write[2]; int childpid; if (pipe(pipe_server_write) < 0) { perror("Blad tworzenia PIPE serwera"); exit(0); } if (pipe(pipe_client_write) < 0) { perror("Blad tworzenia PIPE klienta"); exit(0); } if ((childpid = fork()) == -1) { perror("nie moge forknac"); exit(1); } else if (childpid ==0 ) // SERWER { close(pipe_server_write[0]); close(pipe_client_write[1]); char nazwa[DL_NAZWY]; int status=0; int n=read(pipe_client_write[0],nazwa,sizeof(nazwa)); if (n<=0) perror("Blad read serwera"); nazwa[n-1]='\0'; FILE *plik=fopen(nazwa,"r"); if(plik==NULL){ printf("Brak pliku"); status=-1; write(pipe_server_write[1],&status,sizeof(status)); } else { char bufor[DL_BUFORA]; write(pipe_server_write[1],&status,sizeof(status)); while(fgets(bufor,sizeof(bufor),plik)!=NULL){ write(pipe_server_write[1],bufor,sizeof(bufor)); } } close(pipe_server_write[1]); close(pipe_client_write[0]); } else // KLIENT { close(pipe_server_write[1]); close(pipe_client_write[0]); char nazwa[DL_NAZWY]; printf("Podaj nazwe pliku\n"); fgets (nazwa, sizeof(nazwa), stdin); int n=strlen(nazwa); if(write(pipe_client_write[1],nazwa,n)!=n) perror("Blad write klienta"); char bufor[DL_BUFORA]; int status; read(pipe_server_write[0],&status,sizeof(status)); if (status==-1){ printf("Nie moge otworzyc pliku! Prawdopodobnie podales zla nazwe!\n"); } else { while (read(pipe_server_write[0],bufor,sizeof(bufor))>0) write(1,bufor,strlen(bufor)); } wait(NULL); close(pipe_server_write[0]); close(pipe_client_write[1]); } return 0; }