![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| Programación de Alto Nivel Plantear preguntas acerca de C, C + +, Java, SQL, y otros lenguajes de programación aquí. |
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| programas de cliente y servidor | JCR | Programación de Alto Nivel | 8 | 04-28-2009 05:06 PM |
| Cliente / Servidor de emisión | geauxtn | AIX | 5 | 07-30-2007 09:38 AM |
| cliente / servidor | fuste | UNIX for Dummies Preguntas y Respuestas | 2 | 10-30-2006 02:19 AM |
| ntp ntp cliente y servidor | bubba112557 | Sun Solaris | 1 | 05-10-2005 11:37 AM |
| Tubos y Tuberías con nombre (FIFO) de tamaño de búfer | Jus | Sistemas de ficheros, memoria y discos | 1 | 08-20-2004 11:14 AM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
cliente / servidor de las tuberías
aquí es el concepto: el cliente lee un nombre de ruta de la entrada estándar y escribe a pipe1.The servidor lee esta ruta a partir de la pipe1 e intenta abrir el archivo para reading.If el servidor puede abrir el archivo, el servidor responde por la lectura y escritura de archivos se a pipe2; de lo contrario el servidor escribe un mensaje de error a la misma pipe.The cliente luego de la pipe2 lee y escribe que recibe a la salida estándar aquí está mi 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);
}
}
En realidad, entiendo que puede haber algunos problemas con condiciones de carrera, por eso puse 2 comandos sueño, pero aún no funciona .. en general, i wanna sychronize el leer y escribir los comandos del cliente y el servidor, pero no sé cómo ... si alguien tiene el tiempo para ver el código y darme algunos consejos, que realmente se aprecia ..... gracias de antemano .. |
|
||||
|
Wow! Eso es feo algún código que tienes ahí. Esta es la versión de trabajo: 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);
}
}
Hubo varias cosas mal. Dif. para encontrar errores. Espero que ayude! |
|
||||
|
gracias ayudó un montón! ![]() De hecho, tengo otro problema ahora mismo ... Estoy tratando de hacer que el comando cat <filename> | wc-l así, parece haber un problema en la lectura de la última línea del 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);
}
}
eche un vistazo si puedes ... thx de antemano ... |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|