ファイルのアクセス許可を 8 進数形式で取得し、それを int に保存する方法を知る必要があります。私はこのようなことを試しました:
struct stat buf;
stat(filename, &buf);
int statchmod = buf.st_mode;
printf("chmod: %i\n", statchmod);
しかし、彼の出力は次のとおりです。
chmod: 33279
777 である必要があります。
ファイルのアクセス許可を 8 進数形式で取得し、それを int に保存する方法を知る必要があります。私はこのようなことを試しました:
struct stat buf;
stat(filename, &buf);
int statchmod = buf.st_mode;
printf("chmod: %i\n", statchmod);
しかし、彼の出力は次のとおりです。
chmod: 33279
777 である必要があります。
33279 は、8 進数の 100777 の 10 進数表現です。フォーマット ID を使用して数値を 10 進数として出力するように要求したため、10 進数表現が得られます%i
。%o
8進数として出力します。
ただし、st_mode を使用すると、さらに多くの情報が得られます。(したがって、100
最初に。)S_IRWXU
(「ユーザー」のrwx情報)、S_IRWXG
(グループ)、およびS_IRWXO
(その他)の定数を使用して、所有者、グループ、およびその他の把握したパーミッションを取得する必要があります。これらはそれぞれ 700、070、および 007 で定義され、すべて 8 進表現です。これらを OR し、AND を使用して指定されたビットを除外すると、必要なデータのみが得られます。
したがって、最終的なプログラムは次のようになります。
struct stat buf;
stat(filename, &buf);
int statchmod = buf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
printf("chmod: %o\n", statchmod);
資力:
@iliasの回答が好きです。ただし、あなたが私のようで、実際に完全な chmod 値が必要な場合 (元のファイルのアクセス許可を完全に保存および復元する場合など)、このルーチンがそれを行い、先頭のゼロが削除されないようにします。
static std::string getChmodPerms(std::string sFile) {
struct stat buf;
stat(sFile.c_str(),&buf);
int statchmod = buf.st_mode;
char mybuff[50];
sprintf(mybuff,"%#o",statchmod);
std::string sResult(mybuff);
return sResult;
}
これは C++ ですが、必要に応じて C に変換するのは簡単です。