Работа со стандартным вводом

Поэтому я должен реализовать программу, которая работает с текстовым файлом (.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* вероятно, лучше для большинства приложений.

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

Другие вопросы по тегам