Использование "<" для перенаправления ввода файла с командами, которые уже работают с файлами [дубликат]

0
25.10.2016, 17:49
1 ответ

Либо будет работать, если команда поддерживает чтение из стандартного ввода (форма command ) или из именованного файла в списке аргументов. Даже tcsh поддерживает команду , так что синтаксис достаточно переносим; может ли данная команда прочитать файл в списке аргументов (или стандартном вводе), зависит от команды; ed(1), например, считывает команды из стандартного ввода, поэтому не может прочитать файл из стандартного ввода.

На уровне C команда, которая считывает данные из стандартного ввода или именованного файла, будет выполнять что-то вроде

#include <err.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *fhandle;

    // option processing here ...

    if (argc == 0 || strncmp(*argv, "-", (size_t) 2) == 0) {
        fhandle = stdin;
    } else {
        if ((fhandle = fopen(*argv, "r")) == NULL)
            err(1, "could not open '%s'", *argv);
    }

    // read from fhandle here, which is either from stdin or a file ...
}

Некоторые команды требуют, чтобы форма - указывала на чтение из стандартного ввода, другие будут делать это автоматически (как в вышеупомянутом коде), когда список аргументов пуст. Иначе код в любом случае будет иметь дело с fhandle и не заботится о том, откуда поступают входные данные (если только сообщение об ошибке не должно включать имя файла, но это может быть застрять в дополнительной переменной).

0
28.01.2020, 04:49

Теги

Похожие вопросы