ioctl ソケット制御操作

目的

ネットワーク関連の制御操作を実行する。

構文

#include <sys/ioctl.h>

int ioctl (fd,  cmd, .../* arg */) 
int  fd;
int  cmd; 
int ...  /* arg */

説明

ソケットのioctlコマンドは、様々なネットワーク関連の制御を行います。 fd 引数はソケット記述子である。 ソケット記述子以外の記述子に対しては、この呼び出しによって実行される関数の動作は未定義である。

cmd 引数とオプションの第三引数(型は可変)は、ソケットのioctl関数に渡され解釈され、ユーザーが指定した適切な制御操作を実行する。

ソケットのioctl制御操作は、以下の制御操作カテゴリに分類される:

パラメーター

項目 説明
fd socketまたはaccept呼び出しを使用して作成されたソケットを参照するファイル記述子を開く。
cmd 実行する制御機能を選択します。
.../* 引数 */ 要求された機能に必要な情報を表します。 引数の型は特定の制御要求によって異なりますが、整数かソケット固有のデータ構造へのポインタのいずれかです。

ソケット制御操作

以下のioctlコマンドはソケットに対して動作します:
ioctl コマンド 説明
SIOCATMARK 読み取りポインタが DataStream 内の論理マークを指しているかどうかを判定します。 論理マークは、帯域外データが送信される点を示す。
ioctl(fd, SIOCATMARK,&atmark);
int atmark;
atmarkがリターン時に 1 オンに設定されている場合、読み取りポインタはマークを指し、次の読み取りはマーク以降のデータを返す。 atmarkが 0 リターン時に設定されている場合( DataStream 上に帯域外データが存在すると仮定)、次の読み取りは帯域外マークの前に送信されたデータを返す。
注記: 帯域外データは、通常のデータとは独立してユーザーに配信される論理的に独立したデータチャネルである。加えて、即時的な注意を要するため、信号も送信される。 Ctrl-C 文字はその一例です。

SIOCSPGRP

SIOCGPGRP

SIOCSPGRP はソケットのプロセスグループ情報を設定します。 SIOCGPGRPは、ソケットに関連付けられたプロセスグループIDを取得します。
ioctl (fd, cmd, (int)&pgrp);
int  pgrp;
cmd
SIOCSPGRP または SIOCGPGRP に設定する。
pgrp
ソケットのプロセスグループIDを指定します。

ルーティングテーブル制御操作

以下のioctlコマンドはカーネルのルーティングテーブルに対して動作します:
ioctl コマンド 説明

SIOCADDRT

SIOCDELRT

SIOCADDRTはルーティングテーブルにルートエントリを追加します。 SIOCDELRT はルーティングテーブルからルートエントリを削除します。
ioctl(fd, cmd, (caddr_t)&route);
struct ortentry route;
cmd
SIOCADDRT または SIOCDELRT に設定する。
ルートエントリ情報は構造 ortentry 体で渡される。
スープのルート 構造 ifreq 体で渡された情報を使用してルーティングテーブルを更新します。
ioctl (fd, SIOUPDROUTE, (caddr_t)&ifr);
struct ifreq  ifr;

ARPテーブル制御操作

以下の ioctl コマンドはカーネルの ARP テーブルに対して動作します。 ヘッダーファイル net/if_arp.h を含める必要があります。
ioctl コマンド 説明

SIOCSARP

SIOCDARP

SIOCGARP

SIOCSARPは、ARPテーブル内のARPエントリを追加または変更します。 SIOCDARPはARPテーブルからARPエントリを削除します。 SIOCGARPはARPテーブルからARPエントリを取得する。
ioctl(fd, cmd, (caddr_t)&ar);
struct arpreq ar;
cmd
SIOCSARP、SIOCDARP、またはSIOCGARPに設定する。

ARPエントリ情報は構造 arpreq 体内で渡される。 コマンドが SIOCDARP の場合 ar.if Type = IFT_IB 、 InfiniBand (IB)の ARP エントリが削除されます。

グローバルネットワークパラメータ制御操作

以下のioctlコマンドはグローバルネットワークパラメータとして動作します:
ioctl コマンド 説明

SIOCSNETOPT

SIOCGNETOPT

