2017-07-11 11 views
1

私はUbuntu 16.04をカーネルバージョン4.8.0とglibcバージョン2.23で動かしています。フラグO_DIRECTORYO_CREATopenを実行し、そのディレクトリが存在しない場合は、ディレクトリの代わりに通常のファイルが作成されます。その直感的でない動作を修正するための回避策はありますか?DIRECTORYとO_CREATのフラグがついている直観的な振る舞い

答えて

3

私はopenのmanページが正しくO_DIRECTORYO_CREATの組み合わせが意図されていない理解します。ファイル名がディレクトリを指定しない場合

O_DIRECTORYは失敗するはずです。ここでは、「ディレクトリ」を「既存のディレクトリ」と解釈します。

最初にmkdirを使用することがあります。 mkdirは、ディレクトリがすでに存在する場合はエラーコードを返します。 mkdirによって返された値は無視されます。その後、O_DIRECTORYでファイルを開く:悪い引数の組み合わせを知らせるためにすべてのエラーを返すされていないため、

mkdir(the_file_name, your_desired_mode); 
f = open(the_file_name, O_DIRECTORY); 
+0

するので、open' 'の実装に誤りがあります。 – user3368561