Файл процесса или стандартный ввод - PullRequest
0 голосов
/ 23 октября 2018

Я создаю небольшую программу, которая обрабатывает архив;который запускается так:

"./program file.txt".

Если второй параметр не найден, он будет обрабатываться из stdin

"cat file.txt | ./program"

Но внутри кода ... Я знаю, что могу сделать это:

if (argc==2){
    FILE* archive = argv[1];
    function_1(archive);
    function_2(archive);
    ...
    function_n(archive);
else{
    function_1(stdin);
    function_2(stdin);
    ...
    function_n(stdin);
}

Но могу ли я в любом случае так поступить?

file* archive;
if (argc==2){
    archive = argv[1];
else{
    archive = stdin;
}
function_1(archive);
function_2(archive);
...
function_n(archive);

Потому что я хотел бы написать меньше кода!

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы можете создать archive с помощью троичного оператора:

FILE* archive = (argc == 2) ? fopen(args[1], "r") : stdin;

Конечно, в конце вы также должны закрыть его чеком.

0 голосов
/ 23 октября 2018

Поскольку stdin является переменной типа FILE *, вы можете сделать именно это:

FILE *archive;
if (argc==2){
    archive = fopen(argv[1], "r");
else{
    archive = stdin;
}
...