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

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

Ответить
Аватара пользователя
жучара
Сообщения: 937
ОС: астралинукс

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

Сообщение жучара »

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

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

/*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
И обработать спокойно. Открыть на чтение или чего там. Так, видать, все и делают. А теперь вот другая задача возникла. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

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

Сообщение жучара »

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