3

「ユーザー」(このプログラムを実行している人以外)がファイルの実行権限を持っているかどうかを確認する方法を知りたいですか?【カピ】

発信者に関する情報を提供する「アクセス」を見てきました。

私は次のようなものを探しています:-

"<cmd> <user_name> <file_name>"

ここで、<user_name>実行権限があるかどうかを取得しようとしてい<file_name>ますか?

私はC apiを探していますか?

可能な解決策:-この情報を取得するために次のアルゴリズムを使用しています

boolean_t
is_user_has_execute_permissions(char *run_as_user)
{
        /* Check world execute permission */
        if ((cmd_stat.st_mode & S_IXOTH) == S_IXOTH) {
                return (TRUE);
        }

        /* group id for run_as_user */
        getpwnam_r(run_as_user, &pw, buf, passwd_len);

        /* Check group execute permission */
        if ((cmd_stat.st_mode & S_IXGRP) == S_IXGRP) {
                if (pw->pw_gid == cmd_stat.st_gid)
                        return (TRUE);
        }

        return (FALSE);
}

誰かがこれにエラーを見ましたか?

4

2 に答える 2

2

ファイルの所有者、所有者グループ、およびその他のパーミッション ビットを返す呼び出し stat(2) が必要です。関心のあるユーザーの ID とそのグループの ID を調べる必要があるよりも、getpwent(3) と getgrouplist(3) を参照してください。最初に一致したものは、結果の権限を与えます。

于 2012-07-07T14:31:12.503 に答える
-1

コマンドラインから、Awk プログラムを簡単に使用できます。何かのようなもの

ls -l filename | awk -F '{ if (substring($1,3,1) == "x" exit(0); exit(1)}'

見つかった場合は戻りコードを 0 に設定し、見つからなかった場合は 1 に設定します。

C プログラムから、 を使用しますfstat。基本的にファイルを開く

int fd = fopen("filename", "r");

次に、ファイルの統計ブロックを取得しますfstat

fstat(fd, &bufr)

を見てくださいbufr.st_mode

fstatの説明は次のとおりです。

アップデート

OPが最初に投稿されたとき、C APIが望ましいものであるかどうかが明確ではなかったことを気まずく指摘します。

于 2012-07-07T14:29:32.200 に答える