SIOCDNETOPT

SIOCGNETOPT1

SIOCSNETOPT はネットワークオプションの値を設定します。 SIOCGNETOPT はネットワークオプションの値を取得します。 SIOCDNETOPT はネットワークオプションのデフォルト値を設定します。
ioctl(fd, cmd, (caddr_t)&oreq);
struct optreq oreq;
cmd
SIOCSNETOPT、SIOCGNETOPT、またはSIOCDNETOPTに設定する。
ネットワークオプションの値は構造 optreq 体に格納されます。
SIOCGNETOPT1 ネットワークオプションの現在の値、デフォルト値、および範囲を取得します。
ioctl(fd, SIOCGNETOPT1, (caddr_t)&oreq);
struct optreq1 oreq;
ネットワークオプション情報は、戻り optreq1 値として構造体に格納される。 net/netopt.hoptreq 構造 optreq1 体と構造体はで定義されている。

SIOCGNMTUS

SIOCGETMTUS

SIOCADDMTU

SIOCDELMTU

SIOCGNMTUSは、共通MTUリストに保持されているMTUの数を取得します。 SIOCADDMTUは、共通MTUのリストにMTUを追加します。 SIOCDELMTUは共通MTUリストからMTUを削除します。
ioctl(fd, cmd, (caddr_t)&nmtus);
int nmtus;
cmd
SIOCGNMTUS、SIOCADDMTU、またはSIOCDELMTUに設定する。
SIOCGETMTUSは、共通MTUリストに維持されているMTUを取得します。
ioctl(fd, SIOCGETMTUS, (caddr_t)&gm);
struct get_mtus gm;
構造 get_mtus は で定義されています netinet/in.h

インターフェース制御操作

以下の ioctl コマンドはインターフェースに対して動作します。 ヘッダーファイル net/if.h を含める必要があります。
ioctl コマンド 説明

SIOCSIFADDR

SIOCDIFADDR

SIOCSIFADDRはインターフェースアドレスを設定します。 SIOCDIFADDR はインターフェースアドレスを削除します。 インターフェースアドレスは フィールド ifr.ifr_addr で指定されます。 SIOCGIFADDR はインターフェースアドレスを取得します。 アドレスは フィールド ifr.ifr_addr に返されます。
ioctl(fd, cmd, (caddr_t)&ifr, sizeof(struct ifreq));
struct ifreq ifr;
cmd
SIOCSIFADDR または SIOCDIFADDR に設定する。

シオカイファッド

SIOCAIFADDRはインターフェースアドレスを追加します。 インターフェース名は フィールド ifr.ifra_name で指定されます。 エイリアスIPアドレスはフィールド theifr.ifra_addr に指定されます。 エイリアスIPブロードキャストアドレスはフィールド ifr.ifra_broadaddr に指定され、エイリアスIPネットワークマスクはに指定される場合があります ifr.ifra_mask
ioctl(fd, cmd, (caddr_t)&ifr, sizeof(struct ifaliasreq));
struct ifaliasreq ifr;
cmd
SIOCAIのアドレスを設定
SIOCGIアドレス インターフェイスに関連付けられているアドレスのリストを取得します。
ioctl (fd, SIOCGIFADDRS, (caddr_t)ifaddrsp);
struct ifreqaddrs  *ifaddrsp;
インターフェース名は ifaddrsp->ifr_name フィールドで渡されます。 インターフェースに関連付けられたアドレスは、戻り値として配列 ifaddrsp->ifrasu に格納される。
注記: この ifreqaddrs 構造体は、1 sockaddr_in/sockaddr_in6 つの構造体(1 sockaddr_in/sockaddr_in6 要素の配列)のみを格納するためのスペースを含みます。 インターフェースに関連付けられた n 個のアドレスを取得するには、ioctl コマンドの呼び出し元は バイト {sizeof (struct ifreqaddrs) + (n * sizeof (struct sockaddr_in)} 分の領域を確保する必要があります。

SIOCSIFDSTADDR

SIOCGIFDSTADDR

SIOCSIFDSTADDR は、フィールド ifr.ifr_dstaddr で指定されたインターフェースの点対点アドレスを設定します。 SIOCGIFDSTADDR は、インターフェイスに関連付けられたポイントツーポイントアドレスを取得します。 アドレスは戻り値として フィールド ifr.ifr_dstaddr に格納されます。
ioctl(fd, cmd, (caddr_t)&ifr, sizeof(struct ifreq));
struct ifreq ifr;
cmd
SIOCSIFDSTADDR または SIOCGIFDSTADDR に設定する。

SIOCSIFNETMASK

SIOCGIFNETMASK

SIOCSIFNETMASK は、フィールド ifr.ifr_addr で指定されたインターフェースのネットマスクを設定します。 SIOCGIFNETMASK はインターフェースのネットマスクを取得します。
ioctl(fd, cmd, (caddr_t)&ifr, sizeof(struct ifreq));
struct ifreq ifr;
cmd
SIOCSIFNETMASK または SIOCGIFNETMASK に設定する。

SIOCSIFBRDADDR

SIOCGIFBRDADDR

SIOCSIFBRDADDR は、フィールド ifr.ifr_broadaddr で指定されたインターフェースのブロードキャストアドレスを設定します。 SIOCGIFBRDADDR はインターフェースのブロードキャストアドレスを取得します。 ブロードキャストアドレスはフィールド ifr.ifr_broadaddr に配置されます。
ioctl(fd, cmd, (caddr_t)&ifr, sizeof(struct ifreq));
struct ifreq ifr;
cmd
SIOCSIFBRDADDR または SIOCGIFBRDADDR に設定する。
SIOCGSIZIFCONF SIOCGIFCONFによって返される全インターフェースの構成情報を取得するために必要なメモリサイズを取得します。
ioctl(fd, cmd, (caddr_t)&ifconfsize);
int ifconfsize;
SIOCGIFCONF システム上で設定されているすべてのインターフェースの設定情報を返します。
ioctl(fd, SIOCGIFCONF, (caddr_t)&ifc);
struct ifconf ifc;
構成情報は、フィールド ifc.ifc_reqifreq によって指される構造体のリストとして返され、インターフェース ifreq ごとに1つの構造体が含まれます。
注: ioctl コマンドの呼び出し元は、システム上で設定されているすべてのインターフェース ifreq の構造体のリストとして返される設定情報を格納するのに十分な領域を確保する必要があります。 例えば、システムに n 個のインターフェースが設定されている場合、n バイトの {n * sizeof (struct ifreq)} 割り当て領域を指す必要があります ifc.ifc_req
注: 代わりに、この目的には SIOCGSIZIFCONF ioctl コマンドを使用することもできます。

SIOCSIFFLAGS

SIOCGIFFLAGS

SIOCSIFFLAGS はインターフェースフラグを設定します。 SIOCGIFFLAGS はインターフェースフラグを取得します。
ioctl(fd, cmd, (caddr_t)&ifr);
struct ifreq ifr;
インターフェースフラグについては /usr/include/net/if.h を参照してください。 フラIFF_はxxxで示されます。
注:, IFF_POINTTOPOINT, IFF_SIMPLEX, IFF_RUNNING IFF_OACTIVE,, IFF_BROADCASTおよび IFF_MULTICAST フラグは ioctl を使用して変更できません。

SIOCSIFMETRIC

SIOCGIFMETRIC

SIOCSIFMETRIC は、フィールド ifr.ifr_metric で指定されたインターフェースメトリックを設定します。 SIOCGIFMETRICはインターフェースメトリックを取得する。 インターフェースメトリックは、戻り値としてフィールド ifr.ifr_metric に配置される。
ioctl(fd, cmd, (caddr_t)&ifr);
struct ifreq ifr;
cmd
SIOCSIFMETRIC または SIOCGIFMETRIC に設定する。

SIOCSIFSUBCHAN

SIOCGサブチャネル

SIOCSIFSUBCHAN は、フィールド ifr.ifr_flags で指定されるサブチャネルアドレスを設定します。 SIOCGIFSUBCHAN は、フィールド ifr.ifr_flags 内のサブチャネルアドレスを取得します。
ioctl(fd, SIOCSIFSUBCHAN, (caddr_t)&ifr);
struct ifreq ifr;

SIOCSIFOPTIONS

SIOCG ファイルオプション

SIOCSIFOPTIONS はインターフェースオプションを設定します。 SIOCGIFOPTIONS はインターフェースのオプションを取得します。
ioctl(fd, SIOCSIFOPTIONS, (caddr_t)&ifr);
struct ifreq ifr;
インターフェースオプションは、構造 ifreq 体の ifr_flags フィールドに格納されます。 xxx IFO_で示されるインターフェースオプションの一覧については、ファイルを /usr/include/net/if.h 参照してください。
ioctl コマンド 説明

SIOCADDMULTI

SIOCDELMULTI

SIOCADDMULTI は、インターフェースのマルチキャストアドレス一覧にアドレスを追加します。 SIOCDELMULTI は、インターフェースのマルチキャストアドレス一覧からマルチキャストアドレスを削除します。
ioctl(fd, cmd, (caddr_t)&ifr);
struct ifreq ifr;
cmd
SIOCADDMULTI または SIOCDELMULTI に設定する。
マルチキャストアドレス情報は、構造 ifr_addr 体で指定される。
SIOCGETVIFCNT 仮想インターフェースのパケットカウント情報を取得します。 情報は sioc_vif_req 構造体に指定されています。
ioctl (fd, SIOCGETVIFCNT, (caddr_t)&v_req);
struct sioc_vif_req  v_req;
SIOCGETSGCNT 指定された送信元グループに対するパケットカウント情報を取得します。 情報は sioc_sg_req 戻り際に構造体に格納される。
ioctl(fd, SIOCGETSGCNT, (caddr_t)&v_req);
struct sioc_sg_req v_req;

SIOCSIFMTU

SIOCGIFMTU

SIOCSIFMTUはインターフェースの最大伝送単位(MTU)を設定します。 SIOCGIFMTUはインターフェースMTUを取得します。
ioctl(fd, cmd, (caddr_t)&ifr);
struct ifreq ifr;
MTU値はフィールド ifr.ifr_mtu に格納されます。
注記: MTU の有効な値の範囲はインターフェースごとに異なり、インターフェースの種類に依存します。

SIOCIFATTACH

SIOCIFDETACH

SIOCIFATTACH はインターフェースを接続します。 ネットワークインターフェースリストにインターフェースを初期化して追加します。 SIOCIFDETACH はインターフェースのブロードキャストアドレスを解除します。 この操作により、インターフェースがネットワークインターフェースリストから削除されます。 インターフェース名は フィールド ifr.ifr_name で指定されます。
ioctl(fd, cmd, (caddr_t)&ifr);
struct ifreq ifr;

シオスィフギディリスト

SIOCGIFGIDLIST

SIOCSIFGIDLIST は、gidlist インターフェースに対して、フィールド ifrg.ifrg_gidlist で指定されたグループ ID のリストを追加または削除します。 インターフェース名は フィールド ifrg.ifrg_name で指定されます。 操作コードは、 gidlist インターフェースに対して、指定されたグループ ADD_GRP/DEL_GRPIDのリストを追加するか削除するかを示すために、フィールド ifrg.ifrg_gidlist で指定されます。 SIOCGIFGIDLIST は、インターフェースに関連付けられたグループ ID のリストを取得します。 グループIDは、戻り値のフィールド ifrg.ifrg_gidlist に配置されます。
ioctl(fd, cmd, (caddr_t)&ifrg);
struct ifgidreq ifrg;

SIOCIF_ATM_UBR

SIOCIF_ATM_SNMPARP

SIOCIF_ATM_DUMPARP

SIOCIF_ATM_アイドル状態

SIOCIF_ATM_サービス

SIOCIF_ATM_DARP

SIOCIF_ATM_GARP

SIOCIF_ATM_SARP

SIOCIF_ATM_UBR は、ATM インターフェースの UBR レートを設定します。 SIOCIF_ATM_SNMPARP は SNMP ATM ARP エントリを取得します。 SIOCIF_ATM_DUMPARP は、指定された数の ATM ARP エントリを取得します。 SIOCIF_ATM_DARP は、ARP テーブルから ATM ARP エントリを削除します。 SIOCIF_ATM_GARP は、ATM ARP エントリを ARP テーブルに取得します。 SIOCIF_ATM_SARPはATM ARPエントリを追加します。 ARP情報は構造 atm_arpreq 体で指定される。 SIOCIF_ATM_SVC は、このインターフェースが恒久仮想回路 (PVC) および交換仮想回路 (SVC) タイプの仮想接続をサポートするかどうかを指定します。 また、この ifatm_svc_arg 構造体に設定されたフラグに基づいて、この論理IPサブネットワーク(LIS)に対して、このインターフェースがARPクライアントであるかARPサーバーであるかを指定します。 SIOCIF_ATM_IDLE は、インターフェースのアイドル時間制限を指定します。

SIOCSISNO

SIOCGISNO

SIOCSISNO は、インターフェース固有のネットワークオプションを設定します。 SIOCGISNO は、インターフェースに関連付けられたインターフェース固有のネットワークオプションを取得します。
ioctl(fd, cmd, (caddr_t)&ifr);
struct ifreq ifr;
cmd
SIOCSISNO または SIOCGISNO に設定する。
インターフェース固有のネットワークオプションは構造 ifr.ifr_isno 体に格納される。 xxx ISNO_で示されるインターフェース固有のネットワークオプションの一覧については、ファイルを /usr/include/net/if.h 参照してください。
SIOCG・FBAUDRATE ifr_baudrate フィールド内のインターフェースボーレートの値を取得します。
ioctl(fd, SIOCGIFBAUDRATE, (caddr_t)&ifr);
struct ifreq ifr;
ボーレートはフィールド ifr.ifr_baudrate に保存されます。

SIOCADDIFVIPA

SIOCDELIFVIPA

SIOCLISTIFVIPA

SIOCADDIFVIPA は、によって指される指定された ifrv.ifrv_ifname インターフェースのリストを、によって指定される仮想 ifrv.ifrv_name インターフェースに関連付けます。 この操作により、これらのインターフェース上のすべての送信パケットの送信元アドレスが仮想インターフェースアドレスに設定されます。 SIOCDELIFVIPA は、SIOCADDIFVIPA を使用して、 ifrv.ifrv_nameifrv.ifrv_ifname によって指定され、によって指定された仮想インターフェイスに関連付けられた、によって指される指定されたインターフェイスのリストを削除します。 SIOCLISTIFVIPA は、指定された仮想インターフェースに関連付けられているすべての ifrv.ifrv_name インターフェースを一覧表示します。
ioctl(fd, SIOCADDIFVIPA, (caddr_t)&ifrv);
struct ifvireq ifrv;
仮想インターフェース情報は ifvireq 構造体に格納される。
注記: これらのフラグは仮想インターフェースでのみ動作します。
SIOCSIFADDR6 IPv6 アドレスを設定または追加する。
ioctl(fd, SIOCSIFADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCGIFADDR6 IPv6 アドレスを取得します。
ioctl(fd, SIOCGIFADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCSIFDSTADDR6 IPv6 アドレスの宛先(ポイントツーポイント)アドレスを設定します。
ioctl(fd, SIOCSIFDSTADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCGIFDSTADDR6 IPv6 アドレスの宛先(ポイントツーポイント)アドレスを取得する。
ioctl(fd, SIOCGIFDSTADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCSIFNETMASK6 IPv6 のアドレスに対してネットマスクを設定する。
ioctl(fd, SIOCSIFNETMASK6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCGIFNETMASK6 IPv6 のアドレスのネットマスクを取得する。
ioctl(fd, SIOCGIFNETMASK6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCDIFADDR6 IPv6 アドレスを削除する。
ioctl(fd, SIOCDIFADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCFIFADDR6 アドレスリストの先頭に IPv6 アドレスを記載してください。
ioctl(fd, SIOCFIFADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCAIFADDR6 IPv6 のエイリアスアドレスを追加または変更する。
ioctl(fd, SIOCAIFADDR6, (caddr_t)&ifra);
struct in6_aliasreq ifra;
SIOCADDANY6 IPv6 のエニーキャストアドレスを追加します。
ioctl(fd, SIOCADDANY6, (caddr_t)&ifra);
struct in6_ifreq ifr;
SIOCDELANY6 IPv6 のエニーキャストアドレスを削除します。
ioctl(fd, SIOCDELANY6, (caddr_t)&ifra);
struct in6_ifreq ifr;
SIOCSIFZONE6 インターフェースの IPv6 ゾーンIDを特定のアドレス範囲に設定する。
ioctl(fd, SIOCSIFZONE6, (caddr_t)&ifrz);
struct in6_zonereq ifrz;
SIOCGIFZONE6 インターフェースの IPv6 スコープのゾーンIDを取得する。
ioctl(fd, SIOCGIFZONE6, (caddr_t)&ifrz);
struct in6_zonereq ifrz;
SIOCSIFADDRORI6 IPv6 アドレスの設定の起点となる位置を設定します。
ioctl(fd, SIOCSIFADDRORI6, (caddr_t)&ifro);
struct ifaddrorigin6 ifro;
SIOCAIFADDR6T IPv6 のエイリアスアドレスとタイプを追加または変更する。
ioctl(fd, SIOCAIFADDR6T, (caddr_t)&ifra);
struct in6_aliasreq2 ifra;
SIOCGIFADDR6T IPv6 アドレスの型を取得する。
ioctl(fd, SIOCGIFADDR6T, (caddr_t)&ifra);
struct in6_aliasreq2 ifra;
SIOCSIFADDRSTATE6 IPv6 アドレスの状態を変更する。
ioctl(fd, SIOCSIFADDRSTATE6, (caddr_t)&ifra);
struct in6_aliasreq2 ifra;
SIOCGIFADDRSTATE6 IPv6 アドレスの状態を取得する。
ioctl(fd, SIOCGIFADDRSTATE6, (caddr_t)&ifra);
struct in6_aliasreq2 ifra;
SIOCGSRCFILTER6 インターフェースの IPv6 マルチキャストグループソースフィルタを取得する。
ioctl(fd, SIOCGSRCFILTER6, (caddr_t)&ifrgsf);
struct group_source_filter_req ifrgsf;
SIOCACLADDR6 IPv6 クラスタのエイリアスアドレスを追加します。
ioctl(fd, SIOCACLADDR6, (caddr_t)&ifra);
struct in6_aliasreq ifra;
SIOCDCLADDR6 IPv6 クラスタアドレスを削除します。
ioctl(fd, SIOCDCLADDR6, (caddr_t)&ifr);
struct in6_ifreq ifr;
SIOCSIFADDRFLAG6 IPv6 アドレスのアドレスソースフラグを設定する。
ioctl(fd, SIOCSIFADDRFLAG6, (caddr_t)&ifra2);
struct in6_aliasreq2 ifra2;
SIOCGIFADDRFLAG6 IPv6 アドレスのアドレスソースフラグを取得する。
ioctl(fd, SIOCGIFADDRFLAG6, (caddr_t)&ifra2);
struct in6_aliasreq2 ifra2;

戻り値

正常に完了すると、ioctl は を返します 0。 そうでない場合、エラーを返して -1 をエラーを示す値に errno 設定します。

エラー・コード

以下の一般的な条件下で、ioctlコマンドは失敗します:
項目 説明
EBADF ファイル記述子 fd は有効な開いているソケットファイル記述子ではありません。
EINTR ioctl操作中にシグナルが捕捉されました。
EINVAL 無効なコマンドまたは引数が指定されました。
i octlコマンドcmdで指定された基本操作が失敗した場合、ioctlは以下のいずれかのエラーコードで失敗します:
項目 説明
EACCES 指定された操作に対して拒否された許可。
EADDRNOTAVAIL 指定されたアドレスはインターフェースで使用できません。
EAFNOSUPPORT ソケットではサポートされていない操作。
EBUSY リソースが使用中です。
EEXIST エントリまたはファイルが存在します。
EFAULT 引数がアクセス不可能なメモリ領域を参照しています。
EIO 入出力エラー。
ENETUNREACH ゲートウェイに到達できません。
ENOBUFS ルーティングテーブルのオーバーフロー。
ENOCONNECT 接続がありません。
ENOMEM 使用可能なメモリーが不足しています。
ENOTCONN この操作は接続されたソケットでのみ定義されていますが、ソケットは接続されていませんでした。
ENXIO デバイスが存在しません。
ESRCH 該当する処理がない。