| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
S3RG0
Registrado: 03 Ago 2006 Mensajes: 5
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |