ioctl() - 装置の制御
規格
| 標準/拡張機能 | C/C++ | 依存項目 |
|---|---|---|
|
XPG4.2
Single UNIX Specification、バージョン 3 |
both |
Format
#include <sys/ioctl.h>
int ioctl(int fildes int cmd, ... /* arg */);#define _XOPEN_SOURCE_EXTENDED 1
/** OR **/
#define _OE_SOCKETS
#include <sys/ioctl.h>
#include <net/rtrouteh.h>
#include <net/if.h>
int ioctl(int fildes, int cmd, ... /* arg */);#define _XOPEN_SOURCE_EXTENDED 1
#include <stropts.h>
int ioctl(int fildes int cmd, ... /* arg */);機能説明
ioctl() は、装置上でさまざまな制御関数を実行します。 cmd 引数と任意指定の 3 番目の引数 (さまざまなタイプ) が、fildes に対応する装置に渡されて、変換されます。
cmd 引数は、実行される制御関数を選択し、アドレスされる装置に依存します。
arg 引数は、この特定の装置が要求された関数を実行するために必要とする追加の情報を表します。 arg のタイプは、特定の制御要求に依存しますが、整数または装置特定のデータ構造へのポインターです。
- 端末
- ソケット
- STREAMS
- ACL
端末
- コマンド
- 説明
- TIOCSWINSZ
- ウィンドウ・サイズを設定します。 端末に対する ioctl() の 2 番目のオペランドとして使用されます。 3 番目のオペランドによって指定されるウィンドウ・サイズ情報が カーネル内の端末に関連付けられる領域にコピーされ、SIGWINCH シグナルがフォアグラウンドのプロセス・グループに対して生成されます。
- TIOCGWINSZ
- ウィンドウ・サイズを取得します。 端末に対する ioctl() の 2 番目のオペランドとして使用されます。 3 番目のオペランドである winsize 構造によって指定される領域に、現在のウィンドウ・サイズが戻されます。
- フィールド
- 説明
- ws_row
- ウィンドウ内の行数を文字で示したもの。
- ws_col
- ウィンドウ内の列数を文字で示したもの。 これは、1 バイト文字を想定しています。 マルチバイト文字は、より多くの空間を取ります。
- ws_xpixel
- ウィンドウの横サイズをピクセルで示したもの。
- ws_ypixel
- ウィンドウの縦サイズをピクセルで示したもの。
ソケット
- コマンド
- 説明
- FIONBIO
- ソケットに対する非ブロック I/O を設定またはクリアします。arg は整数へのポインターです。 整数が 0 の場合、ソケット上への非ブロック I/O がクリアされます。 それ以外の場合、ソケットは非ブロック I/O に設定されます。
- FIONREAD
- ソケットに対して即時に読み取り可能なバイト数を取得します。arg は整数へのポインターです。 整数の値を、ソケットでただちに読み取り可能な文字数に設定します。
- FIONWRITE
- 接続されたピア AF_UNIX ストリーム・ソケットに書き込み可能 (そのソケットが EWOULDBLOCK をブロックするか、または戻す前に) なバイト数を戻します。 戻されるバイト数は、使用するアプリケーションによるシリアライゼーションがない場合、保証されません。
- FIOGETOWN
- シグナルの受信者を指定するために設定された PID を戻します。
- FIOSETOWN
- シグナルを送信するときに使用される PID を設定します。
FIOGETOWN および FIOSETOWN は、fctl() の F_GETOWN コマンドおよび F_SETOWN コマンドと同等です。pid の値については、この関数を参照してください。 この関数は、AF_INET ストリーム・ソケットに対してのみ有効です。
- SECIGET
- AF_UNIX 接続のストリーム・ソケットについて、対等ソケットのセキュリティー識別値を取得します。 対等プロセスの MVS™ ユーザー ID、有効な UID、および有効な GID が、BPXYSECI によってマップされる seci 構造に戻されます。 このオプションが有効なのは、AF_UNIX ドメインの場合のみです。
- SECIGET_T
- この両方のプロセスを戻し、このソケットに接続された AF_UNIX ストリームに対するピアの、タスク・レベル・セキュリティー情報 (使用可能であれば) を戻します。 このタスク・レベル・セキュリティー情報は、connect() または accept() を実行するタスクから入手します。セキュリティー情報は、<sys/ioctl.h> で定義されている struct __sect_s に戻されます。このセキュリティー情報は、accept() が完了するまでは使用できません。 ピアのタスク・レベル・セキュリティー・データが使用可能かどうかは、タスク・レベルのユーザー ID の長さフィールドで判別されます。 ゼロの場合、このピアにはタスク・レベル・セキュリティー・データがありません。
- SIOCADDRT
- ルーティング・テーブルにエントリーを追加します。arg は、<net/rtrouteh.h> 内で定義されている rtentry 構造体へのポインターです。引数として渡されるルーティング・テーブルのエントリーが、ルーティング・テーブルに追加されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
- SIOCATMARK
- データ入力内の現在の位置が、帯域外データを指しているかどうか照会します。arg は整数へのポインターです。 SIOCATMARK は、ソケットが帯域外データのデータ・ストリーム内のマークを指している場合は、引数を 1 に設定します。それ以外の場合は、引数を 0 に設定します。 帯域外データの受信について詳しくは、recv()、recvfrom()、および recvmsg() を参照してください。
- SIOCDELRT
- ルーティング・テーブルのエントリーを削除します。arg は、<net/rtrouteh.h> 内で定義されている rtentry 構造体へのポインターです。引数として渡されたルーティング・テーブルのエントリー (存在する場合) が、ルーティング・テーブルから削除されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
- SIOCGIFADDR
-
ネットワーク・インターフェース・アドレスを取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース・アドレスが引数に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFBRDADDR
-
ネットワーク・インターフェース・ブロードキャスト・アドレスを取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース・ブロードキャスト・アドレスが引数に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFCONF
-
ネットワーク・インターフェース構成を取得します。arg は、<net/if.h> 内で定義されている ifconf 構造体へのポインターです。インターフェース構成が、ifconf 構造体で指定されたバッファーに戻されます。 戻されたデータの長さが、前にバッファーの長さが含まれていたフィールドに戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFCONF6
- 名前、アドレス、および構成される IPv6 ネットワーク・インターフェースに関するその他の情報を入手します。 これは、IPv4 に対する SIOCGIFCONF コマンドと同様です。
OSM インターフェースを要求するには、アプリケーションが EZB.OSM.sysname.tcpname リソースに対する読み取り権限を持っている必要があります。
struct __net_ifconf6header_s は、ioctl の引数として受け渡されます。 この構造体は、構成情報が書き込まれるべき場所、および各 struct と出力バッファーに書き込まれた __net_ifconf6entry_s のエントリー数およびエントリー長を使用して構成情報が戻される場所を指定します。これらの構造体は、<sys/ioctl.h> で定義されます。
__nif6h_buflen および __nif6h_buffer が共にゼロの場合、照会関数が実行され、次のようにヘッダーが戻されます。
- __nif6h_version
- サポートされる最新のバージョン。注: バージョン番号が提供される (非ゼロで) 場合、戻されるエントリー長は指定されたバージョンに対するものです。 (サポートされる場合)
- __nif6h_entries
- 出力予定のエントリーの合計数。
- __nif6h_entrylen
- 個別のエントリー長。
情報を入手するための呼び出しが、以下のいずれかで失敗した場合:
この呼び出しは照会関数に変換され、ヘッダーは上記のように書き込まれています。 これらの場合、出力バッファーの内容は不確定です。errno = ERANGE, or errno = EINVAL and __nif6h_version has changed共通の INET が構成され、複数の TCP/IP スタックがソケットに接続される場合、IPv6 に対して使用可能状態の各スタックからの出力は出力バッファーで連結され、ヘッダーには全スタックから戻されるエントリー総数が入ります。 照会関数を使用して戻されるバージョンは、すべてのスタックがサポートする最新バージョンです。
この ioctl は、AF_INET または AF_INET6 ソケットで実行可能です。
- エラー・コード
- 説明
- EAFNOSUPPORT
- IPv6 を対象とする TCP/IP スタックは、どれもアクティブではありません。
- EINVAL
- この入力バージョン番号は、サポートされません。
- ERANGE
- バッファーが小さいため、IPv6 ネットワーク・インターフェースの全エントリーを収容できません。
- SIOCGIFDSTADDR
-
ネットワーク・インターフェース宛先アドレスを取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース宛先 (Point-to-Point) アドレスが引数に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFFLAGS
-
ネットワーク・インターフェース・フラグを取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース・フラグが引数に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFMETRIC
-
ネットワーク・インターフェース・ルーティング・メトリックを取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース・ルーティング・メトリックが引数に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFMTU
-
ネットワーク・インターフェース MTU (最大伝送単位) を取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース MTU が引数 arg->ifr_mtu に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGIFNETMASK
-
ネットワーク・インターフェース・ネットワーク・マスクを取得します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。インターフェース・ネットワーク・マスクが引数に戻されます。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCGSPLXFQDN
- 指定されているサーバーの完全修飾ドメイン・ネーム、およびシスプレックス内のドメイン・ネームを取得します。 これは、ドメイン・ネーム・システム (DNS) を使用した接続最適化サービス用のワークロード・マネージャー (WLM) に登録されているアプリケーションをサポートするための、特別な目的のコマンドです。arg は、<ezbzsdnc.h> 内で定義されている sysplexFqDn 構造体へのポインターです。sysplexFqDn には、<ezbzsdnc.h> 内で定義されている sysplexFqDnData 構造体へのポインターが含まれます。
sysplexFqDnData 構造体には、サーバー名 (入力)、グループ名 (入力)、および完全修飾ドメイン名 (出力) が入っています。
SIOCGSPLXFQDN コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EFAULT
- ユーザー・ストレージの書き込みに失敗
- EINVAL
- 以下のいずれか 1 つです。
- グループ名が必要
- バッファー長が無効
- ソケット呼び出しパラメーター・エラー
- ENXIO
- 以下のいずれか 1 つです。
- シスプレックス・アドレスが見つからない
- Res が DNS に見つからない
- タイムアウト
- 時刻の予期しないエラー
例: SIOCGSPLXFQDN を指定した ioctl() の例を、次に示します。#include <ezbzsdnc.h> sysplexFqDn splxFqDn; sysplexFqDnData splxData; int rc; splxFqDn.splxVersion = splxDataVersion; splxFqDn.splxBufLen = sizeof(sysplexFqDnData); splxFqDn.splxBufAddr = &splxData; /* Assign values to splxData.groupName, */ /* splxData.serverName if required */ . . /* Get the fully qualified domain name */ rc = ioctl(s,SIOCGSPLXFQDN, (char *) &splxFqDn); /* splxData.domainName contains the fully*/ /* qualified domain name. */
- SIOCSECENVR
-
サーバー・ソケットに対して、セキュリティー環境を SET または GET するために使用されます。
argは struct __seco_s を示します。ここで、エレメント __seco_argument は、SET 要求の場合は 1 に、GET 要求の場合は 2 に設定されます。SET 引数を指定時は、AF_UNIX ストリーム・ソケット・サーバーは、接続するクライアントの完全なセキュリティー環境を必要とするものとしてこのサーバー・ソケットを指定して、この接続の正常完了前に使用可能になるようにします。 接続処理時に、接続はコネクターのセキュリティー環境を入手し、このコネクターのソケットから、そのコネクターがアンカーされた状態を解除して、サーバーが使用できるようにします。 接続処理の間にセキュリティー環境を入手できない場合、その接続は失敗します。 このコマンドは、サーバー・ソケットにならないソケットに影響しません。
GET 引数を指定時は、AF_UNIX ストリーム・ソケット・サーバーは、コネクターのアドレス・スペースからサーバーのアドレス・スペースへ、事前に SET されたセキュリティー環境をコピーします。これにより、セキュリティー製品への呼び出しの際に入力として使用できるようになります。 このコマンドが意味を持つのは、以前に SET 引数指定で SIOCSECENVR を実行したサーバー・ソケットに対してのみです。
- SIOCSIFMETRIC
-
ネットワーク・インターフェース・ルーティング・メトリックを設定します。arg は、<net/if.h> 内で定義されている ifreq 構造体へのポインターです。SIOCSIFMETRIC は、インターフェース・ルーティング・メトリックを引数内で渡された値に設定します。 このオプションは、AF_INET ドメインの場合にのみ有効です。
このマクロは、_OPEN_SYS_IF_EXT フィーチャーによって保護されます。
- SIOCSPARTNERINFO
- 接続のセットアップ時にパートナーのセキュリティー資格情報を取得するための標識を設定し、情報を保管して、アプリケーションが、そのアプリケーション自体を中断することなく SIOCGPARTNERINFO ioctl を発行できるようにするか、少なくとも情報を取得するための時間を最小にします。 SIOCSPARTNERINFO ioctl は、SIOCGPARTNERINFO ioctl の前に発行されなければなりません。詳しくは、「z/OS Communications Server: IP Programmer's Guide and Reference」を参照してください。
- SIOCSVIPA
- IPv4 動的 VIPA を定義または削除します。arg は、<ezbzdvpc.h> 内で定義されている dvreq 構造体へのポインターです。このオプションは、AF_INET ドメインの場合にのみ有効です。
- SIOCSVIPA6
- IPv6 動的 VIPA を定義または削除します。arg は、<ezbzdvpc.h> 内で定義されている dvreq6 構造体へのポインターです。このオプションは、AF_INET6 ドメインの場合にのみ有効です。
- SIOCTIEDESTHRD
- 記述子をスレッドに関連付ける (結合) か、またはスレッドから切り離し (分離) ます。
argは、整数へのポインターです。*argが 1 のとき、この記述子は呼び出し元のスレッドに結合します。*argが 0 のとき、この記述子は呼び出し元のスレッドから分離します。 この記述子のクローズ前またはタスクからの分離前にタスクを終了させる必要がある場合、z/OS® UNIX ファイル・システムのスレッド終了処理により、その記述子がクローズされます。 このコマンドは、負荷が大きなスレッドと中程度スレッドで使用可能です。
C++ の特殊な動作: この関数を C++ で使用するには、_XOPEN_SOURCE_EXTENDED 1 フィーチャー・テスト・マクロを使用する必要があります。
端末とソケットの戻り値
正常に実行された場合、ioctl() は 0 を戻します。
- エラー・コード
- 説明
- EBADF
- fildes パラメーターが無効ソケット記述子です。
- EINVAL
- 要求が無効か、またはサポートされていません。
- EIO
- 関数を発行するプロセスのプロセス・グループは孤立した バックグラウンド・プロセス・グループで、関数を発行する プロセスは SIGTTOU を無視またはブロックしていません。
- EMVSPARM
- 無効なパラメーターがサービスに渡されました。
- ENODEV
- 装置が正しくありません。 この関数は装置ドライバーによってサポートされません。
- ENOTTY
- 正しくないファイル記述子が指定されました。 ファイル・タイプが特殊な文字ではありません。
端末およびソケットの例
int s;
int dontblock;
int rc;
⋮
/* Place the socket into nonblocking mode */
dontblock = 1;
rc = ioctl(s, FIONBIO, (
char *) &dontblock);
⋮STREAMS
- L_PUSH
- arg が指す名前のモジュールを、現在の STREAM の最上部、STREAM ヘッドのすぐ下にプッシュします。 それから、新しくプッシュされたモジュールに対して、open() 関数を呼び出します。I_PUSH コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EINVAL
- モジュール名が無効。
- ENXIO
- 新しいモジュールのオープン関数が失敗。
- ENXIO
- fildes でハングアップを受信。
- L_POP
- fildes が指す STREAM のすぐ下にあるモジュールを除去します。 arg 引数は、I_POP 要求では 0 でなくてはいけません。I_POP コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EINVAL
- STREAM 内にモジュールがない。
- ENXIO
- fildes でハングアップを受信。
- L_LOOK
- fildes が指す STREAM ヘッドのすぐ下にあるモジュール名を検索し、arg が指す文字ストリングをその場所に置きます。 arg が指すバッファーは、FMNAMESZ+1 バイト以上の長さが必要です (FMNAMESZ は、<stropts.h> で定義されています)。I_LOOK コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EINVAL
- STREAM 内にモジュールがない。
- L_FLUSH
- この要求は、arg の値に従って、読み取りと書き込みキューのいずれかまたは両方をフラッシュします。 arg の値として適切なものは
以下のとおりです。
- FLUSHR
- すべての読み取りキューをフラッシュする。
- FLUSHW
- すべての書き込みキューをフラッシュする。
- FLUSHRW
- すべての読み取りおよび書き込みキューをフラッシュする。
I_FLUSH コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EAGAIN または ENOSR
- フラッシュ・メッセージ用のバッファーが割り振れない。
- EINVAL
- arg の値が無効。
- ENXIO
- fildes でハングアップを受信。
- I_FLUSHBAND
- 特定のバンドのメッセージをフラッシュします。 arg 引数は、bandinfo 構造を指します。 bi_flag メンバーは、上記の FLUSHER、FLUSHW、または FLUSHRW のいずれかになります。 bi_pri メンバーが、フラッシュされるバンドの優先順位を決定します。
- I_SETSIG
- fildes に関連付けられた STREAM 上で特定のイベントが起きた場合、SIGPOLL シグナルを
呼び出し側のプロセスへ送信するよう、STREAMS のインプリメンテーションに要求します。 I_SETIG は、STREAMS 内での非同期処理をサポートします。 arg の値は、プロセスがシグナルを受ける必要のあるイベントを指定する
ビット・マスクです。 以下の任意の定数をビット単位 OR で組み合わせたものです。
- S_RDNORM
- STREAM ヘッド読み取りキューの先頭に、通常の (優先順位バンドが 0 に設定された) メッセージが 届いた。 メッセージの長さがゼロでも、シグナルが生成される。
- S_RDBAND
- STREAM ヘッド読み取りキューの先頭に、ゼロ以外の優先順位バンドを持つメッセージが 届いた。 メッセージの長さがゼロでも、シグナルが生成される。
- S_INPUT
- STREAM ヘッド読み取りキューの先頭に、優先順位の高くないメッセージが 届いた。 メッセージの長さがゼロでも、シグナルが生成される。
- S_HIPRI
- STREAM ヘッド読み取りキューの先頭に、優先順位の高いメッセージが存在する。 メッセージの長さがゼロでも、シグナルが生成される。
- S_OUTPUT
- STREAM ヘッドのすぐ下の通常データ (優先順位バンド 0) 用の書き込みキューが、いっぱいではなくなった。 これにより、プロセスは、キュー上に 通常のデータをダウンストリームに送信する (または書き込む) 余地があることを通知される。
- S_WRNORM
- S_OUTPUT と同じ。
- S_WRBAND
- STREAM ヘッドのすぐ下のゼロ以外の優先順位バンド用の書き込みキューが、いっぱいではなくなった。 これにより、プロセスは、キュー上に 優先順位のあるデータをダウンストリームに送信する (または書き込む) 余地がないことを通知される。
- S_MSG
- STREAM ヘッド読み取りキューの前に、SIGPOLL シグナルを含んだ STREAM のシグナル・メッセージが届いた。
- S_ERROR
- STREAM ヘッドに、エラー条件の通知が届いた。
- S_HANGUP
- S_RDBAND と一緒に使用された場合、STREAM ヘッド読み取りキューの前に優先順位メッセージが届いたとき、SIGURG が SIGPOLL の代わりに生成される。
arg が 0 の場合、呼び出し側のプロセスが登録解除され、fildes に関連付けられた STREAM に対する SIGPOLL シグナルを受信できなくなります。
SIGPOLL シグナルの受信が必要なプロセスは、I_SETSIG を使って、シグナルの受信を明示的に登録しなければいけません。 複数のプロセスが、同じ STREAM 上の 同じイベントについてシグナルを受信するよう登録した場合、イベントが発生したときにすべての プロセスにシグナルが送信されます。
I_SETSIG コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EAGAIN
- シグナル要求を保管するためのリソースが不足。
- EINVAL
- arg の値が無効である。
- EINVAL
- arg の値が 0 であり、さらに呼び出し側のプロセスが SIGPOLL シグナルを受信するように登録されていない。
- I_GETSIG
- 現在、呼び出し側のプロセスが SIGPOLL シグナルを送られるように登録しているイベントを戻します。 イベントは、上記の I_SETSIG の説明で指定されているもので、arg が指す int 内のビット・マスクとして戻されます。I_GETSIG コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EINVAL
- プロセスが SIGPOLL シグナルを受信するように登録されていない。
- I_FIND
- この要求は、現在 STREAM 内にあるすべてのモジュールの名前と、arg が指す名前を比較して、その名前のモジュールが STREAM にある場合は 1、ない場合は 0 を戻します。I_FIND コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EINVAL
- arg に正しいモジュール名が設定されていない。
- I_PEEK
- この要求は、STREAM ヘッド読み取りキューにある最初のメッセージについての情報を、メッセージをキューから取り出さないで検索します。 このコマンドは、メッセージをキューから除去しない点を除いて、getmsg() と似ています。 arg 引数は、strpeek 構造を指します。
ctlbuf および databuf strbuf 構造内の maxlen メンバーは、それぞれ、検索する制御情報とデータ情報の両方または一方のバイト数に 設定される必要があります。 flags メンバーには、getmsg() から getpmsg() で記述されているように、RS_HIPRI または 0 をマークとして付けることができます。例えば、プロセスがフラグを RS_HIPRI に設定した場合、I_PEEK は STREAM ヘッド読み取りキューにある優先順位の高いメッセージのみを検索します。
I_PEEK はメッセージが見つかった場合は 1、STREAM ヘッド読み取りキューに メッセージがなかった場合または RS_HIPFI がフラグ内に 設定されていて STREAM ヘッド読み取りキューに優先順位の高いメッセージ がなかった場合は 0 を戻します。 メッセージの到着を待つことはしません。 戻り値の中で、ctlbuf は制御バッファー内の情報、databuf はデータ・バッファー内の情報を示し、フラグには RS_HIPRI または 0 の値が含まれます。
- I_SRDOPT
- 引数 arg の値を使って、読み取りモードを設定します。 読み取りモードについては、read() で説明されています。有効な arg のフラグは以下のとおりです。
- RNORM
- バイト・ストリーム・モード (デフォルト)。
- RMSGD
- メッセージ削除モード。
- RMSGN
- メッセージ非削除モード。
RMSGD と RMSGN のビット単位包含 OR は、EINVAL を戻します。 RNORM と、RMSGD または RMSGN のビット単位包含 OR により、デフォルトである RNORM が他のフラグで上書きされます。
さらに、arg 内の 以下のいずれかのフラグを設定することにより、STREAM ヘッドによる制御メッセージの扱いが変更されます。- RPROTNORM
- STREAM ヘッド読み取りキューの前に、制御パートを含むメッセージがある場合、read() は EBADMSG で失敗する。
- RPROTDAT
- プロセスが read() を発行したとき、メッセージの制御パートをデータとして届ける。
- RPROTDIS
- プロセスが read() を発行したとき、メッセージの制御パートを削除し、デー タ部分を届ける。
I_SRDOPT コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EINVAL
- arg 引数が無効である。
- I_GRDOPT
- 上記の現在の読み取りモード設定を、引数 arg が指す int に戻します。 読み取りモードは、read() で説明されています。
- I_NREAD
- STREAM ヘッド読み取りキューにある最初のメッセージのデータ・パートのバイト数を数え、その値を arg が指す init に置きます。 このコマンドからの戻り値は、STREAM ヘッド読み取りキューにあるメッセージの数です。 例えば、arg に 0 が戻されても、ioctl() が 0 より大きい値を戻している場合は、キュー上で長さゼロのメッセージが次にあることを意味します。
- I_FDINSERT
- 指定されたバッファーからメッセージを作成し、別の STREAM についての情報を追加して、メッセージをダウンストリームへ送信します。 メッセージには、制御パート
と任意のデータ・パートが含まれます。 送信されるデータ・パートと制御パ
ートは、以下に説明される別々のバッファーに置くことによって区別されます。 arg 引数は、strfdinsert 構造を指します。
ctlbuf strbuf 構造内の len メンバーは、ポインターの大きさとメッセージと一緒に送信される制御情報のバイト数を 足したものに設定されていなくてはいけません。 fildes メンバーは 他の STREAM のファイル記述子を指定し、ポインターとして使用できるように並べられて いる必要のある offset メンバーは、STREAM の終わりを解釈するポインターを I_FDINSERT が保管する制御バッファーの始めからの オフセットを指定します。 databuf strbuf 構造内の len メンバーは、メッセージと一緒に送信されるデータ情報のバイト数、またはデータ・パー トを送らない場合は 0 に設定されていなくてはいけません。
flags メンバーは、作成されるメッセージのタイプを指定します。 flags が 0 に設定されている場合は 通常のメッセージが作成され、RS_HIPRI に設定されている場合は、優先順位の高いメッセージが作成されます。 優先 順位のないメッセージについては、内部のフロー制御条件のために STREAM 書き込みキューが いっぱいになった場合、I_FDINSERT はブロックします。 優先順位の高いメッセージに対しては、この条件が起きても I_FDINSERT はブロックしません。 優先 順位のないメッセージについては、書き込みキューが いっぱいで O_NONBLOCK が設定されている場合、I_FDINSERT はブロックしません。 そのかわり、errno に EAGAIN を設定して失敗します。
また、I_FDINSERT は、内部リソースの不足によって妨げられない限り、優先順位または O_NONBLOCK が指定されているかどうかにかかわらず、STREAM 内のメッセージ・ ブロックが使用可能になるのを待つためにブロックします。 部分メッセージは送信されません。
I_FDINSERT コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EAGAIN
- 優先順位のないメッセージが指定され、O_NONBLOCK フラグが設定されており、内部のフロー制御条件により STREAM 書き込みキューがフルになっている。
- EAGAIN または ENOSR
- 作成するメッセージのためのバッファーを割り振ることができない。
- EINVAL
- 以下のいずれか 1 つです。
- strfdinsert 構造体の fd メンバーが、有効なオープン STREAM ファイル記述子ではない。
- ポインターの大きさと offset を足したものが、ctlptr で指定されているバッファーの len メンバーのサイズより大きい。
- offset メンバーが、データ・バッファー内の適切に配列される位置を指定していない。
- flags に未定義の値が保管されている。
- ENXIO
- fd または fildes のハングアップを受信。
- ERANGE
- databuf で指定されているバッファーの len メンバーが、先頭の STREAM モジュールの最小および最大パケット・サイズで指定されている範囲にない、または、databuf で指定されているバッファーの len メンバーが、メッセージのデータ・パートの最大構成サイズを超えている。あるいは、ctlbuf で指定されているバッファーの len メンバーが、メッセージの制御パートの最大構成サイズを超えている。
- I_STR
- 内部 STREAMS ioctl() メッセージを、arg が指すデータから作成し、そのメッセージを
ダウンストリームへ送信します。
このメカニズムは、ioctl() 要求を、ダウンストリーム・モジュールおよびドライバーへ送信するために提供されています。 これにより、ioctl() と共に情報を送ることができ、ダウンストリームの受信側からアップストリームに送られた情報すべてをプロセスに戻すことができます。 I_STR は、システムが肯定応答または否定応答のメッセージを返すまで、または、ある程度の時間が過ぎて要求が「タイムアウト」するまでブロックします。 要求がタイムアウトになった場合、errno に ETIME を設定して失敗します。
STREAM 上で複数の I_STR をアクティブにすることはできません。 他の I_STR 呼び出しは、アクティブな I_STR が STREAM ヘッドで完了するまでブロックします。 これらの要求の タイムアウト時間は、デフォルトで 15 秒です。 この呼び出しでは、O_NONBLOCK フラグは効果がありません。
要求をダウンストリームに送るには、arg が strioctl 構造を指していなくてはいけません。
ic_cmd メンバーは、ダウンストリームのモジュールまたはドライバーを対象とした内部 ioctl() コマンドです。ic_timeout は、I_STR 要求がタイムアウトになるまで応答を待機する秒数です (-1 は無限を示し、0 はインプリメンテーションに依存するタイムアウト時間を使用することを示し、>0 は指定したとおりの秒数を使用することを示します)。ic_len メンバーには 2 つの使用法があります。1 つは入力時で、渡すデータ引数の長さが含まれます。もう 1 つはコマンドからの戻り時で、プロセスに戻されるバイト数が含まれます (ic_dp によって指定される buffer は、STREAM 内のモジュールまたはドライバーが戻す可能性のある最大データ量を入れるのに十分な大きさでなければなりません)。
STREAM ヘッドは、strioctl 構造体が指す 情報を内部 ioctl() コマンド・メッセージに変換し、そのメッセージを ダウンストリームに送ります。
I_STR コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EAGAIN または ENOSR
- ioctl() メッセージ用のバッファーを割り振ることができない。
- EINVAL
- この ic_len メンバーが 0 未満か、メッセージのデータ・パートの最大構成サイズより大きい。あるいは、ic_timeout が -1 未満。
- ENXIO
- fildes でハングアップを受信。
- ETIME
- 肯定応答が受信される前にダウンストリームの ioctl() が タイムアウトになった。
I_STR は、応答を待っている間に STREAM ヘッドでエラーまたはハングアップを示す メッセージを受信した場合も失敗します。 また、ダウンストリームに送られた ioctl() コマンドが失敗した場合は、肯定応答または否定応答メッセージ内にエラー・コードが戻されます。 このような場合、I_STR は、メッセージ内の値に errno を設定して失敗します。
- I_SWROPT
- 引数 arg の値を使って、書き込みモードを設定します。 arg のビット設定として適切なものは以下のとおりです。
- SNDZERO
- 0 バイトの write() が発生した場合に、長さがゼロのメッセージをダウンストリームに送信する。 0 バイトの write() が発生しても、長さがゼロのメッセージを送信しないようにするには、このビットを arg 内で設定してはいけない (例えば、arg を 0 に設定するなど)。
I_SWROPT コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EINVAL
- arg が上記の値でない。
- I_GWROPT
- 上記で説明されているように、現在の書き込みモード設定を 引数 arg が指す int に戻します。
- I_SENDFD
- I_SENDFD は
ファイル記述子 arg に関連するオープン・ファイル記述子への新しい参照を作成し、参照と呼び出し側プロセスのユーザー ID およびグループ ID を含むメッセージを STREAMS ベース
のパイプ fildes に書き込みます。I_SENDFD コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EAGAIN
- 送信側の STREAM がファイル・ポインターを入れるメッセージ・ブロックを割り振ることができない。つまり、受信側の STREAM ヘッド読み取りキューがいっぱいで、I_SENDFD が送信したメッセージが受け入れられない。
- EBADF
- arg 引数が正しいオープン・ファイル記述子でない。
- EINVAL
- fildes 引数が STREAM パイプに接続されていない。
- ENXIO
- fildes でハングアップを受信。
- I_RECVFD
- I_SENDFD コマンドを使って、STREAMS ベースのパイプ内にあるメッセージから、オープン・ファイル記述子への参照を検索し、このオープン・ファイル記述子を参照する呼び出し側のプロセスで、新しいファイル記述子を割り振ります。 arg 引数は、<stropts.h> 内で定義されている strrecvfd データ構造体へのポインターです。
fd メンバーはファイル記述子です。 uid および gid メンバーは、それぞれ、送信側プロセスの有効なユーザー ID およびグループ ID です。
O_NONBLOCK が設定されていない場合、I_RECVFD は、メッセージが STREAM ヘッドに現れるまでブロックします。 O_NONBLOCK が設定されている場合、STREAM ヘッドにメッセージが存在しないと、I_RECVFD は、errno を EAGAIN に設定して失敗します。
STREAM ヘッドにあるメッセージが I_SENDFD が送信したものである場合、メッセージ内で参照されているオープン・ファイル記述子 に対して新しいファイル記述子が割り振られます。 新しいファイル記述子は、arg が指す strrecvfd 構造体の fd メンバーに置かれます。
I_RECVFD コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EAGAIN
- STREAM ヘッド読み取りキューにメッセージが存在せず、O_NONBLOCK フラグが設定されている。
- EBADMSG
- STREAM ヘッド読み取りキューにあるメッセージが、渡されたファイル記述子を含むメッセージでない。
- EMFILE
- 許可されているプロセスが、現在オープンしているファイル記述子の最大数を保有している。
- ENXIO
- fildes でハングアップを受信。
- I_LIST
- この要求は、プロセスが、STREAM 上にあるすべてのモジュール名を
一番先頭のドライバー名を含めてリストできるようにします。 arg が NULL
ポインターの場合、戻される値は fildes が指す STREAM 上にある、ドライバーを含んだモジュール数になります。 これにより、プロセスはモジュール名に十分なスペースを割り振ることができます。 それ以外の場合、str_list 構造
へのポインターでなくてはいけません。
sl_nmods メンバーは、プロセスが配列中に割り振ったエントリーの 数を示します。 戻るとき、str_list 構造の sl_modlist メンバーは、モジュール名のリストを含んでいます。 sl_modlist 配列に入れられたエントリーの数は、sl_nmode メンバー (この数にはドライバーを含むモジュールの数が 含まれます) にあります。 ioctl() からの戻り値は 0 です。 項目は、STREAM の一番上から始まって STREAM の終わりに達するまで、または 要求されたモジュール数 (sl_nmods) が満たされるまで、ダウンストリームに入ります。
I_LIST コマンドを指定している ioctl() は、次の場合に失敗します。- エラー・コード
- 説明
- EAGAIN または ENOSR
- バッファーを割り振ることができない。
- EINVAL
- sl_nmods メンバーが 1 未満。
- I_ATMARK
- この要求は、プロセスが、STREAM ヘッド読み取りキューの先頭にあるメッセージが
ダウンストリームのモジュールによってマークされているかどうか判別できるようにします。 arg 引数は、STREAM ヘッド読み取りキューにマークされたメッセージが複数ある可能性が
ある場合に、どのようにチェックするかを決定します。 以下の値が
あります。
ANYMARK は、メッセージがマークされているかどうかをチェックします。
LASTMARK は、メッセージがキューでマークされている最後のものかどうかをチェックします。
フラグ ANYMARK および LASTMARK のビット単位包含 OR を指定することができます。
戻り値は、マーク条件が満たされる場合は 1 で、それ以外の場合は 0 になります。
I_ATMARK コマンドを指定している ioctl() は、次の場合に失敗します。
EINVAL arg 値が無効。
- I_CKBAND
- 指定された優先順位バンドのメッセージが STREAM ヘッド読み取りキューに
存在するかどうかをチェックします。 指定された優先順位のメッセージが存在する場合は 1、メッセージが存在しない場合は 0、エラーの場合は -1 が戻されます。arg は int 型でなければなりません。
I_CKBAND コマンドを指定している ioctl() は、次の場合に失敗します。
EINVAL arg 値が無効。
- I_GETBAND
- STREAM ヘッド読み取りキューにある最初のメッセージの優先帯域を arg が参照する整数に戻します。
I_GETBAND コマンドを指定している ioctl() は、次の場合に失敗します。
ENODATA STREAM ヘッド読み取りキューにメッセージがない。
- I_CANPUT
- 特定のバンドが書き込み可能かどうかを確認します。arg は、問題の優先順位バンドに設定されます。 バンドがフロー制御されている場合は 0、バンドが
書き込み可能な場合は 1、エラーの場合は -1 が戻されます。
I_CANPUT コマンドを指定している ioctl() は、次の場合に失敗します。
EINVAL arg 値が無効。
- I_SETCLTIME
- この要求は、STREAM がクローズ中で、書き込みキューにデータがある場合に、プロセスに STREAM ヘッドを遅らせる時間を設定できるようにします。 各モジュールまたはドライバーをクローズする前に、書き込みキューにデータがある場合は、STREAM ヘッドは、データのドレーン処理をするために、指定された時間だけ遅れます。 遅れた後にデータがまだ存在する場合、データはフラッシュされます。 arg 引数は、遅れる時間をミリ秒で指定する整数を指し、その数は、最も近い適切な値に切り上げられます。 I_SETCLTIME が STREAM 上で実行されない場合は、インプリメンテーションに依存するデフォルトのタイムアウト間隔が使用されます。
I_SETCLTIME コマンドを指定している ioctl() は、次の場合に失敗します。
EINVAL arg 値が無効。
- I_GETCLTIME
- この要求は、arg が指す整数内のクローズ遅延時間を戻します。
- I_LINK
- 2 つの STREAMS を接続し、fildes は多重化ドライバーに接続する STREAM のファイル記述子、arg は別のドライバーに接続する STREAM のファイル記述子です。 arg が
指定する STREAM が、多重化ドライバーの下に接続されます。 I_LINK は、接続に関して多重化ドライバーが
肯定応答メッセージを STREAM ヘッドに送信することを要求します。 この呼び出しは、正常に実行された場合はマルチプレクサー ID 番号 (マルチプレクサーの切断に使用する ID、I_UNLINK を参照) が戻されます。正常に実行されなかった場合は、-1 が戻されます。I_LINK コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EAGAIN または ENOSR
- I_LINK を実行するための STREAMS ストレージを割り振ることができない。
- EBADF
- arg 引数が正しいオープン・ファイル記述子でない。
- EINVAL
- fildes が多重化をサポートしていない、または arg が STREAM でないか、既にマルチプレクサーからダウンストリームに接続している。または指定された I_LINK 操作が STREAM ヘッドを多重化 STREAM の複数の場所に接続しようと している。
- ENXIO
- fildes でハングアップを受信。
- ETIME
- STREAM ヘッドで肯定応答メッセージを受信する前にタイムアウト。
多重化ドライバーが、要求に応答するのを待っている間に、エラーまたはハングアップを示すメッセージが、fildes の STREAM ヘッドで受信された場合も、I_LINK は失敗します。 また、エラー・コードが、肯定または否定応答メッセージに戻されます。 このような場合、I_LINK は、メッセージ内の値に errno を設定して失敗します。
- I_UNLINK
- fildes および arg によって指定される 2 つの STREAM を切断します。fildes は、多重化ドライバーに接続している STREAM のファイル記述子です。 arg 引数は、STREAM が多重化ドライバーから
ダウンストリームに接続されたときに、I_LINK ioctl() コマンド
から戻されたマルチプレクサー ID 番号です。 arg が MUXID_ALL の場合、fildes に接続されていた STREAM はすべて切断されます。 I_LINK と同様に、このコマンドは
肯定応答を必要とします。I_UNLINK コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EAGAIN または ENOSR
- 肯定応答メッセージ用のバッファーを割り振ることができない。
- EINVAL
- マルチプレクサー ID 番号が無効。
- ENXIO
- fildes でハングアップを受信。
- ETIME
- STREAM ヘッドで肯定応答メッセージを受信する前にタイムアウト。
I_UNLINK は、多重化ドライバーが要求に応答するのを待っている間に、fildes の STREAM ヘッドで エラーまたはハングアップを示すメッセージを受信した場合も失敗します。また、エラー・コードが 肯定または否定応答メッセージ内に戻されます。 このような場合、I_UNLINK は、メッセージ内の値に errno を設定して失敗します。
- I_PLINK
- 2 つの STREAM 間に永続的な接続 を作成します。fildes は、別のドライバーに接続している STREAM のファイル記述子です。 この呼び出しは、多重化ドライバーに対して上位にある、STREAM に関連するファイル記述子
fildes がクローズされても存在できる、永続的な接続を作成します。 arg が指定する STREAM が、永続的な接続を使用して多重化ドライバーの下に接続されます。 I_PLINK は、多重化ドライバーが
肯定応答メッセージを STREAM ヘッドに送信することを要求します。 この呼び出しは、成功した場合はマルチプレクサー ID 番号 (マルチプレクサーの切断に使用する ID、I_PUNLINK を参照してください) を、失敗した場合は -1 を戻します。I_PLINK コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EAGAIN または ENOSR
- I_PLINK を実行するための STREAMS ストレージを割り振ることができない。
- EBADF
- arg 引数が正しいオープン・ファイル記述子でない。
- EINVAL
- fildes 引数が多重化をサポートしていない。つまり、arg が STREAM でない、または 既にマルチプレクサーからダウンストリームに接続されている。あるいは、指定した I_PLINK 操作が STREAM ヘッドを多重化 STREAM の複数の場所に接続しようとしている。
- ENXIO
- fildes でハングアップを受信。
- ETIME
- STREAM ヘッドで肯定応答メッセージを受信する前にタイムアウト。
I_PLINK は、多重化ドライバーが要求に応答するのを待っている間に、fildes の STREAM ヘッドで エラーまたはハングアップを示すメッセージを受信した場合も失敗します。また、エラー・コードが 肯定または否定応答メッセージ内に戻されます。 このような場合、I_PLINK は、メッセージ内の値に errno を設定して失敗します。
- I_PUNLINK
- fildes および arg によって指定される 2 つの STREAM を
永続的な接続から切断します。 fildes 引数は、多重化ドライバーに接続
している STREAM のファイル記述子です。 arg 引数は、STREAM が多重化ドライバーから
ダウンストリームに接続されたときに、I_PLINK ioctl() コマンド
から戻されたマルチプレクサー ID 番号です。 arg が MUXID_ALL の場合、fildes に永続的に接続されていた STREAM はすべて切断されます。 I_PLINK と同様に、このコマンドは多重化ドライバーが要求に肯定応答することを必要とします。I_PUNLINK コマンドを指定している ioctl() は、次の場合に失敗します。
- エラー・コード
- 説明
- EAGAIN または ENOSR
- 肯定応答メッセージ用のバッファーを割り振ることができない。
- EINVAL
- マルチプレクサー ID 番号が無効。
- ENXIO
- fildes でハングアップを受信。
- ETIME
- STREAM ヘッドで肯定応答メッセージを受信する前にタイムアウト。
I_PUNLINK は、多重化ドライバーが要求に応答するのを待っている間に、fildes の STREAM ヘッドで エラーまたはハングアップを示すメッセージを受信した場合も失敗します。 また、エラー・コードが、肯定または否定応答メッセージに戻されます。 このような場合、I_PUNLINK は、メッセージ内の値に errno を設定して失敗します。
STREAMS 戻り値
正常に終了した場合、ioctl() は -1 以外の値を戻します。この値は、STREAMS 装置制御関数により異なります。
正常に実行されなかった場合、ioctl() は -1 を戻して、errno を次のいずれかの値に設定します。
以下の一般条件の下では、ioctl() は次のような場合に失敗します。
- エラー・コード
- 説明
- EBADF
- fildes 引数は、有効なオープン・ファイル記述子では ありません。
- EINTR
- ioctl() 操作時中にシグナルがキャッチされました。
- EINVAL
- fildes が 参照する STREAM またはマルチプレクサーは、マルチプレクサーから ダウンストリームへ (直接または間接に) リンクされます。
- エラー・コード
- 説明
- EINVAL
- cmd または arg 引数が、この装置に対して 無効です。
- EIO
- 何らかの物理 I/O エラーが発生しました。
- ENODEV
- fildes 引数は、有効な STREAMS 装置を参照していますが、対応する装置ドライバーが ioctl() をサポートしていません。
- ENOTTY
- fildes 引数が、制御関数を受け付ける STREAMS 装置と 関連付けられていません。
- ENXIO
- 引数 cmd または arg がこの装置ドライバーに対して無効であり、要求されたサービスがこの特定の従属装置上で実行できません。
STREAM が、マルチプレクサーからダウンストリームに接続されている場合、ioctl() コマンドは、I_UNLINK および I_PUNLINK を除き、すべてが errno を EINVAL に設定します。
ACL
- コマンド
- 説明
- SETFACL
- ACL を設定します。 アクセス制御リストに情報を設定するために使用します。arg は、入力 ACL を含むユーザー・バッファーを指定します。この入力 ACL は、struct ACL_buf とその直後に続く struct ACL_entrys の配列によってマップされます。arglen は、struct ACL_buf と struct ACL_entrys の配列を結合した長さを指定します。 ACL_buf および ACL_entrys についての詳細は、「z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」を参照してください。
- GETFACL
- ACL を取得します。 アクセス制御リストから情報を取得するために使用します。arg は、要求した ACL が戻されるユーザー・バッファーを指定します。 データは、すぐあとに struct ACL_entrys の配列が続く struct ACL_BUF によってマップ されます。 ACL_buf および ACL_entrys についての詳細は、「z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」を参照してください。 Arglen は、struct ACL とユーザー・バッファー内の struct ACL_entrys の配列を 結合した長さを指定します。
ACL 戻り値
正常に実行された場合、ioctl() は 0 を戻します。
- エラー・コード
- 説明
- EBADF
- fildes パラメーターが、正しいファイル記述子ではありません。
- EINVAL
- 要求が無効か、またはサポートされていません。
- EMVSPARM
- 無効なパラメーターがサービスに渡されました。
- ENODEV
- 装置が正しくありません。 この関数は装置ドライバーによってサポートされません。
ACL の例
int s;
int rc;
int acllen;
ext_acl_t aclbufp;
s = open("datafile", O_RDWR);
acllen = sizeof struct ACL_buf + (1024 * sizeof ACL_entry);
aclbufp = (ext_acl_t) malloc(acllen);
rc = ioctl(s, GETFACL, acllen, aclbufp)関連情報
- net/if.h — ネットワーク・インターフェースの構造体および定義
- net/rtrouteh.h — ネットワーク・ルーティング構造体および定義
- stropts.h — ストリーム・インターフェース
- sys/ioctl.h — システム入出力定義および構造体
- close() - ファイルのクローズ
- fcntl() - オープン・ファイル記述子の制御
- getmsg()、getpmsg() - STREAMS ファイルからの次のメッセージの受信
- open() — ファイルのオープン
- pipe() - 名前の付いていないパイプの作成
- poll() - ファイル記述子とメッセージ・キューに関するアクティビティーのモニター
- putmsg()、putpmsg() - STREAM に関するメッセージの送信
- read() - ファイルまたはソケットからの読み取り
- sigaction() - シグナル・アクションの検査/変更
- write() - ファイルまたはソケットへのデータの書き込み