Что такое "стандартный ввод"?
мне было поручено создать тестовую программу в 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)));