1
我正在用C語言編寫一個Shell。用戶應該能夠執行各種命令並使用管道(|)將一個命令的輸入重定向到另一個命令。主shell進程是父進程併爲每個命令分派新進程,而在子進程中,該命令由exec *()函數調用。如何重定向由fork()創建的子進程的IO並使用exec()函數?
但我不知道如何將一個子進程的標準輸入/輸出重定向到另一個。
我正在用C語言編寫一個Shell。用戶應該能夠執行各種命令並使用管道(|)將一個命令的輸入重定向到另一個命令。主shell進程是父進程併爲每個命令分派新進程,而在子進程中,該命令由exec *()函數調用。如何重定向由fork()創建的子進程的IO並使用exec()函數?
但我不知道如何將一個子進程的標準輸入/輸出重定向到另一個。
可能這可以幫助你....
int f=open(somefile, O_WRONLY | O_CREAT, S_IRWXU);
dup2(f,1); //redirecting output to file
//execute your first command here using fork
close(f);
int f=open(somefile, O_RDONLY | O_CREAT, S_IRWXU);
dup2(f,0); //this will give the ouput of the first command to stdout
//i.e. the input is present for second one
//execute your second command here
close(f);
在第二次調用DUP2,在評論,我想這是標準輸入,而不是標準輸出。 –
有更好的方式,而不是文件?我可以使用管道或其他IPC機制嗎?最後,如何將文件描述符'1'設置回stdout? –
是的,它應該是標準輸入。 如果您希望將第二個進程的輸出打印在標準輸出上,則不需要 –