Как написать программу, обрабатывающую ввод с файла?

Модератор: Модераторы разделов

Аватара пользователя
жучара
Сообщения: 144
ОС: minix 3.1.0

Как написать программу, обрабатывающую ввод с файла?

Сообщение жучара » 27.05.2018 10:48

Друзья! Раньше особо такой задачи не стояло. Подспудно думал, что нужно делать обыкновенный разбор входных параметров (ищем в параметрах командной строки знак "<", потом "имя_файла"), но не тут -то было:

Код: Выделить всё

/*foo.c*/
#include <stdio.h>

int main (int argc, char* argv [])
{
	printf ("%s %s\n", argv [1], argv [2]);
}

Shell

user@astra:~$ gcc foo.c -o foo
user@astra:~$ ./foo < bar
(null) SSH_AGENT_PID=4403
user@astra:~$
Вот те раз. Эту последовательность параметров программа воспринимает особенно! Ну всё, собсно, нигде такой задачи я не встречал, да оно и понятно, ведь имя файла для обработки всегда можно передать именно что параметром:

Shell

user@astra:~$ ./foo bar
И обработать спокойно. Открыть на чтение или чего там. Так, видать, все и делают. А теперь вот другая задача возникла. Спасибо, кто откликнется.
Спасибо сказали:

IMB
Сообщения: 2413
ОС: Debian

Re: Как написать программу, обрабатывающую ввод с файла?

Сообщение IMB » 27.05.2018 10:59

Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 14482
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как написать программу, обрабатывающую ввод с файла?

Сообщение Bizdelnick » 27.05.2018 11:35

жучара писал(а):
27.05.2018 10:48
Эту последовательность параметров программа воспринимает особенно!
Она её вообще никак не воспринимает, более того — это не параметры. Это инструкция оболочки, которая говорит, что надо открыть файл bar на чтение и передать запускаемой программе соответствующий дескриптор в качестве stdin (то есть под номером 1). Что с этим делать — надо объяснять? ☺

P. S. Не забывайте перед обращением к argv[n] проверять, что n < argc.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 144
ОС: minix 3.1.0

Re: Как написать программу, обрабатывающую ввод с файла?

Сообщение жучара » 27.05.2018 12:31

Так я всё вспомнил, нужно применить одну из функций считывания (fgets, fread или gets), только вместо дескриптора файла stdin.
Спасибо сказали: