3

我需要通过编写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);
            }
        }
4

3 回答 3

3

分离论点:

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

您的调用相当于调用find不带参数的程序(而且非常有趣argv[0])。

于 2012-11-22T05:44:22.040 回答
2
execl("/usr/bin/find","/usr/bin/find",  ".", "-maxdepth", "1", "-perm", "0644",(char *)NULL);
于 2012-11-22T05:48:40.640 回答
1

对于您的特定任务,使用文件树遍历( ftw) 更合适。

ftw 只是一个库,因此您无需生成外部进程即可完成工作。此外,解析结果要容易得多。

于 2012-11-22T06:53:29.447 回答