2012-10-01 85 views
0

我嘗試編輯我的文章,因爲它存在一些問題。C中的多個管道,等待輸入的程序

我仍然迷失,試圖擴大我的程序。當我運行程序時,進入只需要一些輸入的狀態 - 就像,也許是因爲我沒有在我的管道過程中輸入第二個程序。

我試圖遵循這個職位代碼:Does this multiple pipes code in C makes sense?

我的代碼如下所示:

int status; 
int newpipe[2]; 
int oldpipe[2]; 

pid_t pid; 
int countcmds = 0; 
while (firstCmd != NULL) { 
    printf("En iteration \n"); 
    if (firstCmd -> next != NULL) { 
     pipe(newpipe); 
    } 
    pid = fork(); 

    if(pid == 0){ 
     if (firstCmd -> prev != NULL) { 
      dup2(oldpipe[0],0); 
      close(oldpipe[0]); 
      close(oldpipe[1]); 
     } 
     if (firstCmd -> next != NULL) { 
      close(newpipe[0]); 
      dup2(newpipe[1],1); 
      close(newpipe[1]); 
     } 
     char** file = firstCmd -> cmd; 
     char* specfile = *file; 
     execvp(specfile, file); 
    } 
    else{ 
     waitpid(pid, &status, 0); 
     if (firstCmd -> prev != NULL) { 
      close(oldpipe[0]); 
      close(oldpipe[1]); 
     } 
     if(firstCmd -> next != NULL){ 
      oldpipe[0] = newpipe[0]; 
      oldpipe[1] = newpipe[1]; 
     } 
     countcmds++; 
     firstCmd = firstCmd -> next; 
    } 
} 
if(countcmds){ 
    close(oldpipe[0]); 
    close(oldpipe[1]); 
} 
+0

請問[這個問題]的答案(http://stackoverflow.com/questions/948221/does-this-multiple-pipes-code-in-c-makes-sense)有幫助嗎? – legoscia

+0

我看到你接受的答案,謝謝。現在,你能準確解釋「不起作用」是什麼意思嗎?你得到了什麼,你期望什麼? – netcoder

+0

現在自己發現了,現在工作:)! – user1090614

回答

1

execvp(cmd,numberFile);參數是路要走,其原型是:

int execvp(const char *file, char *const argv[]); 

不知道你的cmd看起來像什麼,但是你正在爲第二個參數提供一個int

execute_piping()中的execvp也看起來可疑,因爲您似乎將完整的參數列表提供給第一個參數。

注意:char *argv[]表示argv是指向char的指針數組。我在任何地方都看不到,但是您應該顯示結構CmdShellCmd是什麼。

,我從你的代碼的這些警告:

gash.c:33: warning: passing argument 1 of ‘execvp’ from incompatible pointer type 
gash.c:33: warning: passing argument 2 of ‘execvp’ makes pointer from integer without a cast 

它是固定的警告是一個好主意,警告是你的朋友。