Hej napisalem prosty programik w ktorym tworze dwa procesy jeden przekazuje nazwe pliku drugiemu , ten drugi odczytuje zawartosc pliku i przekazuje ja pierwszemu ktory wyswietla to na ekran. Mam prosbe czy moglby ktos zweryfikowac poprawnosc tego programu ? i mam jeden problem tzn. linie ktore pobieram z pliku i tablica w ktorej przechowuje zawartsc maja zahardkodowana wielkosc.. Jak zaimpelmentowac mechanizm, w ktorym jeden z procesow bedzie sprawdzal wielkosc danych ktore pobiera i dynamicznie rezerwowal tyle miejsca ile potrzeba?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char** argv)
{
int childpid;
int descrA[2],descrB[2];
char dane[10000];
char linia[1024];
char nazwa[255];
FILE *plik;
pipe(descrA);
pipe(descrB);
if((childpid=fork())==-1){
printf("Nie mozna stworzyc procesu potomnego\n");
exit(-1);
}
else
{
if(childpid == 0) //dziecko - serwer
{
close(descrA[0]);
close(descrB[1]);
sleep(1);
int c = read(descrB[0],nazwa,sizeof(nazwa)); //odczytuje przekazana przez klienta nazwe pliku
printf("\tCLIENT - odebralem nazwe pliku -->%s<--\n",nazwa);
if ((plik = fopen(nazwa, "r")) == NULL) //otwieram plik
{
strcpy(dane,"Serwerze BLAD Przy otwieraniu pliku !!!\n");
}
else
{
printf("\tCLIENT - udalo sie otworzyc plik. Czytam.....\n");
while ((fgets(linia, sizeof(linia),plik)) != NULL) //zapisuje linie do tablicy dane
{
strcat(dane,linia);
}
}
printf("\tCLIENT - wysylam dane do serwera...\n");
write(descrA[1],dane,sizeof(dane)); //wysylam klientowi zmienna dane
fclose(plik);
exit(0);
}
else //rodzic klient
{
fprintf(stdout, "\033[2J");
fprintf(stdout, "\033[1;1H");
close(descrA[1]);
close(descrB[0]);
strcpy(nazwa,argv[1]);
printf("SERVER - wysylam klientowi nazwe pliku...\n");
write(descrB[1],nazwa,sizeof(nazwa)); //wysylam serwerowi nazwe pliku
wait(); //czekanie az klient przetworzy plik
printf("SERVER - odbieram dane...\n");
read(descrA[0],dane,sizeof(dane)); //odczyt tego co klient przetworzyl.
printf("SERVER - oto co mi przeslal klient\n********************************************************\n");
printf("%s",dane);//wyswietlenie inforamcji.
printf("********************************************************\n");
}
}
return 0;
}