C言語

【C言語】open関数の使い方、正しく理解していますか?

関数仕様

書式

引数

filepath オープンするファイルやデバイスへのパス
flags 読み込み、書き込み、その他オプションの指定
mode 新規作成されるファイルのモード(パーミッション)

戻り値

0以上の値 ファイル記述子(ファイルやデバイスのオープンに成功)
-1 ファイルやデバイスのオープンに失敗

フラグ

O_RDONLY 読み取り専用でオープン
O_WRONLY 書き込み専用でオープン
O_RDWR 読み書き両用でオープン
O_CREAT ファイルが存在しない場合は、新規作成する(引数 mode の指定必要)
O_EXCL ファイルが既に存在する場合にはエラーとする(O_CREAT と同時使用時)
※既に存在する場合は、EEXIST のエラー番号がセットされる
O_TRUNC ファイルサイズを0に切り詰める(通常ファイルの書き込みオープン時)
O_APPEND 追記書き込みモードでオープン
O_NONBLOCK ノンブロッキングモードでオープン
O_NDELAY O_NONBLOCK と同等
O_CLOEXEC 新しいファイルディスクリプターに対して close-on-exec フラグを有効にする
(execした子プロセス側で、ファイルディスクリプターが自動的に閉じられる)
SANACHAN
SANACHAN
fork や exec を行うプロセスの場合は、常に O_CLOEXEC を付けておくと良いでしょう。
その理由は「fork 関数の使い方」の「注意ポイント①」をご覧ください。

 

機能

  • ファイルの読み書きやデバイスの制御を行う場合に必要となるファイル記述子を返す
  • ファイル記述子は、その時点でプロセスによって使用されていない最小の値が返る
    ※以下3つのファイル記述子は、通常、予めオープン済みの状態でプログラムが実行される
    0=標準入力、1=標準出力、2=標準エラー出力

関連

ファイル記述子を取得後は、read や write などのシステムコールに引数として指定すると、
ファイルやデバイスの読み書きが行えます。「【C言語】read関数の使い方」も参考にどうぞ。

 

サンプルプログラム

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-C言語
-, ,