這只是較大程序的一小部分,但是我試圖從execvp獲得輸出 我使用dup2
正確設置了execvp,它指示它成管道。 當我使用read來讀取管道的全長時,我的問題就來了。我不知道每次輸入execvp
有多大,因爲根據輸入的不同,它可能會有所不同。從execvp接收輸出時,從管道中讀取適量的數據
int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == 0) {
close(fd[0]);
dup2(fd[1], 1);
execvp(msg.v,(char *[]){msg.v,NULL});
} else if (pid > 0) {
close(fd[1]);
read(fd[0],msg.v,....);
}
我曾嘗試讀一些不同的大小,但它的要麼不夠或我結束了在我知道你可以使用POPEN結束,從標準輸入輸出一些其他的東西,但得到隨機的垃圾其所需的分配我們不會使用它們來消除其他方式來獲取輸出。
有點無用信息整個程序是服務器的一部分。我做了一個服務器和一個客戶端..啓動服務器給客戶端一個終端命令,它通過一個INET流將它發送到服務器,並將輸出發送回客戶端以顯示所有沒有stdio的輸出。
我沒有提到這一點,但我們可以使用stdio不preform IO,所以我能夠循環和使用sprintf拼湊我的消息,謝謝這有助於! – Mintybacon 2012-08-07 02:14:32
@Mintybacon:你很受歡迎。問候 – jxh 2012-08-07 02:15:36