В ** портативном C **, как запустить команду, соединяющую стандартный ввод команды со стандартным выводом средства запуска?

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

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

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

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

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

Вновь ОТКРЫТ: приведенный ниже вопрос отвечает на него для Linux, но этот вопрос требует переносимого метода. Выполнить программу из программы C


person user10955    schedule 23.10.2008    source источник
comment
Обратите внимание, что я бы предпочел только решение C. (Приносим извинения за неудобства!)   -  person user10955    schedule 23.10.2008


Ответы (4)


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

person bk1e    schedule 23.10.2008

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

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

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

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

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

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

person Pieter    schedule 23.10.2008
comment
Хм, буст. 800-фунтовая горилла, с которой мне нужно будет связать и пожать руку. Я по-прежнему буду следить за любыми общими легковесными ответами C. Спасибо хоть. (Обратите внимание, что сейчас я исключаю C ++ из условия.) - person user10955; 23.10.2008

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

person MSalters    schedule 23.10.2008

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

person Ben Combee    schedule 23.10.2008