Я работал над назначением, где программа приняла дескриптор файла в качестве аргумента (как правило, из родителя в вызове exec), и прочитала его из файла и написала в дескриптор файла, и в ходе тестирования я понял, что программа будет работать из командной строки и не давать ошибку, если я использовал 0, 1 или 2 в качестве дескриптора файла. Это имело смысл для меня, за исключением того, что я мог написать stdin и показать его на экране.
Есть ли объяснение этому? Я всегда думал, что есть некоторая защита на stdin/stdout, и вы, конечно же, не можете fprintf для stdin или fgets из 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;
}