2017-04-09 62 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