/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

ANSI C: necesito ayuda con las tuberias

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
S3RG0



Registrado: 03 Ago 2006
Mensajes: 5

MensajePublicado: 04/08/2006 10:10 am
Título: ANSI C: necesito ayuda con las tuberias

Buenas!!!

Todos sabemos como funciona una tuberia, enviar la salida de un proceso a la entrada del otro, hasta aqui todo claro xo bien....no se como hacerlo se que tengo que crear un proceso hijo con fork, que tengo que abrir la tuberia y que tengo que cerrarla (es decir, que se muy poco), pues bien haber si alguien me puede ayudar, me lo puede explicar y ponerme un ejercicio de ejemplo.

Muxas gracias!!
Volver arriba
scanfernan



Registrado: 15 Ago 2005
Mensajes: 150
Ubicación: PUEBLA,PUE

MensajePublicado: 04/08/2006 5:57 pm
Título:

PIPE
SINOPSIS
#include <unistd.h>
int pipe(int filedes[2]);
DESCRIPCIÓN
Crea un canal de comunicación. fildes al retorno contiene
dos file descriptors, fildes[0] contiene el descriptor de
lectura y fildes[1] el de escritura.
La operación de lectura en fildes[0] accede a los datos
escritos en fildes[1] como en una cola FIFO (primero en llegar,
primero en servirse).
RETORNO
Retorna 0 si no hay error y -1 si hay algún error.

Una vez se dispone de la pipe se puede emplear como descriptores normales, es decir, se puede escribir con write, leer con read y cerrar cualquiera de ellos con close. Al leer del descriptor de la pipe para lectura se obtendrá EOF (fin de fichero) cuando se hayan cerrado TODOS los descriptores de escritura que haganreferencia a esa pipe, sean del proceso que sean.

Ejemplo de utilización de la llamada pipe:
Código:

/* pipe.c - pipe entre procesos padre e hijo */
#include <stdlib.h>
#include <unistd.h>
#define LEER            0
#define ESCRIBIR        1
int main ()
    {
    int descr[2];       /* Descriptores de E y S de la pipe
*/
    int  bytesleidos;
    char mensaje[100], *frase="Veremos si la transferecia es
buena.";
    printf ("Ejemplo de pipe entre padre e hijo.\n");
    pipe (descr); /* Crea la pipe */
    if (fork () == 0) /* Crea un nuevo proceso. Este nuevo
proceso tiene una copia de las variables del padre y por tanto
tiene acceso a la pipe mediante dos entradas en SU tabla de
descriptores de fichero */
       { /* Código ejecutado por el hijo. Es el que va a
escribir. */
/* El hijo no va a leer así que cierra su descriptor de
lectura */
       close (descr[LEER]);
       write (descr[ESCRIBIR], frase, strlen(frase)+1);
/* Cierra el descriptor de escritura que ya no necesita para
que el otro proceso sepa que no va a haber más escrituras */
       close (descr[ESCRIBIR]);
       }
    else
       { /* Código que va a ejecutar el proceso padre */
/* Cierra el descriptor de escritura dado que no lo va a
emplear. Si no lo cerrase quedaría un descriptor para escribir
en la pipe abierto, por lo que no se leería EOF nunca */
       close (descr[ESCRIBIR]);
       bytesleidos = read (descr[LEER], mensaje, 100);
       printf ("Bytes leidos: %d\n", bytesleidos);
       printf ("Mensaje: %s\n", mensaje);
       close (descr[LEER]);
       }
    }

_________________
- Si el Debuggear es el proceso de remover Bugs, entonces el programar debe ser el proceso de ponerlos.
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com