C如何使用exec与linux命令和管道

时间:2016-03-28 20:27:44

标签: c exec

我需要执行以下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管道中

谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

请尝试执行以下参数:

char * args[] = { "bash", "-c" , "ls -la | sort | wc -l" };

这是必要的,因为您要使用的管道语法(以及从一个进程到另一个进程的结果输出管道)实际上是shell的一个功能。因此,为了能够execlp以这种方式格式化的命令,我们需要执行shell(在这种情况下为bash)并将其作为带有-c标志的字符串提供给它