В ** portable C **, как запустить команду, соединяющую стандартный ввод команды с stdout модуля запуска? - PullRequest
2 голосов
/ 23 октября 2008

Как в программе на C (p1) запустить динамически созданную команду (и ее аргументы), которая считывает свой стандартный ввод из стандартного вывода p1?

Обратите внимание, что:

  1. Метод, отличный от этого стандартного вывода -> Трубопровод stdin также в порядке при условии это ПОРТАТИВНО через Windows и Linux.

  2. Я не могу использовать C ++, Java, Perl, Ruby, Python и т. Д. Здесь.

Кроме того, будет ли это зависеть от MinGW для сборки Windows?

REOPENED : вопрос ниже отвечает на него для Linux, но этот вопрос требует переносимого метода. Выполнить программу из C-программы

Ответы [ 4 ]

4 голосов
/ 23 октября 2008

Среда выполнения Microsoft C называет его _popen вместо popen, но, похоже, имеет те же функции в Windows (для консольных приложений) и Linux.

2 голосов
/ 23 октября 2008

Мне не на 100% ясно, чего вы пытаетесь достичь, если честно.

Но, насколько я понимаю, вы можете взглянуть на Boost.Process

Вы можете делать такие вещи, как

 bp::child cs = p.start();
 bp::postream& os = cs.get_stdin();

А затем используйте os в качестве любого потока для вывода содержимого в стандартный ввод вашего дочернего процесса.

В любом случае, с библиотекой w.r.t можно достичь очень многого. перенаправление и сцепление труб.

1 голос
/ 23 октября 2008

Библиотека glib написана на C и имеет реализации, которые хорошо протестированы как в Linux, так и в Windows. Раздел руководства по порождению новых процессов даст вам информацию о том, как запустить новый процесс и подключиться к его ручкам stdin и stdout с помощью вызова g_spawn_async_with_pipes .

1 голос
/ 23 октября 2008

Связанный ансер (который вы отклоняете) относится к каналам POSIX. POSIX - это расширение C, которое добавляет функции, отсутствующие в стандартном C. Трубы POSIX являются хорошим примером такой функции: они были добавлены в POSIX, потому что стандарт C не имеет этой функциональности.

...