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
[ ページ先頭へ ]