Pregunta

Tengo algunas preguntas básicas acerca de tuberías estoy seguro acerca de.

a) ¿Cuál es el comportamiento estándar si el proceso de escritura de una tubería se mató (es decir.SIGKILL SIGINT) ¿cerca de la tubería?No se enjuague la tubería?O es el comportamiento indefinido?

b) ¿Cuál es el comportamiento estándar si un proceso se devuelve normalmente?Está garantizado para enjuagar el tubo y cierre de la tubería?(sin explícitamente a hacerlo, por supuesto).

Me gustaría que estas respuestas sean tan general como sea posible, pero en realidad si que depende enteramente de la OS especificaciones puedo aceptar eso!Sin embargo, si hay un estándar Posix o una corriente se define el comportamiento de Windows estaría muy agradecida de saber.

Gracias.

¿Fue útil?

Solución

una.¿Cuál es el comportamiento estándar si el proceso de escritura de una tubería se mató (es decir.SIGKILL SIGINT) ¿cerca de la tubería?No se enjuague la tubería?O es el comportamiento indefinido?

SIGKILL nunca permite que la limpieza - el proceso muere, muerto.Con SIGINT, depende de si el proceso se encarga de la señal.Si es así, es probable que la salida a través de la salida(2), que vacía de e/S estándar identificadores de archivo.La pregunta es - era el tubo conectado a la salida estándar o a través de popen()?Si es así, pendientes de los datos almacenados en búfer puede se vacían;si no, no es el búfer de datos para lavado es inmaterial.

Si no se ha leído los datos en la tubería, que los datos permanecen en el tubo, listo para que el lector recoger - suponiendo que no es un lector.

b.¿Cuál es el comportamiento estándar si un proceso se devuelve normalmente?Está garantizado para enjuagar el tubo y cierre de la tubería?(sin explícitamente a hacerlo, por supuesto).

Depende de si el tubo estuviera conectado a través de e/S estándar o no.Si no, no hay nada pendiente.Si es así, entonces sí, cualquier tipo de material en los tampones se vacían como el estándar de e/S de corriente está cerrada.


c.Gracias por la info sobre las señales y los no leídos los datos, pero estoy un poco confundido acerca de la I/O estándar de conexión de las tuberías.Después de que usted ha mencionado popen() busqué y la página man dice que su valor de retorno idénticos a los de una secuencia de e/S y los arroyos son totalmente amortiguada por defecto.No estoy claro sobre la diferencia entre los dos ni entiendo que la diferencia viene.

El sistema básico de la llamada para la creación de las tuberías pipe(2).Crea dos descriptores de archivo, uno para leer el final de la tubería, una para el final de escritura.Si usted no hace nada más con ellos, entonces quedan como descriptores de archivo, con sin búfer de salida (a través de la escritura(2) y relacionados con el sistema de llamadas).Si el proceso termina, no hay almacenamiento temporal en la solicitud;el tubo es cerrado.

Si usted utiliza popen(3), entonces se hace mucho más trabajo para usted.Todavía invoca pipe(2) para crear las tuberías, pero a continuación, hace una fork(2).El niño organiza la correcta configuración de los tubos y se inicia el proceso hijo.El padre también se cierra la no utilizadas al final de la tubería, y los usos fdopen(3) para crear un estándar de e/S de archivo de secuencia para el proceso de llamada a utilizar.

Con la secuencia de archivo, si no hay datos en el buffer de e/S, luego de un cierre o equivalente se asegurará de que los datos se vacían y el descriptor de archivo es cerrado.

Otros consejos

El comportamiento normal es que todos los descriptores de archivos se cierran cuando un proceso termina. Esto significa que un tubo, como cualquier otro descriptor de fichero abierto, se cierra normalmente.

Un aspecto interesante de tuberías, sin embargo: en POSIX, si un proceso escribe a una tubería que se ha cerrado, el autor recibirá una señal, SIGPIPE.


Editar:

Una advertencia: La diferencia entre s SIGx terminación y una terminación normal es que, al igual que cualquier otro archivo de escritura, puede perder datos que han sido tamponada (a través de una escritura de archivos) y aún no escrito para el descriptor de archivo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top