![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| programas cliente e servidor | JCR | Alto Nível de programação | 8 | 04-28-2009 05:06 |
| Cliente / Servidor Emissão | geauxtn | AIX | 5 | 07-30-2007 09:38 |
| cliente / servidor | fuste | UNIX para Dummies Perguntas & Respostas | 2 | 10-30-2006 02:19 |
| ntp ntp servidor e cliente | bubba112557 | Sun Solaris | 1 | 05-10-2005 11:37 |
| Tubos e pipes nomeados (FIFO) tamanho do buffer | Jus | Filesystems, Discos e Memória | 1 | 08-20-2004 11:14 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
cliente / servidor tubos
aqui é o conceito:
o cliente lê um caminho a partir da entrada padrão e escreve-lo para pipe1.The servidor lê este caminho a partir do pipe1 e tenta abrir o arquivo para o servidor reading.If pode abrir o arquivo, o servidor responde pela leitura e escrita é o arquivo a pipe2; caso contrário, o servidor escreve uma mensagem de erro para o mesmo cliente pipe.The em seguida lê e escreve a partir da pipe2 que recebe para a saída padrão aqui é o meu código: Código:
#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);
}
}
geralmente quero sychronize a ler e escrever comandos do cliente e do servidor, mas não sei como ... se alguém tem o tempo para ver o código e me dar alguns conselhos, vai ser realmente apreciados ..... thanks in advance .. |
|
||||
|
Uau! Isso é feio algum código que você tem aí. Aqui está o trabalho versão:
Código:
#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);
}
}
Hope it helps! |
|
||||
|
graças que me ajudou imenso!
![]() Na verdade, tenho outro problema agora ... Estou tentando fazer o comando cat <filename> | wc-l bem, parece haver um problema na leitura da última linha do buffer Código:
//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);
}
}
|
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|