ディレクトリ権限に奇妙な問題があります。
C++ アプリケーションでフォルダを作成します。
mkdir( "foldername", 777 );
しかし、そのフォルダにファイルを作成しようとすると、問題が発生して戻ってきfopen()
ます。そのため、確認してみると、作成されたフォルダに対して次の権限があります。NULL
errno
Permission denied
dr----x--t
(ルートフォルダにありますdrwxrwxr-x
)
探してみると、この珍しいt
意味は「一時的」ですが、それがどういう意味なのか全くわかりません。
chmod 777 foldername
これはシェルで機能し、プロパティをに設定しますdrwxrwxrwx
が、毎回手動で実行することはできません。
質問:どんな手がかりがありますか?私のアプリケーションがフォルダのプロパティを正しく設定しないのはなぜですか?この「一時的な」属性の意味は何ですか?
(システムはUbuntu 12.04です)
ベストアンサー1
t
「一時」ではありません。これは、固定ビットがセットされたことを意味します。からman ls
:
t [表示] 固定ビットがセットされ(モード1000)、検索可能または実行可能です。 (chmod(1)またはSticky(8)を参照してください。)
設定したので固定ビットがここに設定されています少数777(1411年8月)、8進数777(10進数511)。0777
代わりに、8進数を使用して作成する必要があります777
。
mode
また、toパラメータの最終効果にはmkdir
umaskとのAND演算も含まれることに注意してください。からman 2 mkdir
:
パラメーター・パターンは使用する権限を指定します。プロセスのumaskを介して一般的な方法で修正されます。作成されたディレクトリの権限は(mode&〜umask&0777)です。
これが影響を受ける場合は、パターンパラメータを使用しないことをお勧めしますchmod
。mkdir
最終警告:モード777はほぼ完了しました。いいえあなたが本当にしたいこと。すべてのユーザーにグローバルにディレクトリを開くのではなく、ディレクトリに適切なモードと所有者/グループを設定することをお勧めします。より複雑なルールが必要な場合は、ACLの使用を検討してください。