2008-10-23 67 views
2

在C程序(p1)中,如何啓動從p1的標準輸出中讀取其標準輸入的動態構造命令(及其參數)?在**便攜式C **中,如何啓動將命令的stdin連接到啓動器的stdout的命令?

需要注意的是:

  1. 比這個標準輸出之外的方法 - > 標準輸入管道也行提供 它是跨Windows PORTABLE和 Linux操作系統。

  2. 我不能在這裏使用C++,Java,Perl,Ruby, Python等。

此外,它的Windows版本會有MinGW依賴項嗎?

重新打開:下面的問題回答了Linux的問題,但是這個問題想要一個便攜的方法。 Execute program from within a C program

+0

請注意,我寧願只使用C解決方案。 (對不起,不便!) – user10955 2008-10-23 14:42:47

回答

2

這並不是100%清楚你想要達到什麼樣的完全誠實。

但據我所知,你可以看看Boost.Process

你可以做這樣的事情

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

然後使用OS任何流中的標準輸入傾倒的東西你的孩子的過程。

無論如何,圖書館w.r.t可以實現很多功能。管道重定向和鏈接。

+0

嗯,提高。一個800磅的大猩猩,我需要鏈接和握手。我仍然會留意任何輕量級的C語言響應。謝謝,不過。 (請注意,我現在正在從條件中刪除C++。) – user10955 2008-10-23 14:37:24

1

鏈接的anser(您拒絕)指的是POSIX管道。 POSIX是C的擴展,它增加了從標準C中缺少的功能.POSIX管道是這種功能的一個很好的例子:它們被添加到POSIX,因爲標準C沒有這個功能。

4

Microsoft C運行時將其稱爲_popen而不是popen,但它在Windows(用於控制檯應用程序)和Linux中似乎具有相同的功能。

1

glib庫是用C語言編寫的,具有在Linux和Windows上都經過良好測試的實現。 The manual section on spawning new processes將爲您提供有關如何啓動新進程並使用g_spawn_async_with_pipes調用將其掛接到stdin和stdout句柄的信息。