ファイル記述子はブロッキングまたは非ブロッキングです。ファイルはそうではありません。open()
非ブロッキングファイル記述子が必要な場合は、呼び出しのオプションにO_NBLOCKを追加します。
他の操作のためにFIFOを開いているプロセスがない限り、またはO_NBLOCKを指定しない限り、読み取りまたは書き込みのためにFIFOを開くとブロックされることに注意してください。読み取りと書き込みのためにそれを開くと、open()
は非ブロッキングです(すぐに戻ります)。I / O操作は、O_NBLOCKを設定するかどうかによって引き続き制御されます。
更新された質問は明確ではありません。ただし、「ファイルへの排他的アクセス」を探している場合(他の誰もファイルを開かないようにするため)、O_EXCLもO_NBLOCKも答えではありません。O_EXCLは、ファイルの作成時に何が起こるかに影響します。ファイルがすでに存在する場合、作成は失敗します。O_NBLOCKは、read()
読み取ることができるデータがない場合に操作がブロックされるかどうかに影響します。POSIXのopen()
説明を読んだ場合、ファイルへの「排他的アクセス」を要求できるものは何もありません。
ファイルモードに関する質問に答えるには:O_CREATを含める場合は、の3番目の引数が必要ですopen()
。O_CREATを省略した場合、の3番目の引数は必要ありませんopen()
。これはvarargs関数です:
int open(const char *filename, int options, ...);