Comunicación entre procesos en el entorno de Linux: tuberías y tuberías bien conocidas tuberías de

  
y tuberías bien conocidas. En esta serie de autores, los autores describen varios métodos principales de comunicación entre los procesos de Linux. Entre ellos, el conducto y el famoso conducto son uno de los primeros mecanismos de comunicación entre procesos. El conducto puede utilizarse para la comunicación entre procesos relacionados. El famoso conducto supera la limitación de que el conducto no tiene nombre. Por lo tanto, además de la función del conducto, permite Comunicación entre procesos no relacionados. Reconocer las reglas de lectura y escritura de tuberías y tuberías conocidas es la clave para aplicarlas en el programa. Basado en la discusión detallada del mecanismo de comunicación entre tuberías y tuberías conocidas, este documento utiliza ejemplos para verificar las reglas de lectura y escritura. Ayuda a mejorar la percepción de los lectores sobre las reglas de lectura y escritura, y también proporciona ejemplos de aplicaciones.
1. Descripción general de Pipeline y aplicaciones de API relacionadas
1.1 Conceptos clave relacionados con Pipeline
Pipeline es uno de los formularios IPC de Unix originales que admite Linux. Tiene las siguientes características:
Pipe es half-duplex, data Solo puede fluir en una dirección; cuando dos partes necesitan comunicarse, se deben establecer dos conductos;
solo se puede usar entre procesos padre e hijo o entre procesos hermanos (procesos con parentesco);
constituye un proceso independiente Sistema de archivos: una canalización es un archivo para un proceso en ambos extremos de una tubería, pero no es un archivo normal. No pertenece a un sistema de archivos. En su lugar, es un portal independiente que forma un sistema de archivos separado y existe solo en la memoria.
Lectura y escritura de datos: el contenido escrito por un proceso en la canalización se lee mediante el proceso en el otro extremo de la tubería. El contenido escrito se agrega al final del búfer de tubería cada vez, y los datos se leen desde el encabezado del búfer cada vez.
1.2 Creación de tubería:
#include int pipe (int fd [2])
Los dos extremos de la tubería creada por esta función están en medio de un proceso, por lo que no hay mucho significado en la aplicación real, por lo tanto, una Después de que el proceso crea una tubería por otra (), generalmente procesa un proceso secundario y luego implementa la comunicación entre los procesos padre e hijo a través de la tubería (por lo que no es difícil iniciarlo, siempre que haya una relación entre los dos procesos, el parentesco aquí significa Los ancestros comunes pueden usar la tubería para comunicarse).
1.3 Reglas de lectura y escritura de tuberías:
Ambos extremos de la tubería se pueden describir con las palabras de descripción fd [0] y fd [1] respectivamente. Cabe señalar que los dos extremos de la tubería son tareas fijas. Es decir, un extremo solo se puede usar para la lectura, que se representa con la palabra de descripción fd [0], que se llama el extremo de lectura de canalización, el otro extremo solo se puede usar para escribir, que se representa con la palabra de descripción fd [1], que se llama el extremo de escritura de la tubería. Intentar leer los datos del escritor de tuberías o escribir datos en el lector de tuberías generará un error. Las funciones generales de E /S de archivos se pueden usar para tuberías tales como cerrar, leer, escribir, etc.
Lectura de datos de la canalización:
Si el final de escritura de la canalización no existe, se considera que se ha leído el final de los datos, y la función de lectura devuelve el número de byte de lectura a 0;
Cuando finaliza la escritura de la tubería Cuando está presente, si el número de bytes solicitado es mayor que PIPE_BUF, se devuelve el número de bytes de datos existentes en la tubería. Si el número de bytes solicitado no es mayor que PIPE_BUF, se devuelve la cantidad de bytes de datos existentes en la tubería (en este caso, en la tubería) La cantidad de datos es menor que la cantidad de datos solicitada) o el número de bytes devueltos (en este caso, la cantidad de datos en la tubería no es menor que la cantidad de datos solicitada). Nota: (PIPE_BUF se define en include /linux /limits.h, y las diferentes versiones del kernel pueden variar. Posix.1 requiere que PIPE_BUF tenga al menos 512 bytes y red hat 7.2 a 4096). Sobre la validación de la regla de lectura de tuberías:
/************** * readtest.c * ************** /# include #incluir
Escribir datos en la tubería:
Al escribir datos en la tubería, Linux no garantiza la atomicidad de la escritura. Si hay un área libre en el búfer de la tubería, el proceso de escritura intentará escribir en la tubería. Datos Si el proceso de lectura no lee los datos en el búfer de tubería, la operación de escritura se bloqueará todo el tiempo.
Nota: Sólo tiene sentido escribir datos en la tubería cuando existe el final de lectura de la tubería. De lo contrario, el proceso que escribe datos en la tubería recibirá la señal SIFPIPE del kernel, que la aplicación puede procesar o ignorar (la acción predeterminada es la terminación de la aplicación).
Verificación de las reglas de escritura de la canalización 1: la dependencia del extremo de escritura en el extremo de lectura
Copyright © Conocimiento de Windows All Rights Reserved