Écriture de l'entrée standard stdin et de la lecture à partir de la sortie standard stdout (UNIX/LINUX/Programmation en C)

Je travaillais sur une mission où un programme a pris un descripteur de fichier comme argument (généralement à partir de la mère dans un exec appel) et de les lire à partir d'un fichier et écrit à un descripteur de fichier, et dans mes tests, j'ai réalisé que le programme de travail de la ligne de commande et ne pas donner une erreur si j'ai utilisé de 0, 1 ou 2 en tant que descripteur de fichier. Qui fait sens pour moi, sauf que je pourrais écrire sur stdin et l'afficher sur l'écran.

Est-il une explication pour cela? J'ai toujours pensé qu'il y avait une certaine protection sur stdin/stdout et vous ne pouvez certainement pas fprintf à stdin ou fgets de 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;
}
Merci de ne pas confondre le fichier poignées avec le fichier descripteurs. Vous pouvez très bien ne pas être autorisé à fprintf à stdin (bien que je ne peux pas trouver quelque chose dans la norme interdisant explicitement) mais qui n'a aucun effet si vous pouvez write au descripteur de fichier 0.
Quelle est exactement la différence? Ne sont-ils pas l'accomplissement de la même tâche?
Une carotte et un bâton pouvez faire la même chose tâche, et pourtant ils ne sont pas la même chose, il suffit de demander votre quartier convivial âne 🙂 Poignées standard C, les descripteurs sont POSIX.

OriginalL'auteur Tim | 2011-09-12