fcntl

FCNTL(2)                    Linux Programmer's Manual                   FCNTL(2)



名前
       fcntl - ファイル・ディスクリプターを操作する

書式
       #include <unistd.h>
       #include <fcntl.h>

       int fcntl(int fd, int cmd);
       int fcntl(int fd, int cmd, long arg);

説明
       fcntl は、ファイル・ディスクリプター fd に関するさまざまな操作を行う。要求する操作の種類は cmd によって決まる:

       F_DUPFD  arg fd のコピーにする、必要なら最初に fd をクローズ(close)する。

                dup2(2) を使えば、もっと簡単に同じことができる。

                古いディスクリプターと新しいディスクリプターは同じものとして使うことができる。
                それらはロック(lock)、ファイル位置ポインター、フラグを共有する。 例えば、片方のディスクリプターのファイル位置が
                lseek を使って変更された場合、もう片方のファイル位置も変更される。

                しかしながら、二つのディスクリプターは実行時クローズ(close-on-exec)フラグ を共有しない。

                成功すると、新しいディスクリプターが返される。

       F_GETFD  実行時クローズ(close-on-exec)フラグを読み取る。最下位ビットが 0 なら、 ファイルは exec
                してもオープン(open)されたままだが、そうでない場合はクローズされる。

       F_SETFD  実行時クローズ(close-on-exec)フラグに arg で指定した値を設定する(最下位のビットのみが使用される)。


       F_GETFL  ディスクリプターのフラグを読み取る。( open(2) の際に設定された全てのフラグが返えされる。)

       F_SETFL  ディスクリプターのフラグに argで指定した値を設定する。 O_APPEND O_NONBLOCK のみが設定できる。

                フラグは( dup などで作成された)同じディスクリプターのコピーで共有される。

                フラグとその意味は open(2) で説明されている。

       F_GETLK, F_SETLK, F_SETLKW
                任意のファイル・ロックを管理する。三つ目の引数 arg は flock
                構造体へのポインタである。(このコールによって上書きされる)。

       F_GETLK  ロックを取得するのを妨げられた場合は、それを妨げた flock構造体を返す。 妨げられなかった場合は、そのロックの l_type
                フィールドに F_UNLCK を設定する。

       F_SETLK  l_type フィールドが F_RDLCK F_WRLCK の時、ロックを設定する。 F_UNLCK
                の時、ロックを解放(clear)する。 もしロックがその他の値の時は、-1 を返し、 errno EACCES EAGAIN が設定される。

       F_SETLKW F_SETLK と同様だが、エラーを返さずにロックが解放されるまで待つ点が異る。

       F_GETOWN ソケット(socket)の所有者(owner)のプロセスID(またはプロセス・グループ) を取得する。

                プロセス・グループは負の値で返される。

       F_SETOWN ソケット(socket)の所有者(owner)のプロセスIDまたはプロセス・グループ を設定する。

                これらのコマンドでの所有権とは SIGIO SIGURG シグナルを受信することを意味する。

                プロセス・グループは負の値で指定される。

返り値
       返り値は操作定数の種類によって違う:

       F_DUPFD  新しいディスクリプターを返す。

       F_GETFD  フラグの値を返す。

       F_GETFL  フラグの値を返す。

       F_GETOWN ディスクリプターの所有者を返す。

       エラーの時は -1 が返され、 errno に適切な値が設定される。

エラー
       EACCES   他のプロセスが保持しているロックによって操作が禁止されている。

       EAGAIN   そのファイルは他のプロセスによってメモリ・マップされているため、 操作が禁止されている。

       EDEADLK  指定されたロック操作を書き込むと、デッドロック(deadlock)になる。

       EBADF    fd がオープンされたファイル・ディスクリプターでない。

       EINVAL   F_DUPFDで、 arg が負か、もしくは許される最大値よりも大きい。

       EMFILE   F_DUPFDで、 プロセスがすでに最大数までファイル・ディスクリプターをオープンしている。

       ENOLCK   オープンされているロックの数が多過ぎ、ロック・テーブルがいっぱいである。

注意
       エラーの際の返り値が dup2 F_DUPFD にでは異なっている。

準拠
       SVr4, SVID, POSIX, X/OPEN, BSD 4.3.  Posix.1 には F_DUPFD, F_GETFD,
       F_SETFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK, F_SETLKW
       操作のみが仕様にある。F_GETOWN, F_SETOWN は BSD的であり、SVr4 ではサポート
       されていない。F_GETFL/F_SETFL に使用できるフラグは open(2)
       でサポートされているものと同じであり、それぞれのシステムで異なっている。 O_APPEND, O_NONBLOCK, O_RDONLY,
       O_RDWR は POSIX.1 の仕様にある。 SVr4 ではここに記述されていない他のいくつかのオプションやフラグを サポートしている。

       POSIX.1 には他に EINTR エラーについての記述がある。SVr4 には他に EFAULT, EINTR, EIO, ENOLINK,
       EOVERFLOW エラー状態についての記述がある。

関連項目
       dup2(2), flock(2) open(2), socket(2),



Linux                           26 September 1995                       FCNTL(2)