Почему перенаправленный ввод не считается аргументом командной строки? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь прочитать аргументы командной строки, которые были перенаправлены из файла.Команда, которую я использую: ./a.out

int main(int argc, char* argv[], char* envp[]) {
    for (int i = 1; i < argc; i++) {
        printf("%s\n", argv[i]);
    }
}

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Потому что так определен язык.Предположим, что вы говорите, что это правда -

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

Рассмотрим эту программу:

#include <stdio.h>

int is_dict(char *word)
{
    /* code to look up a dictionary */
    int result = 1;
    return result;
}

int main(int argc, char *argv[])
{
    if(argc == 2 && is_dict(argv[1]))
        printf("%s found", argv[1]);
    return 0;
}

Если программа написана таким образом, чтобы приспособить ее, товходные данные должны исходить из аргументов командной строки.Как бы вы взяли ввод, когда он не перенаправлен?Для обнаружения пропущенных входных данных потребуется больше программных издержек.

Кроме того, представьте текстовый файл, содержащий миллион слов: невозможно ожидать, что каждое слово будет иметь вид argv[n].

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

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

0 голосов
/ 09 февраля 2019

Есть много случаев, кроме простого извлечения:

dir > myfile.txt

Особенно вы можете передавать данные из одной программы в другую:

dir | more

Она отправит вывод, если dirкоманда для more команды.Поскольку запуск программы обрабатывается оболочкой ОС, она также обрабатывает перенаправление.

0 голосов
/ 09 февраля 2019

Оболочка перехватывает команды перенаправления перед подготовкой командной строки для программы:

myProg <infile -t >outfile

перейдет в программу

myProg -t

с stdin и stdout ужеперенаправлен перед началом пограммы.Таким образом, программа никогда не видит перенаправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...