gauche.fcntl
- 低レベルファイル操作 ¶fcntl(2)
を含む、低レベルのファイルシステム操作のインタフェースを提供します。
{gauche.fcntl
}
port-or-fd で指定されたファイルに対して特定の操作をおこないます。
ファイル指定は、ポートオブジェクトもしくはシステムのファイルディスクリプタ
である整数でなくてはなりません。それがポートである場合には、すでにオープン
されたファイルを結びついていなければなりません。
(port-type
が file
を返すようなポートということです。
ポート共通の操作参照。)
操作は整数 operation で指定します。 いくつかの変数が定義されいて、operation に使用できます。
F_GETFD
¶port-or-fd のファイルディスクリプタに結びついているフラグを返します。
オプション引数のargは使われません。返り値は整数で、その定義はシステム
によります。ただし、FD_CLOEXEC
だけは例外で、これはexec
で
クローズされたことを示しています。
詳しくはあなたのシステムのfcntl(2)
のマニュアルエントリを
参照してください。
F_SETFD
¶port-or-fdのファイルディスクリプタのフラグを与えられたargに
します。たとえば、FL_CLOEXEC
フラグを設定する、互換性のある方法では
次のようにします。
(sys-fcntl port F_SETFD (logior FD_CLOEXEC (sys-fcntl port F_GETFD)))
F_GETFL
¶port-or-fdによって指定されたオープンしたファイルに結びついている フラグを返します。このフラグには以下のような情報が含まれています。
O_ACCMODE
でマスクしたとき、
これは、O_RDONLY
、O_WRONLY
、O_RDWR
のうちどれかひとつです。
O_CREAT
、O_EXCL
のどちらか、または両方。
O_TRUNC
.
O_APPEND
でマスクしたとき、追記が許されているかどうか。
fork
した時にファイルが自動的にクローズされるかどうか。
O_NONBLOCK
でマスクしたとき、I/O が非ブロックモードかブロックモードか。
O_NOCTTY
でマスクしたとき、端末制御を切離しているかどうか。
ELOOP
で
失敗するようにする。
システムが、そのシステム特有のフラグを定義していることがあります。
F_SETFL
¶port-or-fdで指定したオープンされたファイルのフラグを設定します。
上に列挙されたフラグのうち、O_NONBLOCK
と O_APPEND
だけが
変更可能です。
F_GETFD
/F_SETFD
はファイルディスクリプタそのものに結びついた
フラグについてであり、一方、F_GETFL
/F_SETFL
はオープンされた
ファイルそのものに結びついているフラグについての操作であることに注意して
ください。この違いは、2つ以上のファイルディスクリプタが同じオープンされた
ファイルを指しているような場合にあらわれます。
F_DUPFD
¶port-or-fdで参照しているのと同じファイルを指す新しいファイル ディスクリプタを生成します。 argで整数を与えなければなりません。この数は割り当てられる ファイルディスクリプタの最小値を指定します。
F_GETLK
¶3つめの引数を与えなければなりません。これは、以下に述べる<sys-flock>
オブジェクトのインスタンスでなければなりません。argで指定された
ロック情報を検索し、それにしかるべく変更します。
F_SETLK
¶F_SETLKW
3つめの引数を与えなければなりません。これは、以下に述べる<sys-flock>
オブジェクトのインスタンスでなければなりません。argにしたがって、
アドバイザリロックを設定します。ロックの取得に成功すれば、#t
が
返ります。もし、別のプロセスがロックをもっていて要求したものと衝突した
場合には F_SETLK
のときは #f
を返します。一方、F_SETLKW
のときはロックが利用可能になるまで待ちます。
F_GETOWN
¶当該ファイルディスクリプタ上のイベント用シグナル、SIGIO および SIGURG を 受けとることになるプロセスのプロセスIDあるいはプロセスグループを返します。 プロセスグループは負の値で表示されます。このフラグはシステムにこのような 機能がある場合にのみ利用可能です(BSD や Linux にはこの機能があります)。
F_SETOWN
¶当該ファイルディスクリプタ上のイベント用シグナル、SIGIO および SIGURG を 受けとることになるプロセスのプロセスIDあるいはプロセスグループを設定します。 プロセスグループは負の値で表示されます。このフラグはシステムにこのような 機能がある場合にのみ利用可能です(BSD や Linux にはこの機能があります)。 詳細については、お使いのシステムの fcntl(2) のマニュアルページをチェック してください。
これ以外の値を operation で指定しようとするとエラーになります。
{gauche.fcntl
}
POSIX のアドバイザリレコードロックを表わす構造体です。アドバイザリレコードロック
というのは、適切なロックをもたないプロセスが対象ファイルを操作しても
システムは関知しない、ということです。すべてのプロセスが、共有される可能性
のあるファイルを操作する前にロックをfcntl
を使って検査することが
期待されています。
fcntl
によるロックは、プロセスごと、ファイルごとであることに注意してください。
同一プロセス内で同じファイルを複数回ロックすることはできますが、再帰ロックではないので
いずれかのロックがアンロックされるか、どこかでそのファイルがクローズされるかすると
プロセスはそのファイルに対するロックを失います。これは、fcntl
ロックを
ライブラリで使うことを難しくします。プロセス間排他制御を実現する別の方法として
with-lock-file
(ロックファイル参照) があります。
<sys-flock>
: type ¶ロックのタイプを表す整数です。利用可能な値として以下の変数があらかじめ 定義されています。
<sys-flock>
: whence ¶start
の計測が開始される位置を示す。
<sys-flock>
: start ¶ロックされる領域の開始位置オフセット
<sys-flock>
: len ¶ロックされるバイト数。ゼロは「EOFまで」という意味。
<sys-flock>
: pid ¶当該のロックをもっている整数のプロセスID。F_GETLK
でのみ使用。
{gauche.fcntl
}
POSIX open()への低レベルインタフェースです。
pathで指定されるファイルをオープンして、整数のファイルディスクリプタを返します。
ファイルディスクリプタはsys-close
でクローズするか、
open-{input|output}-fd-oprt
でポートに変換して
ポートがクローズされた時に一緒にクローズすることができます。
この手続きはfdを直接触る必要がある低レベルコードのために提供されています。
どうしても必要な場合以外には、高レベルのopen-{input|output}-file
を使ってください。
flags引数は次のビットマスクの論理和です:
O_RDONLY
, O_WRONLY
, O_RDWR
,
O_APPEND
, O_CREAT
, O_EXCL
, O_TRUNC
,
O_CLOEXEC
, O_NOCTTY
, O_NOFOLLOW
,
O_NONBLOCK
, O_ASYNC
。
このうちO_RDONLY
, O_WRONLY
, O_RDWR
のどれかひとつは
指定しなければなりません。
mode引数はファイルが新たに作られた時のパーミッションです。
デフォルトは#o664
です。
{gauche.fcntl
}
POSIX statvfs
およびfstatvfs
へのインタフェースです。
path、もしくはport-or-fdに結びついたファイルが存在するファイルシステムの情報を
下に説明する<sys-statvfs>
のインスタンスとして返します。
これらの手続きは対応するPOSIXシステムコールが提供されているシステムでのみ
定義されます。使えるかどうかは、機能識別子gauche.sys.statvfs
で
検査できます (機能条件式参照)。
(cond-expand [gauche.sys.statvfs (... code using sys-statvfs ...)] [else (... alternative code ...)])
{gauche.fcntl
}
POSIXのstruct statvfs
です。
機能識別子 gauche.sys.statvfs
が提供されている場合のみ定義されます。
<sys-statvfs>
: bsize ¶ファイルシステムのブロックサイズ。
<sys-statvfs>
: frsize ¶フラグメントサイズ。
<sys-statvfs>
: blocks ¶<sys-statvfs>
: bfree ¶<sys-statvfs>
: bavail ¶ファイルシステムが格納できるブロック数、未使用ブロック数、
非特権ユーザが使える未使用ブロック数を、frsize
を単位として表します。
<sys-statvfs>
: files ¶<sys-statvfs>
: ffree ¶<sys-statvfs>
: favail ¶ファイルシステム中の全inode数、未使用inode数、非特権ユーザが使える未使用inode数です。
<sys-statvfs>
: fsid ¶ファイルシステムID。正確な整数です。
<sys-statvfs>
: flag ¶正確な整数。ビットフラグのORです。
ポータブルなビットフラグ値として、定数ST_NOSUID
とST_RDONLY
が定義されています。
<sys-statvfs>
: namemax ¶ファイル名の長さの上限。