Что такое "стандартный ввод"?

мне было поручено создать тестовую программу в C, который читает содержимое стандартный ввод и затем печатает их.

но я немного сомневаюсь: что именно стандартный ввод?

это то, что я набираю на клавиатуре? Это файл, который я должен прочитать?

оба?

и standard output: это консоль? файл?

5 ответов


стандарт C (например, C99 или C11) определяет, чего следует ожидать от стандарта <stdio.h> заголовок (после соответствующего #include - d это). См.stdio (3) man page. Тогда у вас есть stdin и stdout и stderr дескрипторы файлов (указатели на некоторые FILE который является абстрактным типом данных).

тот факт, что stdin связано с некоторым устройством (например, клавиатура) является конкретной реализации.

вы могли бы (но это будет неэтично и / или неэффективно) реализуйте стандарт C, например, с комнатой человеческих рабов (это неэтично, если вы используете платных работников, которые были бы просто неэффективны), вместо использования компьютера. Часто компьютеры дают вам некоторую реализацию стандарта C с помощью некоторых операционные системы.

вы можете узнать, внутри вашей программы C, если stdin - это "клавиатура" и отводит от некоторых "файл". К сожалению, AFAIK, нет стандартного способа C99 знать это.

как вы упоминаете, stdin, stdout и stderr должны быть доступны в вашей программе при запуске (т. е. после ввода main ....). Следовательно, если вы fclose the stdin поток, вы можете читать его (с getchar, scanf, getline, fgets, fscanf ... и друзей) без какого-либо предварительного ухода (так что вам не нужно fopen ее самому).

в Linux или большинстве систем Posix вы можете использовать в качестве приближения isatty(STDIN_FILENO) - см. Изетты(3) для большего-чтобы проверить, если stdin" - это "клавиатура" (путем тестирования, если это какой-то tty). См. также этой & это.


да, стандартный ввод (stdin) ожидаемых входных данных с клавиатуры. Таким образом, может быть в виде пользовательского ввода из базовой программы или из аргумента командной строки. Стандартный вывод (stdout) - это вывод кода, обычно в окно терминала. Вы можете выводить свой код практически в любом месте, т. е. в файл, в текстовое поле, браузер, но стандартом является stdout, который является терминалом.

надеюсь, это поможет.


обычно стандартным входом является клавиатура, а стандартным выходом-экран. Однако вы можете перенаправить это в командной строке, используя символы "". Командная строка типа

dir /s > "Tree.txt" 

изменит стандартный вывод для команды dir, чтобы быть указанным файлом. Так что весь вывод идет в файл. Вызываемое приложение или сама команда обычно даже не замечают разницы.


стандартный вывод (или stdout) относится к стандартизированным потокам данных, которые создаются программами командной строки (т. е. программами в текстовом режиме) в Linux и других Unix-подобных операционных системах.


stdin-это файловый дескриптор 0, вы можете получить файл в stdin по:

cat file |yourprog
#or
yourprog <file

аналогично для stdout (файловый дескриптор 1)

yourprog | someotherprog #pipe your stdout to the stdin of another program
yourprog > somefile #save stdout to a file
yourprog >> somefile #append stdout to a file

и stderr (fd 2)

yourprog 2> errlogfile

если у вас есть программа, которая принимает файл, но не обрабатывает stdin, вы можете использовать вышеуказанные форматы, делая это (предполагая -f, если аргумент входного файла) myprog -f /dev/stdin

//and a horrible example of how not to read from stdin and write to stdout
char buf[4096];
while(write(1,buf,read(0,buf,4096)));