読者です 読者をやめる 読者になる 読者になる

open

UNIXシステムコール

openは、指定されたファイル名のファイルを開くUNIXシステムコール・・・。

Man page of OPEN

これまで、標準Cライブラリfopenでファイルを開いてきたが、これは高水準入出力関数であり、バッファリングなどの補助的な機能を有する・・・。
一方、システムコールのopenは低水準入出力関数で、直接入出力装置にアクセスする・・・。

これらの関数には一長一短があるが、まずはopenでファイルを開くことにする・・・。

openを使うには、sys/types.h, sys/stat.h, fcntl.hをインクルードする・・・。
また、openしたファイルを閉じるにはcloseシステムコールが要るので、

Man page of CLOSE

unistd.hもインクルードする・・・。

fopenでは、FILE構造体のポインタ、いわゆる"ファイルポインタ"が返ってきたが、
openでは、ファイルなどを識別する番号、"ファイルディスクリプタ"が返ってくるので、そのためにint型変数fdを用意・・・。

openで"test.txt"を開く・・・。
O_RDONLYは読み込み専用という意味のフラグ・・・。
戻り値のファイルディスクリプタはfdに格納・・・。

戻り値が-1の時は、失敗なのでエラー処理・・・。

成功なら、fdの値を出力・・・。

closeでfdの示すファイルを閉じる・・・。

$ ./open
fd = 3
$

test.txtが存在するなら、上のようにfdが出力される・・・。
存在しない場合は、

$ ./open
open error!
$

エラー・・・。

Sample/open.c at master · bg1bgst333/Sample · GitHub