The UNIX and Linux Forums  


Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de Alto Nivel
.
google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 08-23-2008
tolkki tolkki is offline
Usuario Registrado
  
 

Fecha: marzo 2008
Publicaciones: 7
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 ..
  #2 (Enlace permanente)  
Old 08-23-2008
temible redoubtable is offline
Usuario Registrado
  
 

Fecha: agosto 2008
Localización: Portugal
Puestos: 242
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!
  #3 (Enlace permanente)  
Old 08-24-2008
tolkki tolkki is offline
Usuario Registrado
  
 

Fecha: marzo 2008
Publicaciones: 7
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 ...
Closed Thread

Marcadores

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 01:06 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0