Как получить вывод другой программы в виде канала к моей программе? - PullRequest
1 голос
/ 26 января 2020

Например, у меня есть следующая программа в windows.

#include <stdio.h>

int main(int argc, char *argv[]) {
    char *input = argv[1];
    printf("your input: %s", input);
    return 0;
}

Когда я запускаю оболочку cmd и вызываю

C:\>whoami | main.exe

, я получаю в качестве вывода

your input: (null)

Первый аргумент argv[0] (само имя файла) передается правильно. Как получить выходные данные whoami в качестве входных данных для моей программы?

Редактировать : Поскольку люди в основном спрашивают код, если вы задаете вопрос, я также предоставлю код в своем ответе. Просто чтобы быть справедливым. Решение, которое я использую (спасибо Герардо Зинно), заключается в чтении со стандартного ввода, поэтому я использую scanf.

char input[1024] = {0};
read(STDIN_FILENO, input, 1024);
input[strcspn(input, "\n")] = '\0';
printf("you wrote: %s", input);
return 0;

1 Ответ

0 голосов
/ 26 января 2020

Вы должны читать с stdin точно так же, как если бы ввод исходил от пользователя, печатающего в терминале. Канал будет отправлять (связывать) stdout из whoami на stdin вашей программы.

Существует множество опций для чтения со стандартного ввода. Вы можете использовать fread с stdin в качестве последнего параметра, scanf, fscanf(stdin,...), ...

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