2017-04-09 63 views
1

我目前正在研究一個貓程序。我遇到的問題是,每當我執行UNIX命令:如何在unix中解析管道或重定向操作符?

./catpr file1 file2 file3 | grep string 

我不知道如何通過指出存在的管道運營商,以紀念解析結束。我目前正在使用系統調用在C中開發這個貓程序,所以我使用argv來跟蹤參數;然而,無論何時我查看數組中對應於'|'的內容,都會出現一些非常奇怪的東西。

+1

「_每當我查看數組中對應於'|'的內容時,都會顯示出奇怪的東西。」 - 請顯示代碼。就像'if(strcmp(argv [4],「|」)== 0)'會起作用。 –

+4

管道由外殼解釋。你不必處理它。 – Ryan

+2

您可能正在閱讀數組的末尾。檢查你的'argc'。 –

回答

-1

所以你基本需要的是你需要在三個文件中搜索一個模式。

由於您已指定您正在使用系統調用來執行您可以執行的操作是將字符串作爲程序的輸入參數。只是不要編譯

以下./catpr文件1文件2文件3串

只是裏面的程序給使用grep的系統調用。我正在爲您提供完整的程序。我希望這是你所需要的。

#include <stdio.h> 
#include <string.h> 
int main(int a,char *argv[]) 
{ 
    char com[256]=""; 
    strcat(com,"cat "); 
    strcat(com,argv[1]); 
    strcat(com," "); 
    strcat(com,argv[2]); 
    strcat(com," "); 
    strcat(com,argv[3]); 
    strcat(com," | grep "); 
    strcat(com,argv[4]); //this is your search pattern 
    system(com); 
} 
+0

上述答案有什麼問題? – Sridharan

+0

它與這個問題無關...... –

+0

如果他沒有提到他正在使用**系統**調用,這可能不是一個答案。這是做他打算做的事情的另一種方式。 – Sridharan