执行ls -l | grep D |时出错grep De

时间:2014-09-27 18:11:30

标签: linux operating-system

我是操作系统的新手,我正在尝试执行下面提到的以下命令,但我无法解决为什么它不起作用。

我正在尝试执行命令

ls -l | grep D|grep De

这是我的代码 -

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
    int fd[2];
    int fd2[2];
    pipe(fd);
    if(!fork())
    {
        pipe(fd2);
        if(!fork())
        {
            close(0);
            dup(fd[0]);
            close(1);
            close(fd[1]);
            dup2(fd2[1],fd[0]);
            close(fd[0]);
            execlp("grep","grep","D",NULL);
        }
        else
        {
            close(fd[0]);
            dup(fd2[0]);
            close(fd[1]);
            execlp("grep","grep","De",NULL);
        }
    }

    else
    {
        close(1);
        dup(fd[1]);
        close(0);
        execlp("ls","ls","-l",NULL);
    }
    return 0;
}

PLease帮助我执行此命令。 提前谢谢你

1 个答案:

答案 0 :(得分:0)

以下是从c代码执行这些命令的更简单方法:

 #include <stdio.h>
 #include <string.h>

 int main ()
 {
    char command[50];

    strcpy( command, "ls -l | grep D|grep De" );
    system(command);

   return(0);
 } 

system命令将命令指定的命令名或程序名传递给要由命令处理器执行的主机环境,并在命令完成后返回。

如果命令在将来过于复杂,这是执行shell脚本的另一种方法:

#include <stdio.h>
#include <stdlib.h>

#define SHELLSCRIPT "\
ls -l | grep D|grep De"

int main()
{
puts("Will execute sh with the following script :");
puts(SHELLSCRIPT);
puts("Starting now:");
system(SHELLSCRIPT);
return 0;
}

在C中使用#define SHELLSCRIPT指令来定义一个命名常量:SHELLSCRIPT,其中包含shell脚本。

每行末尾的反斜杠\用于在下一行中键入代码,以提高可读性。

如果您有任何疑问,请与我们联系!