コンピュータにおけるioctlIPA: [aɪˈɒktəl] またはアイ・オー・コントロール)とは、主にUNIXライクなオペレーティングシステム上で、アプリケーションデバイスドライバを制御したり、デバイスドライバと通常のデータの読み書きの流れの外で通信したりするために用意されたシステムコールのことである。AT&TUnix version 7 に実装されたのが起源である。また、名前は I/O control の略に由来している。

UNIXにおける ioctl は次のパラメータを受け取る[1]

  1. 有効な(オープン済みの)ファイル記述子
  2. リクエストコード番号
  3. データへの型なしポインタ(ドライバへの入力、ドライバからの出力、あるいは入出力両方)

リクエストコード番号とは、デバイスドライバに対する個々の操作に割り当てられた番号である。実際の関数プロトタイプにおける第3引数はC言語の歴史的な経緯から可変長引数...となっている。

カーネルは一般的に、デバイスドライバにioctlを直接送信する。これにより、たとえどのような方法で必要になったとしても、ドライバはリクエスト番号とデータを解釈することができる。デバイスドライバの作者はリクエスト番号についての説明を文書化し、またその番号を定数としてヘッダファイルに記述したものを提供する。いくつかのシステムではリクエスト番号に、ドライバに送信またはドライバから受信すべきデータのサイズおよびデータの転送方向をエンコードして含める慣習がある。

脚注

編集