C语言 如何在 unix 中解析管道或重定向运算符?



我目前正在开发一个猫程序。我遇到的问题是,每当我执行 unix 命令时:

./catpr file1 file2 file3 | grep string

我不知道如何通过指出存在管道操作员来标记解析的结束。 我目前正在使用系统调用在 C 中开发这个 cat 程序,所以我使用 argv 来跟踪参数;但是,每当我查看与"|"对应的数组中的内容时,都会出现一些非常奇怪的事情。

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

由于您已经指定使用系统调用来执行,因此您可以做的是将字符串作为程序的输入参数。只需执行以下操作即可进行编译

./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);
}