![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| High Level Programming Post frågor om C, C + +, Java, SQL och andra programmeringsspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| klient och server-program | JCR | High Level Programming | 8 | 04-28-2009 05:06 |
| Client / Server Utgåva | geauxtn | AIX | 5 | 07-30-2007 09:38 |
| client / server | TRÄDSTAM | UNIX for Dummies Frågor & Svar | 2 | 10-30-2006 02:19 |
| NTP-server och ntp-klient | bubba112557 | Sun Solaris | 1 | 05-10-2005 11:37 |
| Rörledningar och namngivna rör (FIFU) Buffertstorlek | Jus | Filsystem, diskar och Minne | 1 | 08-20-2004 11:14 |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
#1 (permalänk)
|
||||
|
||||
|
client / server rören
Här är konceptet: kunden läser en sökväg från standard input och skriver den till pipe1.The servern läser denna sökväg från pipe1 och försöker öppna filen för reading.If servern kan öppna filen, servern svarar med att läsa filen och skriftligen det att pipe2, annars servern skriver ett felmeddelande till samma pipe.The kunden då läser från pipe2 och skriver den får till standard output här är min kod: Kod:
#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);
}
}
Faktiskt, jag förstår att det kan finnas vissa problem med ras villkor Det är därför jag lagt 2 sömn kommandon men ändå inte fungerar .. generellt vill jag sychronize att läsa och skriva kommandon för klient och server men jag vet inte hur ... om någon har tid att se koden och ge mig några råd, det kommer verkligen vara uppskattat ..... tack på förhand .. |