hier is het concept:
de cliënt leest een padnaam van de standaard invoer en schrijft het naar pipe1.The server leest deze padnaam van de pipe1 en probeert om het bestand te openen voor reading.If de server kan het bestand openen, de server reageert door het lezen van het bestand en het schriftelijke te pipe2; anders de server schrijft een foutmelding aan dezelfde pipe.The cliënt leest uit de pipe2 en schrijft zij ontvangt naar de standaard output
hier is mijn code:
Code:
#include <stdio.h>
#include <string.h>
#define maxsize 1000
char buffer [maxsize];
void client(int readfd,int writefd)
{
puts("give pathname:");
gets(buffer);
write(writefd,buffer,strlen(buffer));
//sleep(10);
while((read(readfd,buffer,strlen(buffer)))>0);
printf("%s/n",buffer);
}
void server(int readfd,int writefd)
{
FILE * fp;
char line[100];
//sleep(10);
read(readfd,buffer,strlen(buffer));
fp=fopen(buffer,"r");
if(fp==NULL)
{
strcpy(buffer,"cannot oepn file");
write(writefd,buffer,strlen(buffer));
}
else
while(fgets(line,100,fp)!=NULL)
write(writefd,line,100);
}
int main()
{
int pipe1[2],pipe2[2];
int childpid;
int status;
pipe(pipe1);
pipe(pipe2);
childpid=fork();
if(childpid>0)
{
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe1[1]);
wait(&status);
exit(0);
}
else
{
close(pipe1[1]);
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
exit(0);
}
}
Eigenlijk begrijp ik dat er misschien een aantal problemen met "race conditions" dat is de reden waarom ik slaap 2 commando's, maar nog steeds niet werkt ..
het algemeen wil ik sychronize het lezen en schrijven van commando's van de client en server, maar ik weet niet hoe ...
als iemand heeft de tijd om de code in en geef me wat advies, het zal echt worden gewaardeerd ..... Thanks in advance ..