HOME備忘帳

perl関数 sysopen

openでなくて、sysopenです。

sysopen(FH, "file", O_WRONLY | O_CREATE | O_EXCL)
    or die "can't open $filename: $!";

書き込み用にファイルをオープン、ファイルが存在しなければ作成するが、タイミングの問題で既に作成されている場合はdie

こりゃラクだわ。

sysopen関数のフラグ。

Fcntlモジュールを読みこめば、以下のフラグを使用可能。

大抵のシステムでサポートされているもの
フラグ 意味
O_RDONLY 読み出し専用
O_WRONLY 書きこみ専用
O_RDWR 読み書き用
O_CREATE ファイルが存在しなければ新規作成
O_EXCL ファイルが既に存在したら失敗。
ファイルロックではなく、`sysopen`が失敗するだけ。
O_APPEND 追加書き込み
O_TRUNC ファイルを切り詰める(サイズ0に)
O_NONBLOCK ブロックなしアクセス(注意!!)
その他のオプション
フラグ 意味
O_NDELAY O_NONBLOCKの別名(後方互換)
O_SYNC ファイルに対応するハードウェアへの、物理的な書きこみが完了するまで、ブロックする。
ほかにO_ASYNC、O_DSYNC、O_RSYNCなどもある
O_EXLOCK LOCK_EXで`flock`する(強制力がないロック)
O_SHLOCL LOCK_SHで`flock`する(強制力がないロック)
O_DIRECTORY ファイルがディレクトリでなければ失敗する
O_NOFOLLOW パスの最後の部分がシンボリックリンクの場合、失敗する
O_BINARY Microsoftのシステムで、そのファイルハンドルに`binmode`を適用。
この逆を行うO_TEXTが用意されていることもある。
O_LARGEFILE システムによっては、2GBを超えるファイルに対してこれを指定する場合がある。
O_NOCTTY プロセスの制御ターミナルがまだない場合に、ターミナルファイルをオープンしてもそれを制御ターミナルにしない。
普通は使うことはない。

[ ページ先頭へ ]

openにできて、sysopenにできないこと?

最終更新日:2008/06/28

[ ページ先頭へ ]