![]() |
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| High Level Programmering Post spørsmål om C, C + +, Java, SQL og andre programmeringsspråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| klient og server-programmer | JCR | High Level Programmering | 8 | 04-28-2009 05:06 |
| Client / Server Issue | geauxtn | AIX | 5 | 07-30-2007 09:38 |
| klient / server | bole | UNIX for Dummies Spørsmål og svar | 2 | 10-30-2006 02:19 |
| NTP-server og ntp klient | bubba112557 | Sun Solaris | 1 | 05-10-2005 11:37 |
| Rør og navngitte datakanaler (FIFO) Bufferstørrelse | Jus | Filsystemer, disker og Minne | 1 | 08-20-2004 11:14 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
klient / server-rør
her er konseptet:
klienten leser en banenavn fra standard input og skriver det til pipe1.The serveren leser dette banenavn fra pipe1 og prøver å åpne filen for reading.If serveren kan åpne filen, svarer ved å lese filen og writting det til pipe2, ellers serveren skriver en feilmelding til samme pipe.The klienten deretter leser fra pipe2 og skriver den mottar til standard output her er min kode: 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);
}
}
generelt jeg vil sychronize på lese og skrive kommandoer for klient og server, men jeg vet ikke hvor ... Hvis noen har tid til å se koden og gi meg noen råd, vil det virkelig bli verdsatt ..... takk på forhånd .. |
|
||||
|
Wow! Det er noen stygge koden du har der. Her er arbeider versjon:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxsize 1000
char buffer [maxsize];
void client(int readfd,int writefd)
{
printf ("give pathname: ");
fflush (stdout);
fgets (buffer, sizeof (buffer), stdin);
write(writefd,buffer, sizeof (buffer));
while (read(readfd,buffer,sizeof(buffer)) > 0)
printf("%s",buffer);
}
void server(int readfd,int writefd)
{
FILE * fp;
char line[1000];
read(readfd,buffer,sizeof(buffer));
if (strchr (buffer, '\n'))
*strchr(buffer, '\n') = '\0';
fp=fopen(buffer,"r");
if(fp==NULL)
{
strcpy(buffer,"cannot open file");
write(writefd,buffer,strlen(buffer));
}
else
while(fgets(line,sizeof(line),fp)!=NULL)
write(writefd,line,sizeof(line));
}
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);
}
}
HÃ¥per det hjelper! |
|
||||
|
takk det hjalp mye!
![]() Egentlig har jeg et annet problem nå ... Jeg prøver å ta kommandoen cat <filnavn> | wc-l Vel, det synes å være et problem for lesing av siste linje fra bufferen Code:
//implementation of cat <filename> | wc -l
#include <stdio.h>
#include <string.h>
#define size 500
int main(int argc,char * argv[])
{
int pipe1[2];
int childpid;
FILE * fp;
char buffer[size];
int status;
int lines;
if(argc!=2)
{
printf("usage : mycat <file name>\n");
exit(1);
}
pipe(pipe1);
childpid=fork();
if(childpid>0)
{
close(pipe1[0]);
fp=fopen(argv[1],"r");
if(fp==NULL)
{
printf("Cannot open file");
exit(1);
}
while(fgets(buffer,sizeof(buffer),fp)!=NULL)
write(pipe1[1],buffer,strlen(buffer));
fclose(fp);
wait(&status);
close(pipe1[1]);
exit(0);
}
else
{
close(pipe1[1]);
lines=0;
while (read(pipe1[0],buffer,sizeof(buffer)) > 0)
lines++;
printf("%d",lines);
close(pipe1[0]);
exit(0);
}
}
|
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|