使用execl运行Linux命令

时间:2012-11-22 05:13:26

标签: c linux unix exec

我需要通过编写C语言程序列出当前目录中具有644权限的所有文件。 我无法使用system()并且必须使用execl()才能使用系统调用。

这是我在代码中使用的一行:

execl("/usr/bin/find", "find . -maxdepth 1 -perm 644", (char *)NULL);

问题是代码正在搜索整个磁盘而不是当前目录。 你能帮我解决一下吗?


        ...

        case 4:
            int status;
            switch (fork()){
                case -1: quit ("fork",1);
                case 0:
                execl("/usr/bin/find","find","." ,"-maxdepth" ,"1","-perm", "644",(char *)NULL) ;
                exit (200);
                default:
                wait(&status);
                exit(0);
            }
        }

3 个答案:

答案 0 :(得分:3)

分开论点:

execl("/usr/bin/find", "find", ".", "-maxdepth", "1", "-perm", "644", (char *)NULL);

您的调用等同于调用没有参数的find程序(并且非常有趣argv[0])。

答案 1 :(得分:2)

execl("/usr/bin/find","/usr/bin/find",  ".", "-maxdepth", "1", "-perm", "0644",(char *)NULL);

答案 2 :(得分:1)

对于您的特定任务,使用file tree walkftw)更合适。

ftw只是一个库,所以你不需要产生外部进程来完成工作。此外,解析结果要容易得多。