我想做一個代理過程,打開真實的過程。如何創建將stdin重定向到子級的代理進程?
如果我將linux的espeak
更改爲espeak_real
而我的應用更改爲espeak
。 espeak
打開espeak_real
我得到了輸出。
我要讓可能:
- 版畫是標準輸入到控制檯
- 版畫是標準輸入到另一個進程的標準輸入
- 打印第二進程的STDOUT
我試圖在C做(我猜這也可能與原始的bash一樣)。
我想做一個代理過程,打開真實的過程。如何創建將stdin重定向到子級的代理進程?
如果我將linux的espeak
更改爲espeak_real
而我的應用更改爲espeak
。 espeak
打開espeak_real
我得到了輸出。
我要讓可能:
我試圖在C做(我猜這也可能與原始的bash一樣)。
我並不完全明白你在做什麼,但它好像是fork
,exec
,pipe
和dup2
的組合。
app
可以使用pipe
來獲得一對文件描述符,連接到一個管道(寫入一個的文件是從另一個文件讀取的)。
然後它可以叉,和孩子可以exec
app_real
。
但是在fork
和exec
之間,dup2
可以用來首先更改您想要的任何文件描述符0,1和2(但關閉實際的0,1,2)。
短的代碼示例:
int pipe_fds[2];
pipe(pipe_fds);
if (fork()==0) {
// Child
close(fds[1]); // This side is for the parent only
close(0); // Close original stdin before dup2
dup2(fds[0],0); // Now one side of the pipe is the child's stdin
close(fds[0]); // No need to have it open twice
exec(...);
} else {
// Parent
close(fds[0]); // This side is for the child only
write(fds[1],data,len); // This data goes to the child
}
'LN -s /斌/貓app' –
也許這個問題會幫助你http://stackoverflow.com/questions/7383803/writing-to-stdin-並且從-stdout-unix-linux-c-programming – Baget