1
私はUbuntu 16.04をカーネルバージョン4.8.0とglibcバージョン2.23で動かしています。フラグO_DIRECTORY
とO_CREAT
でopen
を実行し、そのディレクトリが存在しない場合は、ディレクトリの代わりに通常のファイルが作成されます。その直感的でない動作を修正するための回避策はありますか?DIRECTORYとO_CREATのフラグがついている直観的な振る舞い
私はUbuntu 16.04をカーネルバージョン4.8.0とglibcバージョン2.23で動かしています。フラグO_DIRECTORY
とO_CREAT
でopen
を実行し、そのディレクトリが存在しない場合は、ディレクトリの代わりに通常のファイルが作成されます。その直感的でない動作を修正するための回避策はありますか?DIRECTORYとO_CREATのフラグがついている直観的な振る舞い
私はopen
のmanページが正しくO_DIRECTORY
とO_CREAT
の組み合わせが意図されていない理解します。ファイル名がディレクトリを指定しない場合
O_DIRECTORY
は失敗するはずです。ここでは、「ディレクトリ」を「既存のディレクトリ」と解釈します。
最初にmkdir
を使用することがあります。 mkdir
は、ディレクトリがすでに存在する場合はエラーコードを返します。 mkdir
によって返された値は無視されます。その後、O_DIRECTORY
でファイルを開く:悪い引数の組み合わせを知らせるためにすべてのエラーを返すされていないため、
mkdir(the_file_name, your_desired_mode);
f = open(the_file_name, O_DIRECTORY);
するので、open' 'の実装に誤りがあります。 – user3368561