Работа со стандартным вводом
Поэтому я должен реализовать программу, которая работает с текстовым файлом (.txt), который был помещен в stdin следующим образом: ./program [argumets] <textfile.txt
без использования таких функций, как fopen, fscanf, malloc и т. д., и я понятия не имею, как это сделать. Мне нужно работать с символами в этом текстовом файле (выводить их на экран, выводить максимальное / минимальное значение, выводить сумму и т. Д.), А НЕ с самим файлом, поэтому, возможно, у кого-нибудь есть подсказка? Спасибо.
1 ответ
Чтение из текстового файла примерно так же, как чтение с клавиатуры. Настолько, что без каких-либо специальных уловок ваша программа не сможет узнать, поступает ли ввод с клавиатуры или из файла.
Когда вам нужно использовать функцию, которая требует файл, есть stdin
, который называется "указатель файла" и имеет тип FILE*
так же, как возвращается fopen
, Указатель файла принимается функциями лайков fscanf
(но вы можете просто позвонить scanf
тогда) и fgets
(НЕ используйте gets
, он смертельно сломан и, наконец, удален из стандарта C11).
Если вам нужно использовать функции, которые принимают файловый дескриптор, который является целочисленным и возвращается, например, open
вызов и принимается такими функциями, как read
, тогда номер дескриптора файла для стандартного ввода равен 0, но вы должны обычно использовать STDIN_FILENO
постоянная. И, не смешивайте чтение из файлового дескриптора (небуферизованного) и чтение из FILE*
(буферизованный), потому что буферизация испортит данные, которые вы получите. С помощью FILE*
вероятно, лучше для большинства приложений.
Чтобы сделать это более конкретным, вы можете разработать свою программу так, чтобы вместо использования <
чтобы перенаправить входной файл, вы можете открыть входной файл в редакторе, скопировать его в буфер обмена, запустить приложение в терминале и вставить входной файл в виде текста в терминал.