ファイル属性のスティッキービットとGUIDを含むファイルのアクセス権を取得しようとしています。それはすべてのファイルで機能していないようです。スティッキービットが動作しないファイルのアクセス許可
char *permstr = malloc(sizeof(char) * LEN);
snprintf(permstr, LEN, "%c%c%c%c%c%c%c%c%c%c", ftpe, (sb->st_mode & S_IRUSR) ? 'r' : '-',
(sb->st_mode & S_IWUSR) ? 'w' : '-', (sb->st_mode & S_ISUID) ? (sb->st_mode & S_IXUSR ? 's' : 'S') :
(sb->st_mode & S_IXUSR ? 'x' : '-'),
(sb->st_mode && S_IRGRP) ? 'r' : '-', (sb->st_mode & S_IWGRP) ? 'w' : '-',
(sb->st_mode & S_ISGID) ? (sb->st_mode & S_IXGRP ? 's' : 'S') : (sb->st_mode & S_IXGRP ? 'x' : '-'),
(sb->st_mode & S_IROTH) ? 'r' : '-', (sb->st_mode & S_IWOTH) ? 'w' : '-',
(sb->st_mode & S_ISVTX) ? (sb->st_mode & S_IXOTH ? 't' : 'T') : (sb->st_mode & S_IXOTH ? 'x' : '-'));
私はいくつかの通常のファイルでそれを試してみましたが、それは動作しますが、それは間違った出力に
を与えますが、私はコマンドを探すノルマルGNUでそれをテストするとき、それがうまく機能ある特定のファイルがあります。あなたが&&
の代わりに、この中&
使用しているため
が、なぜあなたは、文字列の長さのために二つの異なるシンボリック定数を使用していますか? 'LEN'と' STR_SIZE'は異なりますか?なぜ文字列ターミネータを明示的に追加する必要があるのですか? 'snprintf'はあなたにそれを行うべきです(スペースがあれば)。そして、シンボリック定数を使用する場合、なぜ動的に割り振るのか、なぜ単純配列を作成しないのでしょうか? –
@Someprogrammerdudeありがとう、私はそれを知らなかった。 sizeof(LEN)、 '' snprintf'は私に '' sizeo'fを使ってエラーを出していたので、マクロを使うことにしました。 basiclly 'sizeof(LEN)' –
あなたのコードがいくつかのファイルでは動作するが、他のファイルでは動作しない場合、これらの種類のファイルを区別する何かを言うのが適切であるように思えます。 –