イム(しかし、質問は一般的なファイルのための主である)、それは次の行オープンシステムコール
fd = open(path,0);
での作業が、次の行で失敗したのデバイスファイルを開こうとすると
fd = open(path,O_RDONLY,0777)
(偶モード0777なし) 私はだけではなく、フラグの0をputing、なぜその作業の意味が何であるかを理解しません。
イム(しかし、質問は一般的なファイルのための主である)、それは次の行オープンシステムコール
fd = open(path,0);
での作業が、次の行で失敗したのデバイスファイルを開こうとすると
fd = open(path,O_RDONLY,0777)
(偶モード0777なし) 私はだけではなく、フラグの0をputing、なぜその作業の意味が何であるかを理解しません。
The POSIX specifications for open()
が必要と定義された定数O_EXEC
、O_RDONLY
は、O_WRONLY
、O_RDWR
、またはO_SEARCH
がflagsに含まれるが、それらは値にこれらの定数のを指定していないの正確に一つ。確かに彼らは、理論的に、「歴史的な実装では、O_RDONLY
の値はゼロです」と述べています。このような実装では、フラグを0として指定することは、O_RDONLY
を指定することと同じです。
POSIXの用語「歴史的」の使用は、O_RDONLY
の値が0であることはまれであることを示唆するものではありません。それどころか、現在の実装では非常に一般的です。それにもかかわらず、O_RDONLY
を意味するときにフラグを0に指定しないでください。フラグ定数の定義が異なるシステムでは、コードが破壊されたままになります。
フラグが0であるが、フラグがO_RDONLY
(疑わしいと思われる)ではなく実際に開くことができる場合は、O_RDONLY
の値が実装と異なる場合があります。次に、必須定数グループの他のメンバの1つが値0を持ち、対応するモードでターゲットファイルを開くことができるかもしれません - たとえば、パスがディレクトリを指定していて、値があるO_SEARCH
0以外の場合は、未定義の動作がopen()
から発生しています。 UBはエラーインジケータを返すようにマニフェストする必要はなく、それが起こらない場合は、何も表示されません。
補遺:(戻っ-1で示されるように)open(path, O_RDONLY)
があなたのために失敗したことを考えると、perror()
経由で診断を印刷することにより、errno
、または、より良いを調べることによって、エラーの原因を探るために価値があるだろう。