w_ioctl()、および __w_pioctl() - 装置の制御

標準

標準/拡張機能 C/C++ 依存項目
z/OS® UNIX 両方 OS/390 V2R8

一般形式

#define _OPEN_SYS
#include <termios.h>

int w_ioctl(int fildes, int cmd, int arglen, void *arg);
int __w_pioctl(const char *pathname, int cmd, int arglen, void *arg);
ACL 形式:
#define _OPEN_SYS
#include <termios.h>
#include <sys>

int w_ioctl(int fildes, int cmd, int arglen, void arg);
int __w_pioctl(const char pathname, int cmd, int arglen, void arg);

機能説明

w_ioctl() および __w_pioctl() 関数は、装置固有コマンドの一般エントリー・ポイントです。w_ioctl() と __w_pioctl() で指定さ れるアクションは装置によって異なり、装置ドライバーによって定義 されます。
fildes
(w_ioctl で使用される) オープン文字特殊ファイルの記述子。
pathname
(__w_pioctl で使用される) ファイルのパス名。
cmd
装置ドライバーに渡されるコマンドで、整数値として指定されて います。
コマンド
説明
SIOCGPARTNERINFO
アプリケーションがそのパートナーに関するセキュリティー情報を取り出すためのインターフェースを提供します。詳細は、「」を参照してください。z/OS V2R2.0 Communications Server: IP Programmer's Guide and Reference.
arglen
装置ドライバーに渡される引数の長さ。
arg
装置ドライバーに渡される引数が保管されるバッファーの アドレス。

w_ioctl() と __w_pioctl() は、cmdarglen、および arg 引数を装置ドライバーに渡し、解釈および処理を 行います。w_ioctl() と __w_pioctl() が正常に終了すると、適正であれば、装 置ドライバーが arglenarg を戻します。

注: __w_pioctl() 関数は、拡張 ASCII の拡張機能のレベルに依存します。詳細は、拡張 ASCII サポートを参照してください。

戻り値

w_ioctl() は、正常に実行された場合は 0 を戻します。

正常に実行されなかった場合、w_ioctl() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EACCES
許可が拒否されました。
EINVAL
以下のいずれかの状態が発生しました。
  • 正しくない長さが arglen に指定されました。正しい引数長の範囲は 0 ~ 50,000 までです。
  • コマンド _IOCC_REGFILEINT が使用されたときに、無効なメッセージ・キューが指定されました。
ENAMETOOLONG
pathname 引数の長さが PATH_MAX を超えているか、もしくは pathname コンポーネントが NAME_MAX よりも長く、そのファイルに対して {_POSIX_NO_TRUNC} が有効です。シンボリック・リンクの場合、シンボリック・リンクの代わりに使われる パス名のストリングの長さが PATH_MAX を超えています。PATH_MAXNAME_MAX の値は、pathconf() を使用して判別することができます。
ENODEV
装置は存在していません。この関数は装置ドライバーによってサポートされません。
ENOENT
pathname という名前のファイルが存在しないか、または pathname が空ストリングです。
ENOTDIR
pathname の接頭部のコンポーネントが ディレクトリーではありません。
ENOTSUP

サポートされていない命令。次の状態が発生しました。

コマンド _IOCC_REGFILEINT が使用され、fildes (w_ioctl) または pathname (__w_pioctl) は、zFS と共にシスプレックス内で共有されているか NFS クライアントを介してアクセスしている、R/W ファイル・システムに常駐するファイルを参照しています。これらの場合、ローカル・システムに認識されることなく、ファイルをリモート・システムで変更できます。プログラムは通知を受け取らないため、この命令は拒否されます。

__errno2() を使用して、詳しい診断情報を取得してください。

ENOTTY
正しくないファイル記述子が指定されました。fildes は文字特殊ファイルではありませんでした。

ACL の説明

w_ioctl() および __w_pioctl() 関数は、SETFACL および GETFACL HFS コマンドの一般エントリー・ポイントです。SETFACL は、情報をアクセス制御リスト内に設定するために使用します。GETFACL は、情報をアクセス制御リストから検索するために使用します。

fildes
(w_ioctl で使用される) オープン文字特殊ファイルの記述子。
pathname
(__w_pioctl で使用される) ファイルのパス名。
cmd
整数値として装置ドライバーに渡されるコマンドで、SETFACL か GETFACL のいずれかです。
arglen
HFS 装置ドライバーに渡されるユーザー・バッファーの長さで、1 ~ 50,000 バイト までの値として指定されています。arglen は、struct ACL_buf と struct ACL_entrys の配列を結合したサイズです。
arg
arg は、すぐあとに struct ACL_entrys の配列が続く struct ACL_buf によってマップ されるユーザー・バッファーを指定します。ACL_buf および ACL_entrys についての詳細は、「z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」を参照してください。

w_ioctl() と __w_pioctl() は、cmdarglen、および arg 引数を装置ドライバーに渡し、解釈および処理を 行います。w_ioctl() と __w_pioctl() が正常に終了すると、適正であれば、装 置ドライバーが arglenarg を戻します。

ACL 戻り値

w_ioctl() は、正常に実行された場合は 0 を戻します。

正常に実行されなかった場合、w_ioctl() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EBADF
fildes パラメーターが、正しいファイル記述子ではありません。
EINVAL
要求が無効か、またはサポートされていません。
EMVSPARM
無効なパラメーターがサービスに渡されました。
ENODEV
装置が正しくありません。この関数は装置ドライバーによってサポートされません。

CELEBW34
⁄* CELEBW34

   This example shows a general entry point for device-specific commands.

 *⁄
#include <termios.h>
#include <stdio.h>

main() {
  char buf[256];
  int  ret;

  memset(buf, 0x00, sizeof(buf));
  if ((ret = w_ioctl(0, 1, sizeof(buf), buf)) != 0)
    perror("w_ioctl() error");
  else
    printf("w_iotctl() returned '%s'¥n", buf);
}
出力:
w_ioctl() error: Invalid argument
注: w_ioctl() はファイル・システム装置ドライバーによって 異なります。

関連情報