Escribir a stdin y leer desde stdout (Programación UNIX / LINUX / C)

Estaba trabajando en una tarea en la que un programa tomaba un descriptor de archivo como argumento (generalmente del padre en una llamada ejecutiva) y leía un archivo y escribía en un descriptor de archivo, y en mis pruebas, me di cuenta de que el programa trabajar desde la línea de comandos y no dar un error si utilicé 0, 1 o 2 como descriptor de archivo. Eso tenía sentido para mí, excepto que podía escribir en stdin y mostrarlo en la pantalla.

¿Hay alguna explicación para esto? Siempre pensé que había algo de protección en stdin / stdout y ciertamente no se puede imprimir a stdin o fgets desde stdout.

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
    char message[20];
    read(STDOUT_FILENO, message, 20);
    write(STDIN_FILENO, message, 20);

    return 0;
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta