我需要执行以下Linux命令:ls -la |排序| wc -l和我必须使用exec函数......这是我的代码:
x = fork();
char * args[] = { "ls", "-la" , "|", "sort" , "|" , "wc", "-l" };
if(x == 0){ //Father
//Dad validations
}else{
execlp(args[0],args[0], args[1],args[2],args[3],args[4],args[5],args[6], NULL);
perror("Exec error\n");
exit(1);
}
命令正常分离,但当我把它们放在一起时,我收到此错误消息:
ls: cannot access |: No such file or directory
ls: cannot access sort: No such file or directory
我猜这个错误在Linux管道中
谢谢你的时间!
答案 0 :(得分:2)
请尝试执行以下参数:
char * args[] = { "bash", "-c" , "ls -la | sort | wc -l" };
这是必要的,因为您要使用的管道语法(以及从一个进程到另一个进程的结果输出管道)实际上是shell的一个功能。因此,为了能够execlp
以这种方式格式化的命令,我们需要执行shell(在这种情况下为bash
)并将其作为带有-c
标志的字符串提供给它