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 に答える