我正在寫一個簡單的代碼來實現unix/linux外殼的管道功能。簡單的外殼與管道()函數
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void
cisshPipe(char* command1[], char* command2[])
{
int fd[2];//create array for two file descritors
pid_t childPid;//To set for child process
pipe(fd);//To create pipeline here
if((childPid=fork())==-1)
{
perror("fork here");
exit(1);
}
//The below is the real meat for this subroutine
if(childPid==0)//If child process
{
close(fd[0]);//To close the input of child
dup(fd[0]);//To duplicate the input, for the later process
}
else//For the real output
{
close(fd[1]);//To close the parent output first
execvp(command2[],command2);
}
}
但是,我在「execvp(command2 [],command2)」上得到了一些編譯錯誤,在這裏預期的表達式。我認爲這是由於我使用dup()函數將子輸出傳遞給父輸入。有任何建議來解決它嗎?
一些更新:
感謝您的答案約翰。我解決了編譯問題。但是當我輸入「ls | sort」時它正在執行管道功能,我認爲這仍然是dup()問題的傳遞。
請張貼的確切消息。錯誤是什麼告訴你什麼是錯的... – clcto 2014-11-06 20:17:29
謝謝你的回覆。現在修復它。 – 2014-11-06 20:21:21
您是否閱讀過您要撥打的功能的文檔[execvp(3)](http://man7.org/linux/man-pages/man3/execvp.3.html)?您應該按照記錄調用它... – 2014-11-06 20:23:20