Hilo
TALLER DE PROGRAMACIÓN AVANZADA UNIDAD III MC. GERARDO BELTRÁN GUTIÉRREZ PROFESOR
Tuberías (Pipes)
Las tuberías o “pipes” simplemente conectan la salida estándar de un
proceso con la entrada estándar de otro. Normalmente las tuberías son de un solo sentido.
Las tuberías suelen ser “half-duplex”, es decir, de un único sentido, y se
requieren dostuberías “half-duplex” para hacer una comunicación en los dos sentidos, es decir “full-duplex”.
Las tuberías son, por tanto, flujos unidireccionales de bytes que
conectan la salida estándar de un proceso con la entrada estándar de otro proceso.
Tuberías (Pipes)
Una tubería tiene en realidad dos descriptores de archivo: uno para el
extremo de escritura y otro para el extremo de lectura.int p[2]; pipe(p);
Una vez creado un pipe, se podrán hacer lecturas y escrituras de
manera normal, como si se tratase de cualquier archivo. Para asegurar la unidireccionalidad de la tubería, es necesario que tanto padre como hijo cierren los respectivos descriptores de archivos que no serán usados.
Tuberías (Pipes) Ejemplo: Unidireccional
#include main(int argc, char *argv[]) { FILE*da; // Descriptor de archivos tipo FILE int suma=0, p[2]; Descriptor de tuberia char valor1[20], valor2[20]; // Variables de trabajo pipe(p); // Crea Tuberia int hijo=fork(); //Crea proceso hijo if(hijo==0) { // Codigo el proceso hijo close(p[1]); //cierra la escritura para el hijo da=fdopen(p[0],"r"); //convierte a descriptor a FILE fscanf(da,"%s %s", valor1, valor2); //recibe los datos a sumardesde el padre printf("La suma es = %d\n", atoi(valor1)+atoi(valor2)); //Imprime resultado close(p[0]); //Cierra tuberia } else { //Codigo del proceso padre close(p[0]); //cierra la lectura da=fdopen(p[1],"w"); fprintf(da,"%s %s", argv[1],argv[2]); // Envia por la tuberia los datos al proceso hijo } }
Tuberías (Pipes)
La implementación de una comunicación bidireccional entre dos
procesosmediante tuberías, requiere la creación de dos tuberías diferentes (a[2] y b[2]), una para cada sentido de la comunicación.
En cada proceso habrá que cerrar descriptores de archivo diferentes
que no serán utilizados.
Tuberías (Pipes) Ejemplo: Bidireccional
#include main(int argc, char *argv[]) { FILE *da; // Descriptor de archivos tipo FILE int suma=0, a[2], b[2]; //Descriptores detuberias char valor1[20], valor2[20]; // Variables de trabajo pipe(a); // Crea Tuberia pipe(b); // Crea Tuberia int hijo=fork(); //Crea proceso hijo if(hijo==0){ // Codigo el proceso hijo close(a[1]); //cierra la escritura para el hijo close(b[0]); //cierra la lectura para el hijo da=fdopen(a[0],"r"); //convierte a descriptor a FILE fscanf(da,"%s %s", valor1, valor2);//recibe datos a sumar desde elproceso padre suma = atoi(valor1)+atoi(valor2); fclose(da); da=fdopen(b[1],"w"); fprintf(da, "%d", suma); close(a[0]); //Cierra tuberia
Tuberías (Pipes) Ejemplo: Bidireccional
else { //Codigo del proceso padre close(a[0]); //cierra la lectura close(b[1]); //cierra la escritura da=fdopen(a[1],"w"); fprintf(da,"%s %s", argv[1],argv[2]); // Envia los datos al proceso hijo fclose(da);da=fdopen(b[0],"r"); fscanf(da,"%d", &suma); printf ("la suma es = %d",suma); } }
Comunicación por red
Muchas de las aplicaciones que usamos todos los
días, como el correo electrónico o los navegadores web, utilizan protocolos de red para comunicarse.
El protocolo mas utilizado para estas aplicaciones
esta basado en el modelo TCP/IP
El modelo TCP/IP
El modelo TCP/IP, influenciado porel modelo OSI,
también utiliza el enfoque modular (utiliza módulos o capas), pero sólo contiene cuatro:
El modelo TCP/IP
capa de acceso a la red: especifica la forma en la
que los datos deben enrutarse, sea cual sea el tipo de red utilizado; capa de Internet: es responsable de proporcionar el paquete de datos (datagrama); capa de transporte: brinda los datos de enrutamiento,...
Regístrate para leer el documento completo.