2012-04-12 13 views
0

さて、私はCでプログラムをやっていますし、問題があります。私は、このフォーマットでファイルのパーミッションを表示する必要があります。ファイルのアクセス許可の形式を変更するにはどうすればよいですか?

drwxr-xr-x 

をしかし、これはintとして私にこの値を返すので、私はintとしての権限を取得する:

lstat(file->d_name, &info); 
printf("%d \n", info.st_mode); 

これはexempleのために示しています$ 33188

int権限をdrwxr-xr-xに変換するにはどうすればよいですか?

ありがとうございました。

よろしくお願いいたします。

+0

そしてその番号を適切なマスクと組み合わせて、何が可能であるかを判断し、それに応じてコードを生成します。あなたが怠け者だと思うなら、 'stat'のソースコードを見つけて、使用しているコードを見てください。 – Corbin

答えて

3

ファイルのモードは、アクセス許可とファイルタイプフィールドのビットセットです。これらのフラグはman stat.hで定義されています。

あなたはこのようにモードから情報を抽出することができます、グループのために

switch(mode & S_IFMT) { 
    case S_IFDIR: 
    mode_text[0] = 'd'; 
    break; 
    /* add other possibilities here */ 
    default: 
    mode_text[0] = '-'; 
} 
mode_text[1]= (mode & S_IRUSR) ? 'r' : '-'; 
mode_text[2]= (mode & S_IWUSR) ? 'w' : '-'; 
/* the third one is special; can indicates setuid as well */ 
mode_text[3]= (mode & S_IXUSR) ? (mode & S_ISUID) ? 's' : 'x' : '-'; 

など他人を。

3

chmodのドキュメントには、2つの間の関係が記述されています。

+0

ユーティリティプログラムchmod(1)ではなく、システムコールchmod(2)がthetパーミッション値のビットの意味を説明し、テストに使用されるフラグを含むヘッダファイルを特定する各許可値 – gbulmer

0

info coreutils lsのドキュメントでは、st_modeファイルモードビットの変換方法を、lsがどのように決定するかについて説明しています。しかし、lsの基本的な実装では、順番に各適切なビットをチェックし、適切な文字が設定されている場合はそれを出力し、そうでない場合は-を出力することができます。

関連する問題