...

HP-UX リファレンス - HPE Support Center

by user

on
Category: Documents
331

views

Report

Comments

Transcript

HP-UX リファレンス - HPE Support Center
HP-UX リファレンス
セクション 7 : デバイス特殊ファイル
セクション 9 : 一般情報
HP-UX 11i バージョン 2 2004 年 9 月
Vol. 10 / 10
Manufacturing Part Number : B2355-90859
Printed In USA
2004 年 9 月
Printed in USA
© Copyright 1983-2004 Hewlett-Packard Development Company, L.P.
ご注意
1. 本書に記載した内容は、予告なしに変更することがあります。
2. 本書は内容について細心の注意をもって作成いたしましたが、万一ご不審な点や誤り、記載
もれなど、お気付きの点がございましたら当社までお知らせください。
3. 当社は、お客様の誤った操作に起因する損害については、責任を負いかねますのでご了承く
ださい。
4. 当社では、本書に関して特殊目的に対する適合性、市場性などについては、一切の保証をい
たしかねます。また、備品、性能などに関連した損傷についても保証いたしかねます。
5. 当社提供外のソフトウェアの使用や信頼性についての責任は負いかねます。
6. 本書の内容の一部または全部を、無断でコピーしたり、他のプログラム言語に翻訳すること
は法律で禁止されています。
7. 本製品パッケージとして提供した本書や媒体は本製品用だけにお使いください。プログラム
をコピーする場合はバックアップ用だけにしてください。プログラムをそのままの形で、あ
るいは変更を加えて第三者に販売することは固く禁じられています。
U.S. Government License
Confidential computer software. Valid license from HP required for possession, use or
copying. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer
Software Documentation, and Technical Data forCommercial Items are licensed to the U.S.
Government under vendor’s standard commercial license.
Copyright Notice
この文書およびこの文書に記されたソフトウェアは下記のような著作権により保護されていま
す。一部のマンページでは個別の著作権情報が確認できます。
Copyright © 1979, 1980, 1983, 1985-1993 The Regents of the University of California.
Copyright © 1980, 1984, 1986 Novell, Inc.
Copyright © 1985, 1986, 1988 Massachusetts Institute of Technology
Copyright © 1986-2000 Sun Microsystems, Inc.
Copyright © 1988 Carnegie Mellon University
Copyright © 1989-1991 The University of Maryland
ii
Copyright © 1989-1993 The Open Software Foundation, Inc.
Copyright © 1990 Motorola, Inc.
Copyright © 1990-1992 Cornell University
Copyright © 1991-2003 Mentat, Inc.
Copyright © 1996 Morning Star Technologies, Inc.
Copyright © 1996 Progressive Systems, Inc.
Trademark Notices
Intel®とItanium® のロゴ、Intel、Intel Inside および Itanium は、米国 Intel Corporation の
米国および他の国における登録商標で、ライセンスのもとに用いられています。
Java™ および Java に関する商標やロゴは、Sun Microsystems, Inc. の米国および他の国における
商標または登録商標です。当社は Sun Microsystems, Inc. とは無関係です。
Microsoft®、MS-DOS® は米国 Microsoft Corporation の登録商標です。
OSF/Motif™ は米国および他の国における The Open Group の登録商標です。
UNIX® は The Open Group の登録商標です。
X Window System™ は The Open Group の登録商標です。
iii
出版履歴
出版の日付と部品番号は、最新版ができるたびに変更します。内容の小さな変更に対しては増刷
の際に対応し、出版日の変更は行いません。マニュアルの部品番号は、改訂が行われるたびに変
更します。
新版の作成は、記載内容の訂正もしくはドキュメント製品の変更にともなって行われます。お手
元のマニュアルが最新のものかどうかは、当社の営業担当に確認してください。
製品番号
日付、リリース、形式
B2355-90850~59
2004 年 9 月、HP-UX release 11i バージョン 2 (HTML 10vol)
B2355-90850~59
2004 年 9 月、HP-UX release 11i バージョン 2 (PDF 10vol)
B2355-60104-01~09 2003 年 8 月、HP-UX release 11i バージョン 2 (HTML 9vol)
B2355-90815~23
重要
2003 年 8 月、HP-UX release 11i バージョン 2 (PDF 9vol)
本書の発行後も、新しい情報が発生する可能性があります。最新の情報について
は、HP ドキュメント Web サイト(以下のURL)で確認してください。
英語版 http://docs.hp.com/
日本語版 http://docs.hp.com/ja
原典
iv
本書は 『HP-UX Reference Section 7 : Device (Special) Files, Section 9: General
Information HP-UX 11i Version 2, September 2004 Volume 10 of 10』(HP Part
No. B2355-90848) を翻訳したものです。
表記規約
本書では、次の表記規約を使用します。
audit (5)
HP-UX マンページ。audit はマンページ名で、5 は HP-UX リファレンスのセ
クション 番号です。HP-UX コマンド行からマンページを表示するには、“man
audit”、または “man 5 audit” と入力します。man (1)を参照してください。
『マニュアル名』 マニュアルの名前です。web ページや Instant Information CD では、そのマ
ニュアルへのリンクになっていることがあります。
KeyCap
キーボード上のキーです。Return と Enter は同じキーを指しているので注意し
てください。
強調
強調したいテキスト文字列を示します。
強調
特に強く強調したいテキスト文字列です。
ENVIRONVAR
環境変数の名前を表します。
[ERRORNAME]
エラー番号の名前を表します。通常、errno 変数にその値が設定されます。
Term
重要な単語や表現で、定義されたものです。
ComputerOutput コンピュータが表示するテキスト文字列です。
UserInput
入力するコマンドなどのテキスト文字列を示します。
Command
コマンド名か修飾子付きコマンド名を示します。
Variable
コマンドや関数、情報内で、とりうる値の 1 つに置き換えられることを示す変
数の名前です。
[ ]
形式やコマンドの説明でオプションの内容を示します。内容が"|" で区切られ
ているときにはその項目のうち 1 つだけ選べることを示します。
{ }
形式やコマンドの説明で必須の内容を示します。内容が"|" で区切られている
ときにはその項目の 1 つを選ぶ必要があります。
...
前にある要素を任意の回数だけ繰り返すことを示します。
|
選択リスト内の項目の区切りを示します。
v
vi
はじめに
HP-UX は、さまざまな業界標準との互換性があるオペレーティングシステムを、HP 社が実現
したものです。UNIX® システム V リリース 4 オペレーティングシステムを基本とし、Fourth
Berkeley Software Distribution の重要な機能を取り入れています。
この説明書には、マンページというシステム参照文書が含まれています。なお、個別項目は、マ
ニュアルページまたは参照ページと言います。
一般情報
HP-UX の一般的な紹介及びマンページの構成とフォーマットについては、introduction (9) マン
ページをご参照ください。
セクション紹介
マンページはセクション別に分けられており、各セクションには概要 (intro) マンページがあり
ます。
intro (1)
セクション 1: ユーザー コマンド
(vol. 1 に A~M、vol. 2 に N~Z)
intro (1M)
セクション 1M: システム管理コマンド
(vol. 3 に A~M、vol. 4 に N~Z)
intro (2)
セクション 2: システム コール
(vol. 5)
intro (3C)
セクション 3: ライブラリ
(vol. 6 に A~M、vol. 7 に N~Z)
intro (4)
セクション 4: ファイル フォーマット
(vol. 8)
intro (5)
セクション 5: その他の機能
(vol. 9)
intro (7)
セクション 7: デバイス特殊ファイル
(vol. 10)
intro (9)
セクション 9 : 一般情報
(vol. 10)
vii
viii
Vol. 10
目次
セクション 7
セクション 9
Vol. 10
目次
セクション 7
セクション 9
目次
Vol.10
セクション 7: デバイス特殊ファイル
エントリ 名(セクション): 名称
説明
intro(7): intro………………………………………………………………………………………デバイス特殊ファイルの概要
arp(7p): arp………………………………………………………………………………………………アドレス変換プロトコル
autochanger(7): autochanger………………………………………………………………………………………………………
…メディアチェンジャと光磁気ディスクオートチェンジャ サーフェスデバイス用の SCSI インタフェース
blmode(7): blmode………………………………………………………………ターミナル ブロックモード インタフェース
cent(7): cent…………………………………………………………………………………セントロニクス互換インタフェース
clone(7): clone…………………………STREAMS ドライバーの一組のメジャーデバイスとマイナーデバイスのオープン
console(7): console………………………………………………………………………システムコンソール インタフェース
ddfa(7): ddfa……………………データ通信ターミナルコントローラ (DTC) デバイスファイル アクセスソフトウェア
diag0(7): diag0………………………………………………………………HP-PB I/O サブシステムへの診断インタフェース
diag1(7): diag1……………………………………………………………PCI I/O サブシステム診断のためのインタフェース
diag2(7): diag2……………………………診断用ロギングのためのインタフェースおよびプロセッサへのインタフェース
disk(7): disk………………………………………………………………………………………ディスクのダイレクトアクセス
dlpi(7): dlpi……………………………………………………………………………………………Data Link Provider Interface
floppy(7): floppy……………………………フレキシブルディスクまたは「フロッピー」ディスクのダイレクトアクセス
framebuf(7): framebuf………………………………………………………ラスタフレームバッファ デバイスのための情報
gang_sched(7): gang_sched………………………………………………………………………………ギャングスケジューラ
hil(7): hil………………………………………………………………………………………………HP-HIL デバイスドライバ
hilkbd(7): hilkbd……………………………………………………………………マップされたHP-HILキーボードドライバ
inet(7f): inet………………………………………………………………………………インターネットプロトコル ファミリ
iomap(7): iomap…………………………………………………………………………………物理的I/Oアドレスのマッピング
IP(7P): IP………………………………………………………………………………………………インターネットプロトコル
IP6(7p): IPv6, ipv6, ip6…………………………………………………………インターネットプロトコル バージョン6
ipmi(7): ipmi…………………………………………………………Intelligent Platform Management Interface (IPMI) ドライバ
kmem: カーネルメモリ…………………………………………………………………………………………………mem(7)参照
kmem(7): kmem…………………………………………………………シンボル名に基づいてカーネルメモリ上で I/O を実行
lan(7): LAN………………………………………………………………………………ネットワーク I/O カードアクセス情報
ldterm(7): ldterm………………………………………………………………標準STREAMSターミナル回線制御モジュール
lp(7): lp………………………………………………………………………………………………………………ラインプリンタ
lvm(7): lvm………………………………………………………………………………………論理ボリュームマネージャ(LVM)
mem(7): mem…………………………………………………………………………………………………………………主メモリ
modem(7): modem…………………………………………………………………………………非同期シリアルモデム回線制御
mt(7): mt…………………………………………………………stape および tape2 用の磁気テープのインタフェースと制御
ndp(7p): NDP……………………………………………………………………………………………………近隣探索プロトコル
nfs(7): nfs, NFS……………………………………………………………………………………ネットワークファイルシステム
null(7): null……………………………………………………………………………………………………………nullファイル
pckt(7): pckt……………………………………………………………STREAMS pty(疑似ターミナル)Packet Modeモジュール
poll(7): poll………………………………………………………複数のファイル記述子について入出力状態をモニターする
ps2(7): ps2, ps2kbd, ps2mouse………………………………ps/2キーボード/マウスデバイスドライバ、およびファイル
ptem(7): ptem……………………………………………………STREAMS pty(疑似ターミナル)エミュレーションモジュール
ptm(7): ptm…………………………………………………………………STREAMSマスターpty(疑似ターミナル)ドライバー
pts(7): pts…………………………………………………………………STREAMSスレーブpty(疑似ターミナル)ドライバー
pty(7): pty…………………………………………………………………………………………………疑似ターミナルドライバ
random(7): random, urandom, rng……………………………………………………………………強力な乱数ジェネレータ
routing(7): routing………………………………ローカルネットワークのパケット経路指定のためのシステムのサポート
sad(7): sad………………………………………………………………………………………………STREAMS運用ドライバー
scsi(7): scsi…………………………………………………………………Small Computer System Interface デバイスドライバ
HP-UX 11i Version 2: September 2004
Hewlett-Packard Company
ix
目次
Vol.10
エントリ 名(セクション): 名称
説明
scsi_ctl(7): scsi_ctl…………………………………………………デバイスドライバー用の SCSI パススルードライバー
scsi_disk(7): scsi_disk…………………………………………………SCSI 直接アクセス (ディスク) デバイスドライバ
scsi_tape(7): scsi_tape…………………………………………SCSI 0シーケンシャルアクセス(テープ)デバイスドライバ
sioc_io(7): sioc_io……………………………………………………………………………SCSI パススルー インタフェース
slp_syntax(7): slp_syntax……………………………………………………………………………SLP サービスタイプ構文
socket(7): socket……………………………………………………………………………………………………プロセス間通信
streamio(7): streamio……………………………………………………………………………………STREAMS ioctlコマンド
strlog(7): strlog………………………………………………………………………………………STREAMSログドライバー
sttyv6(7): stty……………………………………………………………バージョン6/PWB互換のターミナルインタフェース
TCP(7P): TCP………………………………………………………………………………インターネット転送制御プロトコル
telm: STREAMS Telnet マスタードライバ ……………………………………………………………………………tels(7)参照
tels(7): tels, telm………………………………………………………………………………………………………………STR
EAMS Telnet スレーブ (疑似端末) ドライバと、STREAMS Telnet マスタードライバ (telnetd のみで使用)
termio(7): termio, termios……………………………………………………………………汎用ターミナルインタフェース
termios: 汎用ターミナルインタフェース…………………………………………………………………………termio(7)参照
termiox(7): termiox………………………………………………………………………拡張一般ターミナルインタフェース
timod(7): timod………………………………………………………………ioctl()呼び出しをトランスポートインタフェース
tirdwr(7): tirdwr……………………………………………………………トランスポートインタフェース ユーザーによる
tty(7): tty…………………………………………………………………………………………制御ターミナルインタフェース
UDP(7P): UDP……………………………………………………………インターネット ユーザーデータグラム プロトコル
UNIX(7P): UNIX………………………………………………………………………………ローカル通信ドメインプロトコル
urandom: 強力な乱数ジェネレータ………………………………………………………………………………random(7)参照
vxfsio(7): vxfsio……………………………………………………………………………VxFS ファイルシステムの制御関数
xopen_networking(7): xopen_networking……………………………………………X/Openネットワークインタフェース
zero(7): zero……………………………………………………………………………………………………zero 特殊ファイル
セクション 9: 一般情報
エントリ 名(セクション): 名称
説明
intro(9): intro……………………………………………………………………………HP-UX 全般の情報セクションの概要
glossary(9): glossary…………………………………………………………………………………一般的なHP-UXの用語説明
introduction(9): Introduction……………HP-UX オペレーティングシステムおよび HP-UX リファレンスの概要説明
x
Hewlett-Packard Company
HP-UX 11i Version 2: September 2004
セクション 7
デバイス特殊ファイル
セクション 7
デバイス特殊ファイル
intro(7)
intro(7)
名称
intro − デバイス特殊ファイルの概要
説明
本セクションでは、 HP の周辺装置およびデバイスドライバーにアクセスするために使用されるデバイス特殊
ファイルについて説明します。各項目の名称は一般に、そこで説明しているデバイスの種類 ( ディスク、端
末、など) を表す名前であり、デバイス特殊ファイルやデバイスドライバー自体の名前ではありません。該当
する各項目で、ハードウェアデバイスおよび対応する HP-UX デバイスドライバーの両方の特性が説明されてい
ます。
デバイスは、 raw と block の2種類に分類されます。 raw デバイスすなわちキャラクターモード デバイス ( 例:
ラインプリンター) は、データをバッファリングなしのストリーム形式で転送します。 raw デバイスはキャラ
クター型デバイス特殊ファイルを使用します。
ブロック型デバイスは、名前からも分かるように、システムの一般的バッファリング機構を使用して、デバイ
スをブロック単位で転送します。ブロック型デバイスはブロック型デバイス特殊ファイルを使用しますが、
キャラクター型デバイスインタフェースを提供することも可能です。
デバイス特殊ファイルのファイル名は、 mksf (1M), insf (1M), または mknod(1M) コマンドでファイルが生成さ
れるときに、デバイスに結び付けられます。デバイス特殊ファイルを作成するときは、以下の標準的命名規則
に従うことをお勧めします。
/dev/ prefix/devspec[options]
prefix
各デバイスクラスに対応するサブディレクトリを示します (例えば、ディスク用の raw デバイス特
殊ファイルの場合は rdsk 、ディスク用のブロックデバイス特殊ファイルの場合は dsk 、raw テープ
デバイスの場合は rmt です)。
devspec
ハードウェアパス情報を示します。一般には c#t#d# という形式です。各要素の意味は次のとおり
です。
c#
オペレーティングシステムがインタフェースカードに割り当てたインスタンス番号で
す。インスタンス番号と物理的なスロット番号との間に、直接の関係はありません。
t#
リモートバス上のターゲットアドレスです (例えば、 SCSIアドレス)。
d#
ターゲットアドレスでのデバイスユニット番号です (例えば、SCSI LUN)。
options
上記以外の修飾子です。例えば、ディスクセクション s# (後方互換性のため)、テープデ
バイスのテープ記録密度、または光磁気媒体の表面仕様などです。
ハードウェアパス情報は ioscan(1M) の出力から得ることができます。
例
以下に、ディスクデバイス特殊ファイル名の例をあげます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-1
intro(7)
intro(7)
/dev/dsk/c0t6d0
ここで dsk はブロック型ディスクアクセスであることを示し、 c0t6d0 は、インタフェースカードのインスタ
ンス番号0、ターゲットアドレス6、およびユニット番号0でディスクアクセスが行われることを示します。 s#
の指定がないことは、アクセスがディスク全体に対して行われることを示します (詳細は disk(7) を参照)。
以下に、テープデバイス特殊ファイル名の例をあげます。
/dev/rmt/c2t3d0QIC150
ここで rmt は raw 磁気テープであることを示し、 c2 はデバイスがインスタンス番号2のインタフェースカード
に接続されていることを示し、 t3 はターゲット デバイスアドレスが3 に設定されていることを示し、 d0 は
テープ駆動機構がユニットアドレス0に存在することを示し、最後に QIC150 はテープフォーマットが QIC150
であることを示します ( 詳細は mt(7) を参照)。
警告
以前は、デバイス特殊ファイルについて別の命名規則が使用されていました。 ln(1) を使用して、以前の標準
名と新しい標準名の間にリンクを作成することは、以前の命名規則を使用しているプログラムの変換がすべて
完了するまでの一時的な措置として有効な方法です。
参照
ioscan(1M), mksf(1M), insf(1M), lssf(1M), hier(5), introduction(9)
ユーザーのシステムのシステム管理者マニュアル。
次の Web サイトに HP-UX のドキュメントが用意されています。
http://docs.hp.com (英語)、http://docs.hp.com/ja (日本語)
Section 7-2
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
arp(7P)
arp(7P)
名称
arp − アドレス変換プロトコル
説明
ARP は、 DARPA インタネットとハードウェアセクション アドレスを動的に変換するのに用いられるプロトコ
ルです。このプロトコルは、すべての LAN ドライバーで使われています。
ARP は、インタネットとハードウェアセクション アドレスの間の変換をキャッシングします。インタフェース
がキャッシュにないアドレスの変換を要求したとき、 ARP は、変換を要求するメッセージをキューに入れ、
ネットワークインタフェースの ether カプセル化手法が有効になっているならば、アドレス変換を要求してい
る接続されたネットワークにメッセージをブロードキャストします。応答があった場合、新しい変換がキャッ
シングされ、未処理のメッセージが転送されます。 ARP は、変換要求への応答を待っている間、最大でも1つ
のパケットしかキューに入れません。最も近くに「転送された」パケットのみが保存されます。
ARP を用いないシステムとの通信を容易にするために、インタネットとハードウェアセクション アドレスの表
から、エントリーを登録したり削除したりする ioctl が提供されています。アプリケーションの使用法は、次の
とおりです。
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/if_ether.h>
struct arpreq arpreq;
ioctl(s, SIOCSARP, (caddr_t)&arpreq);
ioctl(s, SIOCGARP, (caddr_t)&arpreq);
ioctl(s, SIOCDARP, (caddr_t)&arpreq);
それぞれの ioctl の呼び出しは、同じ構造体を引き数としてとります。 SIOCSARP は ARP エントリーを登録
し、 SIOCGARP は ARP エントリーを読み取り、 SIOCDARP は ARP エントリーを削除します。これらの ioctl
の呼び出しは、任意のソケット記述子 s にも適用できますが、スーパーユーザーのみが可能です。 arpreq 構
造体は次のものを含みます。
/*
* ARP ioctl request
*/
struct arpreq {
int32_t ifindex;
int32_t arp_flags;
/* flags */
int32_t arp_hw_addr_len; /* hardware address length */
struct sockaddr arp_pa; /* protocol address */
struct sockaddr arp_ha; /* hardware address */
u_char arp_pad[242];
HP-UX 11i Version 2: September 2004
/* buffer for link specific info. */
−1−
Hewlett-Packard Company
Section 7-3
arp(7P)
arp(7P)
};
/* arp_flags field values */
#define ATF_COM
0x02
#define ATF_PERM
0x04
/* permanent entry */
#define ATF_PUBL
0x08
/* publish entry */
#define ATF_SNAPFDDI
/* ARP on ether */
0x200
/* SNAP - FDDI */
#define ATF_SNAP8025
0x400
/* SNAP - 8025 */
#define ATF_IEEE8025
0x800
/* IEEE - 8025 */
#define ATF_FCSNAP
0x4000
/* Fibre Channel SNAP */
arp_pa sockaddr に対するアドレスファミリは AF_INET でなければならず、 arp_ha sockaddr に対しては
AF_UNSPEC でなければなりません。書き込めるフラグビットは、 ATF_PERM と ATF_PUBL です。
ATF_USETRAILERS ファイバチャネル ホストは ATF_PERM フラグのみをサポートします。 ATF_PERM は
エントリーを恒久的なものとします。 ATF_PUBL は、 ARP コードが、示されたホストに対する他のマシンか
ら来た ARP 要求に応答するように指定します。このことにより、あるホストが ARP サーバーとして動作するこ
とが可能になり、 ARP- 専用マシンを非-ARP マシンと通信させるのに便利です。
ARP は、ローカルホストになっているホスト (すなわちローカルホストのアドレスの ARP 変換要求に応えるホ
スト)を受動的に監視します。
診断
duplicate IP address!! sent from ethernet address: %x:%x:%x:%x:%x:%x.
コンソール画面に表示されるこのメッセージは、 ARP が、ローカルネットワーク上で、自身のインタ
ネットアドレスの変換要求に応答する他のホストを発見したことを意味します。
警告
ether
カプセル化手法を有効にするには、 ifconfig コマンドを使います( ifconfig(1M) を参照)。
著者
ARP は、カリフォルニア大学バークレー校で開発されました。
参照
ifconfig(1M), inet(3N), lan(7), arp(1M)
『An Ethernet Address Resolution Protocol』 , RFC826, Dave Plummer, Network Information Center, SRI.
Section 7-4
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
autochanger(7)
autochanger(7)
名称
autochanger − メディアチェンジャと光磁気ディスクオートチェンジャ サーフェスデバイス用の SCSI インタ
フェース
説明
オートチェンジャは、 SCSI の大容量記憶装置で、機械的なチェンジャデバイス、ひとつ以上のデータ転送デ
バイス( 光磁気ディスクドライブなど) とメディア( 光磁気ディスクなど) から構成されます。機械的なチェン
ジャはオートチェーンジャ内でメディアを保存領域から使用場所に移します。
システムのアーキテクチャによって、2 種類のメディアチェンジャ ドライバ (schgr あるいは autox0) が、メ
ディアチェンジャのデバイスへのアクセスを提供します。モジュール (ssrfc) は光磁気ディスクのサーフェスへ
のアクセスを提供するものです。
メディアチェンジャのドライバによって提供される機能には2つのレベルがあります。機械的チェンジャデバ
イスは、オートチェンジャ内のメディアを動かすために直接アクセスできます。これに対してメディアのサー
フェスはユニークなデバイスによってアクセスされ、これによりチェンジャのドライバがメディアをドライブ
内に移動し、I/Oリクエストを行います。
schgr と autox0 のメディアチェンジャのデバイスドライバは、汎用的なメディアチェンジャ インタフェースを
提供するためにメディアチェンジャ デバイスの SCSI 仕様に従います。これにより、機械的チェンジャ、
ジュークボックス、ライブラリ、オートチェンジャデバイス (MO、テープ、CD-ROM)のアプリケーションレ
ベルのドライバを作成することが可能になります。
しかし、 ssrfc モジュールは Hewlett-Packardの光磁気ディスクオートチェンジャ製品のみをサポートする目的
で提供されています。
デバイス名に関する規約
デバイス名に関する規約に従うことにより、オートチェンジャドライバでチェンジャデバイスおよび個別のメ
ディアサーフィスにアクセス可能になります。オートチェンジャ用のブロックデバイスは /dev/ac に、キャラ
クタデバイスは /dev/rac にあります。この2つのディレクトリでは、名前が "c#t#d#" の規約に従ってつけられ
ており( intro(7) を参照)、最後にサーフェスデスクリプタが付加されています。ユニークなデバイス名が、カー
ドインスタンス、ターゲットのSCSIチェンジャデバイスのアドレス、SCSIチェンジャデバイスのLUN、およ
びサーフェスデスクリプタにより決定されます。
チェンジャデバイスに対して、サーフェスデスクリプタをゼロにしたり、指定しないこともできます。また、
チェンジャ自身に対するブロック特殊ファイルはありません。たとえば、
/dev/rac/c1t5d0
は、SCSI のターゲットアドレス5 のLUN 0 の位置にある、SCSI インタフェースカードのインスタンス 1 にア
タッチされたチェンジャのキャラクタ特殊ファイルで、 /dev/rac/c1t5d0_0 と同じになります。
任意のサーフェスは、カードのインスタンス、SCSIのターゲットアドレスとチェンジャのSCSI LUNにより記
述され、そして、スロット番号とサイドに対するサーフェスデスクリプタが後ろに付加されます。たとえば、
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-5
autochanger(7)
autochanger(7)
/dev/ac/c1t5d0_1a
は、上で示したオートチェンジャのサーフェス1aに対するブロック特殊ファイルです。
/dev/rac/c1t5d0_1a
は、同じサーフェス1aのキャラクタ型特殊ファイルです。
メジャー番号とマイナー番号の記述
下に、チェンジャドライバによって、チェンジャデバイスと各サーフェスをオートチェンジャ内でアクセスす
る際に使われるビットのアサイメント (dev_t のフォーマット) を示します。
0-7
8-15
16-19
20-22
23-31
MAJOR
INSTANCE
TARGET
LUN
SURFACE
MAJOR は、該当するドライバのメジャー番号です。 INSTANCE は、チェンジャデバイスがアタッチされる
SCSIインタフェースのカードのインスタンスです。 TARGET は、チェンジャデバイスのSCSIのターゲットア
ドレスです。 LUN は、チェンジャデバイスのSCSI LUNです。そして、SURFACE は、以下のテーブルで記述
されるオートチェンジャ内の各サーフェスのユニークなデスクリプタです。 ( 注:サーフェスデスクリプタ
は、ビット23-31です)
サーフェス
サーフェスデスクリプタ
チェンジャデバイス
0
1a
01
1b
02
2a
03
2b ...
04 ...
31b
3e
32a
3f
32b ....
40 ....
デバイス番号内のすべてのフィールドは16 進表記で指定されます。このマイナー番号に関して、ハードパー
ティション(セクション)のサポートはないことに注意してください。必要ならば、LVMソフトパーティション
を使って、パーティションを作成できます。
チェンジャドライバによって使われるメジャー番号は次の通りです。
Section 7-6
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
autochanger(7)
autochanger(7)
b_major
c_major
schgr
29
231
autox0
30
230
最初のサーフェスとチェンジャのデバイス特殊ファイル名に関連するメジャー番号とマイナー番号を示す、長
い形式のリストを以下に示します。
schgr:
brw-rw-rw- 1 root sys 29 0x015001 Apr 22 10:22 /dev/ac/c1t5d0_1a
crw-rw-rw- 1 root sys 231 0x015001 Apr 22 10:22 /dev/rac/c1t5d0_1a
crw-rw-rw- 1 root sys 231 0x015000 Apr 22 10:22 /dev/rac/c1t5d0
autox0:
brw-rw-rw- 1 root sys 30 0x015001 Apr 24 11:35 /dev/ac/c1t5d0_1a
crw-rw-rw- 1 root sys 230 0x015001 Apr 24 11:35 /dev/rac/c1t5d0_1a
crw-rw-rw- 1 root sys 230 0x015000 Apr 24 11:35 /dev/rac/c1t5d0
光磁気オートチェンジャ サーフィスデバイスへのアクセス
HP光磁気ディスクライブラリ内のディスクサーフェスにアクセスするには、サーフェスモジュール ssrfc のエ
ントリーをシステムコンフィグレーション ファイル /stand/system と、該当するSCSIチェンジャドライバのエ
ントリー(アーキテクチャにより schgr あるいは autox0 )をインクルードする必要があります。 ssrfc モジュー
ルによって、光磁気ディスクサーフェスへのアクセスをディスクデバイスのように行うことができます。ディ
スクは、チェンジャによってアイドル状態のドライブに移動され、リクエストされたディスクのI/O操作が実行
されます。リクエストの終了時に、ディスクはオートチェーンジャ内の所定のストレージ位置に戻されます。
サーフェスモジュールは、オートチェーンジャのドライブにあるすべてのディスクに対して並列にアクセスで
きるようにします。オートチェーンジャ内のそのほかのディスクに対するI/Oリクエストは、ドライブリソース
が利用可能になるまでブロックされます。
デフォルトでは、いくつかのコマンド( mount、 newfs、および mediainitなど) は O_NDELAY フラッグをセッ
トしてデバイスをオープンします。オートチェーンジャのサーフェスに関してこういったコマンドを起動して
も、ドライブリソースが利用可能になるのを待ちません。その代わり、利用可能なドライブがない場合、リク
エストは [EBUSY] を返します。
オートチェンジャのディスクにアクセスするためのサーフェスモジュールの機能を使う開発者は次のような、
O_NDELAY フラグ付きで open システムコールを起動すれば、同様の" ノンブロッキング" な反応を得られま
す。
error = open("/dev/rac/c1t5d0_1a",O_RDWR | O_NDELAY);
利用可能なドライブリソースを待っているブロックにとってそれが受理可能な場合は、 O_NDELAY フラッグ
は不要です。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-7
autochanger(7)
autochanger(7)
2ドライブを持つオートチェンジャのマルチプル ディスクサーフェスにアクセスするための、ブロッキングを
最少にするサンプルスクリプトを下に示します。
dd if=/dev/rdsk/c0t0d0 of=/dev/rac/c1t5d0_1a bs=64k &
dd if=/dev/rdsk/c0t1d0 of=/dev/rac/c1t5d0_2a bs=64k &
wait
dd if=/dev/rdsk/c0t2d0 of=/dev/rac/c1t5d0_1b bs=64k &
dd if=/dev/rdsk/c0t3d0 of=/dev/rac/c1t5d0_2b bs=64k &
wait
...
光磁気ディスクのサーフェスにアクセスするために開発者が利用できる ioctl 関数は、SCSIディスクドライバ
のマニュアルに記述されています。ここで、いくつかの光磁気ディスク専用の ioctl 関数を簡単に説明します。
<sys/scsi.h> からインクルードします。
#define SIOC_WRITE_WOE
_IOW(’S’, 17, int)
#define SIOC_VERIFY_WRITES _IOW(’S’, 18, int)
#define SIOC_ERASE
_IOW(’S’, 19, struct scsi_erase)
#define SIOC_VERIFY_BLANK
#define SIOC_VERIFY
_IOW(’S’, 20, struct scsi_verify)
_IOW(’S’, 21, struct scsi_verify)
SIOC_ERASE (erase) および SIOC_WRITE_WOE (write without erase) は、キャラクタ特殊デバイスで一緒に使
うことができます。光磁気ディスクの pre-erase パスを実行し、つづいてSCSI ディスクドライバを write-without-erase モードに設定することにより、書き込みのパフォーマンスが上がります。これは、通常、光磁気デバ
イスで必要な2パスの erase-then-write が省略されるためです。
SIOC_VERIFY_WRITES (write and verify) は、すべての書き込みに対してベリフィケーションパスを実行しま
す。これは、より安全な方法です。しかし、ベリフィケーションパスを伴った write 操作は、パフォーマンス
を悪くします。 pre-erase および write-without-eraseとともに使われた場合、 write and verify はパフォーマンスの
低下なしで信頼性を増すことができます。 HP では、 write-without-erase も実行する場合は、 write-and-verify
モードで操作することを推奨します。
次に示すのは、光磁気製品で使われる可能性のある、このほかの ioctl 関数です。 <sys/scsi.h> からインクルー
ドされるものです。
#define SIOC_GET_IR
_IOR(’S’, 14, int)
#define SIOC_SET_IR
_IOW(’S’, 15, int)
#define SIOC_SYNC_CACHE
_IOW(’S’, 70, int)
SIOC_GET_IR は、デバイスに対する即刻の書き出し( キャッシュの書き込み) の現在の状態を決定します。
SIOC_SET_IR によって、そのデバイスに対する即刻の書き出しを、イネーブルあるいはディスエーブルしま
す。 SIOC_SET_IR は、ライトキャッシングをイネーブルするために使われます。 SIOC_SYNC_CACHE ioctl
関数を使ってライトキャッシュをフラッシュしたほうがよい場合もあります。コマンド /usr/sbin/scsictl を使っ
て、光磁気ディスクのプレイレースを行い、即刻の書き出しの状態を設定、あるいはチェックできます。
Section 7-8
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
autochanger(7)
autochanger(7)
サーフェスモジュールをコンフィギュレーションしてある場合、いくつかのioctl関数を使って、チェンジャデ
バ イ ス の 状 態、 お よ び 情 報 を 得 る こ と が で き ま す。 こ れ に は、 SIOC_ELEMENT_ADDRESSES 、
SIOC_ELEMENT_STATUS および SIOC_INQUIRY を使います。これらの関数については、チェンジャドライ
バに関する次のセクションで詳しく説明します。オートチェンジャの状態を変更する関数は、サーフェスモ
ジュールがカーネル内にコンフィギュレーションされている場合は、許可されません。
SCSI メディアチェンジャ デバイスドライバ
SCSI メディアチェンジャ デバイスドライバは、ひとつのオートチェンジャ内の異なるメディアロケーション
間の移動を行います。各メディアロケーションには、特定のエレメントアドレスがあり、以下のいずれかのエ
レメントタイプを持っています。
storage
現在使われていないメディアのユニットを保持すべきロケーション。通常は、
ほとんどのメディアがエレメントのこのタイプに置かれます。
import/export
デバイスにメディアを挿入したり、デバイスから取り出すためのロケーショ
ン。メディアのユニットをこのタイプのロケーションに動かすことは、取り出
し操作に相当します。メディアのユニットをこのタイプのロケーションから動
かすことは、ロード操作に相当します。
data transfer
メディアのデータにアクセスするためのロケーション。これが、メディアチェ
ンジャ デバイスによって処理されているメディアに対して、読み込みや書き出
しの操作を行っているデバイスの通常のロケーションです。このタイプのロ
ケーションへの移動は、物理的メディアのマウント操作です。このタイプのロ
ケーションからの移動は、物理的メディアのアンマウント操作です。
media transport
メディアの移動用のロケーションです。通常、メディアは、実際のメディアの
移動の際にのみ、エレメントのこのタイプのロケーションに置かれます。
チェンジャコントロール リクエスト
以下の ioctl 関数は、 <sys/chgrio.h> からインクルードされるものです。
#define CHGR_SSRFC_IS_PRESENT
#define CHGR_CLEAR_RESET
_IOR(’X’, 1, int)
_IO(’X’, 2)
CHGR_SSRFC_IS_PRESENT
開発者用です。サーフィスモジュールの機能 (ssrfc) が、現在カーネル内でコンフィギュレーショ
ンされているかを決めるものです。
CHGR_CLEAR_RESET
開発者用です。 autox0 ドライバ専用です。パワーフェイル復帰条件を、SCSIチェンジャドライ
バ内でクリアします。メディアチェンジャ内でメディアを動かすために SCSI チェンジャドライ
バ(autox0) を使うが、光磁気ディスクに対する透過的なアクセス用のサーフェスモジュールを使
わない開発者は、 CHGR_CLEAR_RESET ioctl 関数が必要です。チェンジャのioctl コールから
[ECONNRESET] エ ラー リ ター ン が 返っ た 場 合 は、 そ れ 以 降 の メ ディ ア の 移 動 の 前 に
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-9
autochanger(7)
autochanger(7)
CHGR_CLEAR_RESET コールが必要になります。これによい、アプリケーションに対してパ
ワーフェイルの可能性があることを警告し、以後の操作の前に、開発者にデータ構造とメディア
チェンジャの再予約エレメントをリセットする機会を与えます。
以下の ioctl 関数と構造体の定義は <sys/scsi.h> からインクルードされます。
#define SIOC_INIT_ELEM_STAT
_IO(’S’, 51)
#define SIOC_ELEMENT_ADDRESSES _IOW(’S’, 52, struct element_addresses)
#define SIOC_ELEMENT_STATUS
_IOWR(’S’, 53, struct element_status)
#define SIOC_RESERVE
_IOW(’S’, 54, struct reservation_parms)
#define SIOC_RELEASE
_IOW(’S’, 55, struct reservation_parms)
#define SIOC_MOVE_MEDIUM
_IOW(’S’, 56, struct move_medium_parms)
#define SIOC_EXCHANGE_MEDIUM _IOW(’S’, 57, struct exchange_medium_parms)
/* structure for SIOC_ELEMENT_ADDRESSES ioctl */
struct element_addresses {
unsigned short first_transport;
unsigned short num_transports;
unsigned short first_storage;
unsigned short num_storages;
unsigned short first_import_export;
unsigned short num_import_exports;
unsigned short first_data_transfer;
unsigned short num_data_transfers;
};
/* structure for SIOC_ELEMENT_STATUS ioctl */
struct element_status {
unsigned short element;
/* element address */
unsigned int resv1:2;
unsigned int import_enable:1; /* allows media insertion (load) */
unsigned int export_enable:1; /* allows media removal (eject) */
unsigned int access:1;
/* transport element accessible */
unsigned int except:1;
/* is in an abnormal state */
unsigned int operatr:1;
unsigned int full:1;
/* medium positioned by operator */
/* holds a a unit of media */
unsigned char resv2;
unsigned char sense_code;
/* info. about abnormal state */
unsigned char sense_qualifier; /* info. about abnormal state */
unsigned int not_bus:1;
/* transfer device SCSI bus differs */
unsigned int resv3:1;
Section 7-10
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
autochanger(7)
autochanger(7)
unsigned int id_valid:1;
/* bus_address is valid */
unsigned int lu_valid:1;
/* lun is valid */
unsigned int sublu_valid:1; /* sub_lun is valid */
unsigned int lun:3;
/* transfer device SCSI LUN */
unsigned char bus_address;
unsigned char sub_lun;
/* transfer device SCSI address */
/* sub-logical unit number */
unsigned int source_valid:1; /* source_element is valid */
unsigned int invert:1;
/* media in element was inverted */
unsigned int resv4:6;
unsigned short source_element; /* last storage medium location */
char
pri_vol_tag[36]; /* volume tag (device optional) */
char
alt_vol_tag[36]; /* volume tag (device optional) */
unsigned char misc_bytes[168]; /* device specific */
};
/* structure for SIOC_RESERVE and SIOC_RELEASE ioctls */
struct reservation_parms {
unsigned short element;
unsigned char identification;
unsigned char all_elements;
};
/* structure for SIOC_MOVE_MEDIUM ioctl */
struct move_medium_parms {
unsigned short transport;
unsigned short source;
unsigned short destination;
unsigned char invert;
};
/* structure for SIOC_EXCHANGE_MEDIUM ioctl */
struct exchange_medium_parms {
unsigned short transport;
unsigned short source;
unsigned short first_destination;
unsigned short second_destination;
unsigned char invert_first;
unsigned char invert_second;
};
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-11
autochanger(7)
autochanger(7)
SIOC_INIT_ELEM_STAT
メディアチェンジャ デバイスが一覧を作ることを強制します。この結果、メディアチェンジャ
デバイスは各エレメントのアドレス (メディアのユニットの有無を含む)の状態を確認します。こ
の機械的な操作は、かなりの時間がかかる場合があります。この関数は、メディアチェンジャの
サーバエラーが起こった場合にのみ、必要なものです。ディスクの移動にサーフェスモジュール
(ssrfc)を使っている場合は、このレベルのエラーリカバリはサーフェスモジュール内で処理され
ます。
SIOC_ELEMENT_ADDRESSES
メディアチェンジャ デバイスによってサポートされたエレメントアドレスを決定します。各エレ
メントタイプに対して、最初の有効なエレメントアドレスとエレメントの個数が決定されます。
このエレメントアドレスを、ロケーション引き数のソースあるいはデスティネーションとして使
うことができます。
SIOC_ELEMENT_STATUS
エレメントと状態を決定します。情報がリクエストされているエレメントアドレスは、 element
フィールドによって指定されます。結果の状態データは、そのエレメントアドレスのメディアの
ユニットの有無や、そのエレメントアドレスに関するそのほかの情報を含みます。
SIOC_RESERVEおよびSIOC_RELEASE
エレメントアドレスに対するコントロールアクセス。デバイスによっては、予約することによ
り、メディアチェンジャ デバイスにおけるエレメントアドレスのオペレータのコントロールを制
限します。特定のエレメントアドレスを予約して、複数リクエスト間のインタロッキングを処理
することができます。ただしこの場合、リクエスタがユニークな予約IDを持っている必要があり
ます。 all_elements フィールドが 0 の場合、ひとつのエレメントアドレスを予約あるいは解放す
ることを指定します。このようにして予約されたエレメントアドレスは、別の予約IDを使って、
ほかの単一のエレメントアドレスの予約によって予約することはできません。 reservation フィー
ルドによって、予約IDを指定します。 element フィールドによって、予約すべきエレメントアド
レスを指定します。
all_elements フィールドの値が‘‘1’’の場合、すべてのエレメントアドレスが予約されることを意味
します。 reservation および element フィールドは、 0 でなければなりません。これは、この
フィールドがすべてのエレメントアドレスを予約する際には意味を持たないからです。すべての
エレメントアドレスの予約は、おもにオペレータのコントロールを制限する目的で使われます。
SIOC_MOVE_MEDIUMおよびSIOC_EXCHANGE_MEDIUM
メディアの再配置ポジションソースエレメントおよびデスティネーションエレメントのタイプに
より、メディアのロード、アンロード、あるいは単純な再配置のいずれかになります。 invert、
invert_first、あるいは invert_second フィールドに‘‘1’’を指定することによって、メディアを「フ
リップ」できます。 SIOC_EXCHANGE_MEDIUM の ioctl は、メディアの2つの異なるユニット
を再配置します。 source フィールドによって指定されたエレメントから、 first_destination に
よって指定されたエレメントに、メディアのひとつのユニットが移動されます。メディアの2番
Section 7-12
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
autochanger(7)
autochanger(7)
目ユニットは、 first_destination フィールドによって指定されたエレメントから、 second_destination フィールドによって指定されたエレメントに移動されます。マルティプルチェンジャのメ
カニズムをもつオートチェンジャ、あるいはメディアステージング エリアにおいては、 source
フィールドおよび second_destination フィールドが同じ場合に、交換が行われます。
制約
HP の光磁気ディスクライブラリ内のディスクのサーフェスにアクセスするには、システムコンフィギュレー
ション ファイルで、ssrfcモジュールが指定されている必要があります。 ssrfc モジュールは、schgr ドライバ、
あるいは autox0 ドライバに依存しています。 ssrfc が含まれる場合は、schgr あるいは autox0(あるいは両方)を
含む必要があります。
デフォルトのコンフィギュレーション
デフォルトでは、 ssrfc、 schgr、および autox0 はシステムコンフィギュレーション ファイル (/stand/system)
には含まれません。
例
以下の例では SIOC_ELEMENT_ADDRESSES および SIOC_ELEMENT_STATUS ioctl 関数を使って、HP光磁
気ディスクオートチェンジャにおけるドライバに関するバスアドレス情報を獲得しています。
int
last_drive_el;
struct element_addresses
struct element_status
el_addrs;
el_stat;
/*
* Changer attached to card instance 1, with SCSI target id 5, lun 0.
*/
fd = open("/dev/rac/c1t5d0",O_RDWR);
if ((error = ioctl(fd, SIOC_ELEMENT_ADDRESSES, &el_addrs)) != 0) {
syserr("ioctl: SIOC_ELEMENT_ADDRESSES");
return -1;
} else {
last_drive_el = el_addrs.first_data_transfer
+ el_addrs.num_data_transfers - 1;
for (i = el_addrs.first_data_transfer; i <= last_drive_el; i++) {
el_stat.element = i;
if ((error = ioctl(fd, SIOC_ELEMENT_STATUS, &el_stat)) != 0) {
syserr("ioctl: SIOC_ELEMENT_ADDRESSES");
return -1;
} else {
/*
* You may wish to also check some of the other fields
* in the el_stat structure to verify that the data is
HP-UX 11i Version 2: September 2004
−9−
Hewlett-Packard Company
Section 7-13
autochanger(7)
autochanger(7)
* valid. Fields: el_stat.access (ac accessible),
* el_stat.except (exception).
*/
if (! el_stat.not_bus && el_stat.id_valid) {
drive[i].addr = el_stat.bus_address;
if (! el_stat.lu_valid) {
drive[i].lun = 0;
} else {
drive[i].lun = el_stat.lun;
}
}
}
}
}
警告
マルティプル オートチェンジャサーフェスをひとつの大きなファイルシステムとしてコンフィギュレーション
するためにLVM を使わないでください。 LVM はオンラインのボリューム用に設計されたものです。オート
チェンジャにおいては、実際にドライブ内にあるディスクだけがオンラインになっており、スロットにある
ディスクはオフラインになっています。 LVMを注意深くコンフィギュレーションしないと、オートチェンジャ
の交換が頻繁に起こり、I/Oのパフォーマンスが落ちます。あらかじめ計画を立てておく必要があります。
HP製でないメディアチェンジャ デバイスの中には SIOC_INIT_ELEM_STAT と SIOC_ELEMENT_STATUS の
ioctl をサポートしないものがあります。
旧式のメディアチェンジャ デバイスの中には SIOC_EXCHANGE_MEDIUM の ioctl をサポートしないものが
あります。こういったデバイスに対しては、複数の SIOC_MOVE_MEDIUM ioctl 操作を使って同じ結果を得
ることができます。ただし、適当な一次的エレメントアドレスが必要です。
参照
insf(1M), mknod(1M), scsictl(1M), ioctl(2), scsi(7), scsi_ctl(7).
Section 7-14
Hewlett-Packard Company
− 10 −
HP-UX 11i Version 2: September 2004
blmode(7)
blmode(7)
名称
blmode − ターミナル ブロックモード インタフェース
説明
このターミナルインタフェースは現在の termio(7) に MPE ターミナル ドライバの 機能を効果的にエミュレート
する機能を加えます。最も重要なことに、これは HP ターミナルのブロックモード転送に必要な機能を加えま
す。ブロックモード インタフェースは入力処理のみに作用し、書込み要求には作用しません。書込み要求は、
常に termio(7) に述べられているように処理されます。キャラクタモードでターミナルは、各々の文字をタイプ
されたようにそのままシステムに伝送します。しかしながら、ブロックモード データはバッファに格納されて
おり、ターミナルメモリ内で局所的に編集し、これをタイプされたものとして、データの固まりをターミナル
の Enter キーが押されたときに伝送することが可能です。ブロックモード データ転送中では、新たに入力され
たデータはエコーされず、データブロック終了文字以外の特殊文字処理は行われません。続くキャラクタモー
ド転送に向けてエコーと文字処理を決定するため現在の termioの状態は、継続しています。
ブロックモード プロトコルには2つの部分があります。第1の部分はブロックモード ハンドシェイクで、これ
は次のように働きます。
•
trigger 文字が、システムがデータを要求していることを知らせるために、読取りの始めにターミナ
ルに送られます。
trigger 文字はもし定義されていれば、キャラクタ、ブロックに関わりなく、すべての読取りの最初
に送られます。 trigger 文字は、ブロックモード読取りを行うためには定義されていなくてはなり
ません。
•
trigger 文字を受けとった後、ターミナルはユーザーがデータをターミナルのメモリにタイプし、
ターミナルの Enter キーを打つまで待ちます。するとターミナルは、ターミナルが伝送可能なデー
タを持つことを知らせるために、 alert 文字をシステムに送ります。
•
その後システムは、ユーザーが定義可能なカーソル位置、または他のデータシーケンスをターミナ
ルに送ります。これが終った時点でシステムは、もう一度 trigger 文字をターミナルに送り、この
サイクルを繰り返します。
ブロックモード プロトコルの第2の部分は、ブロックモード転送です。このデータの転送中は、データブロッ
ク終了文字の認識以外の入力データのエコー、および特殊文字による処理は行われません。最初の trigger 文字
の送出終了後ブロックモード ハンドシェイクをバイパスしてブロックモード転送を行うことが可能です。
XON/XOFF フロー制御が、データ損失を防止するためにターミナルとシステムの間で使われていなくてはなり
ません。 IXOFF ビットがセットされ、ターミナルは正しく接続されている必要があります。フロー制御が使わ
れていない場合、入力データがオーバフローして失われることがあります (注意:ターミナルには、このフロー
制御を正しく扱わないものもあります)。
キャラクタモードとブロックモード データ転送を混合することが可能です。一旦ブロックモード転送が使用可
能になれば、すべての転送はブロックモード転送として扱われます。ブロックモード転送が使用不可能とされ
たとき、キャラクタモード転送は termio(7) に書かれているように処理されます。ブロックモード転送が使用不
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-15
blmode(7)
blmode(7)
可能とされているときに、 alert 文字が入力データ中のどこかに含まれていた場合、転送モードは、単一転送
のためにブロックモードに自動的に切り替わります。
ブロックモード転送よりデータを受けとるものであるreadリクエストは、転送が終了するまで、すなわちター
ミナルがすべての文字を転送し終わるまで返りません。読取りがバイト数に達するか、データ伝送エラーが生
じた場合、続くデータは捨てられます。 readはデータ伝送の終了を待って返ります。
データブロック終了文字は、ユーザーに返されるデータに含まれており、またバイト数にも加えられていま
す。ブロックモード転送でターミナルに転送されたバイト数が、ユーザーがリクエストしたバイト数を越えた
場合、readはリクエストしたバイト数を返し、残りのバイトは捨てられます。ユーザーは返されたデータの最
後の文字を調べることによって、データが捨てられたのかを判断できます。もし最後の文字がターミネータ文
字でなければ、リクエストした以上にデータが受けとられ、残りのデータは捨てられたことになります。
もし必要ならば、 alert 文字に対する応答を OWNTERM モードを選択することによって、アプリケーションプ
ログラムがそれ自身のハンドシェイクメカニズムを提供することが可能です。このモードが選択されるとドラ
イバは、読みとりリクエストを alert 文字を受け取ることによって終了します。アプリケーションが次の読取
りを要求すると、2番目の trigger がドライバによって送られます。
ブロックモードでは、いくつかの特殊文字が(入力,出力共に)用いられています。ブロックモードで使われてい
るこれらの文字と通常の値は以下に述べる通りです。これらの文字の初期値は、これらを使用不可能とする
0377です。
CBTRIG1C
(DC1) が、readリクエストの最初にターミナルに送られる最初の trigger 文字です。
CBTRIG2C
(DC1) が2 番目に送られます。 alert 文字を受け取った後は、 trigger 文字がターミナ
ルに送られます。
CBALERTC
(DC2) は、最初の trigger 文字の応答としてターミナルによって送られる alert 文字で
す。これはターミナルがデータブロックを送る準備ができていることを意味します。
alert 文字は、バックスラッシュ ( \ ) に続けることによってエスケープ可能です。
CBTERMC
(RS) がブロックモード転送の終了後、ターミナルより送られます。これは、データブ
ロックの終了をコンピュータに知らせます。
ブロックモードに用いる2つの ioctl(2) リクエストは、 blmodeio 構造体を用い、この構造体は、 <blmodeio.h>
に定義されており、次のような構成子を含みます。
unsigned long
cb_flags;
/* Modes */
unsigned char
cb_trig1c;
/* First trigger */
unsigned char
cb_trig2c;
/* Second trigger */
unsigned char
cb_alertc;
/* Alert character */
unsigned char
cb_termc;
/* Terminating char */
unsigned char
cb_replen;
/* cb_reply length */
char
cb_reply[ ];
/∗ optional reply ∗/
cb_flags 構成子は、基本的なブロックモード プロトコルをコントロールします。
Section 7-16
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
blmode(7)
blmode(7)
CB_BMTRANS
0000001
強制的なブロックモード転送を可能にする
CB_OWNTERM
0000002
ハンドシェイクのユーザーによるコントロールを可能にする
CB_BMTRANS
ビットは termio(7) 中の ICANON フラグがセットされているときのみ有効です。 ICANON が
クリアであるとき、すべての転送は CB_BMTRANS ビットに関わりなくrawモードで行なわれ
ます。 CB_BMTRANS がセットされていないとき入力処理は、 termio(7) に書かれているよう
に行なわれます。この間に alert 文字が定義されており、入力列中に発見されたならば、入力
バッファはフラッシュされブロックモード ハンドシェイクが実行されます。その後システムは
cb_trig2c 文字をターミナルに送り、ブロックモード転送がそれに続きます。 alert 文字は、
バックスラッシュ ( \ ) に続けることによってエスケープ可能です。
CB_BMTRANS がセットされている場合は、すべての転送はブロックモード転送として処理されま
す。ブロックモード ハンドシェイクは必要とされず、データの読込みはブロックモード転送データと
して処理されます。ブロックモード ハンドシェイクは第1文字として alert 文字を受けとることによっ
て、ここでも実行可能です。 readは、 CB_BMTRANS ビットがセットされている間発行され、これは
存在するすべての入力バッファデータをフラッシュします。
CB_OWNTERM がセットされている場合は、readはエスケープされていない alert 文字を受けとるこ
とによって停止されます。データの読込み中は、入力バッファのフラッシュは行われず、データ読出
しでは alert 文字が返されます。これは、アプリケーションコードにそれ自身のブロックモード ハンド
シェイクを行うことを許すものです。ビットがセットされていない場合 alert 文字は、通常のブロック
モード ハンドシェイクを使わせます。
すべてのビットがクリアなのが、 cb_flags の初期値です。
cb_trig1c 文字は、read リクエストの始めにターミナルに送られる最初の trigger 文字です。初期値は未定義
(0377)で、1つも trigger 文字は送られません。
cb_trig2c 文字は、 alert 文字が受けとられた後でターミナルに送られる2番目の trigger 文字です。初期値は未
定義(0377)です。
cb_trig2c 文字は、コンピュータによって送られた最初の trigger 文字に対する応答としてターミナルに送られ
る alert 文字です。これはターミナルがデータを転送する準備ができていることを意味します。初期値は未定
義(0377)です。
ブロックモード転送終了後 cb_termc 文字がターミナルより送られます。これは、データブロックの終わりを
コンピュータに示します。初期値は、未定義(0377)です。
構成子 cb_replen は、配列 cb_reply のバイト長を与えます。 cb_reply 配列の最大長は NBREPLY バイトで
す。もし0にセットされている場合、 cb_reply 文字列は使われません。初期値は0です。
cb_reply 配列は、 alert 文字を受け取った後に送られる文字列を含みますが、2番目の trigger の以前では、文字
はコンピュータによって送られます。どのような文字でも返答文字列中に含むことが可能です。送られる文字
長は cb_replen によって定義されます。 cb_reply 配列の最大長は NBREPLY バイトです。 cb_reply 配列中の
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-17
blmode(7)
blmode(7)
すべての文字の初期値はnullです。
プロセスグループ コントロールをサポートするシステムにおいて ioctl リクエストは、特殊な要求のために断
りのない限りバックグランドプロセスの使用によって制限されています。バックグランドプロセスから ioctl リ
クエストを発行することは、プロセスをブロックするほか、 SIGTTOU シグナルをプロセスグループに送るこ
とになるでしょう。
1 次の ioctl(2) 呼出しは、次のような形式を持ちます。
int ioctl(int fildes, int request, struct blmodeio *arg);
この形式を使うリクエストは、以下を含みます。
CBGETA
ブロックモード インタフェースに関連するパラメータを得て、 arg から参照される
blmodeio 構造体に保存する。このリクエストは、バックグランドプロセスより許可さ
れます。しかしながら、情報は常にフォアグラウンドプロセスによって変更される可
能性があります。
CBSETA
arg より参照される blmodeio 構造体からブロックモード インタフェースに関連するパ
ラメータをセットする。瞬時に変更します。
戻り値
read(2), write(2), および ioctl(2) を参照
エラー
もしread中にエラー値が返されたときは、ユーザーバッファが変更された可能性があります。この場合、ユー
ザーバッファにあるデータは完全でないので無視してください。
read(2), write(2), および ioctl(2) に書かれているエラーに加えて、次のエラーを示すためグローバル変数 errno
がセットされます。
[EIO]
read エラーは、ブロックモード データブロックの転送中に起こります。
警告
read エラーによって返される [EIO] エラーは、ほかの多くのイベントによっても生じる可能性があります。
read は [EIO] を転送,フレーミング,パリティ,ブレイク, および オーバーランエラー, または、インターナルタイ
マの期限切れの場合に対して返します。インターナルタイマは、2番目の trigger 文字がコンピュータより送ら
れたときに始動し、終了文字がコンピュータによって受け取られたとき停止します。このタイマーの長さは、
read に要求したバイト数、現在のボーレート、さらに10秒加えることによって決定されます。
著者
blmode ドライバは、HPで開発されました。
参照
termio(7)
Section 7-18
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
cent(7)
cent(7)
名称
cent − セントロニクス互換インタフェース
説明
cent は、単純で広く使われている通信プロトコルで、普通はプリンタ、プロッタ、スキャナによく使われま
す。それはホストコンピュータからの付加的なコントロールシグナルや、周辺装置からのステータスシグナル
を含んだ 8ビットのパラレル データインタフェースです。
cent インタフェースドライバのモデルは、単純で文字処理は行われません。すなわち、コンピュータと周辺装
置間を転送されるデータには、何の解釈も適用されないということです。そのため、デバイスが送受信したバ
イトはすべて変更されずに扱われます。つまり、 cent インタフェースドライバは、常にどんな必要なデータの
解釈も (適切なモデルファイルと接続した‘‘lp’’スプーラのような) ユーザプログラムで行われることを意味する
rawモードで動作します。 cent ドライバは、6種類の異なったデータ転送のハンドシェイクモードを提供して
います。デバイス スペシャルファイルのマイナー番号の最後の 4ビットが、どのモードが用いられるか指定し
ます。デバイスマイナー番号のフォーマットは、
0xII000A
で、‘‘0x’’の後のそれぞれの文字は1つの16進数桁を表し、次のようになります。
II
セントロニクスインタフェースのインスタンス番号を指定。
000 常に0。
A
ハンドシェークモードの指定します。ハンドシェークモードは以下のいずれかです。
モード 1
nACK と BUSY の両方を使った自動ハンドシェーク
マイナー番号のフォーマット: 0xII0001
モード 2
BUSY のみを使った自動ハンドシェーク
マイナー番号フォーマット: 0xII0002
モード 3
ScanJet用双方向読み書き。
マイナー番号フォーマット: 0xII0003
モード 4
ストリームモード。データはハンドシェークプロトコルなしで周辺機器に送られます。
マイナー番号フォーマット: 0xII0004
モード 5
ACK と BUSY の両方を使った自動ハンドシェーク用パルスモード。モード1 と類似して
いますが、データストローブ ライン nSTROBE は、送り手により一定時間の間パルスさ
れ、それからリリースされます。
マイナー番号フォーマット: 0xII0005
モード 6
自動ハンドシェーク用に、 BUSY のみを用いたパルスモード。モード1 と類似していま
すが、データストローブ ライン nSTROBE は、送り手により一定時間の間パルスされ、
それからリリースされます。
マイナー番号フォーマット: 0xII0006
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-19
cent(7)
cent(7)
モード1と2は、ほとんどのHP ∗Jet シリーズプリンタ (LaserJet, DeskJet, QuietJet, など)をサポートしてい
ます。
著者
cent はHPで開発されました。
参照
lp(1), ioctl(2), intro(7), lp(7)
Section 7-20
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
clone(7)
clone(7)
名称
clone − STREAMS ドライバーの一組のメジャーデバイスとマイナーデバイスのオープン
説明
clone ドライバーは、他のドライバーが各 open() で一意なマイナーデバイス番号を選択できるようにする、
「通過」デバイスドライバーです。実際、このドライバーはオープンオペレーションをすっかり他のドライ
バーに渡します。この機構によって、 1個のデバイスファイルを通して、あるドライバーのインスタンスを複
数作成し、各インスタンスに異なるマイナー番号を割り当てることが可能になります。
clone ドライバーのオープン時、オペレーティングシステムはメジャーおよびマイナーデバイス番号を渡しま
す。このメジャー番号は clone ドライバーのメジャー番号(72)で、マイナー番号は、ユーザーが複製(クローン)
したいと考えているドライバー(ここでは、ターゲットドライバーと呼びます)のメジャー番号です。 clone ド
ライバーは、クローンオープンを示す CLONEOPEN フラグを設定して、ターゲットドライバーのオープン
ルーチンを呼び出します。ターゲットドライバーのオープンルーチンは未使用のマイナー番号を割り当てま
す。ターゲットドライバーは、 makedev を使用して、新しく作成されたデバイスの新しいデバイス番号を作成
し、ついで makedev から戻された新しいデバイス番号を *devp に設定しなければなりません。この新しいデ
バイス番号は *devp を介して clone に戻されます。その後、 clone オープンは、ターゲットドライバーの新し
いインスタンスを指すファイル記述子を、ユーザーに戻します。
クローン可能なドライバーの例として、 echo ドライバーがあげられます。
注意
同じメジャー番号とマイナー番号を持つ1つのデバイスを、 clone ドライバーを使用して、複数回オープンする
ことはできません。その理由は、 clone ドライバーにはクローン対象のドライバーのメジャー番号だけが渡さ
れ、マイナー番号はクローンされるドライバーが未オープンの番号の中から選択するからです。
クローン可能なドライバーに対応するパス名を指定して stat() を呼び出したときに戻される結果は、同じク
ローン可能ドライバーのパス名に対して open() が戻したファイル記述子を指定して fstat() を呼び出したときの
結果とは異なります。
戻り値
clone ドライバーに無効なマイナー番号が与えられた場合、または指定されたドライバーがクローン可能なド
ライバーでない場合、 open() は失敗し、 errno が[ENXIO]に設定されます。
参照
open(2), fstat(2).
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-21
console(7)
console(7)
名称
console − システムコンソール インタフェース
説明
/dev/console はシステムコンソールとして設定されたデバイスに対する termio インタフェースを提供するもの
です。 init(1M) のマニュアルページに /dev/systty と /dev/syscon の使用法が説明されています。
/dev/console あるいは、カーネルの printf によって生成された出力データは、通常は、コンソールに送られま
すが、 TIOCCONS ioctl() によって、ほかのターミナル、あるいは疑似ターミナルデバイスにリダイレクトさ
れることがあります。詳細は、 termio(7) を参照してください。
ファイル
/dev/console
/dev/systty
/dev/syscon
参照
termio(7), init(1M)
標準準拠
console: SVID2, SVID3, XPG2
Section 7-22
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
ddfa(7)
ddfa(7)
名称
ddfa − データ通信ターミナルコントローラ (DTC) デバイスファイル アクセスソフトウェア
説明
データ通信ターミナルコントローラ (DTC) デバイスファイル アクセス (DDFA) ソフトウェアは、 HP-UX のシ
ステムユーティリティとユーザーアプリケーションから、標準 HP-UX 構造体を用いたターミナルサーバへの
アクセスを可能にします。 DDFA は、ローカルの直結ポートへのインタフェースと似ているリモートの LAN
で接続されたターミナルサーバポートへのインタフェースを提供します。
基本原理は、それぞれの設定されたターミナルサーバ ポートに対して設定ファイル (専用ポートファイル) に
基づいてデーモンを生成することです。デーモンが 生成されると、プールから pty を獲得し、同じ メジャー番
号およびマイナー番号のデバイスファイルを pty スレーブとして生成します。デバイスファイルは「仮名」と
して知られており、ユーティリティおよびアプリケーションは仮名を使用して標準 HP-UX 関数 (open(), close(),
read(), write(), および ioctl()) を実行することによってターミナルサーバ ポートにアクセスします。アプリケー
ションが仮名に対して open() を実行するまでデーモンが pty にリッスンをします。そして、アプリケーション
がその仮名に対して close() を行うまでターミナルサーバ ポートへの接続を設定、管理します。終了結果は、
デバイスファイルを経由してターミナルサーバ ポートが置かれて、発生した機構はユーザーにも透過的です。
2つめの設定ファイル(ポート接続ファイル) (pcf) が、ターミナルサーバ ポートのプロファイル指定情報を含ん
でいます。
DDFA は、以下の項目から構成されます。
dp
専用ポートファイル。このテキストファイルの内容は、仮名とターミナルサーバ ポー
トとの間の接続を設定、管理するのに DDFA が必要とする情報です。
dp ファイルは、専用ポートパーサー (dpp) により解析され、 dp は、ファイルで指定
されたそれぞれの送信接続に送信接続デーモン (ocd) を生成します。また、 dp ファ
イルも、DTC からの到来接続を識別し、仮名へとマップするのに HP-UX Telnet デー
モン (telnetd) によって使用されます(Telnet ポート識別機能)。
pcf
ポート設定ファイル。このテキストファイルは DDFA によってターミナルサーバ
ポートのプロファイル指定に使用されます。テンプレートファイルの汎用名は pcf で
す。ポート設定ファイルは専用ポートファイル (dp) にあるエントリーによって参照さ
れます。
dpp
既存のポートパーサー。このコマンドは専用ポートファイル (dp) を構文解析し、 dp
ファイルにあるそれぞれの有効なエントリーごとに送信接続デーモン (ocd) を spawn
生成します。これは、シェルから起動するか、またはシステム初期化スクリプトに入
れてシステムのブートごとに DDFA ソフトウェアを自動実行させることができます。
ocd
送信接続デーモン。このデーモンは、リモートのターミナルサーバ ポートとのコネク
ションとデータの転送を管理します。通常、既存のポートパーサー (dpp) により生成
されますが、シェルから直接実行することもできます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-23
ddfa(7)
ddfa(7)
起動時、コネクションのため仮名を作成します。正常に終了すると、仮名を削除しま
す。実行中に仮名が削除されると、 ocd はエラー状態で終了します。
ocdebug
送信接続デーモン デバッグモード。これは、デバッグコードを含んだ ocd の特別な
バージョンです。これはシェルから実行しなければなりません。
設定
DDFA ソフトウェアの設定を行うには、2つの基本ステップがあります。
•
dp ファイルに情報を入力する。
•
ポート設定ファイルに情報を入力する。
dp ファイルの設定
dp ファイルは、確立される各送信接続ごとに 1 行、受信接続ごとに 1 行とります。デフォルトのファイル
/usr/examples/ddfa/dp は新しいファイルにコピーし、必要に応じてそのコピーを編集します。 dp ファイルと
ポート設定ファイルを置くディレクトリを作成するようお勧めします。
dp ファイルの各行には、ターミナルサーバ ポートの位置および仮名の位置を入れなければなりません。さら
に、送信接続の場合は、ポート設定ファイルをしなければなりません。また、ロギングレベルを指定すること
ができます。
ポート設定ファイルの設定
ポート設定ファイルは、個々のターミナルサーバ ポートの設定に使用します。マスターポート設定ファイルは
/usr/examples/ddfa/pcf です。実際には、異なる設定値を必要とするポートごとに別の名前にし、そのポートに
アタッチするデバイスごとに値を適宜変更します。 dp ファイルとポート設定ファイルを置くディレクトリを
作成するようお勧めします。
ポート設定ファイルの各行は、変数の名前とその値で構成しなければなりません。変数と値のペアには、ター
ミナルサーバ ポートへの接続のオープン、ターミナルサーバ ポートへの接続のクローズ、ターミナルサーバ
ポートへのデータ転送の方法に関する情報が入ります。
システム初期化スクリプトの設定
システム初期化スクリプトに dpp への参照を含めることにより、ブート時に DDFA を実行することができま
す。この環境で dpp を実行する際は -k オプションを使用するようにお勧めします。
デーモンの終了
ocd は kill -15 を使用して終了させなければならないことに注意してください。 kill -9 は、デバイスファイルを
削除しないのでこの目的では使用しないでください。 ocd は既存の仮名を使用する前にその妥当性を確認しま
す。 dpp および ocd は、ファイル /var/adm/utmp.dfa にストアされているデータを使用し、プロセスが仮名を
置き換えようとする前に、まだその仮名を所有しているか調べます。 ocd が所有されていない仮名を発見する
と、その仮名を使用します。
エラーの取扱い
ocd が、 LAN がダウンするといった深刻なエラー状態を受け取った場合、 ocd は、 pty をクローズすること
によりエラー状態をアプリケーションに伝えます。仮名への open()、 close()、 read()、 write() のいずれもが
Section 7-24
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
ddfa(7)
ddfa(7)
エラー状態 0 バイト 読出しを戻します。仮名が、アプリケーションの属するグループの制御ターミナルなら
ば、アプリケーションも含めたグループのすべてのプロセスに SIGHUP が送られます。
ioctl() の制限事項
すべての ioctl() の機能が利用できるわけではありません。これは、 LAN 経由のリモートポートへのそのよう
なコマンドの転送を可能にするプロトコルがないためです。
TERMIO 属性制限
termio 属性に対する主な制限 (termio(7) を参照) として、モデムの信号制御やパリティチェックがあります。
次のものは使用可能ではありません。
CBAUD IGNPAR INPCK IXANY IXOFF PARMRK
ioctl() 要求制限
次の ioctl() 要求制限は次のものを適用しています。
CSTOPB フラグ
DTC は、1ストップビットしかサポートしていません。
CSIZE
DTC は、1文字に8ビットしかサポートしていません。値は変更できません。
PARODD フラグ
DTC は、偶奇のパリティを扱うのに静的設定を提供します。それに加えて偶ま
たは奇のパリティの自動パリティ検出も扱います。
PARENB フラグ
enable/disable は静的設定で行われます。プログラム的なインタフェースは提供
されていません。
INPCK フラグ
入力を出力のパリティ機能から分離する方法はありません。
IGNPAR フラグ
DTCでは設定できません。
PARMRK
不正な文字も OFFH や OH でマークされずにシステムに転送されます。
CBAUD
スピードは静的設定の部分です。
IXOFF フラグ
フロー制御は、 DTC の静的設定が ASCII形式のアクセスモードを指定していれ
ば可能です。バイナリが選択されていれば、フロー制御は提供されません。
IXON フラグ
静的ポート設定で ASCII形式のモードが選択されているときは、 プログラムイ
ンタフェースによるターミナルの出力の速度を決めることが可能で、バイナリ
モードが選択されているときは不可能です。
IXANY フラグ
DTC は、 XOFF が以前に受理された場合は、受け取った文字の出力を再起動す
る能力はありません。
HUPCL フラグ
DDFA は、デバイスファイルがクローズした場合のモデムシグナルのハング
アップをサポートしていません。モデムシグナルが DTC で使われた場合、コネ
クションはクローズされます。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-25
ddfa(7)
ddfa(7)
CLOCAL フラグ
サポートされていません。
c_flags:
IENQACK はサポートされていません。
OFILL 、 OFDEL 、 NLDLY 、 CRDLY 、 TABDLY 、 BSDLY 、 FFDLY は、
Telnet ポート識別ソフトウェアではサポートされていません。
BINARY モード フラグ
静的設定の一部で、 DTC マネージャで、バイナリを選択することにより実行さ
れます。変更が可能になれば、ユーザーインタフェースレベルでバイナリが選
択できます。 telnetd を用いているとき、適切な termio フラグがリセットされる
と、バイナリモードを自動的に設定することはできません。バイナリ/ ASCII形
式の変換は DDFA で可能です。 DTC は、純粋なバイナリモードでは大きな読出
しをサポートしていません。それで、転送されるデータのブロックは 256バイト
より大きくてはいけません。リモートの承認で半二重回線が実現されていれ
ば、バイナリのアプリケーションはサポートされています。
ioctl() システムコール要求
次の ioctl() システムコール制限は次のものを適用しています。
TCSBRK
telnetd や DDFA のシステムレベルでは、前のデータが送られてくるのを待たず
にブレークを送る能力は提供されていません。 DTC で telnet のブレークコマン
ドを受け取ると、非同期のポートにブレークを生成します。
TCFLSH
DTC の出力キューはフラッシュできません。
ハードウェアハンドシェイク要求
DTC ではサポートされていません。
TCXONC
DTC では、ローカルのハンドシェイクをやめることはできません。
MCGETA
サポートされていません。
MCSETA, MCSETAF, MCSETAW
DTC ポートにモデムの回線を分離してセットする方法はありません。
MCGETT
モデムのタイマー、 CD タイマー、接続したタイマー、切断したタイマーは設
定できません。
CCITT 単純、直接、呼込み/呼出し
DTC は、モデムシグナルのプログラムインタフェースが存在しているため、単
純モードを扱えません。ポートが開いていると、モデムシグナル(または呼出し)
が2分以内に存在しなければならず、さもなければコネクションが消滅してしま
うので、呼込みモードもシミュレートできません。
Section 7-26
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
ddfa(7)
ddfa(7)
DACIDY デバイスアダプター情報の取得
デバイスアダプターの情報を得る方法はありません。
ダウンロード ioctl() DACRADDR, DACDLADDR, DACDLGO, DACDLVER
DTC をダウンロードするプログラム呼出しはありません。
DACHWSTATUS, DACSELFTEST, DACLOADED, DACISBROKE ステータス
そのような情報を得るプログラムインタフェースはありません。
DACLOOPBACK DACSUBTEST ポートテスト
警告
( ps などの) コマンドが正しいデバイスファイル名(つまり、 pseudonym) を確実に表示するようにするため、仮
名はすべてディレクトリ /dev/telnet に置かなければなりません。このディレクトリに仮名を置くようにしない
と、多くのコマンドでのデバイスファイル名の正しい表示が保証されません。
さらに、 (w、 passwd、 finger および wall のような) コマンドが確実に正しく動くようにするために、各仮名
は、ディレクトリ接頭辞 /dev/telnet/ を含め先頭 17 文字で重複していてはいけません。仮名が先頭 17 文字で
重複していると、多くのコマンドは保証されません。
また、タイミングマークの交渉を確実に処理させる(ターミナルサーバにアタッチされたプリンタでプリントさ
れるファイルが完全にそのプリンタへ送られる)ため、ターミナルサーバにアタッチされたプリンタのプリンタ
インタフェース スクリプトの終わり近くに以下の行を追加しなければなりません。
stty exta <&1 2>/dev/null
プリンタインタフェースのスクリプトはディレクトリ /etc/lp/interface にあります。この行は、各プリンタイン
タフェースのスクリプトごとに最後の exit コマンドの直前に追加しなければなりません。
この行を指定どおりに追加しないと、ターミナルサーバにアタッチされたプリンタのプリントの信頼性は保証
されません。
ファイル
/usr/examples/ddfa/dp
/usr/examples/ddfa/pcf
/usr/sbin/dpp
/usr/sbin/ocd
/usr/sbin/ocdebug
/var/adm/dpp_login.bin
/var/adm/utmp.dfa
参照
dpp(1M), ocd(1M), ocdebug(1M), ioctl(2), dp(4), pcf(4), ioctl(5), termio(7)
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-27
diag0(7)
diag0(7)
名称
diag0 − HP-PB I/O サブシステムへの診断インタフェース
説明
diag0 は診断疑似ドライバーであり、HP-PB I/O サブシステムにアクセスするときに、HP サポートツールとし
て機能します。このドライバーはサポートツール マネージャ (STM) 内でハードウェアモニターとハードウェ
アツールによって使用され、HP-PB によりシステムに接続している周辺装置とやりとりします。また、I/O ド
ライバーは、診断イベントを diag0 に送信して、サポートツール マネージャが診断を記録できるようにしま
す。
diag0 を指定しないと、周辺装置の障害防止に有効な情報が失われます。また、障害が発生した場合に、障害
の原因をタイムリーに診断できるツールまたはデータが提供されないことになります。このために、ダウンタ
イムが長引き、さらに障害が発生する可能性があります。
著者
diag0 は、HPで開発されました。
ファイル
/stand/vmunix
/dev/diag/diag0
/dev/diag
診断デバイスファイルを格納しているディレクトリ
参照
サポートツール マネージャの stm(1M)
Section 7-28
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
diag1(7)
diag1(7)
名称
diag1 − PCI I/O サブシステム診断のためのインタフェース
説明
diag1 は診断のための擬似ドライバーで、これによりサポート ツールが PCI I/O サブシステムへアクセスでき
ます。システムに接続されている PCI カードと対話するために、サポート ツール マネージャ (STM) 内のツー
ルによって、このドライバーが使用されます。 diag1 がないと、PCI カード用のサポート ツールは動作できま
せん。
警告
diag1 は、HP-UX 11i バージョン 1.5 ではサポートされません。
著者
diag1 は HP により開発されました。
ファイル
/stand/vmunix
/dev/diag/diag1
/dev/diag
診断用デバイスファイルを含むディレクトリ
参照
サポート ツール マネージャの stm(1M)
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-29
diag2(7)
diag2(7)
名称
diag2 − 診断用ロギングのためのインタフェースおよびプロセッサへのインタフェース
説明
diag2 は、プロセッサ依存コード (PDC) を介してプロセッサ ハードウェアと対話するために、ハードウェア モ
ニターおよびサポート ツール マネージャ (STM) 内のツールにより使用されます。 diag2 がないと、プロセッ
サ用のサポート ツールは動作できません。
diag2 は、以下のサポート機能の主要な構成要素でもあります。
I/O エラー ロギング
低優先順位マシン検査 (LPMC) ロギング
メモリ エラー ロギング
プロアクティブなメモリ ページ割り当て解除
これらのサポート機能がないと、システムまたは周辺装置の障害の防止に役立つ可能性のある情報が失われて
しまいます。さらに、障害が発生した場合に、問題の原因を適時診断するためのツール用データもないことに
なります。このため、ダウン時間および将来の潜在的な障害が増加する可能性があります。
著者
diag2 は HP により開発されました。
ファイル
/stand/vmunix
/dev/diag/diag2
/dev/diag2
/dev/diag
診断用デバイス ファイルを含むデレクトリ
参照
サポート ツール マネージャの stm(1M)
Section 7-30
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
disk(7)
disk(7)
名称
disk − ディスクのダイレクトアクセス
説明
ブロック型特殊デバイスまたはキャラクタ型特殊デバイスとしてディスクを参照するときの HP-UX ディスク
ドライバの動作が、このエントリーには書かれています。
デバイスファイル命名規約
標準のディスク デバイスファイルは次の規約に従って名前付けされます。
Block-mode Devices
/dev/dsk/cxtydn[sm]
Character-mode Devices
/dev/rdsk/cxtydn[sm]
ここで、ファイル名の構成要素は次のように構成されています。
c
必ず指定します。次に続く16進数をインタフェースカードの"インスタンス"として識別しま
す。
x
バスインタフェースの制御を識別する16進数。このインタフェースカードの"インスタンス"
とも呼ばれる。インスタンスの値は、 ioscan(1M) の出力の、H/Wタイプ"インタフェース"の
コラム‘‘I’’に表示されます。
必ず指定します。
t
次に続く16進数を"ドライブ番号"あるいは‘‘ターゲット’’として識別します。
必ず指定します。
y
ドライブあるいはターゲット番号(バスアドレス)を指定する16進数。
必ず指定します。
d
次の16 進数を論理"ユニット番号"として識別します。
必ず指定します。
n
デバイス内のユニット番号を表す16進数です。
必ず指定します。
s
オプションです。デフォルトでは、ディスク全体に対応します。次の値を" セクション番号"
として識別します。
m
s が指定された場合、必ず指定します。デフォルトではセクション 0 (ゼロ)、ディスク全体で
す。ドライブセクション番号。
制御番号、ドライブ番号、論理ユニット番号、およびセクション番号はシステム管理者マニュアルに書かれて
います。
ブロック型特殊アクセス
ブロック型特殊デバイスファイルはシステムのブロックバッファ キャッシュのメカニズムによりディスクをア
クセスします。複数のオープンおよび同じ物理デバイス、物理的装置のマウントによる平行アクセスを操作の
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-31
disk(7)
disk(7)
シーケンスエラーを避けるよう正しくハンドルすることで、バッファリングを行ないます。ブロックバッファ
キャッシュはシステムの物理的I/O操作を許しています。このことは物理的書込み操作が、実際は相当する論理
書込み要求より遅い時間に行なわれるかもしれないことを意味しています。このことは同時に、物理的読込み
操作が実際は相当する論理読込み要求より遅い時間に行われるかもしれないことをも意味しています。
物理ディスクの記録に関係なくブロック型特殊ファイルに記録することができます。ディスクアクセスを要求
するブロック型特殊ファイルの read() および write() コールにより、1つまたはそれ以上の BLKDEV_IOSIZE
バイト (通常2048バイト) の転送がディスクとブロックバッファ キャッシュ間で行なわれます。ブロック型特
殊デバイスを用いたアプリケーションは、デバイスファイル中の最後の BLKDEV_IOSIZE サイズのブロック
を超えて読込み又は書込みを行なわないでください。インタフェースはバッファされているので、この点を超
えたアクセスの振舞いは予測できません。
キャラクタ型特殊アクセス
キャラクタ型特殊ファイルは、バッファリングを行わずにディスクをアクセスします。さらにディスクとユー
ザーのリードバッファまたはライトバッファとの間の直接のデータ転送もサポートしています。キャラクタ型
特殊ファイルのインタフェースを用いたディスクアクセスによりすべての物理的I/O操作は制御がコールから
返ってくる前に終了します。 MAXPHYS バイト (通常64Kバイトまたは256Kバイト) までのリードまたはライ
ト操作では、 1回のディスク操作が行なわれます。これ以上のリクエストはオペレーティングシステムにより
自動的に中止させられます。キャラクタ型特殊ファイルによる大きいI/O 操作は、ブロックバッファ キャッ
シュの操作を避け、より小さいディスク操作になるので、それらは通常似たようなブロック型特殊ファイルの
操作より効率が良くなっています。
キャラクタ型特殊ファイルの read() および write() コールのためのユーザーバッファの境界付けには、メモリ
上で実現方法に依存した制限条項があるかもしれません。また、それぞれの読み込みと書き込み操作は、論理
ブロック境界で開始/終了しなければならず、サイズは論理ブロックの全体数でなければなりません。論理ブ
ロックサイズは、ハードウェアに依存する値で後述する DIOC_DESCRIBE ioctl コールで照会することができ
ます。
データの読込みおよび書込みに加えて、デバイスの詳細を取得するためと特別な操作を実行するために、キャ
ラクタ型特殊ファイルのインタフェースは使われます。これらの操作はioctlコールにより制御します。詳細は
これらのioctlを含む <sys/diskio.h> に書いてあります。
DIOC_DESCRIBE ioctlはデバイス識別の詳細を取得するために使います。返された情報にはディスクのモデル
識別、ディスクインタフェース タイプ、およびディスクの論理ブロックサイズが含まれています。
DIOC_CAPACITY ioctlは、 DEV_BSIZE ユニットにあるディスクデバイスの容量を取得するために使います
(DEV_BSIZE <sys/param.h> で定義されています)。
DIOC_EXCLUSIVE ioctlは、ディスクデバイスの排他的アクセスの取得およびリリースを行うために使われま
す。排他的アクセスはメディアの再フォーマットのような特別な操作のために必要なもので、他の環境でも望
まれるものです。値1は排他的アクセスの指定です。値0は排他的なアクセスのリリースの指定です。排他的ア
クセスにより他のオープンリクエストは失敗します。デバイスがブロックモードで現在オープンされていなく
て、ディスクデバイスのための開いているファイルのテーブルエントリーが1つの時 (排他的アクセス要求者へ
Section 7-32
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
disk(7)
disk(7)
のアクセスが1つのとき) に、排他的アクセスが許されます。
エラー
次のエラーがディスク デバイスドライバのコールで返されます。
[EACCES]
[ENXIO]
デバイスまたは操作に対して要求したパーミッションが許されていません。
open() コールからリクエストされた場合、指定アドレスにデバイスがありません。他
のコールの場合、指定アドレスが範囲外かデバイスがもはやアクセスできません。
[EINVAL]
open() コールの場合、デバイスがディスクデバイスではありません。他のコールの場
合、リクエストまたはパラメータが無効です。
[EIO]
I/O エラーです (メディアの欠陥またはデバイスの通信問題です)。
警告
同じ BLKDEV_IOSIZE サイズのブロックへのブロックスペシャルおよびキャラクタスペシャルのファイルア
クセスの相互作用は指定されていません。一般的に未定義です。
システムによっては、同じデバイス上でマウントしたファイルシステムおよびオープンしたブロック型特殊
ファイルの両方を持つことは、予測できない結果をもたらすかもしれません。これはできるだけ避けてくださ
い。いくつかのファイルはシステムにプライベートなバッファを持つことができるからです。
ディスクデバイスの履歴は小さい (通常512バイト) ブロックサイズを持っていましたが、 (光磁気ディスクや
ディスク配列などの) ディスクデバイスでは相対的に大きなブロックサイズを持っています。直接ディスクア
クセスを行なうアプリケーションは、 I/O 操作の適切なサイズや境界を決めるには ioctl() コールを用いてくだ
さい。
制約
disc3
論理ブロックサイズが DEV_BSIZE より小さいデバイスは、 DEV_BSIZE 単位でアクセスする必要があ
ります。 DEV_BSIZE 転送サイズは DEV_BSIZE の倍数でなければなりません。ディスクの" セクショ
ン" 0 (ゼロ)と 2 の意味が HP-UX リリース 10.0 以降では反対になりました。ディスク全体がセクション
0 です。
著者
disk は、HP および AT&T で開発されました。
参照
mknod(1M), intro(7), ioscan(1M)
システム管理マニュアル
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-33
dlpi(7)
dlpi(7)
名称
dlpi − Data Link Provider Interface
説明
このマンページでは、DLPI (Data Link Provider Interface) と、DLPI によって提供される API のセットと対話処
理を行う方法について簡単に説明します。
HP-UX DLPI は、OSI アーキテクチャの第2層として動作します。DLPI は、LAN デバイスドライバと DLPI
ユーザーとの間のインタフェースとして動作します。DLPI を使用するには、ネットワークに関する豊富な経
験が必要となります。
HP-UX DLPI には、主に2つのインタフェースのセットがあります。1つ目は DLPI 2.0 規格に準拠したインタ
フェース、2つ目はこの規格に対する HP 独自の拡張機能です。
また、HP-UX DLPI は、デバイスドライバに対して、STREAMS モジュールおよび DLPI アプリケーションと
の対話を行うためのインタフェースも提供しています。
STREAMS モジュールおよび DLPI アプリケーション向けの注意事項
HP の DLPI インプリメンテーションは、スタイル2のサービスプロバイダです。スタイル2のプロバイダで
は、DLS ユーザーは、特殊な attach サービスプリミティブを使用して、PPA を明示的に識別する必要がありま
す。PPA についての詳細は、 lan(7) マンページを参照してください。
HP DLPI は、STREAMS モジュールおよび DLPI アプリケーションに対して、以下のサービスを提供していま
す。
•
クローン (最大 3992) および非クローン (最大 100) アクセス
•
Ethernet/IEEE802.3、FDDI、およびトークンリングインタフェースのサポート
•
コ ネ ク ショ ン レ ス 型 お よ び コ ネ ク ショ ン 型 サー ビ ス の サ ポー ト ( コ ネ ク ショ ン 型 サー ビ ス は
IEEE802.3 およびトークンリングでのみサポート)
•
raw モードのサービスのサポート
•
デバイス固有のコントロールおよび診断要求を行う場合のための I_STR ioctl のサポート
•
サードパーティ製デバイスドライバのサポート
•
全レベルの無差別 (promiscuous) モードのサポート
HP DLPI は、次の STREAMS モジュールおよび DLPI アプリケーションは提供していません。
•
サービス品質 (QOS) 管理
•
コネクション管理 STREAMS: コネクション型 STREAMS 上における DL_SUBS_BIND_REQ および
DL_SUBS_UNBIND_REQ
•
Section 7-34
受信確認コネクションレス型サービス
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
dlpi(7)
dlpi(7)
DLPI 2.0 規格に基づいた DLPI 要求は、 <dlpi.h> に定義されています。詳細は dlpi(4) を参照してください。
HP 固有の DLPI 用拡張機能は、 <dlpi_ext.h> に定義されています。詳細は dlpi_ext(4) を参照してください。
デバイスファイルのフォーマット
DLPI インタフェースを使用して LAN ドライバにアクセスする場合、DLS ユーザーは以下のデバイスファイル
を使用する必要があります。
名称
種類
メジャー #
マイナー #
アクセスタイプ
------
------
---------------
---------------
---------------------
/dev/dlpi
c
72
0x77
クローンアクセス
/dev/dlpiX
c
119
0xX
非クローンアクセス
デバイスドライバ向けの注意事項
HP-UX DLPI は、非ネイティブ設計です。ドライバと DLPI は結合されておらず、システム上の個別のコン
ポーネントとして存在します。非ネイティブ DLPI では、密結合ドライバと疎結合ドライバの2種類のドライ
バをサポートしています。
DLPI は、密結合ドライバおよび疎結合ドライバに対してインタフェースを提供します。密結合ドライバの場
合、DLPI は DLS ユーザに対する唯一のインタフェースとなります。一方、疎結合ドライバは、ユーザー空間
コマンド lanscan(1M) で表示する情報を提供する目的にのみ DLPI を使用します。
デバイスドライバ用のインタフェースは、 <dlpi_drv.h> に定義されています。詳細は、 dlpi_drv(4) を参照して
ください。
DLPI は、密結合ドライバに対して以下の機能を提供します。
•
ドライバが上位層の STREAMS モジュールまたはアプリケーションと通信を行うためのインフラス
トラクチャ
•
プロトコル、マルチキャスト、およびプロミスキュアス処理を行うためのインフラストラクチャ
•
コントロールの非同期処理を行うためのインフラストラクチャ
•
着信フレームの処理
•
リンクのアップおよびダウンイベントの処理
•
すべての登録済みインタフェースおよび関連情報の蓄積
•
物理ドライバへのハンドオフを行うまでの送信処理
DLPI は、エクスポートされている3つのヘッダーファイルを介してサービスを提供します。ヘッダーファイ
ル <dlpi.h> および <dlpi_ext.h> は、ユーザー空間アプリケーションおよびカーネルレベル STREAMS モジュー
ル用です。ヘッダーファイル <dlpi_drv.h> は、物理ドライバおよび論理ドライバ用です。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-35
dlpi(7)
dlpi(7)
警告
HP-UX には ATM、Hyper Fabric などの特殊なテクノロジでの使用を目的としてさまざまな DLPI インプリメン
テーションが存在しますが、LAN クラスドライバ (密結合) をサポートする DLPI は、このマンページで説明
したものです。
著者
dlpi は、DLPI 2.0 規格に基づいて HP が開発しました。
参照
lanscan(1M), dlpi(4), dlpi_drv(4), dlpi_ext(4), lan(7)
『DLPI Programmer’s Guide』2003, Hewlett-Packard
『Driver Development Guide』Hewlett-Packard
『Device Driver Reference』Hewlett-Packard
Section 7-36
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
floppy(7)
floppy(7)
名称
floppy − フレキシブルディスクまたは「フロッピー」ディスクのダイレクトアクセス
説明
フレキシブルディスク デバイスは削除可能なメディアのディスクデバイスで、一般的に他のシステムとデータ
を共有するために使われます。メディアタイプは (3.5インチや5.25インチなどの) 物理的なサイズ、データサー
フェース (またはデータサイド) の数およびデータ密度で表されます。規約により、フレキシブルディスク デ
バイスは他のディスクデバイスで使われているものと同じ規約を用いて名前付けされます (disk(7) を参照)。
データを種々の論理フォーマットでフレキシブルディスク メディアにストアできます。これらのデバイスの容
量は、使いやすい UP-UX のファイルシステムを持つには一般的に小さすぎます。その代わりに、 DOS または
LIF のファイルシステム (これらのファイルシステムの詳細は dosif (4) および lif (4) を参照) が一般的に使われ
ています。データをアーカイバユーティティのフォーマットでもストアできます。例えば、一般に tar および
cpio が、他の HP-UX システムとのデータの共有に使われます (tar(1) および cpio(1) を参照)。
フレキシブルディスクに対しては、論理ボリュームはサポートされていません。フロッピーディスクではパー
ティションはサポートされていません。セクション 0 (ゼロ)が唯一のアクセス可能なパーティションです。
さまざまな論理フォーマットに加えて、ジオメトリと呼ばれる種々の物理的データフォーマットでデータをフ
レキシブルディスク メディアにストアできます。以下のパラメータを使って、フレキシブルディスクのジオメ
トリを表します。
heads
有効なデータを含むメディアのサーフェース (またはサイド) の数
tracks
メディアの 1 サーフェースまたは1サイド上のトラック数 (シリンダという言葉もとき
どき使われます)。この値はスペアのトラックを含んでいません。
sectors
1トラックのセクタ数。トラックに適するセクタの数は (転送速度およびメディアの回
転速度によってコントロールされる) ビット密度およびセクタサイズに依存します。
sector size
論理セクタのバイト数。すべての I/O 操作は整数のセクタ数の長さでなければなりま
せん。このパラメータは最小のキャラクタスペシャルのファイル I/O サイズも示して
います。
transfer rate
キロビット毎秒単位のメディアのデータ転送速度。転送速度はビット密度を表す間接
的な手段です。ビット密度はビット毎ラジアンで計られ、標準の記述で形式的な内部
トラックデータの密度のパラメータです。転送速度は一般的にフレキシブルメディア
のデバイスをプログラムするために使われ、このインタフェースに、より適していま
す。最もフレキシブルなディスクデバイスのメディアの回転速度が標準なので、 2つ
の表現間の変換は直線的なものになっています。
track density
1 インチのトラック数。低い密度のフォーマットは、高密度ドライブのヘッドステッ
プ間でトラックをスキップすることによりサポートできます。
data encoding
データをストアするために使われるコードに組む方法。 FM (frequency modulation) お
よび MFM (modified frequency modulation) は、最も一般的なエンコード方法です。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-37
floppy(7)
floppy(7)
RLL (run length limited) は、より高い密度を処理できるように MFM を修正したもので
す。
次の表はよく使うフレキシブルディスク メディアのジオメトリ (密度の情報を除く) を示したものです。一番
右の行はどの mediainit -f オプションを示されたジオメトリのメディアのフォーマットのために使うべきかを
示しています (mediainit(1) を参照)。
Media Type
Use
Capacity
Heads
Tracks
Sectors
Sector Size
-f
3.5in DS DD
630,784
2
77
16
256
1
3.5in DS DD
655,360
2
80
16
256
21
3.5in DS DD
655,360
2
80
8
512
26
3.5in DS DD
709,632
2
77
9
512
2
3.5in DS DD
DOS 720K
3.5in DS DD
3.5in DS HD’
2
80
9
512
16
2
77
5
1024
3
1,228,800
2
80
15
512
26
3.5in DS HD’
1,261,568
2
77
8
1024
22
3.5in DS HD
1,261,568
2
77
32
256
1
3.5in DS HD
1,419,264
2
77
18
512
2
1,474,560
2
80
18
512
16
3.5in DS HD
1,567,960
2
77
10
1024
3
3.5in DS HD
1,638,400
2
80
10
1024
23
120 MBytes
2
1736
51−92
512
*
3.5in DS HD
DOS 1.2M
737,280
788,480
DOS 1.44M
3.5in SD
DOS 120M
5.25in DS
DOS 360K
5.25in DS DD
5.25in DS HD
5.25in DS HD
DOS 1.2M
368,640
2
40
9
512
2
655,360
2
80
8
512
26
1,228,800
2
80
15
512
16
1,261,568
2
77
8
1024
24
* LS-120 フロッピーの場合、 mediainit で -f オプションを指定する必要はありません (このオプションは無視
されます)。 mediainit はこのディスクを 120MB のフロッピーとしてフォーマットします。
次の表は標準的なフレキシブルディスク メディアのための密度の情報を示しています。
Section 7-38
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
floppy(7)
floppy(7)
MediaType
BitDensity
RPM
TransferRate
TrackDensity
DataEncoding
3.5in DS DD
7,958
300
250
135
MFM
3.5in DS HD’
13,262
360
500
135
MFM
3.5in DS HD
15,916
300
500
135
MFM
3.5in SD
33,660
720
500
2490
RLL
5.25in DS
7,958
300
250
48
MFM
5.25in DS DD
7,958
300
250
96
MFM
5.25in DS HD
13,262
360
500
96
MFM
省略形は次のように解釈されます。
DS
両サイドのメディア
DD
倍密度のメディア
HD
高密度のメディア
HD’
高密度のメディア (代替メディア転送レート)
SD
LS-120 スーパーディスク
通常 open() コールにより、デバイスまたはフロッピー デバイスドライバ、あるいはその両方はインストール
したメディアのジオメトリを決定しようとします。結果、現在のフレキシブルディスクのジオメトリが、デバ
イス内の現在のメディアの物理的データフォーマットと同じサポートされたジオメトリにセットされます。適
当なオープン回数を保守するために、すべて可能なメディアのジオメトリがチェックされるわけではありませ
ん。そのためフレキシブルディスクの媒体は、たとえそのフォーマットが認められなくても有効なデータを含
んでいるかもしれません。この自動ジオメトリ識別の機能は、 open() コールで O_NDELAY を用いたいくつか
のドライバやマイナー番号に依存したデバイスドライバでは使えないかもしれません。サーバーではこのフラ
グはサポートされていません。
FLOPPY_GET_INFO ioctlはフロッピーデバイスの現在の状態と特徴を示します。 media および data_encoding
フィールドの解釈のための情報は <sys/floppy.h> に書かれています。次のマクロは status および valid フィー
ルドをデコードするために定義されています。これらのマクロは関連する状態に対し0でない (trueの) 値を返
します。
FLOPPY_NO_MEDIA(x)
/∗ Drive is empty ∗/
FLOPPY_BLANK_MEDIA(x)
/∗ Media geometry is not recognizable ∗/
FLOPPY_WRITE_PROT(x)
/∗ Media is write protected ∗/
FLOPPY_MEDIA_CHANGED(x)
/∗ Media has changed since last status ∗/
FLOPPY_HIGH_DENSITY(x)
/∗ Media has high density indication ∗/
上のマクロの引き数 x は、 FLOPPY_GET_INFO ioctlの status あるいは valid フィールドを参照しています。
いくつかのフロッピーデバイスやフロッピー デバイスドライバは、ステータス情報を決定できないかもしれま
せん。 有効なフィールドは相当するステータス情報が意味を持つかどうかを示しています。マクロを有効な
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-39
floppy(7)
floppy(7)
フィールドに適用することで、 status フィールドに対する同じマクロのアプリケーションの結果が有効なデバ
イス状態になったかどうかがわかります。
FLOPPY_GET_GEOMETRY ioctlは、フレキシブルディスク デバイスの現在のメディアジオメトリを決定する
ために使います。現在のジオメトリのパラメータは、構造体 floppy_geometry のフィールドに結果が示されま
す。
FLOPPY_SET_GEOMETRY ioctlは、メディアに望ましいジオメトリに設定するために使います。デバイスの
排他的なアクセスは、 DIOC_EXCLUSIVE ioctl (disk(7) を参照) を使ってなされますが、メディアジオメトリ
の設定に優先するもので必ず行ってください。排他的アクセスは他のアプリケーションに影響を与えないため
に必要です。サーバーではこのioctlはサポートされていません。
FLOPPY_FORMAT_TRACK ioctlは、メディアのトラックの再フォーマットに使います。デバイスの排他的な
アクセスは、 DIOC_EXCLUSIVE ioctl (disk(7) を参照) を使って行いますが、再フォーマットに優先する必須
のもので、他のアプリケーションに影響を与えないことを保証しています。サーバーではこのioctlはサポート
されていません。
フレキシブルディスク デバイスは、ハードディスク デバイスのために使う一般的なディスクioctl (disk(7) を参
照) をサポートしています。フレキシブルディスク デバイスドライバはドライバ特有のioctlもサポートしてい
ます (適切なドライバマニュアル参照)。
ヘッダファイル <sys/floppy.h> はフレキシブルメディアのデバイスコントロールについての情報を持っていま
す。次の事が <sys/floppy.h> に含まれています。
/* ioctls for flexible (floppy) disk devices */
#define FLOPPY_GET_INFO
_IOR(’F’, 1, struct floppy_info)
#define FLOPPY_GET_GEOMETRY
_IOR(’F’, 2, struct floppy_geom)
#define FLOPPY_SET_GEOMETRY
_IOW(’F’, 3, struct floppy_geom)
#define FLOPPY_FORMAT_TRACK
_IOW(’F’, 4, struct floppy_format)
/* structure for FLOPPY_GET_INFO ioctl */
struct floppy_info {
unsigned
media;
unsigned
status;
unsigned
valid;
};
/* structure for FLOPPY_GET_GEOMETRY and FLOPPY_SET_GEOMETRY ioctls */
struct floppy_geometry {
Section 7-40
unsigned
heads;
unsigned
tracks;
unsigned
sectors;
unsigned
sector_size;
unsigned
transfer_rate;
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
floppy(7)
floppy(7)
unsigned
track_density;
unsigned
data_encoding;
};
/* structure for FLOPPY_FORMAT_TRACK ioctl */
struct floppy_format {
unsigned
head;
unsigned
track;
unsigned
interleave;
};
エラー
フレキシブルディスクのデバイスドライバのコールにより以下のエラーが返されることがあります。
[EACCES]
要求したパーミッションがデバイスまたは操作に許されていない場合
[ENXIO]
オープンコールから返ってきたときは、指定したアドレスにデバイスがなかった場
合。他のコールの時は、指定したアドレスが範囲をはずれていたか、またはそのデバ
イスをもはやアクセスできない場合
[EINVAL]
open() コールの時は、デバイスがフロッピーデバイスではない場合。他のコールの時
は、リクエストまたはパラメータが無効な場合
[EIO]
I/O エラーの場合 (メディアに欠陥があるかまたはデバイスの通信に問題がある場合)
警告
デバイスがオープンされているときに、メディアを取り出したり交換したりすることはできません。マウント
したファイルシステムを含むフロッピーディスクを、アンマウントに優先して削除しないでください。マウン
トされたファイルシステムを含むフロッピーディスクの削除は、ファイルシステムのエラーおよびシステムの
パニックになるおそれがあります。
1 つのジオメトリから、トラック数が少ないだけの他のジオメトリへのフレキシブルディスク メディアの再
フォーマットにより、open() の自動ジオメトリ判別の機能が新しいメディアのジオメトリの認識に失敗する可
能性があります。再フォーマットに優先するメディアの大半の消去 (消磁) またはまったく違うジオメトリへの
メディアのフォーマットにより、自動ジオメトリ判別の問題を避けることができます。
1トラックのフォーマットは、いくつかのフロッピーデバイスによってはサポートされていません。
デ バ イ ス は、 サ ポー ト で き な い ジ オ メ ト リ の 設 定 を 許 し て い ま せ ん。 そ の よ う な 設 定 に 対 す る
FLOPPY_SET_GEOMETRY ioctlの結果はエラーにならないかもしれません。しかし、次の I/O 操作は失敗す
るでしょう。
制約
ワークステーション
ワークステーションのデバイス特殊ファイルは /dev/rfloppy と /dev/floppy のディレクトリにあります。
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-41
floppy(7)
floppy(7)
サーバー
フレキシブルディスクはメディアがなくてもオープンすることができます。しかし、メディアの交換による、
容量の変更は認識されません。 (scsi_disk(7) 参照)
サーバーのデバイス特殊ファイルは /dev/rdsk と /dev/dsk のディレクトリにあります。
次のサーバーのフレキシブルディスク メディアの表に、サポートされているディスクのジオメトリを示しま
す。ドライブに挿入されるメディアは、フレキシブルディスク カートリッジのHDホールの有無によりフォー
マットされます。 HD のメディアは 1.44M のディスクとして、DD メディアは 720K のディスクとしてフォー
マットされます。
Media Type
Use
Capacity
Heads
Tracks
Sectors
Sector Size
3.5in DS DD
DOS 720K
737,280
2
80
9
512
3.5in DS HD
DOS 1.44M
1,474,560
2
80
18
512
サポートされるフレキシブルメディアの密度に関する情報を次の表にまとめます。
メディアの型
ビット密度
RPM
転送レート
トラック密度
データのエンコーディング
3.5in DS DD
7,958
300
250
135
MFM
3.5in DS HD
15,916
300
500
135
MFM
FLOPPY_GET_INFO および FLOPPY_GET_GEOMETRY の ioctl はサーバーでサポートされています。
参照
disk(7), mediainit(1), mknod(1M), dosif(4), lif(4), scsi(7), scsi_disk(7)
Section 7-42
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
framebuf(7)
framebuf(7)
名称
framebuf − ラスタフレームバッファ デバイスのための情報
構文
#include <sys/framebuf.h>
説明
フレームバッファ デバイスは、ラスタベースのディスプレイです。これらのデバイスはメモリマップ I/O を使
い、tty ベースのグラフィックターミナルで可能なものより高いパフォーマンスを得ています。フレームバッ
ファ デバイスはこのインタフェースを用いて直接アクセスできますが、 STARBASE ライブラリを通してのアク
セスをお勧めします ( starbase(3G) 参照)。フレームバッファ デバイスを直接アクセスするには、使われるフ
レームバッファのアーキテクチャについての正確な知識を必要とします。フレームバッファ デバイスはシリア
ルデバイスではないので、入力をフレームバッファ デバイスにパイプしたりリダイレクトすることはできませ
ん。
各フレームバッファ デバイスはキャラクタ型スペシャルファイルと関連付けられています。フレームバッファ
のメジャー番号およびマイナー番号はインプリメンテーションに依存しています。これらのデバイスのマイ
ナー番号は、違うフレームバッファを示します。それぞれのインプリメンテーション特有の詳細は、システム
管理マニュアルを参照してください。
フレームバッファ デバイスを用いた通信はシステムコール open(2) により始められます。複数のプロセスがフ
レームバッファ デバイスを並列してオープンすることができます。
close(2) はフレームバッファ デバイスと関連するファイル記述子を無効にします。システムコール close の後
は、フレームバッファのデバイスアドレスへのどんなアクセスもメモリフォルトになり、シグナル SIGSEGV が
プロセスに送られます ( signal(2) 参照)。フレームバッファのスペシャルファイルがクローズされた後は、プロ
セスはフレームバッファのアドレス空間からフレームバッファをアンマップすることはできません。フレーム
バッファをアンマップするには GCUNMAP ioctl(2) コールを用いてください (以下参照)。
一度プロセスがフレームバッファ デバイスのロックを得ると、 close(2) をコールする前に明示的にアンロック
しなければなりません。 GCUNLOCK を参照してください。
read(2) および write(2) システムコールは未定義で、いつもエラーを返します。この場合 errno は ENODEV に
セットされます。
フレームバッファ デバイスを制御するためにはシステムコール ioctl(2) を使います。例外状態でフレームバッ
ファ デバイスをテストするためには、システムコール select(2) を使います。グラフィックハードウェアからの
割込みは例外状態とみなされます。フレームバッファ デバイスをオープンしたプロセスが select(2) コールによ
り例外を知らされると、例外状態は自動的に解かれます。フレームバッファ デバイスと関連したファイル記述
子上の読込みまたは書込みのための select(2) コールは、読込みおよび書込みのビットマスクがしてあると失敗
します ( select(2) 参照)。
フレームバッファ デバイスは、複数のプロセスにより同時にアクセスすることができます。しかし、ここで書
かれたロックのメカニズムまたは他の動機のメカニズムが使われない限り、各プロセスは他の出力にオーバラ
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-43
framebuf(7)
framebuf(7)
イトします。ここで書いたロックメカニズムはプロセスの協調にのみ向いています。
すべてのフレームバッファに対し、データバイトは左から右に、上から下に向かってスキャンします。ピクセ
ルは、スクリーン上で表示可能なドットで、フレームバッファ内のロケーションと関連しています。各デバイ
スはスクリーン上のピクセルに対応する 1つまたはそれ以上のメモリ内のビットにマップしますが、フレーム
バッファ内のビットは連続的なものではありません。フレームバッファの構造体および属性を書いた情報は、
データ構造体 crt_frame_buffer_t に書かれています。データ構造体 crt_frame_buffer_t には次のフィールドが
含まれています。
int crt_id;
/*display identifier*/
unsigned int crt_attributes; /*flags denoting attributes*/
char *crt_frame_base;
/*first byte in frame-buffer memory*/
char *crt_control_base;
/*first byte of the control*/
/*registers*/
char *crt_region [ CRT_MAX_REGIONS ];
/*other regions associated with the*/
/*frame-buffer device*/
次のリクエストが ioctl(2) で有効です。
GCDESCRIBE
サイズ、特徴、フレームバッファのマップされた範囲を記述します。情報はデータ構造
体 crt_frame_buffer_t に 納 め ら れ て 呼 出 し プ ロ セ ス に 返 さ れ、 パ ラ メー タ は
crt_frame_buffer_t *arg;. として定義されます。 1つまたはそれ以上のフレームバッファ
デバイスの範囲を持つ構造体フィールドがありますが、これらのフィールドの値はいつ
も定義されているわけではありません。正常に終了した後にのみ、使われた GCMAP コ
マンド ( 以下参照) は正しいアドレスを返し、返されたアドレスを用いて直接フレーム
バッファの範囲をアクセスできるようになります。
デバイスの識別番号を返します。パラメータは int *arg;. として定義されています。こ
GCID
のコマンドを用いたときに返された情報は、 GCDESCRIBE によって返される情報のサブ
セットで、旧製品との互換性のためだけに提供されています。
GCON, GCOFF
グラフィックをオンまたはオフします。この操作は、 GCDESCRIBE コマンドが返した
デー タ 構 造 体 crt_frame_buffer_t の フィー ル ド crt_attributes 内 で、 CRT_GRAPHICS_ON_OFF ビットがセットされているデバイスに有効です。他の場合は、これらのコマ
ンドの影響はありません。
GCAON,GCAOFF
alphaをオンまたはオフします。これらの操作は、 GCDESCRIBE コマンドが返したデータ
構造体 crt_frame_buffer_t のフィールド crt_attributes 内で、 CRT_ALPHA_ON_OFF ビッ
トがセットされているデバイスに有効です。他の場合は、これらのコマンドの影響はあ
りません。
Section 7-44
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
framebuf(7)
GCMAP
framebuf(7)
フレームバッファ メモリ、グラフィックコントロール、およびコールを行なうユーザー
プロセスのアクセス可能なその他のデバイス範囲を作成します。これをリクエストした
プロセスのみが、直接フレームバッファ メモリをアクセスでき、レジスタをコントロー
ルできます。 GCMAP コールに正常に終了した後に、( GCDESCRIBE ioctl(2) コールによっ
て返される) データ構造体 crt_frame_buffer_t 内のフィールド crt_frame_base および
crt_control_base は、フレームバッファの2つの範囲の有効なアドレスを持ちます。指定
したデバイスで、ユーザーのアドレス空間に 2 つ以上の範囲をマップするような場合
は、 特 別 な デ バ イ ス の 範 囲 CRT_MAX_REGIONS ま で の ベー ス ア ド レ ス が 順 次 配 列
crt_region に置かれます。指定したフレームバッファに関連した範囲のみがマップされ
ます。データ構造体 crt_frame_buffer_t 内の不適切なフィールドは 0. にセットされま
す。パラメータ arg の使用はインプリメンテーションに依存しています ( 「制約」参
照)。フレームバッファの範囲のベースアドレスはいつもページに合わされます。
GCUNMAP
フレームバッファ メモリへのアクセス、グラフィック制御、および他のデバイスの範囲
のリクエストプロセスからの削除を行います。パラメータ arg は無視して 0 にセットし
てください。 GCUNMAP コールが正常に終了した後は、これらのメモリの範囲へのアク
セスはメモリフォルトになり、シグナル SIGSEGV がプロセスに送られます。
GCLOCK
協調プロセスによるフレームバッファ デバイスの排他的な使用を行ないます。呼出しプ
ロセスはデバイスのロックおよび継続を行うか、またはブロックされます。この場合ブ
ロックは、フレームバッファが使用可能な場合またはコールがシグナルにより割り込ま
れた場合にのみ、コールから返ってきます。コールが割り込まれた場合はエラーを返
し、 errno が EINTR にセットされます。他のプロセスが GCLOCK コマンドを使ってすで
にこのフレームバッファ ロックしていて、 GCUNLOCK がまだ実行されていないときに
は待ち状態がおこります。 GCLOCK コマンドは他の非協調プロセスのフレームバッファ
への書込みを妨げないので、パラメータ arg は無視して 0 にセットしてください。
このコールは内蔵ターミナルエミュレータ (ITE) がグラフィックハードウェア ( termio(7)
参照)の状態を改悪することを避けます。いくつかのシステムでは、 GCLOCK コマンド
によってフレームバッファがロックされている限りは、 ITE はテキストを出力しません
(「制約」参照)。同じプロセスによる1回以上のデバイスのロックは失敗し、 errno が
EBUSY にセットされます。
GCLOCK_NOWAIT
協調プロセスによるフレームバッファ デバイスの排他的な使用を行います。このリクエ
ストは GCLOCK リクエストと同じ影響をフレームバッファ デバイスに与えます。しか
し、このコールは他のプロセスによってフレームバッファがリリースされるのを待ちま
せん。フレームバッファ デバイスがロックされている場合は、プロセスはブロックせ
ず、代わりにシステムコールがエラーを返し、 errno が EAGAIN にセットされます。パ
ラメータ arg は無視して 0 にセットされます。
GCLOCK_BLOCKSIG
別の方法で送られた呼出しプロセスへのすべての入力シグナルがブロックしている間、
協調プロセスによるフレームバッファ デバイスの排他的な使用を提供します。このコー
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-45
framebuf(7)
framebuf(7)
ルは GCLOCK コールのスーパーセットです。パラメータ arg は無視され 0 にセットされ
ます。排他的な使用でディスプレイを取得した場合、 GCLOCK コールのときにプロセス
が受け取ったすべてのシグナルを、 GCUNLOCK を取得するまで保留 ( ブロック) しま
す。 GCUNLOCK リクエストの前のプロセスのシグナルのマスクの変更 ( sigsetmask(2) 参
照) は、これらのブロックしたシグナルでは影響を持ちません。ロックが行われるまで
シグナルはブロックされず、ロックを待っている間もシグナルは受け取られます。
シグナル SIGTSTP はそれが受け取られても受け取られなくても、ブロックされます。
SIGTTIN および SIGTTOU もデバイスがロックしている間、 ITE がデバイスに出力を行な
わないフレームバッファ デバイス上でブロックされます。「制約」を参照してくださ
い。
上で述べた3つのシグナルを除いて、このコールはプロセスが受け取ることを予期しな
いシグナルをブロックせず、受け取れないまたは無視できないシグナルをブロックしま
せん。このコマンドは他の非協調プロセスのフレームバッファへの書き込みを妨げませ
ん。
GCLOCK_BLOCKSIG_NOWAIT
別の方法で送られた呼出しプロセスへのすべての入力シグナルがブロックしている間、
協調プロセスによるフレームバッファ デバイスの排他的な使用を提供します。このリク
エストは GCLOCK_BLOCKSIG リクエストと同じ影響をフレームバッファ デバイスに与え
ます。しかし、このコールは他のプロセスによってフレームバッファがリリースされる
のを待ちません。フレームバッファ デバイスがロックされている場合は、プロセスはブ
ロックせず、代わりにシステムコールがエラーを返し、 errno が EAGAIN にセットされ
ます。パラメータ arg は無視され 0 にセットされます。
フレームバッファ デバイスの排他的使用を止めます。デバイスが GCLOCK_BLOCKSIG ま
GCUNLOCK
たは GCLOCK_BLOCKSIG_NOWAIT ioctl(2) リクエストによりロックされている場合は、呼
出しプロセスのシグナルマスクがロックリクエストに優先してその元の状態に戻されま
す。
フレームバッファ デバイスに対応するグラフィックハードウェアが、定義された初期状
GCRESET
態にリセットされます。このコールによりフレームバッファ デバイスがここで定義した
ioctl に応えられるようになります。
GCDMA_OUTPUT
DMA の出力をフレームバッファ デバイスに送ります。このシステムコールはユーザー
の配列からグラフィック フレームバッファの長方形の部分、またはデバイスのグラ
フィック制御空間へデータを転送するために使われます。
DMA のパラメータはデータ構造体"crt_dma_ctrl_t"でわたされ、次のフィールドが含まれ
ています。
char *mem_addr;
/* Starting address of data
being transferred */
Section 7-46
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
framebuf(7)
framebuf(7)
char *fb_addr;
/* Address of framebuffer
destination */
int length;
/* Number of bytes to transfer,
including those "skipped" */
int linelength;
/* Number of bytes written
on each framebuffer row */
int skipcount;
/* Number of source bytes to
ignore after each "linelength" */
unsigned int flags; /* Specified options to the driver */
グラフィック フレームバッファへ書くためには、描く長方形の左上のアドレスに
fb_addr をセットします。 DMA は各フレームバッファの列上に linelength バイト書き、
メモリデータの次の skipcount バイトを無視し、成功したフレームバッファの列と同じ
スタート位置に再び書き始めます。このことを、 length バイト書き終えるかまたは無視
されるまで続けます。
グラフィック制御空間に書くためには、 fb_addr を最初のグラフィック制御レジスタの
アドレスにセットします。この時、 linelength および skipcount は無視されます。
パラメータ flags は DMA のオプションを指定します。現在サポートしているフラグはな
いので、このパラメータは 0 にセットしてください。他の場合、システムコールは失敗
し、 errno は EINVAL にセットされます。
DMA はデータを書く命令をストアするのと同じ効果をフレームバッファ デバイスに与
えます。このように、様々なグラフィック制御レジスタが DMA の結果に影響を与えま
す。 DMA が望んだ結果をもたらすよう、必要なフレームバッファ デバイスの設定を行
うのは、ユーザープログラムの責任です。
パラメータイメージの一部を再描画する必要がある場合に、 skipcount によりユーザー
はメモリにストアしたウィンドウイメージの一部を再描画することができます。ウィン
ドウイメージはアップデートされた長方形のスーパーセットで、大きさが異なります。
skipcount は長方形から除かれる大きい方のウィンドウイメージ内の列の1部を指定しま
す。 linelength + skipcount は大きい方のウィンドウイメージの配列の各列のバイト数で
す。
特別なフレームバッファ デバイスがこのシステムコールをサポートしている場合、構造
体 crt_frame_buffer_t のフィールド crt_attributes 内のフラグ CRT_DMA_OUTPUT はセッ
トされます。 DMA をサポートするフレームバッファ デバイスによってはいくつかのパ
ラメータの境界を制限します。「制約」を参照してください。カーネルはこれらの制限
条項が守られることを保証し、制限がシステムコールでない場合はそれは失敗し、
errno に EINVAL がセットされます。
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-47
framebuf(7)
framebuf(7)
システムの物理メモリが、プロセッサのデータキャッシュのフラッシュによりアップ
デートされることを保証するのはアプリケーションの責任です。データが DMA 転送を
初期化する前に矛盾していないことを保証するには、 GCDMA_DATAFLUSH ioctlを使用し
てください。
GCDMA_DATAFLUSH
指定したデータをプロセッサのデータキャッシュからシステムの主メモリへフラッシュ
します。このシステムコールは DMA の前に使われ、新しいデータをフレームバッファ
または制御空間へ転送したことを保証します。
吐き出すためのパラメータはデータ構造体 crt_flush_t へ渡され、それには次のフィール
ドが含まれています。
char *flush_addr; /* Starting address of data
to be flushed */
int flush_len;
/* Number of bytes to flush */
カーネルは flush_addr で始まる flush_len バイトがキャッシュと主メモリとで一貫して
いることを保証します。
システム全体のグラフィック ロックメカニズムに関連した呼出しプロセスについての情
GCSLOT
報を提供します ( GCLOCK 参照) 。 GCSLOT リクエストは実際のロック機能を行いませ
ん。ロックの情報が呼出しプロセスにデータ構造体 crt_gcslot_t で返されます。パラ
メータは crt_gcslot_t *arg;. として定義されています。データ構造体 crt_gcslot_t は
<sys/framebuf.h>. で定義されています。
GCSTATIC_MAP
内蔵ターミナルエミュレータ (ITE) のデバイスのカラーマップの変更を禁止します。
GCVARIABLE_MAP
内蔵ターミナルエミュレータ (ITE) のデバイスのカラーマップの変更を許可します。
制約
シリーズ 700/800
GCMAP をリクエストしているとき、パラメータ arg は無視して 0 にセットしてください。
出力時サポートしたすべての ITE はフレームバッファを無視します。
シリーズ 700
GCID コールおよび GCDESCRIBE コールで、データ構造体 crt_frame_buffer_t のフィールド crt_id に返さ
れるデバイス識別定数は次のようになっています。
S9000_ID_98705
S9000_ID_98736
S9000_ID_A1659A
S9000_ID_A1439A
メモリマップ グラフィック協調プロセッサが使用可能な場合、それは GCMAP の結果として他のグラ
フィックとともにマップされ、そのアドレスは GCDESCRIBE コールにより、crtの範囲の配列に最後のエ
Section 7-48
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
framebuf(7)
framebuf(7)
ントリーとして記録されます。
シリーズ 800
次 の デ バ イ ス 識 別 定 数 が、 GCID コー ル お よ び GCDESCRIBE コー ル に よ り デー タ 構 造 体
crt_frame_buffer_t のフィールド crt_id に返されます。
S9000_ID_98720
S9000_ID_98730
S9000_ID_98550
HP A1047A インタフェースカードの場合、構造体 crt_dma_info のフィールドには次の制限条項がありま
す。
mem_addr
32バイトごと
fb_addr
16バイトごと
length
ゼロでない32の倍数
skipcount 0
エラー
[EAGAIN]
操作が呼出しプロセスの停止を引き起こしましたが、リクエストは GCLOCK_NOWAIT
または GCLOCK_BLOCKSIG_NOWAIT です。
[EBUSY]
デバイスをロックしようとしましたが、すでに同じプロセスによりロックされていま
した。
[EINTR]
ioctl(2) コールがシグナルにより停止させられました。
[EINVAL]
無効な ioctl(2) コマンドを行いました。
[ENODEV]
デバイス上で read(2) または write(2) のシステムコールを行おうとしました。
[ENOMEM]
十分なメモリを取得できませんでした。
[ENOSPC]
要求したリソースを取得できませんでした。
[ENXIO]
デバイスファイルのマイナー番号が存在しないデバイスを参照しています。
[EPERM]
GCUNLOCK ioctl(2) コマンドを要求したが、デバイスは違うプロセスにロックされてい
ました。
著者
framebuf はHPで開発されました。
参照
select(2), open(2), close(2), signal(2), sigsetmask(2), lockf(2), ioctl(2), mknod(1M), starbase(3G), termio(7)
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-49
gang_sched(7)
gang_sched(7)
名称
gang_sched − ギャングスケジューラ
説明
ギャングスケジューラは、一連の MPI (Message Passing Interface) プロセス、あるいはシングルプロセスからの
複数のスレッドを、1 つのグループとして同時にスケジュールすることができます。
ギャングスケジュールは、 MP_GANG 環境変数を ON または OFF に設定することにより、使用可能または使
用不可能になります。
ギャングスケジュール機能は、利用者過剰で負荷がかかったタイムシェア環境で、アプリケーションが同時処
理するパフォーマンスを著しく向上させることができます。利用者の過剰が生じるのは、実行可能なパラレル
スレッド、MPI プロセス、または他の実行可能なプロセスの合計数が、システムのプロセッサ数を上回った場
合です。
またギャングスケジュールは、共用メモリの並列アプリケーションのスレッド間で、待ち時間の少ない相互作
用が可能です。
HP-UX V11.0 MPI あるいは pthread ライブラリを使用しているアプリケーションだけがギャングスケジュール
することができます。HP コンパイラの並行処理は主に pthread ライブラリ上でビルドされているので、HP コ
ンパイラでコンパイルされたプログラムがギャングスケジュールによる利点を得ることができます。
インタフェース
HP-UX ギャングスケジューラは、環境変数を用いることで使用可能、および使用不可能にすることができま
す。変数は次のように定義されます。
MP_GANG [ON | OFF]
MP_GANG を ON に設定するとギャングスケジューリングが可能になり、 OFF に設定すると不可能になりま
す。 MP_GANG が設定されていない場合、あるいは未定義の値に設定されている場合は動作しません。
ギャングスケジュールは、 fork (fork(2) を参照) が作成した子プロセスにより継承されるプロセス属性です。
プロセスのギャングスケジュールのステータスは、次に exec (exec(2) を参照) を呼び出した後でのみ変更する
ことができます。
動作
MP_GANG 環境変数が ON に設定された後、実行およびこの変数を検索する MPI あるいは pthread アプリケー
ションはどれも、そのプロセスのためのギャングスケジューリングを可能にします。
pthread および MPI ライブラリだけが MP_GANG 変数を照会します。 オペレーティングシステムはこの変数
を照会しません。
ギャングスケジュールは、継承されたプロセス属性です。ギャングスケジューリングが可能なプロセスが子プ
ロセスを作成した場合は、以下のことが生じます。
•
Section 7-50
子プロセスがギャングスケジュールの属性を継承します。
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
gang_sched(7)
•
gang_sched(7)
新しいギャングが、子プロセスのために形成されます。子プロセスは親プロセスのギャングの一部
にはなりません。
ギャングスケジューラが動作するのは、ギャングが複数のスレッドから成るときだけです。 pthread アプリ
ケーションに対しては、2 番目のスレッドが作成されたときに動作します。 MPI アプリケーションに対して
は、2 番目のプロセスが追加されたときに動作します。
プロセスによりスレッドが作成されたとき、そのプロセスにギャングスケジューリングが可能であれば、新し
いスレッドはプロセスのギャングに追加されます。しかし、ギャングのサイズがシステムのプロセッサの数と
等しくなると、以下のことが生じます。
•
新しいスレッドあるいはプロセスは、ギャングに追加されません。
•
ギャングはそのままで、ギャングスケジューリングが継続されます。
•
過剰なスレッドは通常のタイムシェアリング方式でスケジュールされます。
•
ギャング内のスレッドが終了しても (従って空き領域ができても)、過剰なスレッドはギャングに追
加されません。しかし、空き領域が作成された時に、新しく作成されたスレッドが追加されます。
MPI プロセスは、実行初期に静的に割り当てられます。 MP_GANG が ON に設定された場合、MPI アプリ
ケーション内のプロセスすべてが同じギャングの一部になります。
ギャングのスレッドとプロセスの優先順位は、タイムシェアリング方式で等しく管理されます。タイムシェア
リング優先順位スケジューラは、いつギャングをスケジュールするかを決定し、タイムシェアリング方式を遵
守します。
ギャングをスケジュールすると、複数の、より高い優先順位のタイムシェアスレッドを処理するように見えま
すが、結局はギャングスケジューラの方式はおおむね公平です。ギャングのスレッドはすべて、ギャングがス
ケジュールされるまでは、最も高いプライオリティにあります。ギャングのスレッドはすべて同時に実行され
る必要があるため、最も高いプライオリティを持つ場合、いくつかのスレッドは実行されません ( スレッド
は、他のすべてのスレッドが選択されるまで待ち、他のプロセスを先に実行させなければなりません)。
ギャングは、1つのタイムスライスに対しスケジュールされます。タイムスライスは、ギャングスケジュール
されているかどうかにかかわらず、すべてのスレッドに対して同じです。
システムでひとつのギャングが実行されたとき、ギャングのスレッドはシステムのプロセッサに割り当てられ
ますが、別のプロセッサに移行されることはありません。
複数のギャングを持ち、利用者が過剰なシステムでは、それぞれ異なるスレッドの CPU 時間を同じ割合にす
るために、すべてのギャングが定期的に移動します。この再平均化は、数秒ごとに生じます。
多言語化対応
環境変数
以下の環境変数はプロセスのギャングスケジュールに作用します。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-51
gang_sched(7)
gang_sched(7)
•
MP_GANG は、プロセスのギャングスケジュールを使用可能にしたり (設定 ON の場合)、不可能
にしたりします (設定 OFF の場合)。詳細は、このマンページのインタフェースの項を参照してく
ださい。
•
MP_NUMBER_OF_THREADS は、並列で実行するためにコンパイルされたプログラムを実行する
ことができるプロセッサの数を指定します。設定されていない場合は、デフォルト値はシステムの
プロセッサの数です。
パフォーマンス
ギャングスケジュールは、実行可能なスレッドおよびプロセスのすべてを同時にスケジュールすることができ
ます。これにより、並列アプリケーションでの同期待ち時間が向上します。例えば、バリアで待っているス
レッドは現在スケジュールされていないスレッドを待つ必要はありません。
しかし、冗長なパラレル領域を持ち、滅多に同期しないアプリケーションは、ギャングスケジュールされてい
ない場合に最も効率よく動作する可能性があります。このようなアプリケーションでは、すべてのスレッドを
同時にスケジュールしなくても、一部のスレッドだけをスケジュールできます。
ギャングスケジュールされたアプリケーションのパフォーマンスは、システム上でギャングスケジューリング
されたアプリケーションの数、および各アプリケーションのスレッドの数に影響を受けることがあります。
ギャングスケジューラは、アプリケーション間の CPU のオーバーラップを最小限にする「最適な」アルゴリ
ズムを使用している CPU に並列にアプリケーションを割り当てます。
サイズが変化する、あるいは不揃いな組み合わせのサイズのギャングを含む複雑な作業負荷を抱えたシステム
では、作業負荷は使用可能な CPU の数にぴったり一致しないことがあります。このような状況では、ギャン
グスケジュールされていないアプリケーションの方がより快適に実行できることがあります。従って、すべて
のスレッドがギャングとしてスケジュールされるのを待つのではなく、いくつかのスレッドをスケジュール可
能にすることができます。
スケジューリングのオーバーヘッド
ギャングスケジュールは、スケジューラが一連のスレッドを収集し、一連のプロセッサをスレッドに割り当
て、同時に実行するために一連のスレッドとプロセッサを集合させた場合、オーバーヘッドになります。
待ち状態のシステムでは、ギャングスケジュールのオーバーヘッドは、ひとつのパラレルアプリケーションを
実行しているときに見られます。
スレッドのカーネルブロック
ギャングブロックからのスレッドがカーネルの中にあれば、スレッドのプロセッサは、他のギャングスケ
ジュールされていないスレッドを実行することができます。ブロックされたスレッドが再び動き出し、その
ギャングが現在実行中の場合は、スレッドは再度集合させることなく他のギャングスケジュールされたスレッ
ドに結合することができます。
マルチギャング環境では、スレッドのブロッキングはスループットの低下をまねくことがあります。この現象
は、アプリケーションのスレッドがカーネル内で長時間ブロックした場合によく起こります。
Section 7-52
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
gang_sched(7)
gang_sched(7)
リアルタイムスレッドによる優先
リアルタイムスレッドの実行がギャングスケジュールされたスレッドに優先することがあります。これは、リ
アルタイムスレッドが優先しているプロセッサで実行中のギャングスケジュールされたスレッドだけに影響し
ます。ギャングの残りのスレッドは、それぞれのタイムスライスを通じて実行を続けます。
制限条項
ギャングスケジュールを実行のする場合、以下の制限があります。制限のいくつかは、今後のリリースで取り
除かれる可能性があります。
•
デバッグ中のプロセスのギャングスケジュールはサポートされていません。デバッガがプロセスに
アタッチしたとき、プロセスに対するギャングスケジュールは使用不能になります。これは、デ
バッガにより停止した複数のスレッドをともなうギャングスケジュールのプロセスを回避するため
です。
•
ギャングスケジュールは、Process Resource Manager (PRM) が使用可能になったときには、完全に停
止します。
•
ギャングスケジュールされたプロセスがスワップアウトするよう選択されると、プロセスは、再度
スワップインしたときにはギャングスケジュールされません。
•
リアルタイムプロセスはギャングスケジュールされません。
•
ギャングスケジュールは、タイムシェアスケジュール方式のプロセスのみをサポートします。
•
ギャングスケジュールされたプロセスが、最大数のスレッド (または、MPI アプリケーションなど
に対する最大数のプロセス) を含むとき、この時点より後に作成されたスレッドやプロセスはギャ
ングの一部としてはスケジュールされません。詳細は、このマンページの動作の項を参照してくだ
さい。
•
ギャングスケジューラは、MPI を使用しないマルチプロセスのアプリケーションをサポートしませ
ん。
•
ギャングスケジューリングは、 PTHREAD_SCOPE_PROCESS スレッドについてはサポートされ
ていません。HP-UX のリリース 11i バージョン 1.6 から、スレッドのスケジューリング適用範囲の
デフォルトは PTHREAD_SCOPE_PROCESS です。PTHREAD_SCOPE_PROCESS スレッドがア
プリケーションによって作成された場合、最初のスレッドは PTHREAD_SCOPE_PROCESS とし
て処理されます。
ファイル
以下はギャングスケジューリングの際に使用されるライブラリです。
/usr/lib/libpthread.1
/opt/mpi
pthread ライブラリ
このディレクトリには MPI ライブラリと MPI ソフトウェアがあります。HP MPI はオプショ
ン製品です。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-53
gang_sched(7)
gang_sched(7)
参照
fork(2), exec(2)
Section 7-54
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
hil(7)
hil(7)
名称
hil − HP-HIL デバイスドライバ
構文
#include <sys/hilioctl.h>
説明
HP社のヒューマンインタフェース リンクである HP-HIL は、パーソナルコンピュータ、ターミナル、ワークス
テーションとこれらの入力デバイスとの、 HP社の標準インタフェースです。 hil は、キーボード、マウス、コ
ントロールノブ、 ID モジュール、ボタンボックス、デジタイザ、モニタ、バーコードリーダ、および、タッ
チスクリーンなどをサポートしています。
単一リンクのシステムでは、 HP-HIL デバイスファイル名は次の形式を使います。
/dev/hiln
n は、物理的な HP-HIL デバイスアドレスを指す1から7までの1桁の十進数です。例えば、 /dev/hil3 は3番目の
HP-HIL デバイスにアクセスするために使われます。
1つ以上のリンクを持つシステムでは、 HP-HIL デバイスファイル名は次の形式を使います。
/dev/hil_m.n
m は、インスタンス番号を表し、 n は、物理的な HP-HIL デバイスアドレスを表します。例えば、 /dev/hil_0.2
は、インスタンス番号 0 をもつリンク上の2番目のデバイスにアクセスするために使われます。同様に
/dev/hil_12.7 は、インスタンス番号12をもつリンクの7番目のデバイスを参照するために使われます。
HP-HIL のデバイスアドレスは、デバイスがリンクにつながれている順番のみによって決定されることに注意
してください。リンクにつながれている最初のデバイスがデバイス1、2番目のデバイスがデバイス2、などと
なります。
HP-HIL デバイスは、「時間がかかる」デバイスに分類されます。これは hil に対するシステムコールが、捕捉
したシグナルによって中断する可能性があることを意味します( signal(5) を参照)。 hil はrawキーコードモード
では、 HP-HIL キーボードのみしか読み込むことができません。 rawキーコードモードは、すべてのキーボー
ド入力が何も介さずに読み込まれることを意味します。 HP-HIL キーボードはキーを押すevent、離すeventを表
すキーコードを返します。 HP-HIL キーボードからマップされたキーコードを読むには、 hilkbd(7) を使いま
す。 HP-HIL キーボードから ASCII形式の文字を読むには、 termio(7) に説明されている内蔵ターミナルエミュ
レータ(ITE)を使います。
システムコール
open(2) は、指定された HP-HIL デバイスに排他的なアクセスを与えます。あらかじめキューに入れられた、デ
バイスからのすべての入力は破棄されます。デバイスがキーボードの場合、 rawキーコードモードでオープン
されます。キーボードをrawキーコードモードでオープンすることにより、 ITE ( termio(7) を参照) とマップさ
れたキーボードドライバ( hilkbd(7) を参照)がクローズされるまで、そのキーボードからの入力を失うことを生
じます。 rawキーコードモードの間は、デバイスにより実現されているオートリピート機能のみが利用可能で
す( HILER1 および HILER2 を参照)。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-55
hil(7)
hil(7)
ファイルステータス フラグ O_NDELAY は、ノンブロッキング読込みを可能にするためにセットできます (
open(2) を参照)。
close(2) は、 ITE またはマップされたキーボードドライバへの入力を利用可能にして、 HP-HIL キーボードを
マップされたキーコードモードに戻します( hilkbd(7) を参照)。
read(2) は指定された HP-HIL デバイスからのデータを、次のようなタイムスタンプ付きのパケットにして返し
ます。
unsigned char packet_length;
unsigned char time_stamp[4];
unsigned char poll_record_header;
unsigned char data[ packet_length - 6 ];
packet_length はパケットのバイト数を示し、 6 から 20 バイトの範囲の値をとります。整数に変換された
time_stamp は、直前のシステムブートからシステムが稼働している時間を10ミリ秒の単位で表します。タイム
スタンプの最上位バイトは、 time_stamp[0] です。 poll_record_header はタイプとそれに続く情報の量を示し、
単 純 な デ バ イ ス の ス テー タ ス 情 報 を 報 告 し ま す。 デー タ の バ イ ト 数 は デ バ イ ス に 依 存 し ま す。
poll_record_header とデバイス固有のデータについての説明は、参照にリストされているテキストを参照してく
ださい。
それぞれのデータパケットを読むためには、通常2 つのシステムコールが必要です。最初のシステムコール
は、データパケット長を読みます。2番目のシステムコールが、実際のデータパケットを読み込みます。デバ
イスの中には、各パケットに常に同じ量のデータを返すものがあります。この場合、パケットの長さと内容は
同じシステムコールで読み込むことが可能です。
ファイルステータス フラグ O_NDELAY がセットされており、データが何も得られない場合、 read(2) は、ブ
ロックされずに 0 を返します。
hil は write(2) をサポートしていません。
select(2) は、 HP-HIL から使用可能な入力をポールするために使用できます。書込みや例外条件のための
select(2) は、必ずファイル記述子のビットマスクに偽であることを示す値を返します。
ioctl(2) は、 HP-HIL デバイスの特別な操作を行うために使われます。 ioctl(2) システムコールは、すべて次の
形式です。
int ioctl(int fildes, int request, char ∗arg);
以下の request コードが <sys/hilioctl.h> に定義されています。
HILID
Identify and Describe
このリクエストは、指定された HP-HIL デバイスが供給するように、 arg が指す char 変数に
Identify and Describe Record を返します。 Identify and Describe Record は、リンクにつながれた
各デバイスのタイプと特徴を決定するために使われます。 Identify and Describe Record は2 か
ら11バイトの間で長さが変化します。レコードは少なくとも、次のバイトを含みます。
Section 7-56
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
hil(7)
hil(7)
•
DeviceIDバイト
•
Describe Record Headerバイト
デバイス ID バイトは、デバイスの一般クラス、およびキーボードまたはキーパッドの場合に
は、その国籍を識別するために使われます。 Describe Record Header バイトは、デバイスの位
置報告能力を表します。 Describe Record Header バイトはまた、 I/O 記述子バイトがDescribe
Record の最後に続くかどうかを示します。さらにこれは、Extended Describe とReport Security
Code リクエストをサポートしているかどうかについても示します。デバイスが何らかの座標
を報告する能力を持つ場合には、 Describe Record は、 Describe Record Header バイトの直後
に、デバイスの分解能を持ちます。デバイスが絶対座標を報告する能力がある場合は、デバイ
スの分解能の後にそれぞれの軸の最大値が示されます。 I/O 記述子バイトはデバイスが持つボ
タ ン の 数 を 示 し ま す。 I/O
記 述 子 バ イ ト は ま た、 デ バ イ ス の 座 標 認 識 精 度 と
Prompt/Acknowledge機能を表しています。すべての HP-HIL デバイスは、Identify and Describe
リクエストをサポートしています。
HILPST
Perform Self Test
このリクエストは、指定したデバイスのセルフテストを行い、1バイトのテスト結果を arg の
指す char 変数に返します。テスト結果が0ならば、これはこのテストが正常に終了したこと
を示し、 0以外ならデバイス固有の故障を示します。すべての HP-HIL デバイスは、セルフテ
ストリクエストをサポートしています。
HILRR
Read Register
Read Registerリクエストは、 arg が指す char 変数に HP-HIL デバイスレジスタ アドレスを要
求し、 1バイトのレジスタの内容を ∗arg に返します。 Extended Describe Recordは、デバイス
がRead Registerリクエストをサポートしているかどうかを示します。
HILWR
Write Register
Write Registerリクエストは、 ∗arg に1つ以上のデータパケットを持つレコードを要求します。
それぞれのパケットには、 HP-HIL デバイスレジスタ アドレスと、そのレジスタに書き込ま
れる1つ以上のデータバイトが含まれます。レジスタの書込みには2つのタイプがあります。
タイプ1 は、各デバイスレジスタに単一のバイトを書き込むために使用できます。タイプ2
は、複数バイトを1 つのレジスタに書き込むために使用できます。 Extended Describe Record
は、デバイスがどちらか、または両方のタイプのレジスタ書込み要求をサポートしているかど
うかを示します。
HILRN
Report Name
Report Nameリクエストは、デバイス記述文字列を arg の指す文字配列に返します。文字列は
15文字以下の文字長です。 Extended Describe Recordは、 Report Nameリクエストをサポートし
ているかどうかを示します。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-57
hil(7)
hil(7)
HILRS
Report Status
Report Statusリクエストは、 arg が指す文字配列中にデバイス固有のステータス情報文字列を
返します。文字列は15文字以下の文字長です。 Extended Describe Recordは、 Report Statusリク
エストをサポートしているかどうかを示します。
HILED
Extended Describe
Extended Describeリクエストは、Extended Describe Recordを arg が指す文字配列に返します。
Extended Describe Recordは、15バイト以下の付加的なデバイス情報を持ちます。第1バイトは
Extended Describe Headerです。これは、デバイスがReport Status, Report Name, Read Register, あ
るいは Write Register リクエストをサポートしているかどうかを示します。デバイスに Read
Registerリクエストが実現されている場合、最大の読込み可能なレジスタが示されます。デバ
イスがWrite Registerリクエストをサポートしている場合、Extended Describe Recordは、デバイ
スにレジスタ書込み法の2つのタイプのうち一方または両方が実現されているか、および最大
の書込み可能なレジスタについて示します。デバイスがタイプ2 のレジスタ書込み形式をサ
ポートする場合、書込みバッファの最大サイズが示されます。 Extended Describe Record は、
デバイスのlocalization(言語)コードも含むことができます。 Extended Describeリクエストをサ
ポートしているかどうかは、 Describe Record Headerバイトに示されます。
HILSC
Report Security Code
Security Codeリクエストは、Security Code Recordを arg が指す文字配列に返します。 Security
Code Recordは、特定のデバイスを表す1から15バイトの間のデータです。アプリケーションは
このリクエストを、各アプリケーションのコピーを1台のマシン、あるいはユーザーのみに限
定するための「鍵」の実現として使用することができます。アプリケーションは、 Security
Code Recordを HP-HIL ID モジュールから読むことができ、それからアプリケーションが特定
のマシンで動いているか、または正当なユーザーによって使用されているかを確かめることが
で き ま す。 デ バ イ ス は、 Report Security Code リ ク エ ス ト を サ ポー ト し て い る か ど う か を
Describe Record Headerに示します。
HILER1
Enable Auto Repeat = 1/30 second
このリクエストにより HP-HIL キーボードと、キーパッドデバイス製品に実現されている
「キーリピート」機能が使用可能になります。これはまた、カーソルキーのリピートレートを
1/30秒にします。このリクエストは arg を使用しません。
HILER2
Enable Auto Repeat = 1/60 second
このリクエストにより HP-HIL キーボードと、キーパッドデバイス製品に実現されている
「キーリピート」機能が使用可能になります。これはまた、カーソルキーのリピートレートを
1/60秒にします。このリクエストは arg を使用しません。
HILDKR
Section 7-58
Disable Keyswitch Auto Repeat
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
hil(7)
hil(7)
このリクエストは、いくつかの HP-HIL キーボードと、キーパッドデバイス製品に実現されて
いる「キーリピート」機能を停止します。このリクエストは arg を使用しません。
HILP1..HILP7
Prompt 1 through Prompt 7
これらの7 つのリクエストは、音声機構や画像応答をユーザーに与えるために、いくつかの
HP-HIL デバイスでサポートされています。おそらくシステムが何らかのタイプの入力の準備
ができていることが必要です。デバイスは、これらのリクエストを受領可能であるかを
Describe Record の I/O 記述子バイトに示します。これらのリクエストは、 arg を使用しませ
ん。
HILP
Prompt(General Purpose)
このリクエストは、一般用途でユーザーの入力を求めるために意図されています。このリクエ
ストを受け取ることができるデバイスは、 Describe Recordの I/O 記述子バイトにそのことを示
します。このリクエストは、 arg を使用しません。
HILA1..HILA7
Acknowledge 1 through Acknowledge 7
これらの7つのリクエストは、音声機構や画像応答をユーザーに提供するためのものです。こ
れらは一般にユーザーの入力を認識します。 Describe Record 中の I/O 記述子バイトは、 HPHIL デバイスがこのリクエストを実現しているかどうかを示します。これらのリクエストは
arg を使用しません。
HILA
Acknowledge (General Purpose)
Acknowledgeリクエストは、音声機構や画像応答をユーザーに提供するためのものです。この
リクエストを受け取ることができるデバイスは、 Describe Record の I/O 記述子バイトにその
ことを示します。このリクエストは arg を使用しません。
エラー
[EBUSY]
指定された HP-HIL デバイスがすでにオープンされています。
[EFAULT]
引き数をシステムコールに適用したときに不正なアドレスが検出されました。
[EINTR]
open(2), read(2), または、 ioctl(2) システムコールがシグナルによって中断されました。
[EINVAL]
不正なパラメータが ioctl(2) によって検出されました。
[ENXIO]
指定されたアドレスにデバイスが存在しません。後の「警告」を参照してください。
[EIO]
ioctl(2) システムコールを実行中に、ハードウェアかソフトウェアのエラーが起こりました。
[ENODEV]
write(2) は、 HP-HIL デバイスでは実現されていません。
警告
電源異常から回復するため、リンクを再構築中にデバイスにアクセスしようとすると、 ENXIO エラーが
open(2) および ioctl(2) によって返されます。
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-59
hil(7)
hil(7)
hil では、デバイスが ioctl(2) リクエストを実行しているかどうかを検出することはできません。
HP-HIL デバイスは、 HILER1, HILER2, または、 HILDKR リクエストをサポートしているかどうかを示す使用
可能なステータスビットを持ちません。
著者
hil は、HP社で開発されました。
ファイル
/dev/hil[1-7]
/dev/hil_∗.[1-7]
参照
close(2), errno(2), fcntl(2), ioctl(2), open(2), read(2), select(2), signal(5), hilkbd(7), termio(7)
HP-HIL のハードウェアおよびソフトウェア一般についての詳細は、「HP-HIL Technical Reference Manual」を
参照してください。
Section 7-60
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
hilkbd(7)
hilkbd(7)
名称
hilkbd − マップされたHP-HILキーボードドライバ
説明
HP-HIL (HP 社のヒューマンインタフェース リンク) はHP 社のパーソナルコンピュータ、ターミナル、または
ワークステーションとその入力デバイスとのインタフェースの標準です。 hilkbd は指定された HP-HIL リンク
上にマップされたすべてのキーボードからの入力に応じます。
hilkbd は ASCII形式の文字ではなく、マップされたキーコードを返します。「生の」キーコードは各キーの押
す動作と離す動作で、それぞれのキーボードタイプで異なっています。 hilkbd は生の入力を HP-UX、パスカル
ワークステーション、 BASIC/UX オペレーティングシステムで扱われるプロトコルに変換します。マップモー
ドからrawモードに移行することによって、キーボードの制御は hilkbd から強制的に hil(7) ドライバに移りま
す。
システムコール
open(2) はキーボードへの排他的アクセスを与えます。キーボードに対する ITE (内部端末エミュレーター)があ
ると、 ITE はキーボードデバイスがクローズされるまでキーボードからの入力を失います。以前にキューに
入ったキーボードデバイスの入力はすべて入力キューからフラッシュされます。
close(2) は、 ITE が存在すればそれにキーボードの制御を返します。まだ読み取られていない入力があっても、
その時にすべて破棄されます。
read(2) は、次のようなタイムスタンプ付きのパケットにして、キーボードからのデータを返します。
unsigned char time_stamp[4];
unsigned char status;
unsigned char data;
time_stamp は、 4バイトまたはそれ以上の整数データ型に変換されると、過去の任意の時点(例えば、システム
スタートアップ時)からの時間を示します。この時点がパケット間で変化することはありませんが、電源障害が
起こっていた時間を数えられる可能性があります。時間は10ミリ秒単位です。
status バイトは、キーボードの Shift キーおよび Ctrl キーの状態を次のようなコードに組みます。
0x8X
shiftとcontrol
0x9X
controlのみ
0xAX
shiftのみ
0xBX
shiftもcontrolも押されていない
data バイトには、実際のキー入力が入っています。
ファイルステータス フラグ O_NDELAY がセットされている場合、 read(2) は使用可能なデータがなければブ
ロックしないで 0 を戻します。 HP-HIL キーボード上の read(2) システムコールは「時間がかかる」と考えられ
ます。すなわち捕捉したシグナル( signal(2) を参照)によって中断される可能性があります。
hilkbd では write(2) はサポートされていません。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-61
hilkbd(7)
hilkbd(7)
select(2) は、 hilkbd デバイスからの読取りの入力をポールするために使用されます。書出しあるいは例外条件
のための select(2) では、必ずそのビットマスク中に偽であることを示す値が返されます。
ioctl(2) は、デバイスに対する特別な操作を行うために使用されます。 ioctl(2) システムコールは次の形式で
す。
int ioctl(int fildes, int request, char ∗arg);
次の hilkbd リクエストコードが <sys/hilioctl.h> で定義されています。
KBD_READ_CONFIG
設定コードを読み取ります。
このリクエストは、 arg で指される char 変数に 1バイトの設定コードを返します。これには
KBD_IDCODE_MASK で定義されている、キーボード識別コードを特定するフィールドが含まれ
ます。このフィールドの取り得る値はヘッダファイルで定義されていて、この識別コードは言
語コードの解釈に影響を与えます。設定コード中の他のフィールドは現在未定義です。
KBD_READ_LANGUAGE
言語コードを読み取ります。
このリクエストは、 arg で指される char 変数に、キーボードから読み取ったように、 1バイ
トの言語コードを返します。 2つ以上のキーボードがある場合、言語はリンク上の最初のキー
ボードから取られます。言語コードの解釈は、設定コード内のキーボード識別フィールドに影
響されます。
KBD_STATUS
キーボードステータス レジスタを読み取ります。
このリクエストは、 arg で指される char 変数に、シフトキーとコントロールキーの状態を示
すビットフラグを含む、次のような 1バイトの値を返します。
KBD_STAT_LEFTSHIFT
左のシフトキーは押されていない
KBD_STAT_RIGHTSHIFT
右のシフトキーは押されていない
KBD_STAT_SHIFT
どちらのシフトキーも押されていない
KBD_STAT_CTRL
コントロールキーは押されていない
その他のビットは未定義です。
KBD_REPEAT_RATE
キーボードのオートリピートレートを設定します。
arg で指される1バイトの値は、リピートの周期を表す10ミリ秒単位の負の値です。リピート
レートは入力が繰り返される間隔です。パラメータが0の場合、オートリピートは使用不能に
なります。
Section 7-62
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
hilkbd(7)
hilkbd(7)
KBD_REPEAT_DELAY
キーボードのオートリピートのディレイを設定します。
arg で指される1バイトの値は、リピートディレイを表す10ミリ秒単位の負の値です。
KBD_BEEP
ビープ音を発生させます。
arg で指される1バイトの値は、 0から KBD_MAXVOLUME の範囲でビープ音の大きさを指定し
ます。 KBD_MAXVOLUME より少ない不連続のボリュームレベルしか持たないインプリメン
テーションでは、パラメータを小さい方の範囲に調整します。
エラー
[EINVAL]
正しくないパラメータが ioctl(2) で検出されました。
[EINTR]
read(2) システムコールの間にシグナルを捕らえました。
[ENXIO]
マイナー番号で指定された HP-HIL リンク上にキーボードが存在しません。
[ENODEV]
hilkbd に対して write(2) を使用しようとしました。
[EBUSY]
デバイスはすでにオープンされています。
著者
hilkbd はHPで開発されました。
ファイル
/dev/hilkbd∗
参照
termio(7), hil(7), mknod(1M), select(2), signal(2)
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-63
inet(7F)
inet(7F)
名称
inet − インターネットプロトコル ファミリ
構文
#include <sys/types.h>
#include <netinet/in.h>
説明
インターネットプロトコル ファミリは、 Internet Protocol (IP) ネットワーク階層の一番上層に位置するプロト
コ ル の 集 合 で、 イ ン ター ネッ ト ア ド レ ス フォー マッ ト を 利 用 し ま す。 イ ン ター ネッ ト ファ ミ リ は、
SOCK_STREAMソケットタイプおよびSOCK_DGRAMソケットタイプをサポートしています。
Addressing
インターネットアドレスの本体は4バイトあります。インクルードファイル <netinet/in.h> では、このアドレス
を構造体 struct in_addr として定義しています。
インターネットプロトコル ファミリにバインドされたソケットは、 struct sockaddr_in と呼ばれるアドレッシ
ングのための構造体を利用します。 struct sockaddr を指すポインタが必要となるシステムコールでは、いつで
もこの構造体を指すポインタが使用できます。
この構造体には3つの重要なフィールドがあります。最初は sin_family で、これはAF_INETに設定されていな
ければなりません。次は sin_port で、これは目的のホストで使用されるポート番号を指定します。 3 番目は
sin_addr で、これは struct in_addr 型で、目的のホストのアドレスを指定します。
Protocols
インターネットプロトコル ファミリは、 IP ネットワークプロトコル、インターネット コントロールメッセー
ジ プロトコル (ICMP)、転送コントロールプロトコル (TCP)、およびユーザーデータグラム プロトコル (UDP) か
ら構成されています。 TCP は SOCK_STREAM ソケットタイプをサポートするために使用され、 UDP は
SOCK_DGRAM ソケットタイプをサポートするために使用されます。 ICMP メッセージプロトコルと IP ネッ
トワークプロトコルは、直接利用できません。
ローカル ポートアドレスは、 TCP ソケットと UDP ソケットで独立したドメインから選択されます。したがっ
て、例えば TCP ソケットを作成し、それをローカルポート番号10000 にバインドして、 UDP ソケットを作成
し、これをローカルポート番号10000に同時にバインドしても、それらが接続することはできません。
1-1023の範囲のポート番号はスーパーユーザーのみが使用するため予約されています。スーパーユーザーでは
ないユーザーがこの範囲のポート番号にバインドしようとすると、それは失敗しエラー結果が戻されます。
著者
inet はカリフォルニア大学バークレー校で開発されました。
参照
tcp(7P), udp(7P).
Section 7-64
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
iomap(7)
iomap(7)
名称
iomap − 物理的I/Oアドレスのマッピング
構文
#include <sys/iomap.h>
説明
iomap メカニズムは物理的I/Oアドレスからユーザープロセスのアドレス空間へのマッピング(つまりダイレク
トアクセス ) を可能にします。 PA-RISC マシーンでは物理的 I/O アドレス空間は、 0xf0000000 から始まり
0xffffffff まで続いています。
iomap デバイスの特殊(デバイス)ファイルは、動的なメジャー番号アロケーション方式を使ったキャラクタ型
特殊ファイルです。
iomap デバイスのマイナー番号は、次のような形式をしています。
0xAAAASM
物理I/O アドレスは、 0xF とともに0xAAAA を前につけ、0x000 を後ろにつける( これにより、I/O アドレスを
ページ境界に並べます)ことによって形成されます。マップされる領域はM*(2ˆS) 4Kページとなります。たとえ
ば、 0xf4000000 から始まって64MBを占有しているデバイスのマイナー番号は、 0x4000e1 になります。
iomap ドライバーは、ファイル /stand/system 、再構築されたカーネル、および iomap を最初に使うのに先
立ってリブートされたシステムに明示的に追加する必要があります。
I/Oスペースは、デバイス特殊ファイルに対する実際のパーミッションに関わらず、常に、読み出し書き込みの
両方のアクセス権をもってマップされます。
複数のプロセスが、同時に1つの iomap デバイスをオープンしてマップすることが可能です。同時にアクセス
しようとする場合の責任はプロセスにあります。
同じI/Oスペースをマップするための iomap への続く呼び出しは、最初のマッピングと同一でなければなりま
せん。「同一のマッピング」とは同じアドレスとサイズを持つものです。
さらに、プロセスは iomap がマップした I/Oスペースをカーネルドライバーと共有し得ることに注意してくだ
さい。しかし、これが起こり得るのは、ドライバーがI/Oスペースにおいて、ユーザー読み出し/書き込みアク
セス権で、専有ドライバーI/Oマッピングを使用しようとした場合のみです。カーネル読み出し/書き込みアク
セス権でドライバーがマップした I/O スペースは、 iomap 使用プロセスと同時にマップすることはできませ
ん。
iomap ドライバでは、 read() あるいは write() システムコールはサポートされていません。
ioctl() 関数は、 iomap デバイスを制御するために使用されます。以降の ioctl() リクエストが <iomap.h> で定義
されています。
IOMAPMAP
iomap デバイスを、 ioctl() の (void **) 型の第3 引き数のポインターで指定され
た位置にあるユーザーアドレス空間にマップします。引き数がnullポインターを
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-65
iomap(7)
iomap(7)
持つ変数を指す場合、システムにより適当なアドレスが選択されます。それか
ら ioctl() は、デバイスがマップされているユーザーアドレスを返し、それを第3
引き数で指されているアドレスに格納します(後述の「例」を参照)。複数のプロ
セスが、同時に同じ iomap デバイスをマップすることが可能です。
IOMAPUNMAP
iomap デバイスをユーザーアドレス空間からアンマップします。
close() は iomap デバイスを示すファイル記述子をシャットダウンします。 closeが直前のシステム全体にわた
るデバイスのオープンに対するものならば、 iomap デバイスもまたユーザーアドレス空間からアンマップされ
ます。さもなければ、それはユーザーアドレス空間にマップされたまま残されます (前述の IOMAPUNMAP を
参照)。
警告
iomap デバイスを作成したり使用したりするときには十分に注意してください。 I/O デバイスや RAM への不正
なアクセスは、システムクラッシュにつながる可能性があります。
エラー
[EINVAL]
アドレスフィールドが範囲外です。または ioctl リクエストが正しくありません。
[ENOMEM]
マッピングのために十分なメモリが割り当てられませんでした。
デバイスはすでにマップされており、このマッピングは最初のマッピングと同一(同じアドレ
[EBUSY]
ス、サイズ、アクセス権を持つもの)です。
[ENODEV]
readとwriteコールはサポートされていません。
[ENXIO]
マイナー番号で指定されたアドレスにそのようなデバイスがありません。
[ENOSPC]
マッピングに必要とされるリソースが割り当てられませんでした。
このデバイスタイプには不適当な ioctl リクエストです。 fildes は、 iomap デバイスファイル
[ENOTTY]
のファイル記述子ではありません。
例
次のコードのフラグメントについて考えてみてください。
#include <sys/iomap.h>
...
int fildes;
void *addr;
...
addr = REQUESTED_ADDRESS;
(void) ioctl(fildes, IOMAPMAP, &addr);
(void) printf("actual address = 0x%x\n", addr);
Section 7-66
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
iomap(7)
iomap(7)
ここで fildes はデバイス特殊ファイルの開いているファイル記述子で、 REQUESTED_ADDRESS は最初にプ
ログラムで要求されたアドレスです。
addr がnull ポインターである場合、システムは適切なアドレスを選択し、それから選択したアドレスを addr
に返します。
addr の値がnullポインターではない場合、それはメモリを割り当てるための指定されたアドレスとして使用さ
れます。指定されたアドレスが使用不可能な場合、エラーが返されます( 「エラー」を参照)。
参照
mknod(1M)
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-67
IP(7P)
IP(7P)
名称
IP − インターネットプロトコル
構文
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AF_INET, SOCK_DGRAM, 0);
説明
IP は、インターネットプロトコル ファミリによって使用されるネットワーク階層です。これはTCPおよびUDP
メッセージを、ネットワークインタフェースで転送するデータグラムにカプセル化します。通常、アプリケー
ションはIPに直接インタフェースする必要はありません。ただし、一定のマルチキャストソケットオプション
はUDPソケットを介して IPPROTO_IP プロトコルレベルにオプションを渡すことによって制御され、また IP
タイプのサービスはTCPまたはUDPソケットのいずれかを介して IPPROTO_IP プロトコルレベルにオプショ
ンを渡すことによって制御されます。 (getsockopt(2) マンページを参照してください。)
以下のソケットオプションは、インクルードファイル <netinet/in.h> 内で定義されています。 optval パラメー
タが指す変数のタイプが、かっこ内に示されています。データタイプ struct ip_mreq および struct in_addr は
<netinet/in.h> 内で定義されています。
IP_TOS
(unsigned int) サービスのIP タイプを設定します。 optval に指定できる値
は、高信頼性は4、高スループットは8、低遅延は16です。その他の値を指
定してもエラーにはなりませんが、予期できない結果が起こることがあり
ます。デフォルト: 0。
IP_ADD_MEMBERSHIP
(struct ip_mreq) システムがマルチキャストグループに加わるよう要求しま
す。
IP_DROP_MEMBERSHIP (struct ip_mreq) システムはマルチキャストグループから離れることができ
ます。
IP_MULTICAST_IF
(struct in_addr) このソケットを介してマルチキャストデータグラムを送信
する場合に使用する、デフォルト以外のネットワークインタフェースを指
定します。デフォルト : マルチキャストデータグラムは、特定のマルチ
キャストグループ、デフォルトのマルチキャスト経路、またはデフォルト
の経路に関連づけられたインタフェースから送信されます。
IP_MULTICAST_LOOP
(unsigned char; boolean) このソケットを介して送信されるマルチキャスト
データグラムのIP階層内のループバックを、使用可能または使用不能にし
ます。 optval が指す変数の値は、ゼロ (使用不能) またはゼロ以外 (使用可
能) です。このオプションは互換性を保つためだけに用意されているもの
です。通常、システムがグループに加わると、マルチキャストデータグラ
ムは常にループバックされます。この後の 「制約」の項を参照してくださ
Section 7-68
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
IP(7P)
IP(7P)
い。デフォルト: 使用可能。
IP_MULTICAST_TTL
(unsigned char) このソケットを介して送信されるマルチキャストデータグ
ラムに、存続期間を指定します。 optval が指す変数の値には、0から255ま
でを指定することができます。デフォルト: 1。
IP_ADD_MEMBERSHIP は、システムが指定されたインタフェース上のマルチキャストグループに加わるよ
う、要求します。次に例を示します。
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = net_addr("224.1.2.3");
mreq.imr_interface.s_addr = INADDR_ANY;
setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
システムは、インタフェースの接続先であるネットワーク上で送信されるマルチキャストデータグラムを受信
す る た め に は、 そ の イ ン タ フェー ス 上 の グ ルー プ に 加 わ ら な け れ ば な り ま せ ん。 imr_interface が
INADDR_ANY に設定されている場合、システムは経路指定構成に基づいて、そのグループのデータグラムの
送信元となるインタフェース上の指定されたグループに加わります。それ以外の場合には、 imr_interface が
ロー カ ル イ ン タ フェー ス の IP ア ド レ ス に な り ま す。 ア プ リ ケー ショ ン は 各 ソ ケッ ト 上 で、 最 大
IP_MAX_MEMBERSHIPS 個のマルチキャストグループに加わることができます。 IP_MAX_MEMBERSHIPS
は <netinet/in.h> 内で定義されています。ただし各ネットワークインタフェースでは、インタフェースリソー
スに限界があるためや、システムがリンク階層マルチキャストアドレスを使用するために、システム全体に設
定されたこれより小さい限界値が強制されることがあります。
アプリケーションはまた、あて先ポート番号に送信されるデータグラムを受信するためには、そのポート番号
にもバインドしなければなりません。アプリケーションがアドレス INADDR_ANY にバインドした場合、その
ポート番号に送信されるすべてのデータグラムを受信することができます。アプリケーションが1つのマルチ
キャストグループアドレスにバインドした場合、そのグループおよびポート番号に送信されるデータグラムだ
けを受信することができます。マルチキャストグループにデータグラムを送信するためには、マルチキャスト
グループに加わる必要はありません。
IP_DROP_MEMBERSHIP を使用すると、システムはマルチキャストグループを離れることができます。次に
例を示します。
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = net_addr("224.1.2.3");
mreq.imr_interface.s_addr = INADDR_ANY;
setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
システムは、グループに加わった最後のソケットがクローズされるか、グループのメンバー権を失うまで、マ
ルチキャストグループのメンバーのままになっています。
IP_MULTICAST_IF は、このソケットを介してマルチキャストデータグラムを送信する場合に使用するローカ
ルネットワーク インタフェースを指定します。次に例を示します。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-69
IP(7P)
IP(7P)
#include <arpa/inet.h>
struct in_addr addr;
addr.s_addr = inet_addr("192.1.2.3");
setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr));
通常、アプリケーションはインタフェースを指定する必要はありません。デフォルトでは、マルチキャスト
データグラムは経路指定構成によって指定されているインタフェースから送られます。つまり、特定のマルチ
キャストグループ、デフォルトのマルチキャスト経路、またはデフォルトの経路と関連づけられたインタ
フェースです。 addr がアドレス INADDR_ANY に設定されている場合には、デフォルトのインタフェースが
選択されます。それ以外の場合には、 addr はローカルインタフェースのIPアドレスになります。
IP_MULTICAST_LOOP は、このソケットを介して送信されたマルチキャストデータグラムのループバック
を、使用可能または使用不能にします。次に例を示します。
unsigned char loop = 1;
setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
optval パラメータのタイプは、 int ではなく unsigned char であることに注意してください。これはブール ソ
ケットオプションに共通です。このオプションは互換性を保つためにのみ用意されているものです。通常、シ
ステムが加わったグループにマルチキャストデータグラムが送信されると、データグラムのコピーが常にルー
プバックされ、あて先ポートにバインドされたアプリケーションに配送されます。下記の 「制約」の項を参照
してください。
IP_MULTICAST_TTL は、このソケットを介して送信されるマルチキャストデータグラムの存続期間の値を設
定することにより、マルチキャストの有効範囲を制御します。次に例を示します。
unsigned char ttl = 64;
setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
optval パラメータのタイプは、 int ではなく unsigned char であることに注意してください。これはソケットオ
プションに共通です。デフォルトでは、存続期間フィールド(TTL) は1 で、マルチキャストをローカルネット
ワークに限定します。TTLが0の場合には、マルチキャストはローカルシステム (ループバック) に限定されま
す。TTLが2の場合には、マルチキャストを最大1つのゲートウェイを介してフォワードすることができ、以下
も同様です。マルチキャストデータグラムは、ローカルおよび中間ネットワーク上に特殊なマルチキャスト
ルーターがある場合にのみ、他のネットワークにフォワードすることができます。
制約
IP_MULTICAST_LOOP の動作は、ネットワークドライバーおよびインタフェースカードによって異なりま
す。通常、 IP_MULTICAST_LOOP が0 に設定されていてもループバックを使用不能にすることはできませ
ん。ドライバーまたはネットワークインタフェースで行われるためです。ただし、送信インタフェースが lo0
(127.0.0.1)の場合、または IP_MULTICAST_TTL が0に設定されている場合には、 IP_MULTICAST_LOOP を
0に設定するとソケットを介して送信されるマルチキャストデータグラムのループバックが使用不能になりま
す。
Section 7-70
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
IP(7P)
IP(7P)
エラー
setsockopt() または getsockopt() への呼び出しが失敗に終わると、以下のエラーの1つが戻されることがありま
す。
[EADDRINUSE]
指定されているマルチキャストグループは、すでにソケットに加わっていま
す。
[EADDRNOTAVAIL]
指定されているIPアドレスがローカルインタフェースのアドレスではない、
指定されたマルチキャストアドレスに経路がない、または指定されたマルチ
キャストグループに加わっていないのいずれかです。
[EINVAL]
パラメータ level が IPPROTO_IP ではない、 optval がヌルアドレス、または
指定されたマルチキャストアドレスが有効ではないのいずれかです。
[ENOBUFS]
[ENOPROTOOPT]
内部システムデータ構造に使用可能なメモリが不足しています。
パラメータ optname が IPPROTO_IP レベルに対する有効なソケットオプ
ションではありません。
[EOPNOTSUPP]
[ETOOMANYREFS]
ソケットタイプが SOCK_DGRAM ではありません。
1 つのソケットで IP_MAX_MEMBERSHIPS 個を超えるマルチキャストグ
ループに加わろうとしました。
著者
IPへのソケットインタフェースは、カリフォルニア大学バークレー校によって開発されました。マルチキャス
ト拡張機能は、スタンフォード大学によって開発されました。
参照
bind(2), getsockopt(2), recv(2), send(2), socket(2), inet(7F)
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-71
IPv6(7P)
IPv6(7P)
名称
IPv6、ipv6、ip6 − インターネットプロトコル バージョン6
構文
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AF_INET6, SOCK_DGRAM, 0);
s = socket(AF_INET6, SOCK_STREAM, 0);
説明
IPv6 は、現行のインターネットプロトコル バージョン4 (IPv4) の後継として設計された次世代ネットワーク
層プロトコルです。TCP、UDP、および ICMPv6 のパケット伝送サービスを提供します。
IPv6 は、アドレス空間の拡張、ヘッダーフォーマットの簡素化、QoS サポートとの統合、およびセキュリティ
の義務化など、IPv4 と比較して大きな利点を備えています。また、IPv6 ではオプションでインターネット層の
情報を IPv6 ヘッダーと上位層ヘッダーの間に位置する拡張ヘッダーと呼ばれる別個のヘッダー内にエンコード
することもできます。現時点でサポートされている拡張ヘッダーは、ホップバイホップオプションヘッダー、
宛先オプションヘッダー、フラグメントヘッダー、および経路指定 (タイプ0) ヘッダーです。 IPv6 パケット
は、0個、1個、またはそれ以上の拡張ヘッダーを持ち、それぞれが直前のヘッダーの次ヘッダーフィールド
によって識別されます。
IPv6 では、アドレスサイズが 32 ビットから 128 ビットに拡張され、 16 進数とコロンを組み合わせて
x:x:x:x:x:x:x:x のように表記します。ここで、 x は、アドレスを 16 ビットごとに区切った8個の 16 進数で表
したものです。例えば、 fedc:83ff:fef6:417a:210:83ff:fef6:3dc0 のようになります。
IPv6 のアドレスには、 ユニキャスト 、 エニーキャスト 、および マルチキャストの3つの種類があります。
•
ユニキャストアドレスは、単一のインタフェースの識別子です。ユニキャストアドレスに送信され
たパケットは、そのアドレスによって識別されるインタフェースに伝送されます。
•
エニーキャストアドレスは、複数のインタフェースのセットの識別子です。エニーキャストアドレ
スに送信されたパケットは、そのアドレスによって識別されるインタフェースの1つに伝送されま
す。
•
マルチキャストアドレスは、複数のインタフェースのセットの識別子です。マルチキャストアドレ
スに送信されたパケットは、そのアドレスによって識別されるすべてのインタフェースに伝送され
ます。
IPv6 では、ブロードキャストアドレスはなくなり、その機能はマルチキャストアドレスによって置
き換えられています。
すべての IPv6 アドレスには、 スコープが関連付けられます。スコープとは、1つのインタフェースまたは複
数のインタフェースのセットに対する一意の識別子として使用されるトポロジーの範囲です。
ユニキャストアドレスには、リンクローカル、サイトローカル、グローバルの3つのスコープが定義されてい
Section 7-72
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
IPv6(7P)
IPv6(7P)
ます。
•
リンクローカルアドレスは、同一リンク内のインタフェースを一意に識別するもので、固定プレ
フィックスは fe80::/10 になります。例えば、 fe80::210:84c0:ef6f:cd30 などです。
•
サイトローカルアドレスは、同一サイト内でのみインタフェースを一意に識別するもので、固定プ
レフィックスは fec0::/10 になります。例えば、 fec0::210:84c0:ef6f:cd30 などです。
•
グローバルアドレスは、インターネット全体においてインタフェースを一意に識別します。
ユニキャストアドレスには、下位 32 ビットに IPv4 アドレスが埋め込まれた特殊なものが2つあります。
•
1つ目は、IPv4 互換 IPv6 アドレスと呼ばれ、 0:0:0:0:0:0:d.d.d.d というフォーマットになります。
こ の タ イ プ の ア ド レ ス は、 自 動 IPv6-over-IPv4 ト ン ネ リ ン グ を 行 う た め に デュ ア ル ス タッ ク
(IPv4/IPv6) ノード上で使用されます。自動 IPv6-over-IPv4 トンネリングでは、IPv4 トンネル エンド
ポイント アドレスは、トンネルしようとする IPv6 パケットの IPv4 互換宛先アドレス内に埋め込ま
れる IPv4 アドレスから決定されます。
•
2つ目は、IPv4 にマップされた IPv6 アドレスと呼ばれ、 0:0:0:0:0:ffff:d.d.d.d というフォーマット
になります。このアドレスを使用すれば、IPv6 アプリケーションを IPv4 アプリケーションと相互
運用することができます。アプリケーションは、指定したホストが IPv4 アドレスしか持っていな
い場合、 getaddrinfo() (getaddrinfo(3N) を参照してください) を使用してこのアドレスを自動的に生
成することができます。
IPv6 ソケットオプション
IPv6 には新しいソケットオプションが定義され、拡張ヘッダーを送受信したり、カーネルとアプリケーション
の間でその他のオプション情報を交換したりすることができるようになりました。このようなオプションは、
IPPROTO_IPV6 プロトコルレベルでサポートされています。 optval パラメータが指す変数のタイプを括弧内
に示します。
IPV6_UNICAST_HOPS
(整数) 発信するユニキャストパケットで使用されるホップ制限を設定また
は取得します。 setsockopt() (setsockopt(2) を参照してください) を使用して
このオプションを設定すると、指定した新しいオプション値は、その後に
そのソケットを使用して送信するすべてのユニキャストパケットのホップ
制限として使用されます。有効な値の範囲は 0∼255 (0 と 255 も使用でき
ます) で、デフォルト値は 64 です。例えば、以下のように使用します。
int hoplimit = 50;
setsockopt(s, IPPROTO_IPV6, IPV6_UNICAST_HOPS,
&hoplimit, sizeof(hoplimit));
このオプションを getsockopt() (getsockopt(2) を参照してください) ととも
に使用すると、システムがその後にそのソケットを使用して送信するユニ
キャストパケットのホップ制限値を決定することもできます。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-73
IPv6(7P)
IPv6(7P)
IPV6_MULTICAST_HOPS (整数) 発信するマルチキャストパケットで使用されるホップ制限を設定ま
たは取得します。このオプションを設定すると、指定した新しいオプショ
ン値は、その後にそのソケットを使用して送信するすべてのマルチキャス
トパケットのホップ制限として使用されます。有効な値の範囲は 0 ∼255
(0 と 255 も使用できます) で、デフォルト値は 1 です。
IPV6_MULTICAST_IF
(整数) 送信するマルチキャストパケットで使用するインタフェースを設定
します。オプション値は選択した送信インタフェースのインデックスで
す。例えば、以下のように使用します。
unsigned int index;
index = if_nametoindex("lan0");
setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_IF,
&index, sizeof(index));
IPV6_MULTICAST_LOOP
(論理値) このソケットを使用して送信されるマルチキャストデータグラム
について、IP 層におけるループバックを有効または無効にします。 optval
が指す変数の値は、ゼロ (無効)、または非ゼロ (有効) のいずれかです。
デフォルトは、非ゼロ (有効) です。
IPV6_JOIN_GROUP
(構造体 ipv6_mreq) 指定したローカルインタフェースをマルチキャストグ
ループに参加させます。参加するグループの IPv6 マルチキャストアドレ
スと、参加させたいインタフェースのインデックスは、 構造体 ipv6_mreq
を使用して指定する必要があります。この構造体は、 <netinet/in6.h> で以
下のように定義されています。
struct ipv6_mreq {
struct in6_addr ipv6mr_multiaddr;
/* IPv6 multicast addr */
unsigned int ipv6mr_interface;
/* interface index */
};
インタフェース インデックスに0を指定すると、デフォルトのマルチキャ
ストインタフェースが使用されます。
IPV6_LEAVE_GROUP
(構造体 ipv6_mreq) 指定したローカルインタフェースをマルチキャストグ
ループから外します。外れようとしているグループの IPv6 マルチキャス
トアドレスとインタフェース インデックスは、 構造体 ipv6_mreq を使用
して指定します。インタフェース インデックスは、グループに参加すると
きに使用したインデックスと一致していなければなりません。インデック
スを0にすると、デフォルトのインタフェースが指定されます。
Section 7-74
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
IPv6(7P)
IPv6(7P)
IPV6_CHECKSUM
(整数) このオプションが設定されているとき、カーネルは発信するパケッ
トのチェックサムを計算し、受信するパケットのチェックサムを照合しま
す。オプション値は、ユーザーデータ内のチェックサムの位置へのバイト
オフセットです。 IPPROTO_ICMPV6 ではチェックサムの計算が必須な
ので、 IPPROTO_ICMPV6 にはこのオプションは無効です。デフォルト
値は、-1 (IPPROTO_ICMPV6 以外のプロトコルではチェックサムは計算
および照合されない) です。
IPV6_RECVPKTINFO
(論理値) このオプションが有効になっているとき、 recvmsg() によって付
加データとして、 PKTINFO (宛先 IPv6 アドレスおよび受信インタフェー
スインデックス) が返されます (recvmsg(2) を参照してください)。この情
報は、 構造体 in6_pktinfo で返されます。この構造体は、 <netinet/in6.h>
で以下のように定義されます。
struct in6_pktinfo {
struct in6_addr ipi6_addr;
uint32_t
ipi6_ifindex;
};
デフォルトではこのオプションは無効です。
IPV6_RECVHOPLIMIT
(論理値) このオプションが有効になっているとき、 recvmsg() によって付
加データとして、受信パケットのホップ制限が返されます。例えば、以下
のように使用します。
int on = 1;
setsockopt(s, IPPROTO_IPV6, IPV6_RECVHOPLIMIT,
&on, sizeof(on));
デフォルトではこのオプションは無効です。
IPV6_RECVDSTOPTS
(論理値) このオプションが有効になっているとき、 recvmsg() によって付
加データとして、受信パケットの宛先オプション (設定されている場合) が
返されます。デフォルトではこのオプションは無効です。
IPV6_RECVHOPOPTS
(論理値) このオプションが有効になっているとき、 recvmsg() によって付
加データとして、受信パケットのホップバイホップオプション ( 設定され
ている場合) が返されます。デフォルトではこのオプションは無効です。
IPV6_RECVRTHDR
( 整数、 論理値) このオプションが有効になっているとき、 recvmsg() に
よって付加データとして、受信パケットの経路指定オプション (設定され
ている場合) が返されます。デフォルトではこのオプションは無効です。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-75
IPv6(7P)
IPv6(7P)
IPV6_RECVRTHDRDSTOPTS
( 整数、 論理値) このオプションが有効になっているとき、 recvmsg() に
よって付加データとして、経路指定ヘッダーの前に現れる受信パケットの
宛先オプション (設定されている場合) が返されます。デフォルトではこの
オプションは無効です。
以下の7つのソケットオプションは、 setsockopt() とともに使用することも、 sendmsg() への付加データ内の
オプション名として使用することもできます (sendmsg(2) を参照してください)。
IPV6_PKTINFO
(構造体 in6_pktinfo) 送信パケットの送信元アドレスおよびインタフェース
インデックスを設定するために使用します。
IPV6_HOPLIMIT
(整数) 送信パケットのホップ制限を設定するために使用します。このホッ
プ制限は、1回の操作に対してのみ有効です。すべてのユニキャストおよ
びマルチキャスト IPv6 パケットのホップ制限を設定するには、それぞれ
IPV6_UNICAST_HOPS または IPV6_MULTICAST_HOPS を使用してくだ
さい。
IPV6_NEXTHOP
(構造体 sockaddr_in6) 次ホップアドレスを設定するために使用します。こ
のアドレスによって識別されるノードは、送信ホストの近隣でなくてはな
り ま せ ん。 こ の ア ド レ ス が 宛 先 IPv6 ア ド レ ス と 同 じ で あ る 場 合、
SO_DONTROUTE ソケットオプションと同等になります。
IPV6_RTHDR
(可変長) 送信パケットの経路指定ヘッダーを指定するために使用します。
現時点ではタイプ0の経路指定ヘッダーのみがサポートされています。
IPV6_DSTOPTS
(可変長) 以降の IPv6 パケットで送信する1つまたは複数の宛先オプショ
ンを指定するために使用します。
IPV6_HOPOPTS
( 可変長 ) 以降の IPv6 パケットで送信する1つまたは複数のホップバイ
ホップオプションを指定するために使用します。
IPV6_RTHDRDSTOPTS
(可変長) 経路指定ヘッダーの前に置く1つまたは複数の宛先オプションを
指定するために使用します。このオプションは、経路指定ヘッダーが同時
に指定されていない限り、送信時に無視されます。
IPv6 では、ICMP の拡張バージョンである ICMPv6 を使用して、パケットの処理中に発生したエラーをレポー
トしたり、(ping のように) 診断を行ったりします。 ICMPv6 は IPv6 の一部であり、次ヘッダー値 58 が割り当
てられています。
すべてのオプションと関連する構造体は <netinet/in6.h> で定義されており、 <netinet/in.h> によって自動的に
インクルードされるので、アプリケーション側でこのヘッダーファイルを明示的にインクルードする必要はあ
りません。
Section 7-76
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
IPv6(7P)
IPv6(7P)
エラー
ソケットの動作が失敗した場合、次のいずれかのエラーが返されます。
[EADDRINUSE]
指定されたマルチキャストグループにはすでに参加しています。
[EADDRNOTAVAIL]
指定された IPv6 アドレスは、ローカルインタフェースアドレスでない
か、指定されたマルチキャストアドレスへの経路がないか、指定されたマ
ルチキャストグループに参加していません。
[EINVAL]
パラメータ ’level’ が IPPROTO_IPV6 でないか、 optval が NULL アドレス
であるか、指定されたマルチキャストアドレスが無効であるか、あるい
は、指定されたホップ制限が 0 <= x <= 255 の範囲外です。
[ENOBUFS]
[ENOPROTOOPT]
内部のシステムデータ構造に使用するメモリーが不十分です。
パラメータ optname は、 IPPROTO_IPV6 レベルの有効なソケットオプ
ションではありません。
著者
IP へのソケットインタフェースは、カリフォルニア大学バークレー校で開発されました。
参照
bind(2), getsockopt(2), recv(2), send(2), socket(2), inet6_opt_init(3N), inet6_rth_space(3N), inet(7F), ndp(7P)
RFC 2460 Internet Protocol Version 6
RFC 2553 Basic Socket Interface Extensions for IPv6
RFC 2292 Advanced Socket Interface Extensions for IPv6
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-77
ipmi(7)
ipmi(7)
名称
ipmi − Intelligent Platform Management Interface (IPMI) ドライバ
構文
#include <sys/ipmi.h>
説明
/dev/ipmi ドライバを使用すると、ユーザープロセスから BMC (Baseboard Management Controller) システムメッ
セージインタフェースに IPMI メッセージを送信することができます。
以下のデータ構造は、IPMI 要求を BMC に送信するために使用するもので、 <sys/ipmi.h> ヘッダーファイル内
に記述されています。
ImbRequest
ImbRequest 構造体は、IPMI 要求内のフィールドを指定するために使用されます。
typedef struct {
BYTE
rsSa;
BYTE
cmd;
BYTE
netFn;
BYTE
rsLun;
BYTE
dataLength;
BYTE
data[1];
} ImbRequest;
rsSa
応答するデバイスのスレーブアドレス (BMC_SA)。
cmd
IPMI コマンドを 16 進数で指定したもの。
netFn
IPMI ネットワーク関数を 16 進数で表したもの。
rsLun
cmd に依存する 16 進数の値。
dataLength
後続のデータフィールドの長さ。
data
要求データ (存在する場合のみ)。
ImbRequestBuffer
ImbRequestBuffer 構造体は、要求のタイムアウト値を指定するために使用されます。この構造
体には IPMI 要求自体も含まれます。
typedef struct {
DWORD flags;
DWORD timeOut;
ImbRequest req;
} ImbRequestBuffer;
Section 7-78
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
ipmi(7)
ipmi(7)
現在は使用されていません。将来のバージョンで削除される可能性がありま
flags
す。
timeOut
タイムアウトをマイクロ秒で表したもの。
req
可変長の ImbRequest バッファー。
ImbResponseBuffer
ImbResponseBuffer 構造体には、BMC からの応答が含まれます。
typedef struct {
BYTE
cCode;
BYTE
data[1];
} ImbResponseBuffer;
cCode
BMC からの 16 進数の完了コード。
data
完了コード以外の BMC からの応答データ。
ioctl コマンド
BMC に IPMI メッセージを送信するために使用されるコマンドは以下のとおりです。
IOCTL_IMB_SEND_MESSAGE
64 ビットのユーザープロセスから BMC にメッセージを送信しま
す。 arg パラメータは、以下のメンバーを持つ構造体 ipmi_data_t
(<sys/ipmi.h> ヘッダーファイルに定義されています) へのポインタを
指定します。
typedef struct ipmi_data {
caddr_t
InBuffer;
DWORD
InBufferLength;
caddr_t
OutBuffer;
DWORD
OutBufferLength;
DWORD *
caddr_t
int
BytesReturned;
Overlapped;
status;
} ipmi_data_t;
IOCTL_IMB_SEND_MESSAGE_32
32 ビットのユーザープロセスから BMC にメッセージを送信しま
す。 arg パラメータは、以下のメンバーを持つ構造体 ipmi_data_32_t
(<sys/ipmi.h> ヘッダーファイルに定義されています) へのポインタを
指定します。
typedef struct ipmi_data_32 {
ptr32_t
DWORD
ptr32_t
HP-UX 11i Version 2: September 2004
−2−
InBuffer;
InBufferLength;
OutBuffer;
Hewlett-Packard Company
Section 7-79
ipmi(7)
ipmi(7)
DWORD
OutBufferLength;
ptr32_t
BytesReturned;
ptr32_t
int
Overlapped;
status;
} ipmi_data_32_t;
これらの構造体で使用されているフィールドの定義は以下のとおりです。
InBuffer
可変長の ImbRequestBuffer 構造体へのポインタ。
InBufferLength
InBuffer 内の関連するデータの大きさ。
OutBuffer
可変長の ImbResponseBuffer 構造体へのポインタ。
OutBufferLength
OutBuffer 内の関連するデータの大きさ。
BytesReturned
出力データ長を戻す整数値へのポインタ。
Overlapped
現在は使用されていません。
status
処理が正常終了すれば、 status は 0 になります。正常終了しなかった場合
は、status にはドライバにとって内部的に既知である値が含まれます。この
フィールドは将来のリリースで変更される可能性があります。
処理を正常終了させるには、 ioctl() に対する戻り値および status フィールドは、ゼロでなければなりません。
ioctl() が 0 (ゼロ) を戻しても status が 0 (ゼロ) でない場合は、メッセージは BMC に対して正常に送信されて
いないか、あるいはメッセージは正常に送信されていても戻りデータを正常に受信できていない可能性があり
ます。
処理の状態をより正確に評価するためには、アプリケーションは BMC によって戻された 完了コードをチェッ
クする必要があります。 完了コードの意味については、IPMI の仕様で説明されています。
戻り値
特に指定されていない限り、IPMI の ioctl() コマンドは正常終了時に 0 (ゼロ) の値を戻します。正常終了しな
かった場合は -1 の値を戻します。
エラー
多数のプロセスが BMC へアクセスしているために、呼び出し元が BMC にアクセスする
[EBUSY]
ことができませんでした。
[ETIMEDOUT]
呼び出し元は BMC にアクセスできましたが、 ImbRequestBuffer 内の timeOut の値が小さ
すぎるか、または BMC がビジーであるため、タイムアウトが発生しました。
[E2BIG]
呼び出し元は BMC にアクセスできましたが、 ImbRequestBuffer 内の timeOut の値が小さ
すぎるか、または BMC がビジーであるため、タイムアウトが発生しました。
[EFAULT]
ipmi_data_t または ipmi_data_32_t 内で InBuffer または OutBuffer がポイントするバッ
ファーが無効です。
Section 7-80
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
ipmi(7)
ipmi(7)
[ENXIO]
IPMI ドライバは初期化中にデバイスのアタッチに失敗しました。
[EINVAL]
入力および (または) 出力バッファーの長さが不正です。
[EIO]
内部エラーが発生しました。
例
以下のコードセグメントは、IPMI メッセージ Get SEL Info、NetFn Storage、CMD 0x40 を送信します。これは
IPMI v1.5 仕様のセクション 25.2 です。
struct selinfo {
BYTE
sel_version;
BYTE
num_entry_ls;
BYTE
num_entry_ms;
BYTE
free_space_ls;
BYTE
free_space_ms;
BYTE
add_timestamp[4];
BYTE
erase_timestamp[4];
BYTE
op_support;
};
...
uint32_t bytesreturned;
ipmi_data_t ipmidata;
BYTE requestbuffer[64];
BYTE responsebuffer[64];
ImbRequestBuffer *request = requestbuffer;
ImbResponseBuffer *response = responsebuffer;
struct selinfo *selinfo;
request->flags = 0;
request->timeOut = 1000000;
request->req.rsSa = BMC_SA;
request->req.cmd = 0x40;
request->req.netFn = 0x0A;
request->req.rsLun = 0;
request->req.dataLength = 0;
ipmidata.InBuffer = request;
ipmidata.InBufferLength = sizeof(ImbRequestBuffer) - 1;
ipmidata.OutBuffer = response;
ipmidata.OutBufferLength = sizeof(responsebuffer);
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-81
ipmi(7)
ipmi(7)
ipmidata.BytesReturned = &bytesreturned;
fd = open("/dev/ipmi",O_RDONLY);
ioctl(fd,IOCTL_IMB_SEND_MESSAGE,&ipmidata);
selinfo = response->data;
ファイル
/dev/ipmi
IPMI ドライバファイル
<sys/ipmi.h>
IPMI ヘッダーファイル
参照
ioctl(2)
標準準拠
IPMI Interface Specification: v1.0、v1.5
Section 7-82
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
kmem(7)
kmem(7)
名称
kmem − シンボル名に基づいてカーネルメモリ上で I/O を実行
構文
#include <sys/ksym.h>
int ioctl(int kmemfd, int command, void *rks);
説明
/dev/kmem (kmemfd)の有効なファイル記述子を指定して ioctl を使用すると、カーネルメモリを操作することが
できます。この操作の詳細は、以下に示すように、指定する command によって異なります。
MIOC_READKSYM
カーネルメモリの mirk_symname のアドレスから始まる mirk_buflen バイトを mirk_buf
に読み込みます。 rks は、以下で定義する mioc_rksym 構造へのポインタです。
MIOC_IREADKSYM
間接読み込み。カーネルメモリの mirk_symname のアドレスから始まる sizeof(void *)
バイトを読み込み、これを mirk_buf にカーネルメモリの mirk_buflen バイトを読み込
む開始アドレスとして使用します。 rks は、 mioc_rksym 構造へのポインタです。
MIOC_WRITEKSYM
mirk_buf から mirk_buflen バイトを mirk_symname のアドレスから始まるカーネルメモ
リに書き込みます。 rks は、 mioc_rksym 構造へのポインタです。
MIOC_IWRITEKSYM 間接書き込み。 mirk_symname のアドレスから始まるカーネルメモリの sizeof(void *)
バイトを読み込み、それを mirk_buf から mirk_buflen バイトを書き込むカーネルメモ
リのアドレスとして使用します。 rks は、 mioc_rksym 構造へのポインタです。
MIOC_LOCKSYM
rks 、つまり、文字列へのポインタによって名前が指定され直接ロードされたモ
ジュールに対するホールド数を 1 だけ増加させます。したがって、そのアンロードは
できなくなります。
MIOC_UNLOCKSYM
rks 、つまり、文字列へのポインタによって名前が指定され直接ロードされたモ
ジュールに対するホールド数を 1 だけ減少させます。この数が減少して 0 になると、
そのモジュールはアンロードの候補になります。
struct mioc_rksym 定義は次のとおりです。
struct mioc_rksym {
char * mirk_modname; /* limit search for symname
to module modname; if NULL
use standard search order */
char * mirk_symname; /* name of symbol whose address
is the basis for this
operation */
void * mirk_buf;
/* buffer into/from which
read/write takes place */
size_t mirk_buflen; /* length (in bytes) of desired
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-83
kmem(7)
kmem(7)
operation */
};
戻り値
ioctl は、正常終了時には 0 を戻します。エラーが発生すると、 -1 が戻され、そのエラーを示す errno が設定
されます。
エラー
ioctl(2) で説明するエラーの他に、以下の事柄の 1 つ以上が真である場合にも、 kmem ioctl は異常終了しま
す。
modname が現在ロードされている文字を示さないか、これが MIOC_UNLOCKSYM
[EINVAL]
でありホールド数が既に 0 である場合。
[ENXIO]
kmemfd が間違ったマイナーデバイス (/dev/kmem 以外) 上でオープンする場合。
[EBADF]
kmemfd が読み込みのためにオープンし、これが MIOC_WRITEKSYM である場合。
[ENOMATCH]
symname が見つからない場合
[ENAMETOOLONG]
modname が MODMAXNAMELEN 文字の長さよりも大きいか、または symname が
MAXSYMNMLEN 文字の長さよりも大きい場合。
参照
getksym(2), ioctl(2), ioctl(5)
Section 7-84
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
lan(7)
lan(7)
名称
LAN − ネットワーク I/O カードアクセス情報
説明
このマニュアル項目では、OSI アーキテクチャの第 2層 (データリンク層) にある LAN デバイスドライバーの
アクセス方法について簡単に説明します。 LAN デバイスドライバーは、第 1層 (物理層) にある各種の LAN
インタフェースカード (例えば、Ethernet/IEEE 802.3、FDDI、トークンリング) を制御します。
DLPI (Data Link Provider Interface) は、第 2層にある LAN デバイスドライバーをアクセスするためにサポートさ
れている手段です。 DLPI は、知識の豊富なネットワークユーザーだけが使用することを意図しています。プ
ログラミング上の詳細は、 DLPI Programmer’s Guide を参照してください。
それぞれ専用の DLPI モジュールを備えた HP および HP 以外のドライバーおよびインタフェースカードがあ
ります。このような種類の DLPI は、‘‘native’’ DLPI と呼ばれます。
概要
PPA (Physical Point of Attachment) は、特定のデバイスをユニークに指定する数値です。この PPA 値は、 lanscan コマンドから入手することができます。 lanscan の出力の ‘‘NamePPA’’ 識別子は、インタフェース名とこ
の PPA 番号を連結したものです。 lan デバイスの カードインスタンス値は、そのデバイスの PPA 番号と等し
くなります。
1つのハードウェアデバイスが多数の ‘‘NamePPA’’ 識別子を持つことができ、それはそのデバイスに多数のカプ
セル化の手段がサポートされていることを示します。 Ethernet/IEEE 802.3 リンクの場合には、Ethernet のカプ
セル化を示すために ‘‘Name’’ lan が使用され、IEEE 802.3 のカプセル化を示すために snap が使用されます。そ
れ以外のリンク (FDDI、トークンリング) では、 lan カプセル化指示子だけが使用されます。
lan のデバイスを介して DLPI インタフェースで転送する方法には、‘‘raw’’、「コネクションレス」、および
「コネクション型」のデータ転送が含まれます。
警告
LLA (リンクレベルアクセス) インタフェースは一般的にはもう使われていません。
著者
lan は、HP で開発されました。
参照
lanscan(1M), lanadmin(1M), linkloop(1M)
『DLPI Programmer’s Guide』 ,1995, Hewlett-Packard
『The Ethernet, A LAN : Data Link Layer and Physical Specification』 ,Version 2.0, November 1982, Digital Equipment
Corporation, Intel Corporation, Xerox Corporation
『CSMA/CD Access Method and Physical Specification』 October 1984, Institute of Electrical and Electronic Engineers
Demand-Priority Access Method, Physical Layer & Repeater Specifications , 1996, Institute of Electrical and Electronic
Engineers
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-85
lan(7)
lan(7)
Fiber Distributed Data Interface (FDDI) Physical Layer Medium Dependent (PMD) , 1995, ANSI
Token Ring Access Method and Physical Layer Specification , 1995, Institute of Electrical and Electronic Engineers
802.3u Media Access Control Parameters, Physical Layer, Medium Attachment Units, and Repeater for 100 Mb/s Operation, Type 100BASE-T , 1995, Institute of Electrical and Electronic Engineers
Section 7-86
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
ldterm(7)
ldterm(7)
名称
ldterm − 標準STREAMSターミナル回線制御モジュール
構文
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/termios.h>
#include <sys/bsdtty.h>
#include <sys/ttold.h>
#include <sys/strtio.h>
#include <sys/eucioctl.h>
int ioctl( fd, I_PUSH, "ldterm");
説明
ldterm は、STREAMS ベースターミナルまたは疑似ターミナルのデバイスドライバー用回線制御を提供する
STREAMSモジュールです。このモジュールは、 termio(7) で説明されている一般ターミナルインタフェースの
ほとんどの機能を提供します。しかし、POSIXの termios 構造体またはSystem Vの termio 構造体(それぞれ、
termios.h および termio.h で定義されています)の c_cflag 語で指定される、低レベルデバイス制御機能は行い
ません。さらに一部のオペレーションでは、 ttyまたはpty(スレーブ)ストリーム中で ldterm モジュールの下に
プッシュされたモジュールおよびドライバーとの協同作業が必要です。このmanページの本項では、 ldterm 固
有のインタフェースのみを説明しています。ターミナルインタフェースの詳細については termio(7) を参照して
ください。
ldterm モジュールは、内部的に、拡張UNIXコード(EUC)文字符号化体系を使用しています。このため、単純
な8 ビット文字だけでなく、マルチバイト文字の処理も可能です。マルチバイトEUC 文字に対するバックス
ペース、文字消去、およびタブ拡張が正しく行われます。
ldterm モジュールは、POSIX 1003.1およびSystem Vインタフェース定義(SVID)第3版で規定された動作と整合
のとれた標準ターミナルオペレーションを提供します。さらに、BSD 4.3回線制御の動作との互換性も提供し
ます。一方、他のSTREAMSシステムでは通常、BSD 4.3との互換性は、 ttcompat と呼ばれる別のSTREAMSモ
ジュールから提供されています。したがって、HP-UX上のアプリケーションは、 ttcompat を ldterm の上層に
プッシュしなくても、BSD 4.3 との互換性を得ることができます。実際、HP-UX システムでは、 ttcompat モ
ジュールは提供すらされていません。
ldterm モジュールは通常、STREAMS ttyドライバーまたはSTREAMS pty スレーブドライバーの上に位置しま
す。ユーザーは、 STREAMS tty または STREAMS pty スレーブデバイスのオープン後、 STREAMS I_PUSH
ioctl(2) システムコールを発行して、 ldterm をストリーム上にプッシュします。
STREAMSメッセージ
ldterm モジュールは、各種のSTREAMSメッセージを処理します。以下に、回線制御が行われるメッセージを
あげます。本モジュールは、これら以外のメッセージを受信すると、そのままストリーム上の次のモジュール
へ渡します。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-87
ldterm(7)
ldterm(7)
読み取り側の動作
ldterm は、入力ストリーム上で、以下のSTREAMSメッセージを処理します。
M_FLUSH
FLUSHR が設定されている場合、read putルーチンは、読み取り待ち行列のフラッシュ、入力メッ
セージバッファー内の文字の破棄、および一部がバッファーに格納されているマルチバイトEUC文
字の破棄を行います。その後、メッセージを上流に転送します。
M_BREAK
read putルーチンは、 BREAK イベント、パリティエラー、およびフレーミングエラーの処理、なら
びにシグナルの生成に関して、 POSIXの規則に従ってメッセージを処理します(詳細は termio(7) を
参照)。メッセージ中にデータがない場合、そのメッセージは入力 BREAK イベントを表すと想定
されます。これは、文字の値が0( ゼロ) のフレーミングエラーとして表されます。メッセージ中に
データがある場合、そのデータの値は、入力 BREAK イベントの発生を示す整数か、あるいはパリ
ティエラーまたはフレーミングエラーとともに受信された1個の文字です。データ値の下位8ビット
が、読み取られたバイトです。この整数の上位ビット中に TTY_PE フラグが設定されている場合
は、パリティエラーが検出されたことを示します。この整数の上位ビット中に TTY_FE フラグが設
定されている場合は、フレーミングエラーが検出されたことを示します。
データ値を読み取った後、read putルーチンはメッセージを破棄します。
M_DATA read put ルーチンは、POSIX 1003.1 仕様に従ってメッセージを処理し、バックスペース、文字の消
去、およびタブの拡張について適切なマルチバイト処理を行います。
read putルーチンはエコー文字を生成し、それらを出力バッファーに格納して、下流の書き込み待ち
行列へ送信されるようにします。入力データの処理中、本ルーチンは START および STOP 文字を
スキャンし、必要ならば、 M_START, M_STOP メッセージを下流の書き込み待ち行列へ送信しま
す。
バッファーに格納された入力文字の合計数が高水位標より多く、かつ IXOFF が設定されている場
合、read putルーチンは M_STOPI メッセージを下流に送信します。待ち行列中のバックログが低水
位標未満に減少したら、 M_STARTI メッセージを下流に送信します。
バッファーに格納された入力文字の数が MAX_INPUT に達し、かつ IMAXBEL フラグが設定され
ている場合、 read put ルーチンは新しい入力文字を破棄し、 BEL 文字(Ctrl-G) を下流へ送信しま
す。 IMAXBEL が設定されていない場合は、入力待ち行列をフラッシュします。
ISIG フラグが設定されている場合、 read put ルーチンは、適切なシグナル文字を検出すると、
M_PCSIG メッセージを上流へ送信します。それから、それらの文字を破棄します。
c_cc[VDISCARD] に一致する文字を検出し、かつ IEXTEN フラグが設定されている場合、read put
ルーチンは全書き込み待ち行列をフラッシュするため、 M_FLUSH (FLUSHW) メッセージを上流
へ送信します。この M_FLUSH メッセージはストリームヘッドによって反射され、下流の全書き込
み待ち行列へ送信されます。
Section 7-88
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
ldterm(7)
ldterm(7)
文字が入力の論理的終了を表す場合、 read putルーチンは、現在バッファーに格納されている文字
を上流のストリームヘッドへ送信します。
入力の論理的終了は、 ICANON フラグの状態に依存します。 ICANON が設定されている場合、
ldterm モジュールは標準入力モードです。この場合read put ルーチンは、入力行の最後で入力を論
理的に終了します。標準行終了文字は、 NEWLINE, EOF, EOL, および EOL2 です。 ICANON が
設定されていない場合、 ldterm 制御モジュールは非標準すなわちraw入力モードです。この場合、
read putルーチンが入力を終了するのは、入力メッセージバッファー中に少なくとも VMIN バイト
存在するか、または VTIME で指定されたタイマーが満了になったときです(詳細は termio(7) を参
照)。
M_IOCACK
メッセージがPOSIX termios TCGETS コマンドに肯定応答している場合、read putルーチンは、下流
のコンソールドライバーから送信された c_cflag および速度情報を、メッセージから内部 POSIX
termios 構造体へコピーします。その後、内部POSIX termios 構造体をメッセージへコピーします。
メッセージがPOSIX termios 設定コマンド( すなわち、 TCSETS, TCSETSW, および TCSETSF) の
いずれかに肯定応答している場合、 read put ルーチンはメッセージ中の全データを内部 POSIX
termios 構造体へコピーします。
この処理が完了した後read putルーチンは、 I/O制御コマンドが、元はBSD 4.3 I/O制御コマンドまた
は System V I/O制御コマンドで、それが write serviceルーチンによってPOSIX termios コマンドに変
換されたのかどうかを判定します。その場合は、メッセージが元のI/O制御コマンドに肯定応答でき
るように、元のデータを復元します。その後、メッセージを上流へ転送します。
M_CTL
これは、ドライバーが ldterm に特殊な要求をするために送信したメッセージです。 M_CTL メッ
セージの構造は M_IOCTL メッセージと同じです。 M_CTL メッセージブロックが指すメッセージ
バッファーには、 iocblk データ構造体( <sys/stream.h> で定義されています)が格納されています。
この構造体の ioc_cmd メンバーには、 M_IOCTL メッセージの場合と同様に、コマンドが1個格納
されています。 M_CTL メッセージブロックの b_cont メンバーには、 M_DATA メッセージブロッ
クへのポインタが格納されており、ここには M_CTL メッセージに関連するデータが格納されてい
ます。
read putルーチンは、以下のコマンドを含む M_CTL メッセージを処理します。
MC_NO_CANON
通常は上流 M_DATA メッセージに対して行われる入力処理をオフにします。このコマンド
は、独自の入力処理を行うモジュールまたはドライバーが使用します。例えば、疑似ターミナ
ル( ptm(7) および pts(7) を参照)が REMOTE モードで、入力処理を行うプログラムに接続さ
れている場合などです。
MC_DO_CANON
通常は上流 M_DATA メッセージに対して行われる入力処理をオンにします。このメッセージ
が送信されるのは、ドライバーが ldterm に対し、 REMOTE モードの終了を要求する場合で
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-89
ldterm(7)
ldterm(7)
す。
書き込み側の動作
ldterm は、出力ストリーム上で、以下のSTREAMSメッセージを処理します。これ以外のメッセージは、その
まま下流に転送されます。
M_FLUSH
write putルーチンは、書き込み待ち行列をフラッシュし、バッファーに格納されていた出力
データを破棄します。その後、メッセージを下流へ転送します。
M_DATA write serviceルーチンは、POSIX 1003.1仕様出力フラグに従ってデータを処理します。出力
待ち行列が一杯になり、すべてのデータが処理されると、処理済みの文字を下流のドライ
バーへ送信します。
M_IOCTL
write put ルーチンは、 M_IOCTL メッセージのフォーマットの検査と、既知のコマンドの
チェックを行います。メッセージフォーマットが無効な場合は、 M_IOCTL メッセージを
M_IOCNAK メッセージに変更し、このメッセージを上流へ戻します。 I/O制御コマンドが
認識できない場合は、その M_IOCTL メッセージを他のモジュールで処理するために下流
へ転送します。
write putルーチンは、このコマンドが、 M_DATA メッセージとの相対関係で正しい順番で
処理すべきコマンドがどうかを決定します。その場合は、 M_IOCTL メッセージを書き込
み待ち行列へつなぎ、後でwrite serviceルーチンが処理できるようにします。順番に処理す
る必要があるコマンドは、次のとおりです。
TCSETSW, TCSETSF, TCSETAW, TCSETAF, TCSBRK
これ以外のコマンドの場合、本モジュールのwrite putルーチンは即座に処理します。上記の
ioctl コマンドについては、後の「 ioctlコマンド」の項で詳しく説明しています。
M_READ このメッセージはストリームヘッドによって送信されます。その目的は、アプリケーショ
ンが読み取り要求を発行したが、ストリームヘッドには要求を満たすだけの十分なデータ
がキューイングされていないことを、下流のモジュールに通知することです。 M_READ が
下流へ送信されるのは、通常は、 ldterm が非標準入力モードで動作しているときです。
VTIME が正の場合、write putルーチンは入力タイマーを起動します。タイマーが満了した
ら、バッファーに格納された入力をすべて上流へ送信します。それから、 M_READ メッ
セージを下流へ転送します。
ioctlコマンド
ldterm モジュールは、次の2種類の ioctl コマンドを扱います。
Section 7-90
•
基本ターミナルI/O制御コマンド
•
BSD 4.3互換ターミナルI/O制御コマンド
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
ldterm(7)
ldterm(7)
これらの ioctls の使用方法については、 termio(7) manページで詳しく説明しています。 注記: termio(7) で説明
されている FIO[xyz] ioctls は、現在 ldterm ではサポートされていません。
基本ターミナルI/O制御コマンド
ldterm モジュールは、以下の基本ターミナルI/Oコマンドを扱います。
TCSETS, TCSETSW, TCSETSF
ldterm モジュールは、これらのコマンドの1つを格納した M_IOCTL メッセージを受信すると、そ
れを下流に転送します。読み取り待ち行列中で M_IOCACK メッセージを受信すると、メッセージ
中のPOSIX termios 情報を、内部POSIX termios 構造体にコピーし、メッセージを上流に転送しま
す。 モー ド 変 更 の た め に ス ト リー ム ヘッ ド で オ プ ショ ン を 変 更 す る 必 要 が あ る 場 合 は、
M_SETOPTS メッセージが上流に送信されます。 ICANON フラグをオンまたはオフに切り換える
場合、ストリームヘッドの読み取りモードは、それぞれ、メッセージ非破棄 (RMSGN) で読み取り
通知がオン (SO_MREADON) か、またはバイトストリーム モード (RNORM) で読み取り通知がオ
フ (SO_MREADOFF) に変更されます。 TOSTOP フラグをオンまたはオフに切り換える場合、スト
リームヘッドのtostop モードは、それぞれ、オン (SO_TOSTOP) またはオフ (SO_TONSTOP) に切
り換えられます。
TCGETS ldterm モ ジュー ル は、 M_IOCTL メッ セー ジ を 下 流 に 転 送 し ま す。 読 み 取 り 待 ち 行 列 で
M_IOCACK メッセージを受信すると、メッセージ中の CLOCAL フラグおよび速度を内部POSIX
termios 構造体にコピーします。その後、この構造体全体を M_IOCACK メッセージにコピーし、
このメッセージを上流に転送します。
TCSETA, TCSETAW, TCSETAF
これらのコマンドは旧式のSystem V termio 情報を設定します。 ldterm モジュールは、メッセージ
を POSIX termios M_IOCTL メッ セー ジ に 変 換 し、 そ の 後、 こ の メッ セー ジ を 対 応 す る POSIX
termios コマンド (すなわち、 TCSETS, TCSETSW, TCSETSF) 付きで転送します。元のI/O制御コ
マンドおよび M_IOCTL メッセージは、 M_IOCACK で使用するために格納されます。
TCGETA このコマンドは、旧式のSystem V termio 情報を取り出します。 ldterm モジュールは、メッセージ
をPOSIX termios M_IOCTL メッセージに変換し、その後、このメッセージを TCGETS コマンド付
きで転送します。元のI/O制御コマンドおよび M_IOCTL メッセージは、 M_IOCACK で使用する
ために格納されます。 ldterm モジュールは、一致する M_IOCACK メッセージを受信すると、
TCGETS コマンドの場合と同様に処理し、それからPOSIX termios 情報をSystem V termio 情報に変
換して応答します。
TCSBRK ldterm モジュールは、このコマンドを下流に転送して、ドライバーによる処理が行われるようにし
ます。その理由は、ドライバーが M_IOCACK メッセージを上流に送信する前に、データを排出す
る機会が得られるようにするためです。
TCXONC このコマンドは、入出力フロー制御の動作を制御します。引き数が0で出力がまだ停止していない
場合は、 M_STOP メッセージが下流に送信されます。引き数が1 で出力が停止している場合は、
M_START メッセージが下流に送信されます。引き数が2 で入力がまだ停止していない場合は、
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-91
ldterm(7)
ldterm(7)
M_STOPI メッ セー ジ が 下 流 に 送 信 さ れ ま す。 引 き 数 が 3 で 入 力 が 停 止 し て い る 場 合 は、
M_STARTI メッセージが下流に送信されます。
TCFLSH
このコマンドは入出力ストリームをフラッシュします。引き数が 0 の場合、フラグバイトが
FLUSHR の M_FLUSH メッセージが下流に送信されます。この M_FLUSH (FLUSHR) メッセージ
は、入力ストリーム全体をフラッシュするために、ドライバーによって上流に反射されます。引き
数が1 の場合、フラグバイトが FLUSHW の M_FLUSH メッセージが上流に送信されます。この
M_FLUSH (FLUSHW) メッセージは、出力ストリーム全体をフラッシュするために、ストリーム
ヘッドによって下流に反射されます。
TIOCSWINSZ
このコマンドはウィンドウサイズ変数を設定します。このコマンドの引き数は winsize 構造体への
ポインタをとります。 ldterm モジュールはウィンドウサイズ変数を使用しませんが、 TIOCGWINSZ コマンドに応答する必要が生じた場合に備えて、ここに保持しておきます。本モジュール
はメッセージを下流に転送します。
TIOCGWINSZ
ldterm モジュールは、このコマンドを受信すると、前回の TIOCSWINSZ コマンドによって設定さ
れたウィンドウサイズ変数を戻します。このコマンドの引き数は winsize 構造体へのポインタをと
ります。
EUC_WSET
このコマンドは、EUCキャラクターセット用の文字幅とスクリーン幅を設定します。このコマンド
の引き数は eucioc 構造体へのポインタをとります。この構造体には、 EUCキャラクターセットの
文字幅とスクリーン幅を設定するための情報が格納されています。このコマンドを処理した後、
ldterm はこのメッセージを下流の次のモジュールへ転送します。
EUC_WGET
このコマンドは、EUCキャラクターセット用の文字幅とスクリーン幅を戻します。このコマンドは
eucioc 構造体へのポインタをとります。この構造体を介して、EUC文字幅とスクリーン幅の情報が
戻されます。
EUC_SET_HP15
このコマンドは、 ldterm をいわゆる HP15 モードに置き、 ldterm が HP15_SJIS 、 HP15_BIG5 、
HP15_CCDC、およびHP15_GBを認識してそれらがEUCキャラクタのように動作するよう処理でき
るようにします。このコマンドの引き数は整数値へのポインタを取り、上に挙げた4つのHP15キャ
ラクタの1つを指定します。引き数がHP15_ASCIIに設定されると、 ldterm は通常のASCII処理に切
り替わります。 EUC_WSET は EUC_SET_HP15 と同時に指定できません。
EUC_GET_HP15
このコマンドは、 EUC_SET_HP15 コマンドで設定された現在のHP15キャラクタを返します。この
コマンドは整数へのポインタを取り、それが結果を返します。前に EUC_SET_HP15 が出されてい
なければ、HP15_ASCIIを返します。
Section 7-92
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
ldterm(7)
ldterm(7)
BSD 4.3互換ターミナルI/Oコマンド
ldterm モジュールは、以下のI/Oコマンドを扱います。これらはBSD I/O環境と互換性があります。
TIOCEXCL
「排他的使用」モードを設定します。ファイルがクローズされるまで、オープンは許されません。
TIOCNXCL
「排他的使用」モードをオフにします。
TIOCSETD
ldterm モジュールはこのコマンドに対して、応答する以外は何の処理も行いません。BSDシステム
では、このコマンドは現在の回線制御タイプを設定するために使用されます。 STREAMS 環境で
は、回線制御モジュールの変更は、ストリームから現在のモジュールを取り出し、別のモジュール
をストリーム上にプッシュすることによって行われるので、このコマンドはあまり意味がありませ
ん。
TIOCGETD
BSD システムでは、このコマンドは現在の回線制御タイプを取り出すために使用されます。
STREAMS環境では、このコマンドはあまり意味がありません。 ldterm モジュールは、バイナリレ
ベルの互換性のために値2で応答します。これは、 ldterm がジョブ制御をサポートしているからで
す。
TIOCFLUSH
このコマンドは、 TCFLSH コマンドと同様に、入出力ストリームをフラッシュします。引き数は
int 変 数 へ の ポ イ ン タ で す。 そ の 値 が ゼ ロ の 場 合、 入 力 お よ び 出 力 ス ト リー ム は、 適 切 な
FLUSHR/FLUSHW M_FLUSH メッセージを上流および下流へ送信することにより、フラッシュさ
れます。その他の場合、 int の値は、 <sys/file.h> で定義されている FREAD および FWRITE フラ
グの論理的 OR として扱われます。 FREAD フラグが設定されている場合は、入力ストリームがフ
ラッシュされます。 FWRITE フラグが設定されている場合は、出力ストリームがフラッシュされ
ます。その後、 ldterm は M_IOCACK メッセージに肯定応答します。
TIOCOUTQ
このコマンドは、整数へのポインタをとり、 ldterm の出力バッファーに格納されている文字数を戻
します。
TIOCHPCL
このコマンドは、ターミナル回線に結び付けられた最後のファイル記述子をクローズするときに、
そのターミナル回線の接続を解除すべきことを示すため、POSIX termios HUPCL フラグを設定しま
す。 ldterm モジュールは、このコマンドを対応する POSIX termios I/O 制御コマンドに変換しま
す。そのために、現在の termios 設定付きの TCSETS コマンドを格納した M_IOCTL メッセージ
を下流に送信します。
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-93
ldterm(7)
ldterm(7)
TIOCSTART
このコマンドは出力を再開します。ターミナルが停止していた場合、 ldterm モジュールは、
M_START メッセージを下流に送信します。
TIOCSTOP
このコマンドは出力を停止します。 ldterm モジュールは、 M_STOP メッセージを下流に送信しま
す。
TIOCSBRK
このコマンドは回線のブレーク条件を設定します。 ldterm モジュールは、データとして値1を格納
した M_BREAK メッセージをドライバーへ送信し、その後 M_IOCACK で応答します。
TIOCCBRK
このコマンドは回線のブレーク条件をクリアします。 ldterm モジュールは、データとして値0( ゼ
ロ)を格納した M_BREAK メッセージをドライバーへ送信し、その後 M_IOCACK で応答します。
TIOCSETP, TIOCSETN
これらのコマンドは、 <sys/ttold.h> で定義されている sgttyb 情報を設定します。引き数は sgttyb
構造体へのポインタです。 ldterm モジュールは、メッセージをPOSIX termios M_IOCTL メッセー
ジに変換します。その後、このPOSIX termios M_IOCTL メッセージを、対応するPOSIX termios コ
マンド (i.e. TCSETSW, TCSETS) 付きで転送します。元のI/O制御コマンドおよび M_IOCTL メッ
セージは、 M_IOCACK で使用するために格納されます。
TIOCGETP
このコマンドは、 ldterm 中に保持されているPOSIX termios 構造体の現在の内容を解釈して、 sgttyb 情報を戻します。引き数は sgttyb 構造体へのポインタで、この構造体に情報が戻されます。
TIOCSETC
このコマンドは、 <sys/strtio.h> で定義されている tchars 情報を設定します。引き数は tchars 構造
体へのポインタです。 ldterm モジュールは、メッセージをPOSIX termios M_IOCTL メッセージに
変換します。その後、このPOSIX termios M_IOCTL メッセージを、対応するPOSIX termios コマン
ド (i.e. TCSETS) 付きで転送します。元の I/O 制御コマンドおよび M_IOCTL メッセージは、
M_IOCACK で使用するために格納されます。
TIOCGETC
このコマンドは、 ldterm 中に保持されている POSIX termios 構造体の現在の内容を解釈して、
tchars 情報を戻します。引き数は tchars 構造体へのポインタで、この構造体に情報が戻されます。
TIOCSLTC
このコマンドは、 <sys/bsdtty.h> で定義されている ltchars 情報を設定します。 ldterm モジュール
は、メッセージをPOSIX termios M_IOCTL メッセージに変換します。その後、このPOSIX termios
M_IOCTL メッセージを、対応するPOSIX termios コマンド (i.e. TCSETS) 付きで転送します。元の
I/O制御コマンドおよび M_IOCTL メッセージは、 M_IOCACK で使用するために格納されます。
Section 7-94
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
ldterm(7)
ldterm(7)
TIOCGLTC
ldterm モジュールは、 ldterm 中に保持されているPOSIX termios 構造体の現在の内容を解釈して、
ltchars 情報を戻します。
TIOCLBIS, TIOCLBIC, TIOCLSET
これらのコマンドは、 <sys/strtio.h> で定義されている BSD 4.3 フラグ情報を設定します。 TIOCLBIS および TIOCLBIC の引き数は int へのポインタで、その値は、設定またはクリアすべきフ
ラグを含んだマスクです。 TIOCLSET の引き数は int へのポインタで、その値は設定すべき新しい
フラグのセットです。 ldterm モジュールは、メッセージをPOSIX termios M_IOCTL に変換し、そ
の後このPOSIX termios M_IOCTL メッセージを、対応するPOSIX termios コマンド (i.e. TCSETS)
付きで転送します。元のI/O制御コマンドおよび M_IOCTL メッセージは、 M_IOCACK で使用す
るために格納されます。
TIOCLGET
ldterm モジュールは、 ldterm 中に保持されているPOSIX termios 構造体の現在の内容を解釈して、
BSD 4.3フラグ情報を戻します。
TIOCSTI このコマンドは、引き数として文字へのポインタをとり、その文字が端末でタイプされたと見なし
ます。ユーザーは、スーパーユーザー特権を持っているか、またはioctlが発行された端末の制御に
関する読み取りパーミッションを持っていなければなりません。
FIONREAD
このコマンドは、引き数として整数へのポインタをとり、即座に読み取り可能な文字数を戻しま
す。
著者
ldterm はHPおよびOSFが開発しました。
参照
ioctl(2), streamio(7), termio(7), ptm(7), pts(7), ptem(7).
HP-UX 11i Version 2: September 2004
−9−
Hewlett-Packard Company
Section 7-95
lp(7)
lp(7)
名称
lp − ラインプリンタ
構文
#include <sys/lprio.h>
特記事項:
このマニュアルエントリーは、あるプリンタのグループについてのみあてはまります。シリーズ800システム
では、デバイスドライバ lpr0, lpr1, および lpr2 によって制御されるプリンタにあてはまります。シリーズ700
システム上のプリンタにはあてはまりません。
説明
この節は、いろいろなバージョンの HP-UX オペレーティングシステムでサポートされている、数多くのライン
プリンタの能力について記述しています。ラインプリンタは、データに当てはめられた解釈をオプションで
持っているキャラクタ型特殊デバイスです。
文字特殊デバイスファイルがrawオプションで作成されると (rawオプションによるデバイスファイルの作成に
ついての情報の詳細は、『 HP-UX System Administrator manuals』を参照)、データが raw mode ( 例えば、グラ
フィックプリント操作を処理するとき) でプリンタに送られます。 rawモードでは、プリントされるデータに
は何の解釈も行われず、ページフォーマットも行われません。データバイトはそのままプリンタに送られ、受
け取ったままにプリントされます。
デバイスファイルにrawオプションが入っていない場合も、データはrawモードでプリンタに送られます。 raw
モードは、 LPRSET 要求によって設定、解除が行われます。
ラインプリンタ デバイスファイルにrawオプションがない場合、データは後述の規則に従って解釈されます。
ドライバは、ページ長 (行数)、行の長さ (文字数)、および左余白からのオフセットによって、プリンタページ
の概念を理解します。デフォルトの行の長さ、インデント、ページごとの行数、オープンおよびクローズペー
ジの取出し、およびバックスペースの操作は、プリンタがオープンされ、システムに最初に認識されたときに
決定されるデフォルトに設定されます。プリンタが認識されないと、デフォルトの行の長さは132文字、イン
デントは4文字、ページごとの行数は66、クローズ時の取出しページ数は1、オープン時の取出しページ数は0
で、バックスペースは文字プリンタに操作されます。
以降の規則は、データ処理の解釈を説明しています。
•
フォームフィードを行うと、ページを取り出し、ラインカウンタをゼロにリセットします。
•
連続した複数回のフォームフィードは、 1回のフォームフィードとして処理されます。
•
ニューライン文字は、キャリッジリターン/ラインフィード列にマップされています。オフセットが
指定されていると、キャリッジリターン/ラインフィード列の後に空白の数だけ挿入されます。
•
•
ページの終りまで達しているニューラインは、フォームフィードに変わります。
タブ文字は適当な数の空白に解釈されます (現在のインデント値では、タブストップは、オフセッ
トとして8文字ごとの位置に現れると想定されています)。
Section 7-96
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
lp(7)
lp(7)
•
バックスペースは、文字プリンタ、あるいはラインプリンタにおいて適当なオーバストライクを行
うものと解釈されます。
•
行の長さからインデントを引いた長さ (つまり上記のデフォルトを使用した場合、 128文字) より長
い行は、切り詰められます。
•
キャリッジリターン文字は行をオーバストライクさせます。
•
オープン時またはクローズ時に、適当なページ取出し数が生成されます。
ページごとの行数、行ごとの文字数、インデント、バックスペースの操作、オープンおよびクローズ時に取り
出すページ数の制御には、2つの ioctl(2) 要求が使用可能です。オープンまたはクローズ時に、ページの取出し
が要求されていないと紙は動かされません。オープン時には、フォームの先頭状態を想定して、行およびペー
ジのカウントが始まります。
ioctl 要求は以下の形式をしています。
#include <sys/lprio.h>
int ioctl(int fildes, int request, struct lprio ∗arg);
request に指定可能な値は次のとおりです。
LPRGET
現在のプリンタステータス情報を取得し、 arg の指している lprio 構造体に格納します。
LPRSET
arg の指している構造体の現在のプリンタステータス情報を設定します。
LPRGET および LPRSET 要求で使用される lprio 構造体は、 <sys/lprio.h> で定義されており、以降の要素を持っ
ています。
short int ind;
/∗ indent ∗/
short int col;
/∗ columns per page ∗/
short int line;
/∗ lines per page ∗/
short int bksp;
/∗ backspace handling flag ∗/
short int open_ej; /∗ pages to eject on open ∗/
short int close_ej; /∗ pages to eject on close ∗/
short int raw_mode; /∗ raw mode flag ∗/
これらは複数のオープンを超えて記憶されているので、インデント、ページ幅、およびページ長は、外部プロ
グラムを用いて設定できます。 col フィールドが0に設定されてると、デフォルトは次のオープン時に回復しま
す。
バックスペース操作フラグが0の場合、文字プリンタを想定し、バックスペースはそのままドライバを通過し
ます。フラグが1の場合、ラインプリンタを想定し、適当なオーバストライク文字を生成するのに十分なプリ
ント操作が起こります。
rawモードフラグが0の場合、プリンタに送られるデータは、インデント、ページごとのカラム数、ページごと
の行数、バックスペースの操作、オープン時およびクローズ時に取り出すページによってフォーマットされま
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-97
lp(7)
lp(7)
す。
rawモードフラグが1の場合、プリンタに送られるデータはフォーマットされません。
rawモードフラグが1から0に変更され (rawモードがオフにされ)、フォーマットの設定 (インデント、ページご
とのカラム数など) が変更されていないと、データは以前のフォーマット設定によってフォーマットされま
す。
著者
lp はHPおよびAT&Tで開発されました。
ファイル
/dev/lp
HP-UXコマンドで使用されるデフォルトまたは標準のプリンタ
/dev/[r]lp∗
プリンタ用のスペシャルファイル
参照
lp(1), slp(1), ioctl(2), cent(7), intro(7)
Section 7-98
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
lvm(7)
lvm(7)
名称
lvm − 論理ボリュームマネージャ(LVM)
説明
論理ボリュームマネージャ(LVM)は、ディスクスペースを管理するサブシステムです。HP LVMサブシステム
は、ミラー化(オプションのHP MirrorDisk/UX ソフトウェアを使用)、ハイアベイラビリティ(オプションのHP
ServiceGuard ソフトウェアを使用)、およびストライピングなど、利用率とパフォーマンスを向上させる付加価
値機能を提供するものです。
ディスクが固定サイズのセクションに分割されていた以前の配置とは異なり、 LVMを使用すると、ユーザーは
物理ボリュームとも呼ばれるディスクを、サイズの等しいエクステントで構成されたデータ記憶領域のプール(
またはボリューム) とみなすことができます。エクステントのデフォルトのサイズは4MBです。
LVMシステムは、物理ボリュームを任意にグループ化し、 ボリュームグループに編成したもので構成されてい
ます。ボリュームグループは1 つ以上の物理ボリュームで構成されます。システムには複数のボリュームグ
ループを置くことができます。ボリュームグループを作成すると、ディスクではなくボリュームグループが
データ記憶域の基本単位になります。したがって、以前はシステムから別のシステムへとディスクを移動して
いましたが、 LVMではシステムから別のシステムへとボリュームグループを移動することになります。このた
め、システム上に複数のボリュームグループを置くと便利な場合がよくあります。
ボリュームグループは、 論理ボリュームと呼ばれる仮想ディスクに分割することができます。論理ボリューム
は、数多くの物理ボリュームにわたることも、1つの物理ボリュームの 1部分だけを表すこともできます。 1つ
のボリュームグループによって表されるディスクスペースのプールは、各種サイズの論理ボリュームに配分す
ることができます。論理ボリュームのサイズはエクステントの数によって決まります。論理ボリュームを作成
すると、それはディスクパーティションと同様に扱うことができます。論理ボリュームは、ファイルシステム
に割り当てることも、スワップデバイスやダンプデバイスとして使用することも、 rawアクセスに使用するこ
ともできます。
コマンド
LVM情報は、以下のコマンドを用いて作成、表示、および操作することができます。
lvchange
論理ボリューム特性を変更
lvcreate
ボリュームグループのストライプ化、論理ボリュームの作成
lvdisplay
論理ボリュームに関する情報を表示
lvextend
論理ボリュームのストライプ化、スペースの増加、ミラーの増加
lvlnboot
論理ボリュームのスペースの増加、ミラーの増加
lvmmigrate
ルートファイルシステムをパーティションから論理ボリュームへ移行するよう準
備
lvreduce
論理ボリュームに割り当てられる物理エクステントの数を減少
lvremove
ボリュームグループから1つ以上の論理ボリュームを削除
lvrmboot
ルート、一次スワップ、またはダンプボリュームへの論理ボリュームのリンクを
削除
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-99
lvm(7)
lvm(7)
pvchange
ボリュームグループ内の物理ボリュームの特性を変更
pvcreate
ボリュームグループ内で使用する物理ボリュームを作成
pvdisplay
ボリュームグループ内の物理ボリュームに関する情報を表示
割り当てられた物理エクステントを1つの物理ボリュームから別の物理ボリューム
pvmove
に移動
vgcfgbackup
ボリュームグループ構成バックアップファイルを作成またはアップデート
vgcfgrestore
バックアップファイルからボリュームグループ構成を表示または復元
vgchange
ボリュームグループの利用率を設定
vgcreate
ボリュームグループを作成
vgdisplay
ボリュームグループに関する情報を表示
vgexport
ボリュームグループとそれに関連する論理ボリュームをエクスポート
vgextend
物理ボリュームの追加によってボリュームグループを拡張
vgimport
ボリュームグループをシステムにインポート
vgreduce
ボリュームグループから物理ボリュームを削除
vgremove
システムからボリュームグループ定義を削除
vgscan
物理ボリュームでボリュームグループを走査
HP MirrorDisk/UXソフトウェアがインストールされている場合には、以下のコマンドも使用することができま
す。
lvmerge
2つの論理ボリュームを1つの論理ボリュームにマージ
lvsplit
ミラー化された論理ボリュームを2つの論理ボリュームに分割
lvsync
論理ボリューム内の古いミラーを同期化
vgsync
ボリュームグループ内の古い論理ボリュームミラーを同期化
例
LVMの使用を開始する基本的な手順は、次のとおりです。
•
LVMに使用するディスクを決めます。
•
それらの各ディスク上に、LVMデータ構造を作成します( pvcreate(1M) を参照)。
•
すべての物理ボリュームを集めて、新しいボリュームグループを構成します( vgcreate(1M) を
参照)。
•
•
ボリュームグループ内のスペースから論理ボリュームを作成します( lvcreate(1M) を参照)。
各論理ボリュームをディスクセクションと同様に使用します ( ファイルシステムを作成する
か、rawアクセスに使用します)。
ディスク /dev/dsk/c0t0d0 を、 vg01 という名称の新しいボリュームグループの一部として構成するには、次の
手順に従ってください。
まず最初に、 pvcreate コマンドを用いてディスクをLVM用に初期化します。
Section 7-100
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
lvm(7)
lvm(7)
pvcreate /dev/rdsk/c0t0d0
次に、LVMサブシステムで使用する疑似デバイスファイルを作成します。
mkdir /dev/vg01
mknod /dev/vg01/group c 64 0x030000
group ファイルのマイナー番号は、システム上のすべてのボリュームグループの間で固有のものでなければな
りません。形式は 0xNN 0000 で、 NN は 00 から 09 までの値です。 NN の最大値は、カーネル調整可能パラ
メータ maxvgs によって制御されます。
vgcreate コマンドを用いて、物理ボリューム /dev/dsk/c0t0d0 が入ったボリュームグループ vg01 を作成しま
す。
vgcreate /dev/vg01 /dev/dsk/c0t0d0
新しく作成したボリュームグループに関する情報は、 vgdisplay コマンドによって表示することができます。
vgdisplay -v /dev/vg01
lvcreate コマンドを用いて、このボリュームグループ上に usrvol という名称のサイズ100MBの論理ボリューム
を作成します。
lvcreate -L 100 -n usrvol /dev/vg01
これによって、論理ボリュームには2つのデバイスファイルが作成されます。ブロック型デバイスファイルの
/dev/vg01/usrvol と、キャラクタ型(raw)デバイスファイルの /dev/vg01/rusrvol です。
新しく作成した論理ボリュームに関する情報は、 lvdisplay コマンドによって表示することができます。
lvdisplay /dev/vg01/lvol1
ディスクパーティションに対して実行できる操作はすべて、論理ボリュームに対しても実行することができま
す。たとえば、 usrvol を使用してファイルシステムを保持することができます。
newfs /dev/vg01/rusrvol hp7937
mount /dev/vg01/usrvol /usr
参照
lvchange(1M), lvcreate(1M), lvdisplay(1M), lvextend(1M), lvlnboot(1M), lvreduce(1M), lvremove(1M), lvrmboot(1M),
pvchange(1M), pvcreate(1M), pvdisplay(1M), pvmove(1M), vgcfgbackup(1M), vgcfgrestore(1M), vgchange(1M), vgcreate(1M), vgdisplay(1M), vgexport(1M), vgextend(1M), vgimport(1M), vgreduce(1M), vgremove(1M), vgscan(1M)
システム/ワークグループの管理
HP MirrorDisk/UXがインストールされている場合: lvmerge(1M), lvsplit(1M), lvsync(1M), vgsync(1M)
HP ServiceGuardがインストールされている場合: cmcheckconf(1M), cmquerycl(1M) Managing MC/ServiceGuard .
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-101
mem(7)
mem(7)
名称
mem − 主メモリ
説明
mem は、コンピュータの主メモリのイメージを表すスペシャルファイルです。例えば、システムの検査や修正
に使用されます。
mem 中のバイトアドレスは、物理メモリアドレスとして解釈されます。存在しない物理メモリを参照すると、
エラーが返されます。
ファイル kmem は、物理メモリではなくカーネル仮想メモリをアクセスという点を除けば、 mem と同じです。
/dev/kmem でサポートされている ioctl オペレーションについての詳細は、 kmem(7) を参照してください。
警告
デバイス登録を検査したり修正したりすると、読取り専用または書込み専用ビットがあったときに、予期しな
い結果になるかも知れません。
ファイル
/dev/mem
/dev/kmem
参照
kmem(7)
Section 7-102
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
modem(7)
modem(7)
名称
modem − 非同期シリアルモデム回線制御
構文
#include <sys/modem.h>
説明
この節は、モデム回線制御の2つのモデル、およびターミナルポート アクセスの3つのタイプについて記述して
います。また、モデム回線制御に影響を及ぼす termio 構造体のビットの効果についても論じています。
ioctl(2) システムコールに関連したモデムについては、ドキュメントの最後で論じています。
定義
以降の議論において使用されるいくつかの用語について、ここで定義しておきます。「モデム制御回線」
(CONTROL) は一般に、ドライバによって自動的に制御される発信したモデムとして定義されます。「モデム
ステータス回線」 (STATUS) は一般に、ドライバによって自動的に監視される、受信したモデム回線として定
義されます。ターミナルファイル用の CONTROL および STATUS は、ファイルのモデム回線制御モードによっ
て異なります (後述の「モデム回線制御モード」を参照)。ポート上の他のファイルがクローズされるのを待っ
ている場合、同一のポートに対する open(2) は BLOCKED であると見なされます。ポートの STATUS が上げら
れるのを待っている場合、そのポートに対する open は PENDING であると見なされます。 open システムコー
ルがエラーなしに呼び出し側プロセスに返った場合、ポートに対する open は SUCCESSFUL であると見なされ
ます。
Openフラグビット
現在ドライバによって認識される open フラグビットは、 O_NDELAY および O_NONBLOCK ビットだけで
す。このビットのどちらかがセットされると、ドライバに対する open コールは決してブロックされません。
可能ならば、 open はすぐに SUCCESSFUL として返され、ドライバはttyファイルのオープンの処理を続けま
す。可能でない場合、 open は後述の適当なエラーコードですぐに返されます。
Termioビット
これがセットされていると、 termios または termio 構造体中の CLOCAL ビット (termio(7) を参照)は、ドライ
バによるモデム回線の自動監視の消去に使用されます。ただし、ユーザーによるモデム回線の制御能力は、有
効なモードだけから決定され、 CLOCAL の状態には依存しません。普通、ドライバは STATUS が上がるのを
監視し要求します。 CLOCAL ビットがセットされていないと、 open システムコールは CONTROL を上げ、
完了する前に STATUS を待ちます (O_NDELAY または O_NONBLOCK がセットされていると、open はすぐ
に返りますが、ドライバは CLOCAL ビットの状態に基づいてモデム回線の監視を続けます)。普通 STATUS を
失うと、ドライバはモデム接続を停止し、 CONTROL は下がります。ただし CLOCAL がセットされている場
合、 STATUS での変更はすべて無視されます。CLOCAL がセットされていないと、データが読み書きされる
前に連結が要求されます。一般に有効なタイマはすべて (後述の「モデム回線制御モード」および 「モデムタ
イマ」を参照) CLOCAL がセットされている間停止します。
CLOCAL ビットがクリアされている状態からセットされている状態に変更されると、ドライバは STATUS に
関係なく、アクティブなデバイス (ポート上のモデムなど) が存在するものと想定します。その時点で CONTROL のどれかが上げられるとその状態を維持します。 STATUS は監視されなくなります。 CLOCAL ビット
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-103
modem(7)
modem(7)
がセットされている状態からクリアされている状態に変更されると、ドライバは STATUS の監視を再開しま
す。その時点ですべての CONTROL および STATUS が上げられていると、ドライバはモデム接続を続けます。
STATUS が1つでも上げられていないと、ドライバは (後述の「モデム回線制御モード」で記したように) それ
らのシグナルが失われたかのように振舞い、デバイスが制御ターミナルであれば、制御プロセスに hangup シ
グナルが送られます。 CONTROL が1つでも上げられていないと、ドライバはすべての CONTROL を下げ、モ
デム接続を停止させます。
termios または termio 構造体の HUPCL ビットは、最後の close システムコールがターミナルファイルに出され
たときの CONTROL に関するドライバの動作を決定します。 HUPCL ビットがセットされている場合、ドライ
バは close 時に CONTROL を下げ、モデム接続を停止させます。 HUPCL がセットされておらず、モデム接続
が存在すると、 close が出された後でもモデム接続は存在し続けます。ドライバが CONTROL を変更すること
はありません。
ターミナルポート アクセスタイプ
モデムアクセスには、 call-in連結、call-out連結、および (モデム制御のない) direct連結の3タイプがあります。
特定のポートは、違うファイルをアクセスすることで、 3タイプのどの連結でもアクセスできます。ターミナ
ルファイルのモデム アクセスタイプは、ファイルのメジャーまたはマイナー、あるいはその両方のデバイス番
号によって決められます。
call-inタイプのアクセスは、着信したコールによって連結が確立されるときに使用されます。このタイプは、
getty(1M) がモデムを通じてログインを受け入れるときに使用されるタイプです。そのようなファイルに対して
open が出されると、ドライバは着信コールを待ち、ポートの現在のモード (下記参照) に基づいて CONTROL
を上げます。ポートがクローズされると、ドライバは HUPCL ビットによって CONTROL を下げたり、下げな
かったりします。
call-outタイプのアクセスは、発信したコールによって連結が確立されるときに使用されます。このタイプは、
uucp(1) のようなプログラムで使用されます。そのようなファイルに対して open が出されると、ドライバはす
ぐに CONTROL を上げ、現在有効なモードに基づいて連結を待ちます。ポートがクローズされると、ドライバ
は HUPCL ビットによって CONTROL を下げたり、下げなかったりします。
directタイプのアクセスは、ドライバモデム制御が要求されないときに使用されます。したがってこのタイプ
は、 3線連結を用いて直接連結された端末や、連結が確立される前にモデムに話しかけるときに使用できま
す。 2番目の使用法によって、プログラムはモデムにダイアル命令を与えることができます。 CLOCAL ビッ
トも HUPCL ビットも、ダイレクトファイルを通じてアクセスされるポートには影響を与えません (ただし、
両ビットとも他のファイルのタイプから引き継がれます。後述の「ターミナルポート アクセスインターロッ
ク」を参照してください)。ダイレクトファイルに対する open は、 CONTROL には影響を与えず、 STATUS が
継承するいかなる状態にも依存しません。ファイルがクローズされたとき、ドライバは CONTROL の状態に影
響を与えません。モデム接続は、確立されると存在し続けます。ダイレクトファイルの速度をB0 ( termio(7) を
参照) に設定することは、あり得ない速度変更と見なされ、無視されます。この設定は、 CONTROL に影響を
与えません。
Section 7-104
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
modem(7)
modem(7)
モデム回線制御モード
モデム回線制御には、CCITTモード、シンプルモードの2つのモードがあります。どのポートにおいても、常
にどちらか一方のモードのみが有効です。 (異なるファイル上の PENDING または SUCCESSFUL open から) 有
効な1つのモード以外でポートに対して open を行おうとすると、 open は [ENXIO] エラーを返します。ターミ
ナルファイルのモデム アクセスタイプは、ファイルのメジャーまたはマイナー、あるいはその両方のデバイス
番号によって決定されます。
CCITTモードは、交換回線モデムとの連結に使用されます。 CCITT モードの CONTROL は、Data Terminal
Ready (DTR) およびRequest to Send (RTS) です。 STATUS は、Data Set Ready (DSR)、 Data Carrier Detect
(DCD)、およびClear to Send (CTS) です。さらにRing Indicator (RI) シグナルは、着信したコールがあることを示
します。連結が開始されると (call-inファイルに着信コールがあったり、 call-outファイルに対して open が出さ
れると)、 CONTROL が上げられ連結タイマ (後述の「モデムタイマ」を参照) が起動されます。制限時間を過
ぎる前に STATUS が上げられると、連結が確立され、 open 要求が正常に返されます。制限時間を過ぎると
CONTROL が下げられ、連結は中断されます。 call-inファイルでは、ドライバは他の着信コールを待ち、
call-outファイルでは、 open が [EIO] エラーを返します。一度連結が確立されてから DSR または CTS がなく
なると、 CONTROL が下げられ、デバイスが制御ターミナルであれば、制御プロセスに hangup シグナルが送
られます。
DCD がなくなると、タイマが起動されます。制限時間を過ぎる前に DCD が再開すれば、連結は維持されま
す。ただし、この期間データ転送は起こりません。ドライバは文字転送を停止し、ドライバが受け取った文字
はすべて捨てられます (ただし、データ伝送が停止しない処理系もあります。「制約」を参照してください)。
指定された時間内に DCD が回復しないと、先に DSR および CTS で記したように連結は停止します。
close システムコールが出されたときにモデム接続が停止すると (すなわち、 HUPCL がセットされている
と)、 CONTROL が下げられ、 close は正常終了として返ります。ただし、モデムが DSR と CTS の両方を下
げ、ハングアップタイマが終了するまで (後述の「モデムタイマ」を参照)、それ以上の open は許可されませ
ん。この間 open に対してとられる動作は、ポートがまだオープンされているときの動作と同じです (後述の
「ターミナルポート アクセスインターロック」を参照)。
ポートがCCITTモードにある場合、モデム回線の制御は完全にドライバが握っており、ユーザーは、 CONTROL の設定を変更することも、ドライバがどの STATUS をアクティブに監視するかということに影響を与え
ることもできません (後述の「モデムioctl」を参照)。これは、CCITTの勧告を厳密に守るためです。
シンプルモードは、モデム回線制御の簡単な方法しか要求しないデバイスとの連結に使用されます。これに
は、ブラックボックスやデータスイッチのようなデバイス、およびシステム間連結用のデバイスも含まれま
す。 CCITT推奨で動かせないモデムでも使用されます。シンプルモード用の CONTROL は、 DTR だけから構
成されています。 STATUS は、 DCD だけから構成されています。 open が出されると、 CONTROL は上げら
れますが、連結タイマは起動しません。 STATUS が上げられると連結が確立され、 open 要求が SUCCESSFUL
として返されます。一度連結が確立されてから STATUS がなくなると CONTROL が下げられ、デバイスが制御
ターミナルであれば、制御プロセスに hangup シグナルが送られます。
ポートがシンプルモードにある場合、ドライバは普通にモデム回線を制御します。ただし、ユーザーが CONTROL の設定を変えることもできます (後述の「モデムioctl」を参照)。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-105
modem(7)
modem(7)
ターミナルポート アクセスインターロック
インターロック機構は、ターミナルファイルの3つのアクセスタイプ間に提供されています。インターロック
機構は、同時に1つ以上のファイルが正常にオープンされるのを防ぎます。ただし、他の open が PENDING で
あるときに特定の open を成功させるので、 call-in連結で getty に未定の open があるときに、 call-out連結を通
じてポートをオープンできます。 3つのアクセスタイプには、 open が出されたファイルが1つ以上ある場合
に、どの open を成功させるかを決定するための優先順位が与えられています。 3つのアクセスタイプは、低い
優先順位から高い優先順位の順に、 call-in、call-out、directとなっています。
低い優先順位のタイプで SUCCESSFUL open がすでにあるポートに対して open が出されると、新しい open は
[EBUSY] エラーを返します (着信コール指示を受け取っているときに、CCITT call-outファイルに対して open
を行おうとしたときも [EBUSY] を返します。この場合、対応するCCITT call-inファイルに PENDING open が
あると、その PENDING open が完了します)。低い優先順位の open が PENDING の場合、新しい open は可能
ならば成功します。あるいは、 STATUS を待っていて、低い優先順位の open が BLOCKED になれば、 PENDING のままです。高い優先順位の open が成功するか PENDING である場合、新しい open に O_NDELAY フラ
グビットがセットされていない限り、新しい open は BLOCKED のままです。この場合、 open は [EBUSY] エ
ラーを返します。 1つのタイプのファイルの open が一度 SUCCESSFUL になると、低い優先順位のファイルの
PENDING open は BLOCKED になります。
ある優先順位のファイルがクローズされると、その次に低い優先順位のタイプのファイルの BLOCKED open
がアクティブになります。すべての STATUS が上げられていると、 open は SUCCESSFUL になりますが、1つ
でも上げられていない STATUS があると、 open は PENDING になり STATUS を待ちます。 (高い優先順位の
ファイルがクローズされたときに、連結が維持されていて) 低い優先順位の open が SUCCESSFUL であると、
高い優先順位のファイルで設定されたポートの特徴 (速度、パリティなど) は、低い優先順位ファイルに引き継
がれます。 close を通して連結が維持されないと、ポートの特徴はデフォルト値に設定されます。
モデムタイマ
モデム接続に使用できるように定義されているタイマは現在4つあります。最初の3つのタイマはCCITTモード
連結にのみ適用できます。一般に、タイマが動いているときにタイマの値を変更したときの影響は、システム
に依存しています。ただしタイマの値を0に設定すれば、例えタイマが動いていていても、そのタイマを使用
不能にできることが保証されています。
連結タイマは、一度連結が開始されてから連結が確立されるまで待つ時間を制限するのに使用されます。この
タイマは、 call-inファイルで着信コールを受け取ったとき、あるいは、まだ未定の open がないcall-outファイ
ル上に open が出されたときに起動されます。時間内に連結が完了するとタイマは中断されます。時間が過ぎ
ると、連結が中断されます。 call-inファイルでは、ドライバは再び着信コールを待ち、 open は未定のままで
す。 call-outファイルでは、 open は [EIO] エラーを返します。
キャリア検出タイマは、 DCD が落ちたときに切断を行うまで待つ時間を制限するのに使用されます。この時
間内にキャリアが再確立されないと切断が行われます。タイムアウトまでにキャリアが再確立されるとタイマ
が中断され、連結が維持されます。キャリアが上げられなかった間は、データは回線を通じて転送されませ
ん。
ノーアクティビティ タイマは、回線を通じたデータ転送がないときに連結を維持する時間を制限するのに使用
Section 7-106
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
modem(7)
modem(7)
されます。このタイマは、データ転送がなくてデータ回線が停止したときに起動されます。制限時間内に、回
線を通じてどちらかの方向に再びデータが転送されるとタイマは中断されます。タイムアウトが起こる前に何
の動きもないと、ドライバは回線を切断します。データ転送が正常停止、または異常停止したとき、長時間で
費用のかかる電話連結を避けるのに使用できます。
定義されている最後のタイマ、ハングアップタイマは、 CCITTモード、シンプルモードのどちらでも使用され
ます。このタイマは、他の open を許可する前にモデム回線の切断を待つ時間を制御します。この時間は、電
話交換装置による連結の終了を保証できる程度に十分長くなければなりません。この時間が十分に長くない
と、連結は停止されず、次の open が古い連結で完了してしまうことがあります。
HP-UX Modem ioctls
ioctl システムコールの中には、モデム回線の操作を提供しているものもあります。そういったシステムコール
は、 <sys/modem.h> で定義されている次の情報を使用しています。
#define NMTIMER 6
typedef unsigned long mflag;
struct mtimer
{
unsigned short m_timers[NMTIMER];
};
long型 mflag の各ビットは次のモデム回線のどれかに相当します。
MRTS
Request to Send
outbound
MCTS
Clear to Send
inbound
MDSR
Data Set Ready
inbound
MDCD
Data Carrier Detect
inbound
MDTR
Data Terminal Ready
outbound
MRI
Ring Indicator
inbound
MDRS
Data Rate Select
outbound
タイマの値は、配列m_timersで定義されています。タイマの相対的な位置、デフォルトの初期値、および各タ
イマの単位は次の通りです。
0
MTCONNECT
25 s
1
MTCARRIER
400 ms
2
MTNOACTIVITY
0 min
3
MTHANGUP
250 ms
4
Reserved
5
Reserved
どのタイマでも、値を0にするとそのタイマは使用不能にになります。
モデム回線 ioctl システムコールは次の形式をしています。
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-107
modem(7)
modem(7)
int ioctl(int fildes, int command, mflag *arg);
この形式で使用されるコマンドは以下のとおりです。
MCGETA
着信したモデム回線、発信したモデム回線両方の現在の状態を取得し、 arg の参照し
ているlong型 mflag に格納します。上げられた回線は、適当な位置にある1ビットで
示されます。
MCSETA
arg の参照しているlong型 mflag から発信したモデム回線を設定します。発信した
ビットを1にセットするとその回線は上げられ、 0にセットするとその回線は下げら
れます。着信した回線のビットをセットしても影響はありません。 CCITTモードでど
のビットをセットしても影響はありません。モデム回線に対する変更はすぐに行わ
れ、文字がまだ出力されている間にこの形式を使用すると、思いがけない結果が生じ
ることがあります。
MCSETAW
出力が空になるのを待ち、上記の新しいパラメーターに設定します。
MCSETAF
出力が空になるのを待ってから入力キューを吐き出して、上記の新しいパラメーター
に設定します。
ioctl システムコールのタイマの値は次の形式をしています。
int ioctl(int fildes, int command, mtimer *arg);
この形式で使用されているコマンドは以下のとおりです。
MCGETT
現在のタイマの値の設定を取得し、 arg が参照している mtimer 構造体に格納しま
す。
MCSETT
arg が参照している構造体からタイマの値を設定します。
どのタイマにおいても、タイマの値を以前の値に設定しても何の影響もありません。
SVID3 Modem ioctls
System V Interface Definition, Third Edition (SVID3) では、モデム回線を扱うための、追加の ioctl システムコール
を規定しています。 <termios.h> に定義された情報を使っています。
各 ioctl は、正数の引き数を渡し、その正数の各ビットの定義がモデム回線のひとつに、以下のように対応しま
す。
TIOCM_RTS
Request to Send
outbound
TIOCM_CTS
Clear to Send
inbound
TIOCM_DSR
Data Set Ready
inbound
TIOCM_CAR
Data Carrier Detect
inbound
TIOCM_DTR
Data Terminal Ready
outbound
TIOCM_RNG
Ring Indicator
inbound
さらに、 TIOCM_CD は TIOCM_CAR と同等で、 TIOCM_RI は TIOCM_RNG と同等です。
Section 7-108
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
modem(7)
modem(7)
モデム回線の ioctl システムコールは次の形式を持っています。
int ioctl(int fildes, int command, int *arg);
この形式を使うコマンドは、以下のとおりです。
TIOCMGET
インバウンドとアウトバウンドの両方のモデム回線の現在の状態を獲得し、それを
arg で参照される int に入れます。レイズされた回線は、所定の位置にある1ビットに
よって示されます。
TIOCMSET
アウトバンドのモデム回線を arg で参照される int に従って設定します。
TIOCMBIS
arg で参照される int の対応するビット位置により指定される制御回線を上げます。
TIOCMBIC
arg で参照される int の対応するビット位置により指定される制御回線を下げます。
インバウンドの回線に対するビットをセットしても、なんの効果もありません。また、CCITTモードのときに
ビットを設定してもなんの効果もありません。また、モデム回線に対する変更は直ちに有効になり、文字が出
力されている最中にこういったioctlを使うと、予期できない結果を引き起こすことになります。
警告
ときどき、着信コールを受け取った時間とほぼ同じ時間にプロセスがcall-outファイルをオープンすることがあ
ります。場合によっては、 call-out連結が着信コールによって満たされることもあります。ただし一般には結果
は不定です。必要ならば、この状況は2つのモデムおよびポートを使うことで避けられます。 1つはcall-out連
結用、もう1つは着信コールの受取り用です。
制約
ハードウェアの実現方法によっては、 MCSETA がサポートしているモデム回線のすべてにはアクセスできな
いものもあります。あるハードウェアでサポートされていない回線がある場合、その回線に値を設定しようと
しても無視され、その回線の現在の状態を読み取ると0が返されます。インストールされたハードウェアがサ
ポートしている回線を決定するには、適当なI/Oカードマニュアルを参照してください。
ハードウェアの実現方法によっては、 MCSETT がサポートしているタイマのすべてにはアクセスできないも
のもあります。また、各タイマの粒度は、使用しているハードウェアとシステムによってさまざまです。タイ
マを範囲外に設定したり、特定のシステムの機能以外の粒度で設定したときの影響は、そのシステムでドキュ
メント化する必要があります。タイマが動いているときにそのタイマの値を変更したときの影響はシステムに
依存しており、システムごとにドキュメント化する必要があります。
タイマが動いているときに CLOCAL ビットをセットすると、タイマが停止します。タイマが再起動されるか
どうかはシステムに依存しており、再起動される場合、再起動されるのはその後 CLOCAL ビットがクリアさ
れたときです。
HP27140A 6-チャネルマルチプレクサをサポートしている処理系では、 DCD がなくなっている間、文字の転送
を止めることはできません。連結が停止するまでは、ドライバは DCD の紛失を検出できません。また、I/O
カードはまだ内部バッファに文字を蓄えていることがあり、それを転送しようとします。
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-109
modem(7)
modem(7)
著者
modem はHPおよびAT&Tで開発されました。
ファイル
/dev/cua*
/dev/cul*
/dev/tty*
/dev/ttyd*
参照
stty(1)、 mknod(1M)、 ioctl(2)、 open(2)、 termio(7)
Section 7-110
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
名称
mt − stape および tape2 用の磁気テープのインタフェースと制御
説明
ここでは、オープンリール、DDS、QIC、8mm、および 3480 テープドライブを含む、HP 磁気テープのインタ
フェース、および制御の動作について説明しています。ファイル /dev/rmt/* は、特定のロー テープドライブを
指し、それぞれ指定されたユニットの動作は、デバイス特殊ファイルのメジャー番号とマイナー番号に明記さ
れています。
命名規則
デバイス特殊ファイルに対しては、2つの命名法があります。標準 (お勧めする) 方法は、長いファイル名をサ
ポートするシステムで使われているものです。もうひとつの命名法は、短いファイル名しか使えないシステム
用のものです。以下の標準的な命名法に従うことをお勧めします。これに従うと、デバイス名における設定の
オプションのすべてが選択可能になり、また mksf (1M) や insf (1M) でも使われているためです。
/dev/rmt/c#t#d#[o][z][e][p][s[#]][w]density[C[#]][n][b]
第2の方法は、 /dev/rmt ディレクトリに短いファイル名しか使えないシステム用のものです。これらのデバイ
ス特殊ファイルの名称は、意味を把握しにくいものですが、デバイス名をユニークにすることを保証し、ま
た、必要に応じて mksf (1M) および insf (1M) で使われるものです。
/dev/rmt/c#t#d#[f#|i#][n][b]
存在する各テープデバイスに関して、8つのデバイスファイルはシステムが起動した時に自動的に作成されま
す。これらのデバイスのうち4つは標準 (長いファイル名) または代替 (省略ファイル名) ネーミング規約を使用
します。標準ネーミング規約が使われた場合、これら4つのファイルの密度指定は BEST になります。代替
ネーミング規約が使われた場合、これら4つのファイルの密度指定は f0 になります。 n と b オプション (下記
を参照) の4つの異なる順列が利用可能なため、ファイルの数は4つです。
残る4つのファイルはシステムが HP-UX 10.0以前のデバイスファイル ネーミング規約を使用して起動された時
に自動的に作成されます。このテープには、システムにある他のテープと区別するため、任意の数字を含みま
す。その後には m を付けます。 n と b オプション (下記を参照) の4つの異なる順列が利用可能なため、ファ
イルの数は4つです。これらのファイルは標準または代替ネーミング規約に準拠しないHP-UX 10.0以前のユー
ザー用のユーザービリティ機能として作成されます。
標準または代替ネーミング規約に準拠して自動的に作成された4つのデバイスのそれぞれは、 HP-UX 10.0以前
のネーミング規約に準拠したデバイスファイルにリンクしています。したがって、HP-UX 10.0以前のネーミン
グ規約に準拠したデバイスファイルは、密度指定 BEST (標準ネーミング規約) または f0 (代替ネーミング規約)
を含んだデバイスファイルと同じ機能を提供します。
オプション
ここに示すオプションはすべてのテープドライバーに共通です。デバイス特殊ファイルの名称にある c#t#d#
は、 ioscan 出力に由来するもので、 ioscan(1M) と intro(7) のマニュアルページに説明されています。 stape お
よび tape2 に固有のオプションは、後述の「制約」の項にまとめてあります。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-111
mt(7)
mt(7)
c#
インタフェースカードにOSによって割り当てられたインスタンス番号。
t#
リモートバス上のターゲットアドレス (SCSIアドレスなど)。
d#
ターゲットアドレスにおけるデバイスユニット番号 (例: SCSI LUN)。
w
書き出しの際に、ステータスを戻す前に操作の物理的完了を待ちます。デフォルトでは (バッファ
リングされるモードあるいは直ちに報告されるモード)、テープドライブがデータをバッファリング
すると、成功のステータスとともに直ちに戻ります。
density
テープにデータを書き込む際に使われる密度あるいは形式。このフィールドは、以下のいずれかの
値で指定されます。
BEST
最高密度の形式が使われます。デバイスが圧縮をサポートする場合は、データ圧縮も
使われます。
NOMOD
そのテープに以前にデータを書き込んだ際に使った密度をそのまま使います。このオ
プションを使うと、デバイスの型に依存して密度が決まります。このオプションは、
DDSおよび8MMドライブでのみサポートされています。
DDS
既知のDDSフォーマットの 1 つが選択されます。 DDS1 あるいは、 DDS2 を、必要に
応じて指定するために使うことができます。
DLT
以下の既知のDLTフォーマットを選択します。 DLT42500_24、 DLT42500_56 、
DLT62500_64、 DLT81633_64、あるいは DLT85937_52 を、必要に応じて指定するため
に使用できます。
QIC
以下の既知のQICフォーマットを選択します。 QIC11、 QIC24、 QIC120、 QIC150、
QIC525、 QIC1000、 QIC1350、 QIC2100、 QIC2GB、あるいは QIC5GB を、必要に
応じて指定するために使用できます。
D8MM
既知の8MMの形式を選択します。 D8MM8200 あるいは D8MM8500 を、必要に応じて
指定するために使用できます。
D
オープンリールの密度を指定します。 D800、 D1600、あるいは D6250 を、必要に応
じて指定するために使用できます。
D3480
デバイス特殊ファイルが3480デバイスと通信することを指定します。 (3480の密度の
選択肢は1つしかありません。)
D[#]
SCSIモード選択ブロック記述子の中に置かれる数値で密度を指定します。ヘッダファ
イル <sys/mtio.h> には、標準の密度コードがリストされています。ここで指定する数
値は、このリストにないものを指定するためのものです。
C[#]
データ圧縮をサポートするテープドライブ上で、圧縮モードでデータを書き込みます。数値によ
り、デバイスで使う圧縮アルゴリズムを指定できます。密度フィールドを BEST にしたときにの
み、圧縮が可能です。
Section 7-112
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
n
クローズ時に巻き戻ししません。このモードを指定しないと、クローズ時にテープが自動的に巻き
戻されます。
b
バークレースタイルを表します。これを指定しないと、AT&Tスタイルになります。詳細は、次の
「テープの動作の特徴」を参照してください。
f#
マイナー番号にエンコードされたフォーマット (密度) の値を指定します。この値の意味は、使用す
るテープデバイスの型によって決まります。 (短いファイル名を使う場合にのみ、利用されます。)
i#
テープドライバーによって管理されている、内部的なプロパティテーブルのインデックス値を指定
します。このテーブルには、一連の設定に関するオプションが入っています。このテーブルの内容
を直接アクセスすることはできません。どの設定のオプションが使われているかは、 lssf (1M) コマ
ンドを使って調べます。 (短いファイル名を使う場合にのみ、利用されます。)
テープデバイス特殊ファイル名のサンプル
QIC150デバイスで SCSIアドレス3、カードインスタンス2にあるデバイスを、デフォルトのブロックサイズ、
バッファリングモード、AT&Tスタイル、クローズに巻き戻しをする、という形式の標準のデバイス特殊ファ
イル名は、 /dev/rmt/c2t3d0QIC150 となります。
カードインスタンス1、ターゲット2、LUN 3のデバイスを、エグゾースティブモードをイネーブルにし (「制
約」を参照)、 512バイトの固定ブロック長、DDS1の密度で圧縮つき、 AT&Tスタイルでクローズ時の巻き戻
しなしで使う場合、標準のデバイスファイル特殊名は /dev/rmt/c1t2d3es512DDS1Cn になります。
短いファイル名しか使えないシステムで、同じデバイス特殊ファイルは /dev/rmt/c1t2d3i#n となります。ここ
で、 # は、テープドライバーによって選択されるインデックスの値です。
デバイスファイルで実際に使われる設定のオプションを決めるには、 lssf (1M) コマンドを使ってください。上
記のファイル名設定の基準に従っておけば、使われるオプションは明確になりますが、実際上はユーザーが定
義する任意の名称を使うことができます。
テープの動作の特徴
読み取り、または書き込み用にテープをオープンするときは、テープはすでに要求した位置にあるものと仮定
します。
書き込み用にオープンしたファイルがクローズされており、ファイルに対する1回以上の書き込みが起こった
場合に限って、 2つの連続した EOF (End of File) マークが書き込まれます。 no-rewind モードが指定されていな
ければ、テープは巻き戻されます。この場合、テープは2番目の EOF が書き込まれた直前に位置しています。
QICデバイスでは、 EOF マークは一度だけ書き込まれ、 (no-rewind モードが指定されていれば) テープは EOF
マークの後に位置しています。
読み取り (専用) でオープンしたファイルがクローズされており、 no-rewindビットがセットされていないと、
テープは巻き戻されます。 no-rewind ビットがセットされていると、その動作は style モードに依存します。
AT&T-style デバイスでは、テープは、読み込んだデータに続く EOF の後に位置しています (BOTあるいはファ
イルマークにすでに到達していなければ)。バークレースタイルのデバイスでは、いずれにしてもテープの再移
動は行われません。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-113
mt(7)
mt(7)
それぞれの read(2) あるいは write(2) コールは、テープの次の記録を読み書きします。書き込みでは、記録は指
定されたバッファと (ハードウェアの制限において) 同じ長さです。
読み取り中は、指定されたバッファサイズの範囲内で読み取ったバイト数として、記録サイズが返されます。
テープデバイス上の最少の読み込みの単位 (長さ) はレコード全体 (次のレコードマークまで) ですから、無視
されるデータが出る可能性があります。無視されたバイト数 (これは記録が指定されたバッファサイズより長
かったために起こります) は、 ioctl(2) の MTIOCGET コールを通じて得られる mtget 構造体の mt_resid
フィールドから獲得できます。現在の制約下では、テープデバイス アプリケーションプログラムは、バッファ
位置とI/Oのサイズに対する 2バイトのアラインメントが要求されます。より厳格な制約 (4バイトのアラインメ
ントなど) を許可し、パフォーマンスを最大にするには、ページアラインメントが有効です。例えば、対象
バッファが構造内に含まれる場合、バッファの前の構造要素が、対象バッファに、偶数アドレスで始まること
を許可することに注意してください。必要ならば、対象バッファの前に充填整数 (filler integer) を置くことによ
り、4バイトの境界にその位置を設定することができます。
テープマークの階層は、昇順に、次のように定義されます。レコードマーク、ファイルマーク (EOF)、
setmark、EOD (End of Data)。すべてのデバイスが、このすべての型をサポートしているわけではありません
が、この階層関係は保持されます。ある型のマークは、通常、1つあるいは複数の階層が下のマークを含みま
す。
特定の型のテープマークを跳び越すときは、階層的に上のマーク (EODを除く) は、テープの動作を停止せず、
カウントにも含まれません。たとえば、MTFSRをレコードマークとファイルマークを跳び越すために使えま
す。
EOF マークの読み取りは、正常に終了した長さ0のreadとして返されます。すなわち、返されたデータカウン
トは0で、テープは EOF の後に位置しており、次回のreadが次の記録を返すことを可能にします。
DDS デバイスおよび 8mm 8505 デバイスは、一群のファイルを記述するために使われる setmark もサポートし
ます。 8mm 8505 に対しては、 setmarksは密度が8500設定され、そのうえで圧縮が指定されている場合にのみ
サポートされます。 setmarkを読み込んだ場合も、長さゼロの読み込みとして戻ります。 mt_gstat フィールド
のユニークなビットにより、 filemark、setmark、およびEODを区別できます。
スペーシング操作 (バックワードスペース、フォーワードスペース、 setmark、ファイル、あるいは、レコー
ド) によって、動きの方向に、その対象分進んだところにスペースを置いてポジショニングされます。たとえ
ば、ファイルを1個分バックスペースすると、テープの位置はファイルマークの前になります。ファイルを1個
分フォーワードスペースすると、ファイルマークのあとでテープが停止します。これは、標準的なテープの使
用法に合致するものです。
QICデバイスに対する、スペーシング操作は非常に長い時間がかかる場合があります。最悪の場合は、2時間も
かかります。このコマンドが実行されている間、このデバイスをほかのコマンドからアクセスできません。
lseek(2) 型のシークは、磁気テープデバイスに対しては無視されます。その代わり、下の ioctl(2) 操作を使っ
て、テープのポジショニングや状態の確認を行います。
ヘッダファイル <sys/mtio.h> に、テープ操作に関する有用な情報が入っています。下のリストは、
Section 7-114
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
<sys/mtio.h> からとったもので、各種のテープ操作を記述しています。
/* mag tape I/O control requests */
#define MTIOCTOP _IOW(’m’, 1, struct mtop) /* do mag tape op */
#define MTIOCGET _IOR(’m’, 2, struct mtget) /* get tape status */
/* structure for MTIOCTOP - mag tape op command */
struct mtop {
short mt_op;
/* operations defined below */
int32_t mt_count;
/* how many of them */
};
/* operations */
#define MTWEOF 0 /* write filemark (end-of-file record) */
#define MTFSF 1 /* forward space file */
#define MTBSF 2 /* backward space file */
#define MTFSR 3 /* forward space record */
#define MTBSR 4 /* backward space record */
#define MTREW 5 /* rewind */
#define MTOFFL 6 /* rewind and put the drive offline (may eject) */
#define MTNOP 7 /* no operation, may set status */
#define MTEOD 8 /* DDS, QIC and 8MM only - seek to end-of-data */
#define MTWSS 9 /* DDS and 8MM only - write setmark(s) */
#define MTFSS 10 /* DDS and 8MM only - space forward setmark(s) */
#define MTBSS 11 /* DDS and 8MM only - space backward setmark(s) */
#define MTSTARTVOL 12 /* Start a new volume (for ATS) */
#define MTENDVOL 13 /* Terminate a volume (for ATS) */
#define MTRES 14 /* Reserve Device */
#define MTREL 15 /* Release Device */
#define MTERASE 16 /* Erase media */
/* structure for MTIOCGET - mag tape get status command */
struct mtget {
long
mt_type;
/* type of magtape device */
long
mt_resid;
/* residual count */
/* The following two registers are device dependent */
long
mt_dsreg1;
/* status register (msb) */
long
mt_dsreg2;
/* status register (lsb) */
/* The following are device-independent status words */
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-115
mt(7)
mt(7)
long
mt_gstat;
/* generic status */
long
mt_erreg;
/* error register */
int32_t
mt_fileno;
int32_t
mt_blkno;
/* No longer used - always set to -1 */
/* No longer used - always set to -1 */
mt_type のフィールドのデコードに関する情報は、 <sys/mtio.h> にあります。
そのほかのテープの状態の特徴
ストリーミングテープ ドライブを、大きな内部バッファと即時報告機能を使って、効果的に使うためには、次
のend-of-tape手続きが必要です。
LEOT (テープの論理的終端) 付近への書き込みは、実際にテープへの書き込みが行われた場合に、エ
ラーなしで完了します。テープドライバーがLEOTを感知すると、それ以上の書き込みは行われず、エ
ラーメッセージが戻されます。
これを越えて書き込む場合は、単純にMTIOCGET ioctlを使ってステータスを把握してください。
(LEOT を過ぎていることを忘れないでください。) 返されたステータスが EOT を示すものであれば、
これ以上の書き込みはできません。オープンリールのデバイスの場合は、リールにテープを残してお
くことを忘れないようにしてください。
即時報告をイネーブルにした場合、 tape2 ドライバーは、即時モードを抜け、すべてのfilemarkあるいは
setmarkの書き込みとともにデバイスバッファをフラッシュします。 stapeドライバーは、filemarkの書き込みあ
るいはsetmarkの書き込みコマンドがカウントをゼロにセットして与えられたときに、デバイスバッファをフ
ラッシュします。
即時報告をディスエーブルにした場合、書き込み中に LEOT に出会うと、エラーを戻します。このとき、テー
プドライバーは自動的にそのレコードをバックアップします。
end-of-tape付近を読んでいる際には、 LEOT が報告されません。代わりに、典型的な EOF の連続、あるいは、
あらかじめ定められたデータパターンが、論理的なend-of-tapeを知らせます。
センサーの物理的な位置の違いにより、それぞれの磁気テープドライブの EOT の感知法は異なっています。
したがって、データを、1 つのテープの EOT から別のテープに続けて書き込む必要のあるアプリケーション (
複数テープを使った cpio(1) バックアップなど) では、制限を受けることになります。したがって、テープのド
ライブタイプとモードはテープの作成時と読み込み時で同一にしなければなりません。
次のマクロは <sys/mtio.h> で定義されているもので、 MTIOCGET から戻されるステータスフィールド
mt_gstat をデコードするものです。各マクロに対して、入力引き数 x が mt_gstat フィールドです。
GMT_BOT(x)
テープの先頭でTRUEを戻します。
GMT_EOD(x)
DDS、QICあるいは8MMに対して、End-of-Dataに出会ったときに
TRUEを戻します。
GMT_EOF(x)
Section 7-116
Hewlett-Packard Company
End-of-FileマークでTRUEを戻します。
−6−
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
GMT_EOT(x)
テープの終わりでTRUEを戻します。
GMT_IM_REP_EN(x)
即時報告がイネーブルになっている時にTRUEを戻します。
GMT_ONLINE(x)
ドライバーがオンラインのときにTRUEを戻します。
GMT_SM(x)
setmarkに出会ったときにTRUEを戻します。
GMT_WR_PROT(x)
テープが書き込み禁止になっているときにTRUEを戻します。
GMT_COMPRESS(x)
データ圧縮がイネーブルになっている時にTRUEを戻します。
GMT_DENSITY(x)
現在設定されている8ビットの密度値を戻します。サポートされ
ている値は、 <sys/mtio.h> に定義されています。
GMT_QIC_FORMAT(x)
GMT_8mm_FORMAT(x)
Return the same information as does GMT_DENSITY(x) と同じ情報
を戻します。 GMT_DENSITY(x) の方を使うようにしてくださ
い。 GMT_QIC_FORMAT と GMT_8mm_FORMAT は将来サ
ポートされなくなる可能性があります。
GMT_D_800(x)
mt_gstat にエンコードされた密度が800 bpiのときにTRUEを戻し
ます。
GMT_D_1600(x)
mt_gstat にエンコードされた密度が1600 bpiのときにTRUEを戻し
ます。
GMT_D_6250(x)
mt_gstat にエンコードされた密度が6250 bpi (圧縮あり、またはな
し) のときにTRUEを戻します。
GMT_D_6250c(x)
mt_gstat にエンコードされた密度が6250 bpi (圧縮あり) のときに
TRUEを戻します。
GMT_D_DDS1(x)
mt_gstat にエンコードされた密度がDDS1 (圧縮あり、またはな
し) のときにTRUEを戻します。
GMT_D_DDS1c(x)
mt_gstat にエンコードされた密度がDDS1 (圧縮あり) のときに
TRUEを戻します。
GMT_D_DDS2(x)
mt_gstat にエンコードされた密度がDDS2 (圧縮あり、またはな
し) のときにTRUEを戻します。
GMT_D_DDS2c(x)
mt_gstat にエンコードされた密度がDDS2 (圧縮あり) のときに
TRUEを戻します。
GMT_D_DLT_42500_24(x)
mt_gstat にエンコードされた密度が42500 bpi、24トラックペアの
ときにTRUEを戻します。
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-117
mt(7)
mt(7)
GMT_D_DLT_42500_56(x)
mt_gstat にエンコードされた密度が42500 bpi、56トラックペアの
ときにTRUEを戻します。
GMT_D_DLT_62500_64(x)
mt_gstat にエンコードされた密度が62500 bpi (圧縮あり/なし) の
ときにTRUEを戻します。
GMT_D_DLT_62500_64c(x)
mt_gstat にエンコードされた密度が62500 bpi (圧縮あり) のとき
にTRUEを戻します。
GMT_D_DLT_81633_64(x)
mt_gstat にエンコードされた密度が81633 bpi (圧縮あり/なし) の
ときにTRUEを戻します。
GMT_D_DLT_81633_64c(x)
mt_gstat にエンコードされた密度が81633 bpi (圧縮あり) のとき
にTRUEを戻します。
GMT_D_DLT_85937_52(x)
mt_gstat にエンコードされた密度が85937 bpi (圧縮あり/なし) の
ときにTRUEを戻します。
GMT_D_DLT_85937_52c(x)
mt_gstat にエンコードされた密度が85937 bpi (圧縮あり) のとき
にTRUEを戻します。
GMT_D_3480(x)
mt_gstat にエンコードされた密度が3480デバイス用 (圧縮あり、
またはなし) のときにTRUEを戻します。
GMT_D_3480c(x)
mt_gstat にエンコードされた密度が3480デバイス用 (圧縮あり)
のときにTRUEを戻します。
GMT_D_QIC_11(x)
mt_gstat にエンコードされた密度がQIC-11フォーマットのときに
TRUEを戻します。
GMT_D_QIC_24(x)
mt_gstat にエンコードされた密度がQIC-24フォーマットのときに
TRUEを戻します。
GMT_D_QIC_120(x)
mt_gstat にエンコードされた密度がQIC-120フォーマットのとき
にTRUEを戻します。
GMT_D_QIC_150(x)
mt_gstat にエンコードされた密度がQIC-150フォーマットのとき
にTRUEを戻します。
GMT_D_QIC_525(x)
mt_gstat にエンコードされた密度がQIC-525フォーマットのとき
にTRUEを戻します。
GMT_D_QIC_1000(x)
mt_gstat にエンコードされた密度がQIC-1000フォーマットのとき
にTRUEを戻します。
GMT_D_QIC_1350(x)
mt_gstat にエンコードされた密度がQIC-1350フォーマットのとき
にTRUEを戻します。
Section 7-118
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
GMT_D_QIC_2100(x)
mt_gstat にエンコードされた密度がQIC-2100フォーマットのとき
にTRUEを戻します。
GMT_D_QIC_2GB(x)
mt_gstat にエンコードされた密度がQIC-2GBフォーマットのとき
にTRUEを戻します。
GMT_D_QIC_5GB(x)
mt_gstat にエンコードされた密度がQIC-5GBフォーマットのとき
にTRUEを戻します。
GMT_D_8MM_8200(x)
mt_gstat にエンコードされた密度8mm 8200フォーマット (圧縮あ
り、またはなし) のときにTRUEを戻します。
GMT_D_8MM_8200c(x)
mt_gstat にエンコードされた密度8mm 8200フォーマット (圧縮あ
り) のときにTRUEを戻します。
GMT_D_8MM_8500(x)
mt_gstat にエンコードされた密度8mm 8500フォーマット (圧縮あ
り、またはなし) のときにTRUEを戻します。
GMT_D_8MM_8500c(x)
mt_gstat にエンコードされた密度8mm 8500フォーマット (圧縮あ
り) のときにTRUEを戻します。
GMT_MEDIUM(x)
現在テープドライブにロードされている 8-ビットのメディアのタ
イプ値を識別します。報告される値は、QICと8mmデバイスの場
合にのみ有効です。サポートされる値は、 <sys/mtio.h> に定義さ
れています。
GMT_QIC_MEDIUM(x)
GMT_MEDIUM(x) と同じ情報を戻します。
GMT_QIC_MEDIUM は将来サポートされなくなる可能性があり
ますので、 GMT_MEDIUM(x) の方を使うようにしてください。
GMT_DR_OPEN(x)
現在サポートされているデバイスでは使えません。常に、FALSE
を戻します。
HP-UX は、大きな I/O 要求に対しては、テープレコード ブロッキングファクタに (MAXPHYS) を暗黙のうち
に設定します。例えば、ユーザーが MAXPHYS の10倍の長さの書き込み要求を出しても、メディアに対して
は、10個の分離されたレコードして書き込まれます。ただし、次にこれを (MAXPHYS の長さの10倍の大きさ
を指定して) 読み込む場合は、 HP-UX はドライバに対して10個の別々の要求を送りますが、ユーザーから見る
と1度の操作で行われます。このブロッキングの機能は、書き込みの際にユーザーが特に意識する必要はあり
ません。また、読み込みの際にも、次の場合を除いてユーザーが特に意識する必要はありません。
•
MAXPHYS を越えるような長さをを読み込みを行う場合。
•
ユーザーがサードパーティーのテープの MAXPHYS を越えるような長さのレコードを読み込みを
試みる場合。
MAXPHYS の値はかなり大きい (通常256Kバイト以上) ですから、通常は問題になりません。
HP-UX 11i Version 2: September 2004
−9−
Hewlett-Packard Company
Section 7-119
mt(7)
mt(7)
MTNOP 操作はデバイス依存のステータスワードを設定しません。
3480スタッカーデバイスは、オートモード (つまり、逐次アクセスモード) でのみサポートされています。ス
タックないの次のテープに進むには、 MTOFFL 操作を指定する MTIOCTOP 制御要求を発する必要がありま
す。つづいて、 MTIOCGET 制御要求を発し、スタッカーが正常に進んだかを確認する必要があります。
MTIOCGET オペレーション (またはオフラインステータス) が失敗した場合は、スタッカーにこれ以上テープ
がない場合で、この場合にはスタッカーがイジェクトされますから、ユーザーが新しいスタックをロードする
必要があります。
例
fd が有効なファイル記述子であるとした場合、次の例で2つの連続するfilemarkがテープに書き込まれます。
#include <sys/types.h>
#include <sys/mtio.h>
struct mtop mtop;
mtop.mt_op = MTWEOF;
mtop.mt_count = 2;
ioctl(fd, MTIOCTOP, &mtop);
fd がオープンされている DDS ドライブに対して、有効なファイル記述子である場合、次の例で次のsetmarkの
すぐあとまで進みます。
#include <sys/types.h>
#include <sys/mtio.h>
struct mtop mtop;
mtop.mt_op = MTFSS;
mtop.mt_count = 1;
ioctl(fd, MTIOCTOP, &mtop);
fd がオープンされているテープデバイスに対する有効なファイル記述子であり、 read(2) 要求で 0 が戻された
ばかりの場合だとします。次のシステムコールによって、テープが filemark を読んだばかりであることが確認
できます。
#include <sys/types.h>
#include <sys/mtio.h>
struct mtget mtget;
ioctl(fd, MTIOCGET, &mtget);
if (GMT_EOF (mtget.mt_gstat)) {
/* code for filemark detection */
}
Section 7-120
Hewlett-Packard Company
− 10 −
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
警告
密度指定 BEST (標準ネーミング規約) または f0 (代替ネーミング規約) は圧縮をサポートするテープデバイス
のデータ圧縮をアクティブにします。これらのファイルにリンクしているHP-UX 10.0以前のネーミング規約を
使っているファイルにも同じことが言えます。 (上記「命名規則」を参照)。
これはデータ圧縮をサポートするテープデバイスの8つのデバイスファイル (システムが起動された時に自動的
に作成された) の1つを使って書き込まれたテープが圧縮されたデータを含むことを意味します。このテープは
圧縮データをサポートしないテープデバイスでは読み取れません。例えば、データ圧縮をサポートする新しい
DDSで (自動的に作成された8つのデバイスファイルの1つを使って) 書き込まれたテープは、データ圧縮をサ
ポートしない古いDDSデバイスでは読み取れません。
このようなデバイス間のデータ交換を達成するために、新しいファイルが mksf (1M) コマンドを使って手動で
作成する必要があります。上記の例では、 mksf (1M) で指定されたオプションは引き数 DDS1 の密度のオプ
ションを含み、圧縮オプションを含んでいてはなりません。
テープ デバイスファイルを作成する際には、 mknod(1M) コマンドではなく mksf (1M) コマンドを使ってくださ
い。 10.0リリースからは、デバイスファイルのマイナー番号には入りきらない数の設定のオプションが用意さ
れています。 10.0リリース以前ならば、デバイス特殊ファイルのマイナー番号に mknod(1M) を使って設定オプ
ションを選択することができました。
10.0リリースからは、設定オプションの基本セットがマイナー番号に含まれています。拡張された設定オプ
ションは、設定属性のテーブルに保存されています。マイナー番号には、テープドライバーによって管理され
る属性テーブルのインデックスを持つことができ、ユーザーが直接見ることはできません。 mksf (1M) コマン
ドは、渡されるニーモニック引き数に基づいて必要に応じてマイナー番号を設定し、属性テーブルを変更しま
す。
デバイスの設定が、オプションの基本セットに制限されている場合は、属性テーブルは無視してかまいませ
ん。基本設定オプションは以下のとおりです。
•
ハードウェアアドレス (カードのインスタンス番号、ターゲット番号、ユニット番号)
•
密度 (mksf(1m)) にリストされているあらかじめ定義されたオプションの集合から)
•
圧縮 (デフォルトの圧縮アルゴリズムを使用)
•
巻き戻すか巻き戻さないか
•
バークレーモードあるいは AT&T モード
このほかのすべての設定オプションは、拡張オプションであり、属性テーブルを使う必要があります。
すべてのテープ デバイスファイルは /dev/rmt に置くことをお勧めします。拡張設定オプションを使うすべて
のテープドライブファイルは /dev/rmt ディレクトリに 必ず置かなければなりません。これは、属性テーブル
を正しく管理するために必ず守る必要があります。 /dev/rmt の外にある拡張設定オプションを使うデバイス
ファイルは、システムのリブートすると、一貫性を保てなくなる可能性があります。
使用しないデバイスファイルをクリアするには rmsf (1M) コマンドを使ってください。そうしないと、属性
HP-UX 11i Version 2: September 2004
− 11 −
Hewlett-Packard Company
Section 7-121
mt(7)
mt(7)
テーブルがいっぱいになって、 mksf (1M) コマンドが失敗する可能性があります。
<sys/mtio.h> にリストされている密度コードは、デバイスに依存した振る舞いをします。どの密度が有効か
は、使用するテープデバイスのハードウェアのマニュアルを参照してください。デバイスによっては、「密
度」ではなく「フォーマット」と呼ばれています。
バッファリングしないモードを使うと、実行速度が落ちたり、メディアの傷みが激しくなったりします。
QIC150などの古い型の (固定ブロックの) デバイスに対する読み書きは、サポートされているブロック長の倍
数を単位として行う必要があります。
QICデバイス上への書き込み操作は、 BOT あるいは EOD によってのみ、開始できます。 QICデバイスでは、
記録されたデータの途中に位置付けされたテープに対する、書き込みはできません。
offline 操作により、QICドライブはオフラインになります。 DDS のように、カートリッジは自動的には取り出
されません。デバイスをふたたびオンラインにするには、カートリッジを手で取り出してから再度挿入する必
要があります。
SCSI I/O インタフェースを使う逐次アクセスデバイスは、いつもメディアの位置を正しく報告するとは限りま
せん。
圧縮をイネーブルにした3480デバイスでは、 102,400バイト以下に圧縮できないレコードの書き込みはサポー
トされていません。
8500-スタイルの8mmデバイス上で8200フォーマットを使うと、テープに記憶できる容量がかなり少なくなっ
てしまいます。また、8500c-密度の設定の場合のみ、setmarkをサポートします。
8mm デバイスの最大のI/O要求は、240Kバイトに制限されています。
制約
stape用のドライバー特有のオプション (メジャー番号205)
以下のオプションは、 stape ドライバーにアクセスするテープドライブ用のデバイス特殊ファイルを作成する
際に使うことのできるものです。
e
イグゾースティブモードをイネーブルします (デフォルトはディスエーブル)。
イグゾースティブモードがイネーブルになっていると、デバイスをオープンする際に、ドライバーが
必要に応じて複数の異なった設定オプションを試みます。最初は、マイナー番号の設定を規定どおり
に試み、それが失敗するとそのほかの可能性のある設定値で試みます。
イグゾースティブモードがディスエーブルになっていると、ドライバーはマイナー番号で指定された
設定を使って、デバイスの設定を1度だけ試みます。
p
現在アクティブになっているパーティションがパーティション1である (もっともBOT (テープの始ま
り) に近い)、パーティションをもつテープを指定します。オプションのパーティション1は、ボ
リュームディレクトリとして使うことのできるBOTにもっとも近いものです。このオプションを指定
しないときのデフォルトのパーティションは0です。パーティションがサポートされていない場合
は、テープ全体がパーティション0として参照されます。
Section 7-122
Hewlett-Packard Company
− 12 −
HP-UX 11i Version 2: September 2004
mt(7)
mt(7)
s[#]
固定ブロックモードを指定します。オプションの数字で、ブロック長を指定します。数字がない場合
は、デバイスの型によって適当なデフォルトのブロック長を選択します。
tape2用のドライバー依存のオプション (メジャー番号212)
tape2 ドライバーにアクセスするテープドライバー用のデバイス特殊ファイルを作成する際には、次のオプ
ションを使うことができます。
o
診断メッセージをコンソールへ表示しません。
z
テープドライバーは、 RTE システムの振る舞いを真似るよう試みます。つまり、ドライバーは、デバ
イスがクローズされる際にテープの変更あるいは移動を行いません。
著者
mt は HP およびカリフォルニア大学バークレー校で開発されました。
ファイル
/dev/rmt/*
テープデバイス特殊ファイル
<sys/mtio.h>
テープ用の定数およびマクロ
/etc/mtconfig
テープ用の設定属性テーブル
/dev/rmt/*config
設定属性テーブルにアクセスするためのデバイスファイル。内部専用。
参照
dd(1), mt(1), ioctl(2), insf(1M), lssf(1M), mksf(1M), rmsf(1M)
Configuring HP-UX for Peripherals
HP-UX 11i Version 2: September 2004
− 13 −
Hewlett-Packard Company
Section 7-123
ndp(7P)
ndp(7P)
名称
NDP − 近隣探索プロトコル
説明
NDP (Neighbor Discovery Protocol) は、以下の目的でホストおよびルーターによって使用されます。
1. 同一のリンクに接続されていることが既知である近隣のリンク層アドレスを検索します。
2. 自身の代わりにパケットを転送してくれる近隣のルーターを検索します。
3. 近隣が到達可能であるか不可能であるかを常にトラッキングします。
4. ルーターへのパスに障害が発生したとき、代替ルーターを検索します。
上記のタスクを遂行するため、 NDP では以下の処理を定義しています。
1. ルーターおよびプレフィックスの探索
ルーターの探索は、ホストが近隣のルーターを探し、プレフィックスや、アドレスの自動構成に必要なその
他のパラメータを取得するプロセスです。
プレフィックスの探索は、リンク上に存在し、ルーターを経由せずに到達可能な IPv6 アドレスの範囲をホ
ストが取得するプロセスです。
ルーターはルーター通知を送信して、ホストにデフォルトルーターとして認識させます。また、ルーター通
知には、オンリンクの IPv6 アドレス (サブネットプレフィックス) の範囲を識別するプレフィックス情報オ
プションが含まれています。
2. ルーターおよびホストの要件
NDP におけるルーターの要件には、ホストをルーターとして動作させるための以下のような一連の規則が
指定されています。
•
ルーター構成変数
これらの構成変数には、連続的な非送信請求ルーター通知の再送間隔などが含まれます。
•
インタフェース、通知インタフェースの作成方法
インタフェースを通知インタフェースにすると、そのノードは定期的にルーター通知を送信し、リンク
上のホストの代わりにパケットを転送することになります。
•
ルーター通知のメッセージコンテンツ
ルーターは、通知インタフェースを使用して送信請求のみでなく定期的なルーター通知を送信します。
NDP では、これらのメッセージの形式を指定しています。
•
非送信請求ルーター通知の送信
ルーター送信請求に対する応答としてのルーター通知とは別に、ルーターは非送信請求ルーター通知を
送信することができます。例えば、非送信請求ルーター通知は、プレフィックスを期限切れにしたり、
Section 7-124
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
ndp(7P)
ndp(7P)
新しいプレフィックスを通知するためなどに送信されます。
•
インタフェース上のルーター通知の停止
ルーターは、インタフェース上でプレフィックスの通知を停止することができます。ルーターがルー
ターとしての機能を停止するときに、システム管理上の判断としてこのような場合がありえます。 NDP
では、このような場合にルーターが実行すべき事柄が指定されています。
•
ルーター要請メッセージの処理
ステートレス自動構成プロセスの一部として、ホストはルーター要請を送信します。ルーターはこのよ
うな請求に対して、ルーター通知で応答します。
•
ルーターのリンクローカルアドレスを変更する場合の手順
通常、ルーターのリンクローカルアドレスは変更しません。しかし NDP では、ルーターのインタ
フェースのいずれかのリンクローカルアドレスを変更する場合に、ルーターで行わなければならない手
順が定義されています。
ホストの要件は、IPv6 ホストに適用される以下のような一連の規則です。
•
保守する必要がある IPv6 変数
保守する必要がある IPv6 変数には、近隣請求の再送の間隔、各インタフェースのリンク MTU などがあ
ります。
•
ルーター通知の処理
この規則では、ルーター通知を受信した場合に行うべきアクションについて記述されています。
•
存続期間を超過するプレフィックスとデフォルトルーター
ルーターが送信するルーター通知には、ルーターとルーターが通知するプレフィックスの存続期間が常
に含まれています。 NDP では、このような存続期間を超過したときにホストが実行すべきアクション
を指定しています。
•
デフォルトルーターの選択
リンク内に複数のルーターが存在する場合、デフォルトルーター選択アルゴリズムが重要になります。
このアルゴリズムでは、到達性などの要因に基づいてデフォルトルーターを選択します。
•
ルーター要請の送信
インタフェースを有効にするとき、ホストは非送信請求ルーター通知を待機する必要はありません。ホ
ストはルーター要請を送信し、応答としてルーター通知を受信します。これにより、インタフェースが
有効になるとすぐにデフォルトルーターおよびプレフィックスの情報を受信することができます。
3. パケット送信のアルゴリズム
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-125
ndp(7P)
ndp(7P)
すべての IPv6 ホストは、パケットを送信するためのアルゴリズムで使用される特定のデータ構造を保守し
なくてはなりません。このようなデータ構造には、以下のものがあります。
近隣キャッシュ
最近パケットの送信先となった近隣の IPv6 アドレスとリンク層アドレスのマッピングを保守するエント
リーのセットです。また、到達性の状態など、近隣到達不能検知に必要な情報も保守します。
宛先キャッシュ
最近パケットの送信先となったホストのエントリーのセットです。オンリンクのホストとオフリンクの
ホストの両方が含まれます。近隣キャッシュへの間接参照のレベルも含まれます。
プレフィックスリスト
オンリンクの IPv6 アドレスのセットを定義するプレフィックスのリストです。この情報は、インタ
フェース別に保守されます。このリストは、通常、ルーターから受信したルーター通知から作られま
す。
デフォルトルーターリスト
このホストの代わりにパケットを転送するルーターのリストです。このリストにもそれぞれのルーター
の近隣キャッシュエントリーへのポインターがあります。
ホストはホストへのパケット送信時に上記のデータ構造を使用します。以下は、ユニキャストの宛先に対す
るパケット送信の概念的なアルゴリズムです。
a. パケットが送出される前に、次ホップを決定しなくてはなりません。通常、次ホップの決定はすべての
パケットで行われるわけではありません。次ホップを決定した結果は宛先キャッシュに保存されます。
ホストはまず宛先キャッシュに現在の宛先アドレスに一致するエントリーがないかチェックします。一
致した場合は「c」に進みます。
b. 宛先キャッシュに宛先のエントリーがない場合は、プレフィックスリスト内のすべてのプレフィックス
から最も長く一致するものを検索します。一致するものがあれば宛先はオンリンクであるとされ、宛先
アドレスが次ホップであるとみなされます。一致するものがなければ、次ホップは経路指定テーブルか
ら決定されます。
c. 次ホップが決定されると、次ホップのアドレス解決プロセスと近隣到達不能検知が行われます。このプ
ロセスについては次のセクションで説明します。
d. 近隣が到達可能であることがわかると、その宛先に対してパケットが送信されます。
4. アドレス解決と近隣到達不能検知
アドレス解決は、近隣のリンク層アドレスを決定するために使用されるプロセスです。このプロセスで検索
された IPv6 アドレスとリンク層アドレスのマッピングは近隣キャッシュにキャッシュされます。以下はア
ドレス解決に関連する手順です。
a. まず、近隣キャッシュがチェックされて、現在の宛先アドレスに一致するエントリーが検索されます。
エントリーが存在しない場合、ホストは請求したノードのマルチキャストグループに対して近隣請求
Section 7-126
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
ndp(7P)
ndp(7P)
メッセージを送信します。このマルチキャストアドレスは、宛先 IPv6 アドレスに基づいて求められるも
ので、特定の IPv6 アドレスを持つすべてのノードはこのグループに参加する必要があります。
b. 指定した IPv6 アドレスを持つホストがネットワーク内に存在する場合、そのホストは近隣通知メッセー
ジによってこの請求に応答します。
c. 近隣通知を受信すると、ノードは近隣キャッシュ内で送信元の IPv6 アドレスのエントリーを検索しま
す。近隣キャッシュ内に新しいエントリーが作成され、到達性フラグは、REACHABLE に設定されま
す。
アドレス解決が完了すると、近隣到達不能検知が実行されます。このプロセスは、近隣キャッシュの到達性
フィールドに依存します。近隣キャッシュ内のエントリーは、以下のいずれかの状態になっています。
a. INCOMPLETE。アドレス解決が実行中であり、宛先のリンク層アドレスはまだ判別されていません。
b. REACHABLE。宛先は最近まで到達可能でした。
c. STALE。宛先はもはや到達可能であるかわかりませんが、その宛先にパケットを送信する必要が生じる
までは到達性検知を行う必要はありません。
d. DELAY。上位層プロトコルで到達性を確認するための追加時間を与える、最適化の状態です。
e. PROBE。この状態は、近隣請求を繰り返し送信することによって到達性の確認を要求中であることを表
します。
近隣到達不能検知の実行中、ノードは近隣キャッシュ内の状態をチェックします。宛先の状態が REACHABLE であれば、パケットが送信されます。それ以外の状態であれば、以下の手順を実行します。
a. 宛先のアドレス解決が行われると、近隣キャッシュ内にその宛先のエントリーが作成され、到達性の状
態は、INCOMPLETE に設定されます。アドレス解決が失敗すると、このエントリーは削除されます。
b. アドレス解決ができると、エントリーには宛先のリンク層アドレスが追加され、状態は REACHABLE
に設定されます。
c. 近隣キャッシュ内のエントリーの状態の期限を管理するタイマーが保守されており、到達性タイマーと
呼ばれます。タイマーが到達性を期限切れにすると、状態は、REACHABLE から STALE に変更されま
す。
d. 近隣キャッシュ内で状態が STALE である宛先にパケットを送信すると、ノードは状態を DELAY に設
定し、この状態に関連付けられたタイマーを開始します。タイマーの期限が切れるまでにノードが到達
性確認を受信すると、状態は REACHABLE に設定されます。受信しないと、PROBE に設定されます。
e. エントリーの状態が PROBE になると、ノードはエントリー内で指定されているリンク層アドレスに対
してユニキャスト近隣請求を送信します。応答として近隣通知を受信すると、状態は REACHABLE に
設定されます。この請求は繰り返し送信され、その回数の最大値を構成することができます。最大回数
まで請求しても到達性確認を受信できないと、エントリーは近隣キャッシュから削除され、再度アドレ
ス解決が実行されます。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-127
ndp(7P)
ndp(7P)
注記: 近隣キャッシュ内のエントリーは、非請求の近隣通知、ルーター通知、およびルーター要請などを
ノードが受信した結果としても作成されます。しかし、これらの状況で作成されたエントリーの場合、到着
性状態は常に STALE に設定されます。
5. リダイレクト機能
ルーターは、同一リンク上によりよい次ホップルーターが存在することを発見すると、ホストに対してリダ
イレクトメッセージを送信します。これは、ルーターに対する要求です。
ルーターリダイレクトメッセージを受信したホストは、新しい次ホップアドレスを使用して宛先キャッシュ
を更新します。
著者
NDP は、Internet Engineering Task Force の IPng Working Group によって開発されました。
参照
ifconfig(1M), lanconfig(1M), ndp(1M), ip6(7P), lan(7)
RFC2461 Neighbor Discovery for IPv6, T. Narten 他 NDP 近隣探索プロトコル
Section 7-128
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
nfs(7)
nfs(7)
名称
nfs, NFS − ネットワークファイルシステム
説明
ネットワークファイルシステム (NFS) は、クライアントノードが、ネットワークを通じて見えるファイルにア
クセスできるようにします。クライアントノードは NFS を使用することで、さまざまなサーバとサーバアーキ
テクチャ上に存在するファイル、およびさまざまなオペレーティングシステムに渡るファイルを操作できま
す。クライアント上でのファイルアクセス コール (読取り要求など) は、NFS プロトコル要求に変換され、
ネットワークを通じてサーバシステムに送られます。サーバは要求を受け取り、実際のファイルシステム操作
を実行し、クライアントに対して応答を送り返します。
NFS は、外部データ表現 (XDR) プロトコルの先頭に構築されたリモートプロシージャコール (RPC) を用い
て、位置に依存しない方法で操作を行います。 RPC プロトコルは、保護のためのバージョンおよび認証パラ
メータをネットワークを通じて交換できるようにしています。
サーバは、特定のファイルシステムのエントリーを自分の /etc/exports ファイルに追加することで、クライア
ントによるそのファイルシステムに対するアクセスを許可します。
クライアントは、ファイルシステムのファイルハンドルを要求する mount コマンドを使用して、そのファイル
システムに対するアクセスを取得します (mount(1M) を参照)。 (ファイルハンドルとは NFS がリモートファイ
ルを識別するための手段です。) クライアントが一度ファイルシステムをマウントすると、サーバは、クライ
アントがアクセスする各ファイル (またはディレクトリ) 用のファイルハンドルをクライアントに発行します。
サーバ側でファイルが消去されると、そのファイルハンドルは失効し (既知のファイルとの関係を断たれ)、
サーバは errno に [ESTALE] をセットしてエラーを返します。
サーバは、ネットワークを通じてマウントしているファイルシステムのクライアントになることもできます。
ただし、そのようなファイルシステムにクライアントが直接アクセスすることはできません。クライアントが
マウントしようとしたファイルシステムのサーバが NFS クライアントであれば、サーバは [EREMOTE] がセッ
トされた errno を返します。クライアントは、ファイルシステムのあるサーバから直接ファイルシステムをマ
ウントしなければなりません。
ユーザー ID およびグループ ID マッピングは、クライアント、サーバ間において同じでなければなりません。
ただし、クライアントに対するアクセスチェックを行う前に、サーバは UID 0 (スーパーユーザー) を UID −2
にマップします。これにより、リモートファイルシステム上のスーパーユーザー特権を取得されるのを防ぎま
す。
戻り値
一般に、サーバで発見された物理ディスク I/O エラーはクライアントに返されます。サーバがダウンしてい
る、あるいはアクセス不可能な状態にあると、クライアントはメッセージ
NFS: file server not responding: still trying.
を受け取ります。
クライアントは、サーバから受取り通知が返ってくるまで要求を再送し続けます。そのため、クライアントが
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-129
nfs(7)
nfs(7)
特別な動作をまったく要求しなくても、サーバはクラッシュまたは電源を切り、回復することができます。
I/O を要求しているクライアントプロセスはブロックしますが、 nointr オプションでマウントされていなけれ
ば、サーバが回復するまでシグナルを受け付ける状態にあります。ただし、 soft オプションでマウントされて
いると、クライアントプロセスは無限に待つことはなく、エラーを返します。
著者
nfs は、Sun Microsystems Inc.で開発されました。
参照
exportfs(1M), mount(1M), mount_nfs(1M), nfsd(1M), mount(2), fstab(4), exports(4)
Section 7-130
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
null(7)
null(7)
名称
null − nullファイル
説明
null 特殊ファイルに書き込まれたデータは破棄されます。
null 特殊ファイルから読み込むと常に0バイトを返します。
例
サイズが0のファイルを作成するためには、次のどちらかを使用します。
cat /dev/null > file
cp /dev/null file
ファイル
/dev/null
標準準拠
null: AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, POSIX.2
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-131
pckt(7)
pckt(7)
名称
pckt − STREAMS pty(疑似ターミナル)Packet Modeモジュール
構文
#include <sys/stropts.h>
int ioctl( fd_slave, I_PUSH, "pckt");
説明
STREAMS ptyデバイスの Packet Mode 機能は、ptyデバイスのマスター側のユーザープロセスに、 ptyの状態変
更が通知されるようにします。 STREAMS ptyデバイスで Packet Mode を使用可能にするためには、ユーザー
プロセスは、 STREAMS I_PUSH ioctl(2) システムコールを呼び出して、ptyのマスター側に pckt モジュールを
プッシュしなければなりません。 pckt モジュールがSTREAMS ptyマスターにプッシュされると、マスター側
で上流へ送られる一定のタイプのSTREAMSメッセージがパケット化され、その後マスター側から getmsg 関数
を使って取り出せるようになります。
ユーザープロセスがデータを書き込むと、 pckt モジュールは、メッセージを変更せずに下流の次のモジュール
またはドライバーへ渡します。ユーザープロセスがデータを読み取るか、または pckt モジュールが一定のタイ
プのSTREAMSメッセージを受信すると、本モジュールはメッセージからパケットを構築し、それを上流へ転
送します。メッセージパケットを構築するために、本モジュールは M_PROTO メッセージを作成します。こ
の M_PROTO メッセージは、最初のデータブロック中に元のメッセージタイプを格納し、そのあとの必要な
個数分のデータブロック中に元のメッセージを格納します。その後、ユーザープロセスは、 getmsg() 関数を呼
び出すことによって、この M_PROTO メッセージを取り出すことができます。
pckt モジュールは以下のタイプのSTREAMSメッセージをパケット化します。
M_DATA, M_IOCTL, M_PROTO, M_PCPROTO, M_FLUSH, M_START, M_STOP, M_STARTI, M_STOPI,
M_READ.
その他のメッセージはすべて、変更されずに上流へ渡されます。
メッセージが M_FLUSH メッセージの場合、 pckt モジュールはフラグを調べ、以下の処理を行います。
•
フラグが FLUSHW の場合、本モジュールはそれを FLUSHR に変更してから M_PROTO メッセー
ジを作成し上流へ渡します。この処理は、元の M_FLUSH メッセージがストリームヘッド読み取り
待ち行列をフラッシュしてしまわないようにします。
•
フラグが FLUSHR の場合、本モジュールはそれを FLUSHW に変更してから M_PROTO メッセー
ジを作成し上流へ渡します。書き込み待ち行列を正しくフラッシュするため、本モジュールはさら
に、 FLUSHW フラグを設定した M_FLUSH メッセージを送信します。
•
フラグが FLUSHRW の場合、本モジュールはそれを FLUSHW に変更してから M_PROTO メッ
セージを作成し上流へ渡します。書き込み待ち行列を正しくフラッシュするため、本モジュールは
さらに、 FLUSHW フラグを設定した M_FLUSH メッセージを送信します。
Section 7-132
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
pckt(7)
pckt(7)
著者
pckt(7) はHPおよびOSFが開発しました。
参照
getmsg(2), ioctl(2), ptm(7), pts(7), ldterm(7), ptem(7), streamio(7).
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-133
poll(7)
poll(7)
名称
poll − 複数のファイル記述子について入出力状態をモニターする
構文
#include <sys/devpoll.h>
#include <fcntl.h>
int open("/dev/poll", O_RDWR);
int write(int filedes, const struct pollfd *buf, size_t nbyte);
int ioctl(int filedes, DP_POLL, struct dvpoll *arg);
int ioctl(int filedes, DP_ISPOLLED, struct pollfd *arg);
説明
/dev/poll は、ユーザーが登録した一連のファイル記述子に関連づけた特定の条件をモニターする、イベント
ポート ドライバへのインタフェースを提供します。
/dev/poll へのアクセスは open() と write() と ioctl() のシステムコールを通して与えられます。
/dev/poll イベントポートは select(2) と poll(2) などのシステムコールに比べ機能性を備えていて、以下の種類の
ファイル記述子をサポートします。
ネットワーク (AF_INET) とUnixドメイン (AF_UNIX) ソケット、FIFOファイルとパイプ、XTIエンドポイント
とSTREAMSデバイス。
イベントポートドライバでサポートされている一般操作は次の通りです。
-- イベントポートを開く。
-- イベントポートにファイル記述子を登録や登録取り消しをする。
-- イベントポートに登録されたファイル記述子をポールする。
-- ファイル記述子に対して登録されたポール条件を取得する。
-- イベントポートをクローズする。
イベントポートのオープン
それぞれの /dev/poll デバイスのオープンによって、異なった一連のファイル記述子からイベントポートをポー
ルすることができます。 open() システムコールによって返された記述子はイベントポートを表します。ユー
ザーが複数の一連のファイル記述子をモニターしたい場合は、 /dev/poll デバイスを数回開きます。例:
int evpfd;
evpfd = open("/dev/poll", O_RDWR);
/dev/poll の open() を実行したプロセスだけが、一般イベントポート操作を実行できます。特に、親プロセスか
ら子プロセスに受け継がれたファイル記述子イベントポート、または、Unixドメインソケットアクセス権を
使っているほかのプロセスから受け継がれたイベントポートだけがクローズされます。 (参照 send(2) マンペー
Section 7-134
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
poll(7)
poll(7)
ジの sendmsg または streamio(7) のマンページ STREAMS の I_FDINSERT ioctl request のマンページ。)
ファイル記述子の登録と登録解除
一連のファイル記述子のインタレストとポール条件は、 write() システムコールを使用して、イベントポートに
登録されます。 pollfd 構造の配列をイベントポートに書き込むことによって、ユーザーは一回の write() サー
ビスコールで複数のファイル記述子を登録することができます。 pollfd 構造体と関連するポール条件は、
<poll.h> に定義されています。 ( <sys/devpoll.h> に含まれています。) その他のフラグは <sys/devpoll.h> ファ
イルに定義されています。ポール条件の定義については、 poll(2) マンページを参照してください。
ファイル記述子を登録するために、 fd フィールドが登録されるファイル記述子にセットされて、そして events
フィールドが POLLIN のような2つ以上のポール条件にセットされます。複数のポール条件を論理和として一
緒に指定できます。指定記述子は複数のイベントポートに登録できます。同じイベントポートにファイル記述
子を再登録すると、特定ポール条件は指定ファイル記述子用の前回の状況に接合してしまいます。
登録解除をする際には、 fd を登録解除するファイル記述にセットして、 events を POLLREMOVE にセット
します。 POLLREMOVE は <sys/devpoll.h> で定義されています。 POLLREMOVE は論理和としてほかの
ポール条件と一緒に指定することはできません。
ポールされたファイル記述子がクローズされるときは、自動的に、登録解除されます。
例を続けますと、以下は2つのファイル記述子を fd1 と fd2 のオープンしているイベントポートに登録しま
す。
struct pollfd pfd[2];
int err;
pfd[0].fd = fd1;
pfd[0].events = POLLIN;
pfd[1].fd = fd2;
pfd[1].events = (POLLIN | POLLRDBAND);
err = write(evpfd, pfd, sizeof(pfd));
ファイル記述子をポールする
イベントポートのインタレストセットをポールするには、まず DP_POLL request を指定して、 ioctl() を呼び出
します。
ioctl arg パラメータは、 <sys/devpoll.h> に定義されている dvpoll 構造体を指すポインターです。この構造体
は、以下のメンバーを含みます。
struct dvpoll {
pollfd_t *dp_fds;
nfds_t
int
/* 使用されるpollfd[] */
dp_nfds; /* pollfdエントリの数 */
dp_timeout; /* ミリ秒または -1 */
}
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-135
poll(7)
poll(7)
dp_fds は、 pollfd 構造体の配列を指すポインターです。 dp_nfds は pollfd 構造体の配列で戻される構造体の最
大数です。 dp_timeout は、登録されたポール条件が、イベントポート内で割当てられるまでにかかるミリ秒単
位での上限時間です。
2つ以上の登録されたポール条件が登録されたファイル記述子から要求されると、それぞれのアクティブな
ファイル記述子につき1つの配列要素が割当てられているその配列内の1つ1つの pollfd 構成の revents 内
に、 ioctl() は、有効なポール条件を保存します。返される ioctl() の値は、有効な pollfd 構造体の数を表しま
す。
もし、どのポール条件にも適合せず、 dp_timeout が -1 の場合、 ioctl() は、ポール条件が登録されたファイル
記述子のどれかに適合するまで、スリープします。もし、 dp_timeout が負ではない場合、 dp_timeout ミリ秒
の上限が越えたときまたは、ポール状態が割当てられたときに ioctl() は返されます。上限時間を超えると、
ioctl() の戻り値は 0 になります。
ファイル記述子に登録済みポール状態の取り出し
インタレストセット内の与えられたファイル記述子に登録されたポール条件を判別するには、 DP_ISPOLLED
request を指定して ioctl() を呼び出します。例えば、ファイル記述子 fd1
struct pollfd pfd;
int ispolled;
pfd.fd = fd1;
ispolled = ioctl(evpfd, DP_ISPOLLED, &pfd);
ファイル記述子がイベントポートを指定して登録されている場合、 ioctl() 戻り値は 1 になり、登録されたポー
ル条件は、 pollfd 構造体の events メンバーに返されます。
ファイル記述子が、登録されていない場合やオープンしていない場合は、 ioctl() の戻り値は 0 になります。
イベントポートをクローズする
イベントポートは、イベントポートのファイル記述子を指定した close() システムコールでクローズします。イ
ベントポートを指定して登録されたファイル記述子は全て、イベントポートから自動的に登録が取り消されま
す。
RETURN VALUES
open() はイベントポートファイル記述子を返します。 open() システムコールが異常終了すると -1 が返され、
errno にエラー状態がセットされます。
write() は、 buf で渡された pollfd 構造体内の配列のバイト数を返します。 write() -1 を返した場合、 errno に
エラー状態がセットされます。
ioctl(DP_POLL) は、1つまたは2つ以上のポール条件に適合したフィアル記述子の数を返します。ポール条件
が登録されたファイル記述子のどれかを満たす前にタイムアウトが発生した場合、 ioctl(DP_POLL) は 0 を返
します。
ioctl(DP_ISPOLLED) は pollfd 構造体内で指定されたファイル記述子が登録された時、 1 を返します。
Section 7-136
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
poll(7)
poll(7)
ioctl(DP_ISPOLLED) はファイル記述子が登録されていない場合やクローズされている場合に 0 を返します。
ioctl() が -1 を返すと errno にエラー状態がセットされます。
エラー
以下は、イベントポートドライバが返すエラーです。
open() が異常終了すると、 errno は以下の値のいずれかにセットされます。
[EACCES]
open() に渡したデバイスファイル名のマイナー番号は 0 ではありません。
[EAGAIN]
一時的な状態によって、内部データ構造体の割当てが異常終了しました。 open() を呼
び出すと、正常終了できる可能性があります。
[EMFILE]
プロセスで許容されているファイル記述子の最大数を越えています。
[ENFILE]
システムで許容されているファイルの数にオープンしています。
[ENXIO]
要件ファイル型のいくつかは、 /dev/poll ドライバでサポートされていないものがあり
ます。以下の 警告セクションを参照してください。
write() または ioctl() が異常終了すると errno は以下の値のいずれかにセットされます。
[EACCES]
呼び出しプロセスはイベントポートをオープンしていません。
[EBADF]
write() に渡された filedes 引き数は、オープンされているファイル記述子ではありませ
ん。
[EFAULT]
プロセスアドレス空間の外にある pollfd 構造体へのアクセスをしています。
[EINTR]
シグナルが ioctl(DP_POLL) システムコールを割り込みました。
[EINVAL]
write() に渡された nbyte 引き数が 0 以下です。
[ENODEV]
write() に渡された filedes 引き数は、イベントポートのファイル記述子ではありませ
ん。
例
以下の例は、ネットワークソケットファイル記述子のイベントをポールする際の /dev/poll ドライバの使用方法
を示しています。
TCPソケットファイル記述子 (sd) を登録して、新しいコネクションが確立した場合や、入力データが使用可能
になった場合に、 ioctl(DP_POLL) がアプリケーションに通知するようにします。
struct pollfd regpfd;
int err;
regpfd.fd = sd;
regpfd.events = POLLIN;
err = write(evpfd, &regpfd, sizeof(regpfd));
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-137
poll(7)
poll(7)
アプリケーションがアウトバンドデータの到着を判別する必要がある場合、 POLLRDBAND と POLLIN の論
理和を指定する必要があります。
1つまたは2つ以上(100まで)のコネクションでの登録されたソケットでイベントを待つ場合
struct pollfd pollpfd[100];
struct dvpoll dvp;
int npoll;
dvp.dp_fds = pollpfd;
dvp.dp_nfds = 100;
dvp.dp_timeout = -1;
npoll = ioctl(evpfd, DP_POLL, &dvp);
ソケットへの非ブロッキング書き込みが不完全な場合、以下のようにソケットを登録すれば、 ioctl(DP_POLL)
が後でソケットが再び書き込み可能になったときにアプリケーションに通知してくれます。通常、ソケットは
入力通知を受け取るように登録されています。以下で POLLOUT 通知を追加します。
struct pollfd regpfd;
int err;
regpfd.fd = sd;
regpfd.events = POLLOUT;
err = write(evpfd, &regpfd, sizeof(regpfd));
最後の非ブロッキング書き込みが終了したとき、以下を使用すると POLLOUT の登録を取り消し、入力通知の
登録を継続できます。 POLLOUT 登録を削除するには、 POLLREMOVE を使用してください。
struct pollfd regpfd[2];
int err;
regpfd[0].fd = sd;
regpfd[0].events = POLLREMOVE;
regpfd[1].fd = sd;
regpfd[1].events = POLLIN;
err = write(evpfd, regpfd, sizeof(regpfd));
同じ処理をより一般的なケースで行う場合、(例えば、ファイル記述子がどのように登録されているかアプリ
ケーションライブラリが分からない場合など) 以下のように ioctl(DP_ISPOLLED) を使用します。
struct pollfd regpfd[2];
int err;
regpfd[0].fd = sd;
Section 7-138
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
poll(7)
poll(7)
regpfd[0].events = POLLREMOVE;
regpfd[1].fd = sd;
err = ioctl(evpfd, DP_ISPOLLED, &regpfd[1]);
regpfd[1].events &= ˜POLLOUT;
/* clear POLLOUT */
err = write(evpfd, regpfd, sizeof(regpfd));
警告
/dev/poll は、アプリケーションに多数の記述子が登録されているときは特に、 select() や poll() よりも優れたパ
フォーマンスを発揮します。しかし、同時に特定の状態が多数のファイル記述子に起こる場合は、パフォーマ
ンスレベルが低下します。
open() が -1 を返し、 errno が [ENXIO] にセットされた場合、これは必要なシステムパッチがインストールさ
れていないか、システム管理者がファイルシステムやトランスポート /dev/poll (イベントポート) をサポートす
るSTREAMSパッチをインストールする必要があることを意味します。
pollfd 構造内の1つまたは、2つ以上のファイル記述子が登録出来ない場合、または登録取り消し出来ない場
合、 write() システムコールはエラーを返しません。
POLLREMOVE が write() に渡された pollfd 構造体内の他のポール条件と一緒に論理和として指定された場
合、 POLLREMOVE は無視されます。他のポール条件は、登録されたファイル記述子に対する存在するどの
ポール条件とも一緒に論理和として指定されます。
ioctl(DP_POLL) システムコールは最初の dp_nfds アクティブファイル記述子だけを返します。追加アクティブ
ファイル記述子がある場合、何も表示されません。
ioctl(DP_ISPOLLED) システムコールは、他社の /dev/poll ドライバの製品と互換性を持たせるため、 pollfd 構
造体の revents メンバーにもその結果を返します。
pollfd 構造体のファイル記述子がオープンされていない場合、 ioctl(DP_ISPOLLED) システムコールはエラー
を返しません。
イベントポートがクローズしていて、多数のファイル記述子が登録されたままの場合、 close() システムコール
は終了するのにかなりの時間がかかることがあります。
著者
イベントポートドライバはHPが単独で開発したものです。
ファイル
/dev/poll
ドライバのデバイスファイル
/sbin/init.d/devpoll
/dev/poll を作成する起動スクリプト
/etc/rc.config.d/devpoll
起動スクリプトの構成パラメータ
参照
ioctl(2), mknod(2), open(2), pipe(2), poll(2), select(2), send(2), socket(2), socketpair(2), write(2), t_open(3).
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-139
ps2(7)
ps2(7)
名称
ps2, ps2kbd, ps2mouse − ps/2 キーボード/マウス デバイスドライバ、およびファイル。
構文
#include <sys/ps2io.h>
説明
ps2 ドライバにより、 PS/2 インタフェースハードウェアを搭載したHPワークステーション上で、IBMパーソ
ナルシステム/2 (PS/2) 互換のキーボード、およびマウスデバイスを使用できるようになります。
シングルインタフェース システムの場合、 PS/2 デバイスファイル名には次のフォーマットを使用します。
/dev/ps2_n
ここで、 n は、 0から15までのインタフェースポート番号を表します。例えば、 /dev/ps2_1 というデバイス
ファイルを使用してポート1にアクセスします。
また、複数のインタフェースを搭載したシステムの場合、 PS/2 デバイスファイル名には、次のフォーマットを
使用します。
/dev/ps2_m.n
ここで、 m はインタフェース番号、 n はポート番号をそれぞれ表します。例えば、 /dev/ps2_1.2 というデバイ
スファイル名を使用して、インタフェース1のポート2にアクセスします。
ps2 はブート時に、ポート0から最大ポート番号までの範囲で全インタフェースポートを走査して、接続された
PS/2 デバイスを識別します。 /dev/ps2mouse デバイスファイルは、 ps2 が最初に検出するマウスにアクセスし
ます。また、 /dev/ps2kbd デバイスファイルは、 ps2 が最初に検出するキーボードにアクセスします。
PS/2 デバイスは「低速」デバイスとして分類されます。すなわち、 ps2 へのシステムコールは、キャッチされ
た信号によって割り込まれる可能性があるということです (signal(5) 参照)。
マウスは、2つの出力モードのいずれかで使用することができます。まず、ストリームモードの場合、マウス
はマウスの移動、またはボタンの押下に反応して、3バイトのレポートパケットを生成します。このレポート
は、 read() システムコール (read(2) 参照) によって取り込むことができます。一方、プロンプトモードの場
合、 ioctl() 要求はマウスをポーリングして、アドレスが ioctl() コールに対する引き数として渡されるバッファ
へ3バイトのレポートパケットが返されます。
PS/2 キーボードは、キーの押下/解放のイベントに対応するキーコードを返します。 PS/2 キーボードから
ASCII 文字を読み取るには、内部ターミナルエミュレータ (ITE) を使用ます。 ITE が使用する ASCII ターミナ
ルインタフェースについては、 termio(7) で説明してあります。
ps2 ドライバには、 PS/2 キーボード、およびマウスに対する低レベルのプログラミングインタフェースが用意
されています。これらのデバイスに、ハードウェアから独立した形でアクセスする場合は、X Windowsプログ
ラミング環境を使用してください。
Section 7-140
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
ps2(7)
ps2(7)
システムコール
open() システムコールは、指定された PS/2 デバイスに対して排他的にアクセスします (open(2) 参照)。ポート
がオープンされている場合、このポートに対する open() コールはすべて errno() を [EBUSY] にセットして異常
終了します (errno(2) 参照)。
また存在しないポートをオープンしようとすると、 errno を [ENXIO] にセットして open() コールは異常終了
します。
システムブート時にキーボードが検出されないで open() が /dev/ps2kbd をオープンしようとする場合、あるい
はシステムブート時にマウスが検出されないで、 open() が /dev/ps2mouse をオープンしようとする場合には、
open() は errno を [ENXIO] にセットして異常終了します。
デバイスが接続されていない既存の ps2 ポートはオープンできます。
正しくオープンされると、これまでデバイスから送られている入力はすべて破棄されます。キーストロークは
デフォルトでは、 ITE を経由します。キーボードがオープンされている間、 ITE は、キーボードからのキース
トロークを受け取りません。すなわち、このキーボードデバイスをクローズしない限り、キーボード入力に排
他的アクセスを行います。
O_NDELAY および O_NONBLOCK のファイルステータス フラグをセットして、ノンブロッキングリード (
open(2) 参照) を使用可能にすることができます。
read() は、PS/2 デバイスからバイトを返します。 HP-UXでは、各ポートに対し512バイトのバッファが確保さ
れます。バッファがいっぱいになると、これ以降デバイスから送られるバイトはすべて破棄されます。
要求されたバイト数に対して十分な量のデータがバッファにたまった場合、 read() コールは、要求された量の
データを読み取り、読み取ったバイト数を返して、正常終了します。
要求されたバイト数に対して十分な量のデータがなくとも、バッファ内に1バイトでもあれば、 read() は、
バッファ内のデータをすべて読み取り、実際に読み取ったバイト数を返して正常終了します。
O_NDELAY と O_NONBLOCK のファイルステータス フラグがいずれもクリアされており、読み取ることの
できるデータがない場合は、データが読み取れるようになるまで、あるいは信号を受け取るまで、 read() コー
ルはブロックされます。
また O_NDELAY ファイルステータス フラグがセットされており、読み取ることのできるデータがない場合、
read() コールは、ブロックされるのではなく、ゼロを返します。
O_NONBLOCKファイルステータスフラグがセットされており、読み取ることのできるデータがない場合、
read() コールは errno を [EAGAIN] にセットして、 -1 を返します (errno(2) 参照)。
ps2 では、 write() システムコールはサポートされていません。
select() システムコールを使用して、 ps2 ポートからデータが読み取り可能かどうかを判断することができま
す。書き込み、または例外条件に対して select() を使用すると、必ずファイル記述子ビットマスクに偽の指示
を返します (select(2) 参照)。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-141
ps2(7)
ps2(7)
ioctl() システムコールを使用して PS/2 マウス、およびキーボードのデバイスで特殊な操作を行うことができま
す (ioctl(2) 参照)。 ps2 ドライバの ioctl() 要求は、3つのグループに分類することができます。すなわちマウス
とキーボードに対する汎用要求、キーボード固有の要求、およびマウス固有の要求の3種類です。キーボード
に対してマウス固有の要求を使用したり、マウスに対してキーボード固有の要求を使用すると、 errno を
[EINVAL] にセットして、 -1 とともに異常終了します。
PS/2デバイスに接続されていないポートに ioctl() 要求 (PS2_PORTSTATを除き) を使用すると、タイムアウト
になり、 errno を [EIO] にセットして -1 を返します。
ioctl() システムコールはすべて、次の構文を使用します。
int ioctl(int fildes, int request, char *arg);
パラメーター、または戻りデータを必要とする要求はすべて、 arg パラメーターがアドレスを指定する4バイ
トの符号なしキャラクタバッファを使用します。
次の request コードは、 <sys/ps2io.h> の中で定義されています。
キーボードとマウスに ioctl() 要求
PS2_PORTSTAT
ドライバのステータス情報を返します。
arg がアドレスを指定するキャラクタバッファに 2バイトデータが返されます。
接続されたデバイスのタイプを示すバイト0は、次の値を取ることができます。
PS2_NONE
デバイスが検出されません。
PS2_MOUSE
マウスが検出されました。
PS2_KEYBD
キーボードが検出されました。
PS2_UNKNOWN 未知のデバイスが検出されました。
バイト1には、各ドライバ情報に対するビットフラグが含まれます。このバイト
には、 /usr/include/sys/ps2io.h ファイル中で次のビットマスクが定義されていま
す。
INTERFACE_HAS_ITE
これがセットされると、内部ターミナル
エミュレータ (ITE)は、キーボード入力
用としてこのポートを含むインタフェー
スを使用します。
PORT_HAS_FIRST_KEYBD
これがセットされると、ポートは、ドラ
イバによって最初に検出されたキーボー
ドに接続されます。
PORT_HAS_FIRST_MOUSE
これがセットされると、ポートは、ドラ
イバによって最初に検出されたマウスに
接続されます。
Section 7-142
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
ps2(7)
ps2(7)
すべての他のビットは、現在は使用されず、ゼロクリアされます。
PS2_DISABLE
PS/2デバイスは使用不能です。
これ以降のデバイスからの出力は、デバイス自体により禁止されます。この要求
では、 arg を使用しません。デバイスによっては、使用不能以外の動作を実行す
るものがあります。
キーボードは内部状態をデフォルトにリセットし、キーの走査を停止して、以降
のコマンドを待機します。
マウスはレポートの転送を停止して、使用不能になります。
PS2_ENABLE
PS/2デバイスを使用可能にします。
デバイスからの転送が使用可能になります。この要求では、 arg を使用しませ
ん。
PS2_IDENT
PS/2デバイスを識別します。
arg でアドレスを指定する4バイトバッファに、デバイスタイプを識別する値が
返されます。キーボードは、 (arg[0]=0xAB と arg[1]=0x83) の2バイトを返しま
す。マウスは、 (arg[0]=0x00) の1バイトを返します。
デバイスをデフォルト (パワーアップ時の) 状態にします。
PS2_SETDEFAULT
デバイスは、デフォルトの内部状態に戻されます。この要求は arg を使用しませ
ん。
PS2_RESET
PS/2デバイスをリセットします。
デバイスは、内部リセットルーチンを実行し、さらにパワーアップテストを実行
するように指示されます。パワーアップテストの結果は、 arg でアドレスを指定
する4バイトバッファに返されます。マウスは、正常終了のリセットを示す2バ
イト (arg[0]=0xAA と arg[1]=0x00) キーボードが、 (arg[0]=0xAA) の1バイトを返
します。
キーボード固有の ioctl() 要求
PS2_SCANCODE
キーボード スキャンコードセットを選択
キーボードが使用する走査コードセットは、 arg がアドレスを指定するバッファの最初のバイ
トとして渡されます。このバイトには、次の値を使用できます。
SCANCODE_1
走査コードセット1を選択します。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-143
ps2(7)
ps2(7)
SCANCODE_2
走査コードセット2を選択します。
SCANCODE_3
走査コードセット3を選択します。
GET_SCANCODE
使用した走査コードを返します。
GET_SCANCODE を指定すると、 arg がアドレスを指定するキャラクタバッファの最初のバ
イトとしてキーボードが使用する走査コードが返されます。キーボードによっては、いくつか
の走査コードセットをサポートしていないものがあります。
PS2_ALL_TMAT
すべてのキーをタイプマティック動作にセットします。
この要求は、キーボードが任意の走査コードセットを使用している場合に出すことができま
す。ただし、走査コードセット3の動作に限って影響をおよぼします arg パラメーターは使用
しません。タイプマティックの速度と遅延は、 ioctl() 要求 PS2_RATEDELAY を介してセット
します。
PS2_ALL_MK
すべてのキーをメークオンリー動作にセットします。
この要求は、キーボードが任意の走査コードセットを使用している場合に出すことができま
す。ただし、走査コードセット3の動作に限って影響をおよぼします。 arg パラメーターは使
用しません。
PS2_ALL_MKBRK
すべてのキーをメーク/ブレーク動作にセットします。
この要求は、キーボードが任意の走査コードセットを使用している場合に出すことができま
す。ただし、走査コードセット3の動作に限って影響をおよぼします。 arg パラメーターは使
用しません。
PS2_ALL_TMAT_MKBRK
すべてのキーをタイプマティックメーク/ブレーク動作にセットします。
この要求は、キーボードが任意の走査コードセットを使用している場合に出すことができま
す。ただし、走査コードセット3の動作に限って影響をおよぼします。 arg パラメーターは使
用しません。タイプマティックの速度と遅延は、 ioctl() 要求 PS2_RATEDELAY を介してセッ
トします。
PS2_KEY_TMAT
個々のキーにタイプマティック動作をセットします。
Section 7-144
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
ps2(7)
ps2(7)
個々のキーに対する走査コードセット3のキーコードが、 arg でアドレスを指定されるキャラ
クタバッファの最初のバイトとして渡されます。この要求は、キーボードが任意の走査コード
セットを使用している場合に出すことができます。ただし、走査コードセット3の動作に限っ
て影響をおよぼします。タイプマティックの速度と遅延は、 ioctl() 要求 PS2_RATEDELAY を
介してセットします。この要求の後、キーボードが使用不能になっている可能性があるので、
PS2_ENABLE 要求を、 PS2_KEY_TMAT の後に実行する必要があります。
PS2_KEY_MAKE
個々のキーにメークオンリー動作をセットします。
個々のキーに対する走査コードセット3のキーコードが、 arg でアドレスを指定されるキャラ
クタバッファの最初のバイトとして渡されます。この要求は、キーボードが任意の走査コード
セットを使用している場合に出すことができます。ただし、走査コードセット3の動作に限っ
て影響をおよぼします。この要求の後、キーボードが使用不能の状態になっている可能性があ
るので、 PS2_ENABLE 要求を、 PS2_KEY_MAKE の後に実行する必要があります。
PS2_KEY_MKBRK
個々のキーにメーク/ブレーク動作をセットします。
個々のキーに対する走査コードセット3のキーコードが、 arg でアドレスを指定されるキャラ
クタバッファの最初のバイトとして渡されます。メーク/ブレーク動作は、このキーに対して
セットされます。この要求は、キーボードが任意の走査コードセットを使用している場合に出
すことができます。ただし、走査コードセット3の動作に限って影響をおよぼします。この要
求の後、キーボードが使用不能の状態になっている可能性があるので、 PS2_ENABLE 要求
を、 PS2_KEY_MKBRK の後に実行する必要があります。
PS2_INDICATORS
arg でアドレスを指定されるキャラクタバッファの最初のバイトの値に応じて、
Num Lock, Caps Lock, および Scroll Lockのキーボードインジケータの状態をセッ
トします。
インジケータは、次のようなビットにマップされています。
NONE_LED
アクティブなインジケータはありません。
CAPS_LED
Caps Lockインジケータがアクティブです。
NUM_LED
Num Lockインジケータがアクティブです。
SCROLL_LED Scroll Lockインジケータがアクティブです。
PS2_RATEDELAY
arg がアドレスを指定するキャラクタバッファの最初のバイトとして渡される値
を指定することにより、すべてのタイプマティックキーに対する速度と遅延を
セットします。
ビット0から4までで速度を指定します。ビット5と6で遅延を指定します。ビット
7 (最上位ビット) は使用しないので、ゼロにセットしておきます。ミリ秒単位で
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-145
ps2(7)
ps2(7)
指定する遅延は、次の式で決まります (ここで X は、ビット5 と 6 によって決ま
る数値を表します)。
delay = (1+X) * 250 (+|− 20%)
期間 (ある出力キーコードから次のコードまでの秒単位の間隔) は、次の式で決まります。ここで Y
は、ビット 0 から 2 までによって決まる数値、また Z は、ビット 3 と 4 によって決まる数値をそれぞ
れ表します。
period = (8+Y ) * (2ˆZ) * 0.00417 (+|− 20%)
タイプマティック速度 (1秒あたりのメークコード数) は、上の式を使用して計算した各期間ごとに適用
されます。デフォルトのタイプマティック速度は、毎秒 10.9文字です。デフォルトの遅延は、 500ミ
リ秒です。
マウス固有の ioctl() 要求
PS2_SAMPLERATE
arg がアドレスを指定するキャラクタバッファの最初のバイトとして渡す値を指定することに
より、ストリームモードで使用するマウスのサンプリング速度をセットします。
7通りの速度がサポートされています。
SAMPLE_10
10 レポート/秒 (最大)
SAMPLE_20
20 レポート/秒 (最大)
SAMPLE_40
40 レポート/秒 (最大)
SAMPLE_60
60 レポート/秒 (最大)
SAMPLE_80
80 レポート/秒 (最大)
SAMPLE_100
100 レポート/秒 (最大)
SAMPLE_200
200 レポート/秒 (最大)
デフォルトの速度は 100レポート/秒 (最大) です。この要求は、ストリームモードのマウスサ
ンプリング速度のみを更新します。マウスがプロンプトモードにある場合、この要求は無視さ
れます。
PS2_PROMPTMODE
マウスをプロンプトモードに設定します。
プロンプトモードの場合、マウスの移動やボタンの押下によって内部値を更新しますが、
ioctl() 要求 PS2_REPORT への応答に限りレポートを生成します。 arg パラメーターは使用し
ません。
Section 7-146
Hewlett-Packard Company
−7−
HP-UX 11i Version 2: September 2004
ps2(7)
ps2(7)
PS2_REPORT
プロンプトモードのマウスレポートを生成します。
この要求によりマウスをポールして、 arg パラメーターがアドレスを指定するキャラクタバッ
ファに返す 3バイトレポートを生成します。このレポートのフォーマットは次の通りです。
バイト 1
ボタン、符号、オーバフローのビットマップ
ビット 0
左ボタン ( 1=押下 )
ビット 1
右ボタン ( 1=押下 )
ビット 2
中央ボタン ( 1=押下 )
ビット 3
常に 1
ビット 4
X データ符号 ( 1=負 )
ビット 5
Y データ符号 ( 1=負 )
ビット 6
X データオーバフロー(1=オーバフロー)
ビット 7
Y データオーバフロー(1=オーバフロー)
バイト 2
X 座標データバイト
バイト 3
Y 座標データバイト
X、Y 座標の値は、 2の補数で表します。 ioctl() 要求 PS2_2TO1_SCALING で指定されたス
ケーリング操作は、 ioctl() 要求 PS2_REPORT で得られるレポートには適用されません。
PS2_2TO1_SCALING は、ストリームモードで送られたレポートに限り影響を与えます。
PS2_STREAMMODE
マウスをストリームモードに設定します。
マウスがストリームモードにあるときは、最後のレポート以来、マウスの移動、あるいはボタ
ンの押下/解放の操作が行われると、必ず3バイトレポートを転送します。最大レポート速度
は、 ioctl() 要求 PS2_SAMPLERATE でセットします。サンプル間隔の中で、ボタンの押下と
解放の両方が行われると、サンプル間隔の終わりにボタンの押下操作としてレポートされま
す。
ストリームモード レポートは、 read() システムコール (read(2) 参照) を介して得られます。レ
ポートのフォーマットは、上で説明した ioctl() 要求 PS2_REPORT で返されるレポートと同じ
です。
ストリームモードの場合、 PS2_DISABLE 要求は、その他の ioctl() 要求よりも優先して送らな
ければなりません。
arg パラメーターは使用しません。
HP-UX 11i Version 2: September 2004
−8−
Hewlett-Packard Company
Section 7-147
ps2(7)
ps2(7)
PS2_STATUS
マウスのステータスをレポートします。
この要求によりマウスをポールして、 arg パラメーターがアドレスを指定するキャラクタバッ
ファに返す 3バイトレポートを生成します。
ステータスレポートのフォーマットは次の通りです。
バイト 1
ボタン、およびマウスの内部状態のビットマップ
ビット 0
右ボタン
ビット 1
中央ボタン ( 1=押下 )
ビット 2
左ボタン
ビット 3
常に 0
ビット 4
0の場合、スケーリングは1:1。1の場合、スケーリングは2:1。
ビット 5
0の場合、使用不能。1の場合、使用可能。
ビット 6
0の場合、ストリームモード。1の場合、プロンプトモード。
ビット 7
常に 0
バイト 2
現在の分解能の設定
バイト 3
現在のサンプリング速度
( 1=押下 )
( 1=押下 )
PS2_RESOLUTION
arg でアドレスを指定するキャラクタバッファの最初のバイトとして渡す値を指定することに
より、 X,Y座標値に対するマウスの分解能をセットします。 4つの独立した分解能がサポート
されています。
Resolution
200 DPI
320 DPI
RES_1
1 カウント/mm
1 カウント/mm
RES_2
2 カウント/mm
3 カウント/mm
RES_3
4 カウント/mm
6 カウント/mm
RES_4
8 カウント/mm 12 カウント/mm
PS2_2TO1_SCALING
マウスのスケーリングを2:1にセットします。ストリームモード レポートで返されるX,Y座標
の値は、絶対値で6未満の場合を除き、2倍になります。6未満の場合は、非線形で新しい値に
変換されます。下記の表に変換の様子を示します。
Section 7-148
マウスの間隔値
変換される値
Hewlett-Packard Company
−9−
HP-UX 11i Version 2: September 2004
ps2(7)
ps2(7)
0
0
+/-|− 1
+/-|− 1
+/-|− 2
+/-|− 1
+/-|− 3
+/-|− 3
+/-|− 4
+/-|− 6
+/-|− 5
+/-|− 9
その他 n
2*n
この変換は、 ioctl() 要求 PS2_REPORT で得られるレポートには適用されません。
arg パラメーターは使用しません。
PS2_1TO1_SCALING
マウスのスケーリングを1:1にセットします。
マウスレポートで返されるX,Yの値はスケールされません。この要求では、 arg パラメーター
は使用しません。
エラー
上記の説明で述べたように、システムコールが失敗した場合、 errno は次の内の 1つに設定されます。
[EBUSY]
指定されたPS/2 デバイスがすでにオープンされています。
[EFAULT]
システムコールに対する引き数を使用するときに、使われたアドレスが適当ではあり
ません。
[EINTR]
open(), read(), または ioctl() のシステムコールにシグナルによる割り込みが発生しま
した。
[EINVAL]
ioctl() により適当でないパラメーターが検出されました。
[EIO]
ioctl() の実行中にハードウェア、またはソフトウェアのエラーが発生しました。
[ENODEV]
PS/2デバイスには、 write() がサポートされていません。
[ENXIO]
指定されたアドレスにデバイスが存在しません。
例
fildes が、キーボードに接続された ps2 ポートに対する適当なファイル記述子であるとします。最初の例で
は、キーボードインジケータを点滅させ、走査コードセット 3 を設定し、キーコードをプリントしている間、
無限ループに入ります。
#include <sys/ps2io.h>
unsigned char kbdbuf[4]; /* buffer for ioctl operations */
HP-UX 11i Version 2: September 2004
− 10 −
Hewlett-Packard Company
Section 7-149
ps2(7)
ps2(7)
unsigned char inchar;
/* keycode read */
/* flash the LED indicators */
kbdbuf[0] = CAPS_LED | SCROLL_LED | NUM_LED; /* all on */
if( ioctl( fildes, PS2_INDICATORS, &kbdbuf) < 0){
perror("ioctl PS2_INDICATORS failed");
exit(1);
}
printf("Indicators on\n");
sleep(1);
kbdbuf[0] = NONE_LED; /* all off */
if( ioctl( fildes, PS2_INDICATORS, &kbdbuf) < 0){
perror("ioctl PS2_INDICATORS failed");
exit(1);
}
printf("Indicators off\n");
/* use scancode set 3 */
kbdbuf[0] = SCANCODE_3;
if( ioctl( fildes, PS2_SCANCODE, &kbdbuf) < 0){
perror("ioctl PS2_SCANCODE failed");
exit(1);
}
/* identify our scancode set */
kbdbuf[0] = GET_SCANCODE;
if( ioctl( fildes, PS2_SCANCODE, &kbdbuf) < 0){
perror("ioctl PS2_SCANCODE failed");
exit(1);
}
printf("Keyboard reports it is using scancode set %d\n",
(unsigned int) kbdbuf[0]);
/* now, loop forever while printing keycodes */
while( 1){
read( fildes, &inchar, 1);
printf("Keycode: %x\n", (unsigned int)inchar);
}
Section 7-150
Hewlett-Packard Company
− 11 −
HP-UX 11i Version 2: September 2004
ps2(7)
ps2(7)
下記の例では、マウスをストリームモードに設定し、レポートを80/秒に制限して、マウスを使用可能にし、さ
らにマウスレポートのプリントを無限ループで行います。 fildes が、マウスに接続された ps2 ポートに対する
適当なファイル記述子であるとします。
#include <sys/ps2io.h>
unsigned char buf[3];
/* mouse report buffer */
unsigned char ioctl_buf[4]; /* mouse ioctl buffer */
/* first, disable the mouse */
if (ioctl( fildes, PS2_DISABLE) < 0){
perror("ioctl PS2_DISABLE failed\n");
exit(1);
}
printf("Mouse disabled\n");
/* Put mouse in stream mode */
if (ioctl( fildes, PS2_STREAMMODE) < 0){
perror("ioctl PS2_STREAMMODE failed\n");
exit(1);
}
printf("Mouse in stream mode\n");
/* set samplerate */
ioctl_buf[0] = SAMPLE_80;
if (ioctl( fildes, PS2_SAMPLERATE, ioctl_buf) < 0){
perror("ioctl PS2_SAMPLERATE failed\n");
exit(1);
}
printf("Mouse sample rate set to SAMPLE_80\n");
/* Enable mouse */
if (ioctl( fildes, PS2_ENABLE) < 0){
perror("ioctl PS2_ENABLE failed\n");
exit(1);
}
printf("Mouse enabled.\n");
for (;;) {
if (read(fildes, &buf[0], 1) != 1){
HP-UX 11i Version 2: September 2004
− 12 −
Hewlett-Packard Company
Section 7-151
ps2(7)
ps2(7)
perror("Read of report byte 1 failed");
return 1;
}
if (read(fildes, &buf[1], 1) != 1){
perror("Read of report byte 2 failed");
return 1;
}
if (read(fildes, &buf[3], 1) != 1){
perror("Read of report byte 3 failed");
return 1;
}
printf("mouse: 0x%02x, %d %d\n", buf[0], buf[1], buf[2]);
}
著者
ps2 はHPで開発されました。
PS/2 、および Personal System/2 は、International Business Machines社の米国およびその他の国での登録商標で
す。
ファイル
/usr/include/sys/ps2io.h
/dev/ps2_[0-15]
/dev/ps2_*.[0-15]
/dev/ps2mouse
/dev/ps2kbd
参照
close(2), errno(2), fcntl(2), ioctl(2), open(2), read(2), select(2), signal(5), termio(7)
SoftPC User’s Guide
SoftPC Installation Guide
Sun System Administrators Guide for the HP700/RX
Section 7-152
Hewlett-Packard Company
− 13 −
HP-UX 11i Version 2: September 2004
ptem(7)
ptem(7)
名称
ptem − STREAMS pty(疑似ターミナル)エミュレーションモジュール
構文
#include <sys/stropts.h>
int ioctl(fd_slave, I_PUSH, "ptem");
説明
ptem は、 ldterm (STREAMS回線制御)および pts (STREAMSスレーブptyドライバー) と協同して端末をエミュ
レートするSTREAMSモジュールです。通常 ptem モジュールは、 pts の上かつ ldterm の下におかれます。
ユーザープロセスは、 ldterm をプッシュする前に、 STREAMS I_PUSH ioctl(2) システムコールを呼び出して
ptem モジュールをptyのスレーブ側にプッシュしなければなりません。 ptem は、 ptm (STREAMS ptyマスター
ドライバー)からまたは ldterm から下流に渡されたすべてのターミナル ioctl コマンドの処理を担当します。
ldterm と ptem は協同して、STREAMS ptyスレーブで実際のターミナル動作を提供します。しかし、ptyサブ
システム中には実際の端末またはモデムが存在しないので、一部のターミナル ioctl コマンドは無視され、肯定
応答だけが行われます。事実、 termio または termios 構造体(それぞれ TCSETA または TCSETS ioctl で使用
されます)の c_clfag フィールドのフラグはどれも、ptyに影響を与えません。ただし、ボーレートがゼロに設定
されている場合は例外で、この場合はptyコネクションがハングアップするという影響があります。同様に、
c_iflag フィールドのパリティまたは遅延フラグも、ptyに対してまったく影響を与えません。
以下に、 ptem モジュールが行う処理の要約を示します。
•
適切な場合、以下の ioctl を処理し、これらを ptem の書き込み待ち行列で受信したならば、
M_IOCACK メッセージを上流へ送信することにより肯定応答します。
TCSETA, TCSETAW, TCSETAF, TCSETS, TCSETSW, TCSETSF, TCGETA, TCGETS, および TCSBRK
•
ウィンドウサイズの記録をとります。これは、 TIOCSWINSZ, TIOCGWINSZ, および JWINSIZE
ioctl で必要です。
•
上記以外の ioctl を書き込み待ち行列で受信した場合、 ptem は否定の応答をするため、 M_IOCNAK メッセージを上流に送信します。
•
以下に示す ioctl は、 ptem が処理をした後に下流に渡されます。
TCSETA, TCSETAW, TCSETAF, TCSETS, TCSETSW, TCSETSF, TCSBRK, および TIOCSWINSZ
•
ptem の読み取り待ち行列で受信された M_IOCNAK メッセージは、 ptm 上に pckt モジュールが
プッシュされていないのに上記の ioctl がptyマスターSTREAMSヘッドに到着し、そのために
M_IOCNAK メッセージがそこから下流に送信された場合、解放されます。
•
ptem のオープン時に、制御ターミナルをセットアップするための条件がすべて揃っていた場合、
ptem は制御ターミナルを割り当てるために M_SETOPTS メッセージ( SO_ISATTY フラグが設定済
み)を上流のSTREAMSヘッドへ送信します。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-153
ptem(7)
ptem(7)
•
読み取り待ち行列で、タイプが TCSBRK の M_IOCTL メッセージを受信した場合、 ptem は
M_IOCACK メッセージを下流へ、また M_BREAK メッセージを上流へ送信します。
•
書き込み待ち行列で、ボーレートをゼロに設定する ioctl メッセージを受信した場合(例: CBAUDが
B0に設定されている TCSETA )、 ptem は M_IOCACK メッセージを上流へ、またゼロ長のメッ
セージを下流へ送信します。後者はptyマスタープロセスによって読み取られます。
•
読み取り待ち行列で、タイプが TIOCSIGNAL の M_IOCTL メッセージを受信した場合、 ptem は
M_IOCACK メッセージを下流へ、また M_PCSIG メッセージ(シグナル番号は M_IOCTL メッ
セージ中と同じ値に設定)を上流へ送信します。
•
読み取り待ち行列で、タイプが TIOCREMOTE の M_IOCTL メッセージを受信した場合、 ptem
は M_IOCACK メッセージを下流へ送信します。また M_CTL メッセージ(ioc_cmdは
MC_DO_CANON または MC_NO_CANON に設定)を上流へ送信し、 ldterm 上での入力処理を使
用可能または使用不能にします。
•
読み取りまたは書き込み待ち行列で、 M_DELAY メッセージを受信した場合、 ptem は何の動作も
行わず、単にこのメッセージを破棄します。
•
書き込み待ち行列で、タイプが JWINSIZE の M_IOCTL メッセージを受信した場合、 ptem は、
自分の中の jwinsize 構造体の値がゼロでないならば、 M_IOCACK メッセージに jwinsize 構造体を
付けて上流に送信します。値がゼロならば、 M_IOCNAK メッセージを上流に送信します。
•
書き込み待ち行列で、タイプが TIOCGWINSZ の M_IOCTL メッセージを受信した場合、 ptem
は、自分の中の winsize 構造体の値がゼロでないならば、 M_IOCACK メッセージに winsize 構造
体を付けて上流へ送信します。値がゼロならば、 M_IOCNAK メッセージを上流へ送信します。
•
書き込み待ち行列でタイプが TIOCSWINSZ の M_IOCTL メッセージを受信した場合、 ptem は渡
された情報を winsize 構造体中に保存し、ウィンドウサイズが変更された場合は M_PCSIG (シグナ
ル番号は SIGWINCH に設定)を上流のptyスレーブプロセスへ送信します。
•
読み取り待ち行列で、タイプが TIOCGWINSZ の M_IOCTL メッセージを受信した場合、 ptem
は、自分の中の winsize 構造体の値がゼロでないならば M_IOCACK メッセージに winsize 構造体
を付けて下流へ送信します。値がゼロならば、 M_IOCNAK メッセージを下流へ送信します。
•
読み取り待ち行列で、タイプが TIOCSWINSZ の M_IOCTL メッセージを受信した場合、 ptem は
渡された情報を winsize 構造体中に保存し、ウィンドウサイズが変更された場合は M_PCSIG (シグ
ナル番号は SIGWINCH に設定)を上流のptyスレーブプロセスへ送信します。
•
上記以外のメッセージはすべて、次のモジュールまたはドライバーへ渡されます。
著者
ptem はHPが開発しました。
Section 7-154
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
ptem(7)
ptem(7)
参照
ioctl(2), streamio(7), ptm(7), pts(7), ldterm(7).
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-155
ptm(7)
ptm(7)
名称
ptm − STREAMSマスターpty(疑似ターミナル)ドライバー
構文
#include <sys/stropts.h>
#include <sys/ptyio.h>
#include <sys/strtio.h>
int open("/dev/ptmx", O_RDWR);
説明
疑似ターミナル(pty)は、緊密に結合された2個一組みのキャラクター型デバイスから構成されます。これらは
マスターデバイスおよびスレーブデバイスと呼ばれます。マスターおよびスレーブの2つのptyデバイスドライ
バーは、協同してターミナルコネクションをシミュレートします。このときマスターは疑似ターミナル サーバ
プロセスとのコネクションを提供し、スレーブはターミナル アプリケーションプロセスに対してターミナルデ
バイス特殊ファイルアクセスを提供します。その関係を下の図に示します。
------------------------pty 関数
|
|
アプリケーション <--> |-------------------------| <--> サーバ
プロセス
|スレーブ|マスター|
|
(pts)
|
(ptm)
プロセス
|
------------------------スレーブドライバー pts は、その上にプッシュされた ptem (STREAMS ptyエミュレーションモジュール) およ
び ldterm (STREAMS回線制御モジュール) (簡略化のため上図では省略)と共に、 termio(7) で記述されている
ターミナルインタフェースを提供します。一般には、 termio(7) で記述されたターミナルインタフェースを提供
するデバイスの背後に、ハードウェアデバイスが存在します。しかしスレーブデバイスの場合はそれとは対照
的に別のプロセスが存在し、 ptyのマスター側を通してスレーブデバイスを操作します。マスターデバイスに
書き込まれたデータはスレーブデバイスに入力として渡され、スレーブデバイスに書き込まれたデータはマス
ターデバイスに入力として示されます。
STREAMS ptyサブシステムを使用するためには、マスターptyドライバー用のノード /dev/ptmx と N 個のス
レーブptyデバイスをインストールしなければなりません(スレーブptyの詳細については pts(7) を参照)。ファ
イルシステム中には、個々のマスターデバイスに対応したノードは存在しません。マスタードライバーは、
STREAMS クローンドライバー (clone(7) を参照) としてセットアップされ、そのメジャーデバイス番号はク
ローンドライバーのメジャー番号に、またそのマイナーデバイス番号は ptm ドライバーのメジャー番号に設定
されます。マスタードライバーのオープンでは、デバイスファイル パラメーターとして /dev/ptmx を指定して
open() システムコールが呼び出されます。このクローンオープン処理で、次に使用可能なマイナー番号がマス
ターデバイスに割り当てられます。マスターデバイスが使用可能なのは、マスターデバイス自身および対応す
るスレーブデバイスが、まだオープンされていない場合のみです。マスターデバイスのオープンは1回しか許
されないのに対し、スレーブデバイスは複数回オープンすることができます。マスターデバイスがオープンさ
れたとき、対応するスレーブデバイスは自動的にロックされます(スレーブのロック解除とスレーブデバイス名
Section 7-156
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
ptm(7)
ptm(7)
取得の方法については、 pts(7) を参照)。マスターとスレーブのオープン後、ユーザーは2個のファイル記述子
を受け取ります。これらは2個のストリームから構成される全二重結合の終点を表します。この2個のストリー
ムは、マスターおよびスレーブデバイスのオープン時にこれらのデバイスによって自動的に接続されます。そ
の後ユーザーは必要なモジュールをマスターおよびスレーブストリーム上にプッシュすることができます(例え
ば、ターミナル方式用に ptem および ldterm を pts の上にプッシュし、Packet Mode 機能用に pckt を ptm の
上にプッシュします)。
マスターおよびスレーブドライバーは、すべてのSTREAMS メッセージを相手ドライバーに渡します。
M_FLUSH メッセージだけは特殊な処理が必要ですが、その理由は、マスターの読み取り待ち行列がスレーブ
の書き込み待ち行列に接続され、その逆も同様だからです。したがって、 M_FLUSH メッセージがマスター−
スレーブリンクを移動するときは必ず、 FLUSHR フラグが FLUSHW フラグに変更され、その逆も同様に行
われます。マスターデバイスのクローズ時には、対応するスレーブデバイスに M_HANGUP メッセージが送信
されます。このメッセージは、このスレーブデバイスを使用不可にします。スレーブ側のプロセスは、スレー
ブデバイスに対して write() システムコールを発行するとerrno [ENXIO] を受け取りますが、スレーブストリー
ム上に残っているデータを読み取ることは可能です。最後に、すべてのデータが読み取られたら、 read() シス
テムコールは0(ゼロ)を戻し、スレーブがこれ以上は使用できないことを示します。スレーブデバイスの最後の
クローズ時には、ゼロ長の M_DATA メッセージが対応するマスターデバイスに送信されます。マスター側の
アプリケーションが read() または getmsg() システムコールを発行すると0が戻されます。このときマスターデ
バイスのユーザーは、マスターデバイスをクローズするかどうかを決定します。クローズするとマスター側の
ストリームは解体されます。マスターデバイスをオープンしたままにすると、別のユーザーが対応するスレー
ブデバイスを再度オープンして使用することが可能です。
スレーブデバイスとは異なり、マスターデバイスは端末のような動作はしません。 O_NDELAY または
O_NONBLOCK が設定されている場合、マスターデバイス上の読み取りは使用可能なデータがないとき −1 を
戻し、errno を [EAGAIN] に設定します。また書き込みはストリーム上で内部フロー制御が行われているとき-1
を戻し、errno を [EAGAIN] に設定します。
マスター ptm ドライバーは以下の ioctl() 要求をサポートします。
ISPTM
ファイル記述子がオープン マスターデバイスのものかどうかを判定します。正常終了の場
合、マスターデバイスのメジャーおよびマイナー番号(type dev_t)を戻します。これを使用し
て、対応するスレーブデバイスの名前を決定することができます。異常終了時は −1 を戻し、
errnoを [EINVAL] に設定します。HP-UXでは、 ISPTM は有効なデバイス番号として負の値を
戻すことがあります。例えば、STREAMS ptyマスターのメジャー番号が0x9cならば、 ICPTM
は負の番号である0x9C000000を戻します。したがってアプリケーションは、戻り値をチェッ
クするとき "< 0" ではなく −1 かどうかを明確に判定する必要があります。
ISPTM は関数 grantpt()、 unlockpt()、および ptsname() で使用されています。ユーザーアプ
リケーションは通常、このioctlを呼び出す必要はありません。次に、このioctlのフォーマット
を示します。
int ioctl(master_fd, ISPTM, 0)
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-157
ptm(7)
ptm(7)
マスターおよび対応するスレーブデバイスのロックを解除します。正常終了時は0を戻しま
UNLKPT
す。異常終了時は −1 を戻し、errnoを [EINVAL] に設定します。 UNLKPT は関数 unlockpt()
で使用されています。ユーザーアプリケーションは通常、このioctlを呼び出す必要はありませ
ん。次に、このioctlのフォーマットを示します。
int ioctl(master_fd, UNLKPT, 0)
TIOCREMOTE このioctlは、STREAMS pty の Remote Mode をオンまたはオフにします。Remote Mode がオン
のとき、入力データはフロー制御され、ターミナルモードにかかわらず入力処理されずに
ldterm を通過します。 ptyマスタードライバーはこのioctlを受信すると、 M_CTL メッセージ
を下流の ldterm に、 ptm、 pts、および ptem を介して送信します。 M_CTL メッセージ中
のコマンドは、Remote Mode をオンにするのかそれともオフにするのかによって、
MC_NO_CANON または MC_DO_CANON に設定されます。次に、このioctlのフォーマット
を示します。
int ioctl(master_fd, TIOCREMOTE, argument)
ここで、Remote Mode をオンにする場合はargumentを1に設定し、オフにする場合は0に設定
します。Remote Mode が使用されるのは、通常、ウィンドウマネージャ内でリモート行編集
を行う場合か、または入力をフロー制御する必要がある場合です。マスターデバイスへの1回
の書き込みは、スレーブデバイスを読み取り中のプロセスにとって1個のレコードに相当しま
す。通常の使用法では、1回のデータ書き込みは端末上でデータを1行タイプするのに相当し
ます。0(ゼロ)バイトの書き込みは EOF (ファイルの終り)文字のタイプに相当します。
TIOCSIGNAL
マスタープロセスは、このioctlを使用してスレーブプロセスにシグナルを送信します。次に、
このioctlのフォーマットを示します。
int ioctl(master_fd, TIOCSIGNAL, argument)
ここでargumentはシグナル番号で、ヘッダファイル <sys/signal.h> で定義されています。例え
ば、マスタープロセスが SIGINT シグナルをスレーブプロセスへ送信するには、次のシステ
ムコールを発行します。
ioctl(master_fd, TIOCSIGNAL, SIGINT)
著者
ptm はHPおよびOSFが開発しました。
ファイル
/dev/ptmx
/dev/pts/N
STREAMS ptyマスター クローンデバイス
STREAMS ptyスレーブデバイス(0 <= N < NSTRPTY)。ここで NSTRPTY は、調整可能な
カーネルパラメーターで、SAM を介して変更可能です。
参照
insf(1M), getmsg(2), ioctl(2), open(2), read(2), write(2), grantpt(3C), ptsname(3C), unlockpt(3C), clone(7), ldterm(7),
pckt(7), ptem(7), pts(7), streamio(7), termio(7)
Section 7-158
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
pts(7)
pts(7)
名称
pts − STREAMSスレーブpty(疑似ターミナル)ドライバー
構文
#include <sys/stropts.h>
#include <sys/termios.h>
#include <sys/strtio.h>
int open("/dev/pts/N", O_RDWR);
説明
疑似ターミナル(pty)は、緊密に結合された2個一組みのキャラクター型デバイスから構成されます。これらは
マスターデバイスおよびスレーブデバイスと呼ばれます。マスターおよびスレーブの2つのptyデバイスドライ
バーは、協同してターミナルコネクションをシミュレートします。このときマスターは疑似ターミナル サーバ
プロセスとのコネクションを提供し、スレーブはターミナル アプリケーションプロセスに対してターミナルデ
バイス特殊ファイルアクセスを提供します。その関係を下の図に示します。
−−−−−−−−−−−−−−−
|
pty 関数
|
アプリケーション <--> |−−−−−−−−−−−−−−−| <--> サーバ
プロセス
|スレーブ|マスター |
|
(pts)
|
(ptm)
プロセス
|
−−−−−−−−−−−−−−−
スレーブドライバー pts は、その上にプッシュされた ptem (STREAMS ptyエミュレーションモジュール) およ
び ldterm (STREAMS回線制御モジュール) (簡略化のため上図では省略)と共に、 termio(7) で記述されている
ターミナルインタフェースを提供します。一般には、 termio(7) で記述されたターミナルインタフェースを提供
するデバイスの背後に、ハードウェアデバイスが存在します。しかしスレーブデバイスの場合はそれとは対照
的に別のプロセスが存在し、 ptyのマスター側を通してスレーブデバイスを操作します。マスターデバイスに
書き込まれたデータはスレーブデバイスに入力として渡され、スレーブデバイスに書き込まれたデータはマス
ターデバイスに入力として示されます。
STREAMS ptyサブシステムを使用するためには、マスターptyドライバー用のノード /dev/ptmx と N 個のス
レーブptyデバイスをインストールしなければなりません(マスターptyの詳細については ptm(7) を参照)。マス
ターデバイスがオープンされたとき、対応するスレーブデバイスは自動的にロックされます。このスレーブデ
バイスは、パーミッションが変更され( grantpt() 関数を使用)、さらにロック解除されるまで( unlockpt() 関数
を使用)、どのユーザーもオープンできません。その後ユーザーは ptsname() 関数を呼び出してスレーブデバイ
スの名前を取得し、それから open() システムコールを起動してこのスレーブデバイスをオープンします。マス
ターデバイスのオープンは1回しか許されないのに対し、スレーブデバイスは複数回オープンすることができ
ます。マスターとスレーブのオープン後、ユーザーは2個のファイル記述子を受け取ります。これらは2個のス
トリームから構成される全二重結合の終点を表します。この2個のストリームは、マスターおよびスレーブデ
バイスのオープン時にこれらのデバイスによって自動的に接続されます。その後ユーザーは必要なモジュール
をマスターおよびスレーブストリーム上にプッシュすることができます(例えば、ターミナル方式用に ptem お
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-159
pts(7)
pts(7)
よび ldterm を pts の上にプッシュし、 Packet Mode 機能用に pckt を ptm の上にプッシュします)。
マスターおよびスレーブドライバーは、すべてのSTREAMS メッセージを相手ドライバーに渡します。
M_FLUSH メッセージだけは特殊な処理が必要ですが、その理由は、マスターの読み取り待ち行列がスレーブ
の書き込み待ち行列に接続され、その逆も同様だからです。例えば、 M_FLUSH メッセージがマスター − ス
レーブ間のリンクを移動するときは必ず、 FLUSHR フラグが FLUSHW フラグに変更され、その逆も同様に
行われます。マスターデバイスのクローズ時には、対応するスレーブデバイスに M_HANGUP メッセージが送
信されます。このメッセージは、このスレーブデバイスを使用不可にします。スレーブ側のプロセスは、ス
レーブ デバイスファイルに対して write() システムコールを発行するとerrno [ENXIO] を受け取りますが、ス
レーブストリーム上に残っているデータを読み取ることは可能です。最後に、すべてのデータが読み取られた
ら、 read() システムコールは0を戻し、スレーブがこれ以上は使用できないことを示します。スレーブデバイ
スの最後のクローズ時には、ゼロ長の M_DATA メッセージが対応するマスターデバイスに送信されます。マ
スター側のアプリケーションが read(2) または getmsg(2) システムコールを発行すると0(ゼロ)が戻されます。
このときマスターデバイスのユーザーは、マスターデバイスをクローズするかどうかを選択できます。クロー
ズするとマスター側のストリームは消滅します。マスターデバイスをオープンしたままにすると、別のユー
ザーが対応するスレーブデバイスを再度オープンして使用することが可能です。
例
次の例は、STREAMS ptyマスターおよびスレーブデバイスをオープンする典型的な方法を示します。
int fd_master, fd_slave;
char *slave;
...
fd_master = open("/dev/ptmx", O_RDWR);
grantpt(fd_master);
unlockpt(fd_master);
slave = ptsname(fd_master);
fd_slave = open(slave, O_RDWR);
ioctl(fd_slave, I_PUSH, "ptem");
ioctl(fd_slave, I_PUSH, "ldterm");
著者
pts はHPおよびOSFが開発しました。
ファイル
/dev/ptmx
/dev/pts/N
STREAMS ptyマスター クローンデバイス
STREAMS ptyスレーブデバイス(0 <= N < NSTRPTY)。ここで NSTRPTY は調整可能な
カーネルパラメーターで、SAMを介して変更可能です (sam(1M) を参照)。
参照
insf(1M), sam(1M), getmsg(2), ioctl(2), open(2), read(2), write(2), grantpt(3C), ptsname(3C), unlockpt(3C), ldterm(7),
ptem(7), ptm(7), streamio(7), termio(7)
Section 7-160
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
pty(7)
pty(7)
名称
pty − 疑似ターミナルドライバ
説明
pty ドライバは疑似ターミナルと呼ばれる1対のデバイスをサポートしています。疑似ターミナルは、1対の文
字デバイス、マスターデバイスとスレーブデバイスです。スレーブデバイスは、アプリケーションプロセスに
termio(7) に記述されているのと同等のインタフェースを提供します。 termio(7) に記述されているインタフェー
スを備えた他のすべてのデバイスとの相違点として、スレーブデバイスにはハードウェア装置が関係していま
せん。代わりに、疑似ターミナルのマスター側を経由してそれを操作する他のプロセスを持っています。その
ために、マスターデバイスに書き込んだものはスレーブデバイスに入力として与えられて、スレーブデバイス
に書き込んだものはマスターデバイスに入力として与えられます。
−−−−−−−−−−−−−−−
|
pty 関数
|
アプリケーション <--> |−−−−−−−−−−−−−−−| <--> サーバ
プロセス
|スレーブ|マスター|
|
(pts)
|
(ptm)
プロセス
|
−−−−−−−−−−−−−−−
OpenとClose処理
pty のスレーブ側は、マスター側のオープンやクローズをモデム接続や実際のターミナルの切断のように解釈
します。 pty のマスター側へのオープンだけが許されています。すでにオープンしているマスター側をオープ
ンしようとすると、 −1 を返して外部変数 errno を [EBUSY] に設定します。 pty の開いているファイルの記述
子のスレーブを持つマスター側をオープンしようとすると −1 を返して、外部変数 errno を [EBUSY] に設定し
ます。 pty のオープン時にビジーであるかどうかを見つける潜在的な問題点は、次の節で説明する clone open
機能を使って避けることができます。
存在しない pty をオープンしようとすると −1 を返して、外部変数 errno を [ENXIO] に設定します。 O_NDELAY を指定していない場合は、スレーブ側のオープンはマスター側がオープンされるまでハングします。
O_NDELAY を指定している場合は、マスター側がクローズされている場合はスレーブ側のオープンはエラー
を返します。 pty のマスター側をクローズした後で、スレーブ側にする ioctl() または write() 要求は、 −1 を返
して、外部変数 errno を [EIO] に設定します。 pty のマスター側をクローズした後のスレーブ側の read() 要求
は0バイトを返します。 pty のマスター側をクローズすると、 SIGHUP ハングアップシグナルを、対応するス
レーブ側のttyプロセスグループ番号に送信して、保留している入力と出力をフラッシュします。
クローンオープン
典型的な pty の使用法では、pty の組には優先順位はありません。これは、内部的に使用可能な pty をオープ
ンするために、単に open() を実行できるので便利です。 /dev/ptym/clone をオープンすると、使用されていな
いマスター側の pty デバイスの開いているファイルの記述子を返します。使用されていないデバイスがない場
合には、オープンは −1 を返して、外部変数 errno を [EBUSY] に設定します。オープンされたマスターデバイ
スに対応するスレーブデバイスの名前は、 ptsname() 要求を使って調べることができます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-161
pty(7)
pty(7)
ioctl() 要求の処理
デフォルトでは、 termio(7) で定義されている、どの ioctl() 要求も pty のマスター側とスレーブ側の両方で認識
できます。これらの ioctl() 要求は、 termio(7) によって指定した pty ドライバによって処理されます。加えて、
以下で定義する ioctl() 要求は pty のマスター側で認識されます。スレーブ側では termio(7) で定義された ioctl()
要求を認識するだけです。 ptyのマスター側をクローズした後でスレーブ側にする ioctl() 要求は、 −1 を返して
外部変数 errno を [EIO] に設定します。 pty が認識しない ioctl() 要求は、 −1 を返して、外部変数 errno を
[EINVAL] に設定します。マスター側だけの ioctl() 要求の中には、 ioctl() 要求が pty のマスター側とスレーブ
側によって認識されるかどうかに影響を与えるものもあるので注意してください。これらのマスター側だけの
ioctl() 要求は、同様に認識された ioctl() 要求、 open() 要求、 close() 要求を、 pty ドライバが処理する方法に
も影響を与えます。
次の ioctl() 要求は、 <sys/ptyio.h> 中に定義されていて、 pty のマスター側だけに適用します。
TIOCSIGSEND pty のスレーブ側から、現在のスレーブ側のttyプロセスグループに送られるシグナルを発生し
ます。パラメータの値は、送られたシグナル番号です。指定されたシグナル番号に相当するシ
グナルがない場合は、 [EINVAL] エラーを返してシグナルを送りません (signal(5) 参照)。この
要求は、サーバプロセスがシグナルを同じユーザー ID のプロセスに送ることを許していま
す。
TIOCTTY
pty によるすべての termio 処理を有効または無効にします。 arg が示す int が0でない場合は
termio 処理は有効で、 arg が示す int が0の場合は termio 処理は無効です。デフォルトでは、
termio 処理は有効です。 termio 処理は termio(7) で説明されている ioctl() 要求の処理のよう
に、 termio(7) で説明されているタブ展開のような入力と出力処理を参照します。無効の時
は、すべての入力と出力データは変更されないで pty をそのまま通過します。 TIOCTTY
ioctl() 要求を発行すると、疑似ターミナルにバッファリングされているすべてのデータをフ
ラッシュして、データ待ちでブロックされているプロセスを解放します。 TIOCTTY を有効
にしたり無効にしたりすることは、 TIOCPKT、 TIOCREMOTE、 TIOCBREAK、
TIOCSTOP、 TIOCSTART、 TIOCTRAP、 TIOCMONITOR の ioctl() 要求の操作に影響し
ます。
TIOCTTY が有効な時は、すべての termio ioctl() 要求は ioctl() 要求を作成した側とは無関係
に termio(7) で指定されたように実行されます。 TIOCTTY が無効な時には、マスター側の
termio ioctl() 要求は外部変数 errno を [EINVAL] に設定して返します。スレーブ側の termio
ioctl() 要求は、 TIOCTTY が無効な時には他の ioctl() 要求と同じように処理されます。特に
スレーブ側の termio ioctl() 要求は、 TIOCTTY と TIOCTRAP が無効な場合には外部変数
errno を [EINVAL] に設定して返します (以下の ioctl()、 open()、 close() の説明を参照)。
termio(7) で定義されていない ioctl() 要求は、 TIOCTTY の状態に影響されます。
TIOCTTY が無効な場合に疑似ターミナルを通して書かれるデータは、パイプを通してのデー
タの流れに似たような方法で扱われます。 pty への書き込み要求は、すべてのデータを pty に
書き込むまでブロックされます。使用可能なデータがない場合には、 O_NDELAY フラグが設
定されていない限り ( fcntl(2) 参照)、読み出し要求はブロックされます。データが読み込み可
Section 7-162
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
pty(7)
pty(7)
能な時には、読み出し要求は、使用可能なものはすべて返して、バイト数の要求を満足するま
で待ちません。 pty が内部メモリに持っているバイト数は実現方法に依存しますが、少なくと
も各方向に256バイトあります。例として、1024バイトの pty のスレーブ側への書き込みは、
マスター側では256バイトずつ読み出されます。読み出されるデータの塊のサイズは常に同じ
ではありませんが、データが失われることはありません。
次の ioctl() 要求は、 <sys/ptyio.h> 中で定義されていて、 pty のマスター側へだけ適用されます。特に、これら
の ioctl() リクエストは、 pty ドライバ操作の特有のモードを有効または無効にします。これらの ioctl() 要求は
TIOCTTY で連続して動作します。すなわちモードは、 ioctl() 要求で有効にし、さらに TIOCTTY を有効にし
なければ操作できません。モードは、 TIOCTTY の状態にかかわらずに、有効にしたり無効にしたりできま
す。
TIOCPKT
パケットモードを有効または無効にします。パケットモードは、 arg で示される int が0でな
い場合に有効になり、 arg で示される int が0の場合に無効になります。デフォルトでは、パ
ケットモードは無効です。疑似ターミナルのマスター側に適用した時に、マスター側からの後
続の read() は、疑似ターミナルのスレーブ側に書き込まれたデータを 0バイト
(TIOCPKT_DATA として定義されている) か、制御ステータス情報を反映する1バイトを返し
ます。そのようなステータスバイトの値は、0以上のビットフラグで構成されます。
TIOCPKT_FLUSHREAD
スレーブ側への読み出しキューはフラッシュされています。
TIOCPKT_FLUSHWRITE
スレーブ側への書き込みキューはフラッシュされています。
TIOCPKT_STOP
pty のスレーブ側からマスター側へのデータの流れは、 ˆS、 TIOCSTOP、または
TCXONC で停止されています。
TIOCPKT_START
pty のスレーブ側からマスター側へのデータの流れがリスタートされました。
TIOCPKT_DOSTOP
停止と起動文字が、 ˆS か ˆQ に設定されました。
TIOCPKT_NOSTOP
停止と起動文字が、 ˆS と ˆQ 以外に設定されます。
TIOCREMOTE リモートモードを有効または無効にします。リモートモードは、 arg の int の値が0でない場
合には有効で、 arg の int の値が0の場合には無効です。デフォルトではリモートモードは無
効です。リモートモードはパケットモードとは独立です。このモードは疑似ターミナルへの入
力をフロー制御しますが、(ターミナルモードにかかわらずに) 入力を編集しません。マス
ター側への書き込みごとに、スレーブ側を読み込むプロセスの記録境界を生成します。通常の
使用法では、データの書き込みはターミナルの1行としてデータをタイプするように処理され
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-163
pty(7)
pty(7)
て、0バイトを書き込むことは、エンドオブファイル文字 ( EOF 文字は termio(7) 中で定義さ
れています) をタイプすることと同じです。スレーブ側で読み込むデータは、マスター側で書
き込むデータと同一です。スレーブ側で書き込まれるデータとマスター側で読み出されるデー
タは、 TIOCREMOTE が有効になっている場合は、通常の termio(7) 処理の影響を受けます。
TIOCREMOTE は、ウィンドウマネージャ中でリモート行の編集をする時や、フロー制御さ
れた入力が必要な時にはいつでも使用できます。 TIOCMONITOR ioctl() 要求を発行すると、
疑似ターミナルにバッファされているすべてのデータをフラッシュします。
次の ioctl() 要求は、 <sys/ptyio.h> 中で定義されていて、 pty のマスター側だけに適用されます。特にこれらの
ioctl() 要求は、 TIOCTTY が有効になっている時だけに認識されます。 TIOCTTY が無効な時には、これらの
ioctl() 要求は外部変数 errno を [EINVAL] に設定して戻ります。
TIOCBREAK
pty のスレーブ側でブレーク操作を行ないます。あたかもユーザーがブレークキーを実際の
ターミナルで押したかのようになります。パラメータはありません。
pty のスレーブ側からマスター側へのデータの流れを (ˆS をタイプするのと同じように) 停止
TIOCSTOP
します。パラメータはありません。
TIOCSTART
(TIOCSTOP や ˆS をタイプしたことで停止した) 出力を再起動します。パラメータはありませ
ん。
入力のフロー制御と出力処理
次の単語は、疑似ターミナル経由のデータの流れを説明するために使用します。 INPUT は、 pty のマスター
側からスレーブ側へのデータの流れを参照します。 OUTPUT は、 pty のスレーブ側からマスター側へのデー
タの流れを参照します。
パケットモード (TIOCPKT) が無効の場合、 INPUT は停止して (termio(7) の入力モードの IXOFF 参照)、次の
pty のマスター側からの read() は STOP 文字を返します。 INPUT を再起動した時には、次のマスター側からの
read() は START 文字を返します。パケットモード (TIOCPKT) が有効な場合は、 STOP や START 文字はデー
タパケット インディケータ (TIOCPKTDATA) が前に付きます。 select() は、 INPUT フロー制御を適切に扱う
ために、各 write() 要求の前にマスター側のサーバで使う必要があります (select(2) 参照)。
INPUT フロー制御が有効な時は、 write() と select() が次のように扱われます。 pty のマスター側で書き込みを
select() すると、 INPUT が停止されていない場合だけにtrueを返します。データが pty のマスター側に書き込み
をしている間は INPUT が停止するようになり、 write() は INPUT が停止する前に書き込まれたバイト数を返し
ます。 INPUT が停止した後に終了した書き込みが終了すると、0バイトが書き込まれたものとして返します。
パケットモード (TIOCPKT) が無効で、 OUTPUT が停止している (termio(7) の入力モードの IXON 参照) 時に
は、マスター側からの後続する各 read() は、 pty の読み込むデータがないものとして戻ります。 OUTPUT を
再起動した時に、マスター側からの後続する各 read() は、スレーブ側に書き込まれたデータを返します。パ
ケットモード (TIOCPKT) が有効になっている場合は、 OUTPUT が停止した後の最初の read() は、 TIOCPKTSTOP パケットを返します。 OUTPUT が停止している間に、続いてマスター側から読み込むと、データを含
まない TIOCPKTDATA パケットを返します。 OUTPUT を再開した時に、続くマスター側からの read() は、
TIOCPKTSTART パケットを返します。マスター側から続いての読み込みは、 TIOCPKTDATA パケットに続
Section 7-164
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
pty(7)
pty(7)
いてスレーブ側に書き込まれたデータを返します。 select() を、両側から read() する前に OUTPUT フロー制御
を適切に扱うためにマスター側サーバで使わなければいけません。さもなければ、 OUTPUT が停止した時
に、 pty のマスター側からの読み込みが防止されません。
ioctl()、open()、close() 要求のトラップ
トラップが有効になっている時は、スレーブ側のアプリケーションが、 ioctl()、open()、または close() 要求を
した時にマスター側が知ることができます。 ioctl() と open() 要求をトラップするためには、スレーブ側はマス
ター側のサーバ側がトラップ要求を確認するまでブロックされます (すなわち、要求は完了しません)。 close()
要求のトラップのために、スレーブ側は確認のためにブロックされることはありません。
select() は、トラップされた ioctl()、 open()、と close() 要求の通知を受け取るために、マスター側サーバが使
用しなければいけません。これらの要求の一つがトラップされた時に、 select() は、スレーブ側のファイル記
述子のために「例外状態」を返します。トラップされた要求を受け取る他のメカニズムが、以下に定義されて
いますが、これらのメカニズムは select() が使用可能な場合だけに使用できます。
トラップが無効の時 (デフォルト状態)、スレーブに認識されない ioctl() 要求はエラーを戻し、外部変数 errno
は [EINVAL] に設定されます。 TIOCTTY が有効の時には、スレーブ側で認識される ioctl() 要求だけが
termio(7) で定義されています。 TIOCTTY が無効になっている時は、 ioctl() 要求はスレーブ側で認識されませ
ん。トラップが有効でマスター側がクローズされた場合は、トラップは無効です。スレーブ側とのハンドシェ
イクの最中にマスター側をクローズすると、ハンドシェイクは自動的に終了します。
トラップには、それを有効または無効にする ioctl() 要求で同定できる TIOCTRAP と TIOCMONITOR の2種
類の形式があります。これらの2種類の形式は、影響を与える要求のタイプと備えている能力で区別します。
open() と close() 要求のトラップは、 TIOCTRAP で有効または無効にします。 termio(7) に定義されていない
ioctl() 要求のトラップは、 TIOCTRAP で有効または無効にします。 termio(7) で定義されている ioctl() 要求の
トラップは、 TIOCTTY が無効の時だけに TIOCTRAP で有効または無効にします。 TIOCTTY が有効の時
は、 termio(7) で定義されている ioctl() 要求のトラップは、 TIOCMONITOR で有効または無効にします。要
約すると、 TIOCTRAP と TIOCMONITOR のトラップの両方とも、マスター側のサーバで要求を作成するpid
などの要求のパラメータを検査できるようにします。さらに、 TIOCTRAP トラップは、サーバにパラメータ
を変更できるようにして ioctl() 要求の値を返します。
次の ioctl() 呼び出しは、 pty のマスター側だけに適用して、 ioctl()、 open() と close() 要求をトラップするの
に適しています。これらは <sys/ptyio.h> 中に定義されています。
TIOCTRAP
pty のスレーブ側のアプリケーションが作成した ioctl()、 open() と close() 要求のトラップを
有効または無効にします。トラップは、 arg が示す int が0でない場合は有効で、arg が示す
int が0の場合は無効です。デフォルトでは、 TIOCTRAP トラップは無効です。
TIOCTRAPSTATUS
未処理の ioctl()、open()、または close() トラップをチェックします。引き数は、 int を示しま
す。これはトラップが未処理な場合は1に、未処理なものがなければ0に設定されます。
select() の「例外状態」の望ましい方法が使えない場合は、 TIOCTRAPSTATUS を使います。
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-165
pty(7)
pty(7)
TIOCREQCHECK
トラップされた ioctl()、open()、または close() 情報をマスター側に返します。 select() の「例
外状態」か、トラップが未処理の状態を示す TIOCTRAPSTATUS のどちらかに応じて、
TIOCREQCHECK を使用します。 TIOCREQCHECK は、未処理の ioctl()、open()、または
close() 情報を TIOCREQCHECK の arg として指定されるメモリに読み込みます。その情報
は、次の形式 request_info 構造体の形式を取り、 <sys/ptyio.h> 中に定義されています。
struct request_info {
int request;
int argget;
int argset;
pid_t pgrp;
pid_t pid;
int errno_error;
int return_value;
};
すべての request_info の要素は、 pty のスレーブ側を参照して、次の情報を含んでいます。
request
argget
ioctl() コマンドを受け取ります。
ioctl() 要求をトラップされた ioctl() 構造体が存在する場合に (値0は存在しな
いことを示す) 受け取るためにマスター側に適用します (値が0でない場合
は、 argget はあらかじめ計算されたサイズフィールドを持つ TIOCARGGET です)。
argset
ioctl() 要求は、結果の ioctl() 構造体をマスター側に返すために適用します (
値 0 は、構造体が存在しないことを示します)。 (値が 0 でない場合は、
argget はあらかじめ計算されたサイズフィールドを持つ TIOCARGSET で
す)。
pgrp
操作するプロセスのプロセスグループ数 。
pid
操作するプロセスのプロセス ID。
errno_error
スレーブ側の ioctl() が返す errno 外部変数エラーコード (0に初期化され
る)。オープンエラー モードが有効のとき、 errno_error は、トラップされた
スレーブの pty open() 要求に対して、エラーを戻すのに使うことができま
す。オープンエラー モードに関する詳しい情報は、 TIOCSMODES ioctl() に
関する項を参照してください。
return_value
errorno_error が設定されていない時に、スレーブ側の ioctl() が返す成功終了
値 (0に初期化される)。
Section 7-166
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
pty(7)
pty(7)
スレーブ側で受け取った ioctl() 引き数がポインタでない時は、その値をマス
ター側に argget と同じ ioctl() 要求を出して得られる4バイトとして保存しま
す。
open() や close() を処理する時に、 request をそれぞれ TIOCOPEN や TIOCCLOSE に設定します。 TIOCOPEN と TIOCCLOSE には ioctl() 構造体がな
いので、 argget と argset 両方は0です。 TIOCTTY が有効な時には、オープ
ン/クローズの termio(7) 定義が、マスター側に渡される前に最初に実行され
ます。すべてのオープンがトラップされている間は、最後に pty のスレーブ
側の特定のiノードのクローズだけが pty によってトラップされます。
TIOCREQCHECK は、 ioctl()、open()、または close() トラップが未処理で
ない場合は、外部変数 errno エラー [EINVAL] を返します。したがって、
select() の「例外状態」に応じて [EINVAL] を返す TIOCREQCHECK は、ト
ラップされた ioctl()、open()、または close() 要求が select() が戻った後でシ
グナルによって終了することを示します。
TIOCREQGET ioctl()、open()、または close() トラップが未処理である時以外は TIOCREQCHECK と同じで
す。 TIOCREQGET は TIOCREQCHECK が [EINVAL] を返すのに対して、スレーブモード
の ioctl()、open()、または close() がトラップされるまでブロックされます。 select 「例外状
態」のよりよい方法か、マスター側の ioctl() の TIOCTRAPSTATUS が利用可能でない場合は
TIOCREQGET を使用します。
TIOCREQSET TIOCREQCHECK や TIOCREQGET によって開始するハンドシェイクを完了します。その
引き数は、 TIOCREQCHECK によって定義されるように request_info 構造体を示します。
この ioctl() 要求をする前にハンドシェイクを完成するために、サーバは、スレーブ側に渡す
ために、 errno_error を外部変数 errno エラー値に設定します。エラーが発生していない場合
には、 errno_error は pty によって0に初期化された値のままです。またエラーがない場合に
0 以外の結果が戻るようにしたい場合は、return_value を設定しなければいけません。サーバ
はトラップされた要求が ioctl() の場合は、 return_value と errno_error を設定できます。そし
て、エラーモードが有効になっている場合は、トラップされた open() に対する errno_error
をセットできます。 return_value または errno_error のどちらかを設定することは、トラップ
された close() が要求の戻り値か、スレーブ側の外部変数 errno の値に影響します。オープン
エラー モードが有効になっている場合を除いて、トラップされた open() に対して
return_value あるいは errno_error のいずれかを設定しても、要求の戻り値にも、スレーブ側
の外部変数 errno の値にも影響を与えません。オープンエラー モードを設定すると、サーバ
はトラップされたスレーブの open() に対して、 errno_error を設定することでエラーを返し
ます。 ioctl() 要求と異なり、 return_value を設定してもスレーブ pty の open() 要求には影響
を与えません。さらに、 return_value か errno_error のどちらかを設定すると、 TIOCREQSET にはエラーをサーバに返させません。
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-167
pty(7)
pty(7)
TIOCREQSET 要求が作成され、渡される request_info 構造体中の要求値がトラップされた値
と同じでない場合には、外部変数 errno を [EINVAL] に設定して返します。 [EINVAL] は、ト
ラップされた ioctl()、open()、または close() 要求がない場合にも返します。トラップされた要
求が、サーバが TIOCREQGET と TIOCREQSET を終了する時間の間にシグナルによって割
り込まれた場合には、 TIOCREQSET 要求は [EINVAL] を返します。
TIOCGFLAGS トラップされた要求に関連するファイルのステータスフラグを獲得します。成功して戻るとき
には、 ioctl() は arg によって参照される整数に、そのトラップされた要求のファイルステー
タス フラグを戻します。 <sys/file.h> にこのフラグの定義があり、これを使ってフラグを解釈
できます。現在未処理のトラップがない場合は、 TIOCGFLAGS ioctl() はエラーを戻し、外部
変数 errno を [EINVAL] に設定します。
TIOCMONITOR
termio ioctl() の読み取り専用トラップを有効または無効にします。 TIOCMONITOR トラッ
プは、arg が示す int が0でない場合は有効で、arg が示す int が0の場合は無効です。デフォ
ルトでは TIOCMONITOR トラップは無効です。 TIOCMONITOR は TIOCTTY と連続して
働きます。すなわち、 termio ioctl() 要求が TIOCMONITOR でトラップされるためには、
TIOCMONITOR トラップは有効で、 TIOCTTY が有効でなければいけません。 TIOCMONITOR トラップは TIOCTTY の状態にかかわらず有効または無効にできます。
TIOCTTY が無効な時には、 termio ioctl() 要求は TIOCMONITOR によってトラップされま
せん。しかし ioctl() 要求は、 TIOCTTY が無効で TIOCTRAP が有効な場合には TIOCTRAP
によってトラップされます。 TIOCTRAP トラップは TIOCTMONITOR トラップがなくて
も、マスター側のサーバにパラメータを変更して ioctl() 要求の値を返すことを許します。
TIOCMONITOR トラップは、pty の回線規約の特性がスレーブ側でアプリケーションによっ
て変更された時に、マスター側のサーバを知ることができるようにします。 TIOCMONITOR
によってトラップされる termio のハンドシェイクのためのメカニズムは、 TIOCTRAP に
よってトラップされる要求のための上記のメカニズムと同じです。 termio ioctl() 要求を pty
の回線規約の設定された状態を問い合わせるために、マスター側で使用します。これは
termio ioctl() がトラップされていない時に TIOCMONITOR が有効になる前に、時間のウィ
ンドウを補償します。
select() を pty のマスター側で使用した時に、「読み込みや書き込みのためのレディ状態」がデバイスからの読
み込みあるいはデバイスへの書き込みが正常に行えることを示すのに対して、「例外状態」は、スレーブ側で
未処理の open()、close()、または ioctl() 要求を参照します。
トラップされる ioctl() 要求の目的は、一度に pty に対して1つだけを扱うようにすることです。これはアプリ
ケーションが 非termio ioctl() 要求をスレーブ側にする時に、最初の要求をマスター側でハンドシェイクするま
で、スレーブ側の同じ pty に他のすべての ioctl() 要求をブロックすることを意味しています (termio のような
トラップされない ioctl() 要求は TIOCTTY が有効で、 TIOCMONITOR が無効な時にはブロックされませ
ん)。これはサーバプロセスに渡されるスレーブ側の ioctl() 呼び出しによって、見えない操作をできるように
するためです。
Section 7-168
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
pty(7)
pty(7)
総括すると、トラップされた ioctl()、open()、と close() 要求を操作する次の方法があります。
1.
select() を呼び出す。このシステムコールはスレーブ側の ioctl()、open()、または close() 要求がト
ラップされるまで、マスター側をブロックします。
2.
TIOCREQCHECK ioctl() 要求を作成します。この段階では、トラップされた ioctl()、open()、ま
たは close() 要求についての情報を返します。 TIOCREQCHECK が外部変数 errno エラー [EINVAL] を返す場合は、 select() 呼び出しにループバックします。
3.
argget ioctl() 要求を作成します。これは argget が0ではなく、サーバがトラップされたスレーブ
側の ioctl() 要求を排除する以上のことをしたい場合に、オプションの段階として使用します。
4.
argset ioctl() 要求を作成します。これは argset が0ではなく、サーバが ioctl() 構造体を変更して
渡したい場合に、オプション段階として行われます。トラップされた後に ioctl() 要求はマスター
側のサーバ経由で処理されます。
5.
errno_error と return_value を設定します。トラップされた要求が ioctl() の場合には、
errno_error を適切に設定します。 errno_error の適切な値が0の時には、 return_value を設定し
なければなりません。オープンエラーモードが有効になっている場合は、トラップされた open()
要求に対してエラーを戻すために errno_error をゼロでない値に設定します。
6.
TIOCREQSET ioctl() 要求を作成します。この段階として、トラップされた ioctl()、open()、また
は close() 要求が完成します。
プロセスがハンドシェイクを完了するために pty のスレーブ側でサーバを待っている間に、シグナルを受け取
ることで動作が影響されやすくなります。次のマスター側の ioctl() 要求は、シグナルが割込みをトラップされ
た open() と ioctl() 要求に割込みを試みた時に、 pty がどのように応答するかをサーバプロセスが制御すること
を許可します。
TIOCSIGMODE
pty のシグナル操作状態を引き数に指定したように設定します。モードは、
TIOCSIGBLOCK、 TIOCSIGABORT、そして TIOCSIGNORMAL の3つの値を持つことが
できます。
TIOCSIGBLOCK
open() または ioctl() 要求をトラップされたスレーブ側のプロセスに行くことになってい
るシグナルを延期します。プロセスが、インストールされたシグナルハンドラにジャン
プするような場合には、シグナルは延期されます。処理が終了したり無視される場合に
は、シグナルは延期されません。サーバプロセスがハンドシェイクを TIOCREQSET
ioctl() 要求を使用して完了する時には、プロセスは呼び出したプログラムに戻って未処
理のシグナルを実行します。ユーザーが sigblock() を使ってブロックしたシグナルはブ
ロックされつづけます。
HP-UX 11i Version 2: September 2004
−9−
Hewlett-Packard Company
Section 7-169
pty(7)
pty(7)
TIOCSIGABORT
トラップされた open() や ioctl() 要求を再スタートしないようにします。割り込まれた要
求を呼び出したプログラムに [EINTR] エラーとともに返したい時に、サーバプロセスは
このモードを設定します。
TIOCSIGNORMAL
これは pty のデフォルトのモードです。シグナルが、 open() または ioctl() 要求に割り込
む時には、ユーザーのシグナルハンドラー ルーチンは、要求を再スタートするかどうか
を指定できます。要求を再スタートする場合には、それは最初から再び実行されて、
サーバは別の TIOCREQGET 要求をハンドシェイクを再び開始するために作成しなけれ
ばいけません。中断された要求が指定しているユーザーのシグナルハンドラー ルーチン
を再スタートしてはいけない場合には、シグナルハンドラが終了してから、要求を呼び
出したプログラムに [EINTR] と一緒に返します。再スタートの要求は、すぐ次にトラッ
プされるものである必要はないことに注意してください。
次の ioctl() 要求は、 <sys/ptyio.h> で定義されており、 pty モードを獲得したり、それを設定したりする機構を
提供するものです。上で説明した ioctl() 要求を使っても、5つのモードを操作することができます。これらの
ioctl() との関連については、ビットの定義を参照してください。いずれの方法を使って有効または無効にして
もその効果は同一です。通常、アプリケーションでは、 TIOCGMODES ioctl() を使って、現在有効になってい
る pty モードを獲得し、変更したいモードに対するビットをセットしたりクリアしたりし、そのビットパター
ンを TIOCGMODES ioctl() を使って発して、希望する変更を有効にします。
TIOCGMODES
現在有効になっている pty モードを獲得します。この ioctl() は、各種の pty モードのステー
タスビットを arg によって参照されるlong型変数に戻します。あるビットが設定されている
と、それに対応するモードが有効になります。あるビットがクリアされていると、それに対応
するモードが無効になります。使われていないビットはクリアされています。各ビットの意味
は、 TIOCSMODES ioctl() の説明に書かれています。
TIOCSMODES arg によって参照されるlong型変数の値により、 pty モードを設定します。使われないビット
は無視されますが、0に設定しなければなりません。 pty モードのビット値は以下の通りで
す。
PM_REMOTE
リモートモードを有効あるいは無効にします。 TIOCREMOTE ioctl() の説明を参照して
ください。
PM_TTY
ttyモードを有効あるいは無効にします。 TIOCTTY ioctl() の説明を参照してください。
PM_PKT
パケットモードを有効あるいは無効にします。 TIOCPKT ioctl() の説明を参照してくだ
さい。
Section 7-170
Hewlett-Packard Company
− 10 −
HP-UX 11i Version 2: September 2004
pty(7)
pty(7)
PM_TRAP
トラップモードを有効あるいは無効にします。 TIOCTRAP ioctl() の説明を参照してく
ださい。
PM_MONITOR
モニタモードを有効あるいは無効にします。 TIOCMONITOR ioctl() の説明を参照して
ください。
PM_OPEN_ERROR
オープンエラー モードを有効あるいは無効にします。オープンエラー モードを設定する
と、サーバープロセスが、トラップされたスレーブ pty open() に、 TIOCREQSET
ioctl() を経由してエラーを戻すことができます。オープンエラー モードが有効になって
いるときにサーバーは、TIOCREQSET ioctl() に渡された request_info 構造体の
errno_error フィールドを設定することによって、トラップされた open() をエラーとと
もに戻す可能性があります。オープンエラーモードが無効になっている場合 (デフォル
トの状態)、スレーブ open() をハンドシェークするために errno_error を設定しても、な
んの効果もありません。 ioctl() トラップハンドシェーキングとは違い、 return_value を
設定しただけでは、オープンエラー モードの状態にかかわらず、スレーブ open() に対
してはなんの効果もありません。トラップされた要求のハンドシェーキングに関する詳
しい内容は、 TIOCREQSET ioctl() の説明を参照してください。
警告
スレーブ側では、エンドオブファイル状態をマスター側に知らせることはできません。
TIOCREMOTE を使用する時に、マスター側への256バイト以上の大きさの単一の write() 要求は、スレーブ側
では1つのレコードの代わりに複数の小さいレコードに分割されて読み出されます。
著者
pty はカリフォルニア大学バークレー校で作成されました。
ファイル
/dev/ptym/pty[a-ce-z][0-9][0-9]
マスター疑似ターミナル
/dev/ptym/pty[a-ce-z][0-9][0-9][0-9]
マスター疑似ターミナル
/dev/ptym/pty[a-ce-z][0-9a-f]
マスター疑似ターミナル
/dev/pty[pqr][0-9a-f]
マスター疑似ターミナル
/dev/pty/tty[a-ce-z][0-9][0-9]
スレーブ疑似ターミナル
/dev/pty/tty[a-ce-z][0-9][0-9][0-9]
スレーブ疑似ターミナル
/dev/pty/tty[a-ce-z][0-9a-f]
スレーブ疑似ターミナル
/dev/tty[pqr][0-9a-f]
スレーブ疑似ターミナル
参照
close(2), fcntl(2), ioctl(2), open(2), read(2), select(2), sigblock(2), write(2), ptsname(3C), signal(5), termio(7)
HP-UX 11i Version 2: September 2004
− 11 −
Hewlett-Packard Company
Section 7-171
random(7)
random(7)
名称
random, urandom, rng − 強力な乱数ジェネレータ
構文
#include <sys/random.h>
説明
キャラクタ型特殊ファイル /dev/random と /dev/urandom はカーネル常駐乱数ジェネレータ rng へのインター
フェイスを提供します。 /dev/urandom の読み取りが常に非ブロッキングであるのに対し、 /dev/random の
read() は、潜在的にブロッキングです。 /dev/urandom のデータは /dev/random のデータよりも潜在的に低い
エントロピーを持っています。
rng モジュールは動的ロード可能なカーネルモジュール(DLKM)です。つまりルート許可を持つ管理者がシステ
ムをリブートすることなく、モジュールを動的に構成解除したり、再構成することができます。
rng のシーケンスは無限のエントロピー持ちます。対照的に、 random(3M) のような疑似乱数ジェネレータに
よって演算的に生成されたシーケンスは、その最初の種からのみ導出される限られたエントロピーを持ちま
す。 rng モジュールは良質な乱数源と考えられます。乱数性を調べるNISTテスト(National Institute of Standards
and Technology)などを含む、広範囲な統計テストに合格しています。
rng モジュールは外的なイベントによって引き起こされる、割り込みスレッドの終了回数の不確定性を利用し
ています。 rng モジュールは割り込みタイムスタンプからのビットのシーケンスを抽出します。既存のビット
バイアスは、0と1の一様拡散を持つシーケンスを生成するために削除されます。生成された、シーケンスは特
殊ファイル、 /dev/random と /dev/urandom への保持バッファの間で分けられます。 /dev/random と /dev/urandom 上の read() データはそれぞれ対応する保持バッファから取り出されます。AES (Advanced Encryption
Standard)によるハッシュ機能が適用され、その結果はユーザーによって与えられたバッファ内に置かれます。
保持バッファへの要求は全て順次処理されるため、返される乱数データは異なった要求間でも、マルチプロ
セッサ上への並行要求でさえも共有されないことが保証されます。
/dev/random または /dev/urandom と結合している write() 関数はありません。またどちらのデバイスも全ての
ユーザに対して、読み取り専用です。 rng で生成される乱数を独立して検査するための ioctl() が定義されてい
ます。
/usr/include/sys/random.h ファイルは以下の定義を含んでいます。
/* read()またはioctl()への最大要求サイズ(バイト) */
#define RNG_READMAX
256
/* ioctl()でエントロピーコレクタから直接データを取り出す */
#define RNG_GETRAW
_IOR(’Q’, 0, uint8_t[RNG_READMAX])
RNG_READMAX バイト以上の read() 要求は、 RNG_READMAX バイトを要求するものとして扱われます。
これは /dev/random と /dev/urandom の両方に適用されます。
Section 7-172
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
random(7)
random(7)
/dev/random についての詳細情報
短い間隔で /dev/random 上に多数の要求があるとき、保持バッファへの要求は rng が提供するデータの速度を
越えることがあります。 /dev/random デバイス上の read() は保持バッファに保存されている乱数データが要求
を完了させるには低すぎる場合、要求しているスレッドをブロックします。スレッドは保持バッファが要求を
完了するのに十分な乱数データを持つよう更新されるまでブロックされます。
/dev/random に対する open() フラグとしては、 O_NONBLOCK と O_NDELAY だけがデバイス固有アクショ
ンを持ちます。もしこれらフラグのどちらもセットされていない場合、 /dev/random 上の read() は要求された
バイト数のデータ (最大 RNG_READMAX) が、返されるまでブロックします。要求されたバイト数のデータ
がなく、上記のどちらかのフラグがセットされているとき、 read() は即座に戻ります。 O_NONBLOCK フラ
グがセットされている場合、 read() は -1 を返し、エラー番号は EAGAIN にセットされます。 O_NONBLOCK がセットされていなくて、 O_NDELAY がセットされている場合、 read() はゼロを返します。
RNG_GETRAW ioctl() は、バイアスが削除された後で、なおかつ AES がハッシュする前に、スーパーユー
ザー特権を持つアプリケーションが、保持バッファ /dev/random から直接データの RNG_READMAX バイト
を取り出すことを許可します。このインタフェースは暗号生成アプリケーション用ではなく、保持バッファ
/dev/random 内のデータの乱数性の統計テストのために使用されます。 RNG_GETRAW ioctl() は、 /dev/random 上の読み取りと同じ理由で、ブロックします。要求スレッドにスーパーユーザー特権がない場合、 EACCES が返されます。
/dev/urandom についての詳細情報
制限付きランダムデータコレクションレートの問題については、 /dev/urandom デバイスは、非ブロッキング
です。 /dev/urandom の保持バッファは、乱数データによって定期的に更新されていますが、読み取り数が多
いと、その保持バッファ内のエントロピーを減少させます。この状況で、 /dev/urandom のデータのエントロ
ピーは、 /dev/random のものよりわずかに低くなりますが、 /dev/urandom はそれでも、正常な乱数のソース
と考えられます。
/dev/urandom の read() でデバイス固有アクションを起こす open() フラグはありません。
エラー
[EAGAIN]
/dev/random が O_NONBLOCK フラグ付きでオープンされ、 /dev/random の read() 要求を完
了するのに十分なデータが保持バッファに存在しません。
[EACCES]
/dev/random への RNG_GETRAW ioctl() 要求を行ったスレッドにはスーパーユーザー権限が
ありません。
著者
乱数ジェネレータはHPによって開発されました。
バイアスの削除に、ジェネレータはカリフォルニア大学のYuval Perez教授によるアルゴリズムを使用していま
す。
保護ハッシングにはイギリスのBrian Gladman教授によるAES実装方式が使用されています。
NIST統計テストについては次をご参照ください。 http://csrc.nist.gov/rng
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-173
random(7)
random(7)
ファイル
/dev/random
/dev/urandom
Section 7-174
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
routing(7)
routing(7)
名称
routing − ローカルネットワークのパケット経路指定のためのシステムのサポート
説明
HP-UXのネットワーク機能では、パケットの転送がサポートされています。経路指定テーブルの保守は、アプ
リケーションプロセスで処理されます。
経路指定テーブルは、ネットワーク機能がパケットの転送時に、適切なリモートホストやゲートウェイを選択
する上で使用する一連のデータ構造として構成されています。このテーブルには、特定のネットワーク、また
はホストまでの各経路に対するエントリーが1つ含まれます。これは、 -r または -rn オプション (netstat(1) を
参照) を指定して netstat コマンドを実行すると表示されます。無効な経路は表示されません。
_______________________________________________________________
# netstat -r
経路指定テーブル
Destination
Gateway
Flags
Refs Use Interface Pmtu
hpindwr.cup.hp.com
localhost
UH
1
39 lo0 4608
localhost
localhost
UH
0
68 lo0 4608
147.253.56.195
localhost
UH
0
0 lo0
4608
147.253.144.66
localhost
UH
0
0 lo0
4608
default
hpinsmh.cup.hp.com
UG
1
21 lan0 1500
15.13.136
hpindwr.cup.hp.com
U
1
92 lan0 1500
147.253.56
147.253.56.195
U
0
7 lan2
1500
147.253.144.64
147.253.144.66
U
0
7 lan1
1500
_______________________________________________________________
# netstat -rn
経路指定テーブル
Destination
Gateway
Flags
Refs Use Interface Pmtu
15.13.136.66
127.0.0.1
UH
1
39 lo0 4608
127.0.0.1
127.0.0.1
UH
0
68 lo0 4608
147.253.56.195
127.0.0.1
UH
0
0 lo0
4608
147.253.144.66
127.0.0.1
UH
0
0 lo0
4608
default
15.13.136.11
UG
2
30 lan0 1500
15.13.136.0
15.13.136.66
U
1
113 lan0 1500
147.253.56.0
147.253.56.195
U
0
7 lan2
1500
147.253.144.64
147.253.144.66
U
0
7 lan1
1500
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-175
routing(7)
routing(7)
_______________________________________________________________
# netstat -rv
Routing tables
Dest/Netmask Gateway
Flags
Refs Use Interface Pmtu
hpindwr.cup.hp.com/0xffffffff
localhost
UH
1
39 lo0 4608
localhost/0xffffffff
localhost
UH
0
68 lo0 4608
147.253.56.195/0xffffffff
localhost
UH
0
0 lo0
4608
147.253.144.66/0xffffffff
localhost
UH
0
0 lo0
4608
default/0x00000000
hpinsmh.cup.hp.com
UG
2
31 lan0 1500
15.13.136/0xfffff800
hpindwr.cup.hp.com
U
1
129 lan0 1500
147.253.56/0xfffffe00
147.253.56.195
U
0
7 lan2
1500
147.253.144.64/0xfffffff0
147.253.144.66
U
0
7 lan1
1500
Section 7-176
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
routing(7)
routing(7)
_______________________________________________________________
# netstat -rnv
Routing tables
Dest/Netmask
Gateway
Flags
Refs Use Interface Pmtu
15.13.136.66/255.255.255.255
127.0.0.1
UH
1
39 lo0 4608
127.0.0.1/255.255.255.255
127.0.0.1
UH
0
68 lo0 4608
147.253.56.195/255.255.255.255
127.0.0.1
UH
0
0 lo0
4608
147.253.144.66/255.255.255.255
127.0.0.1
UH
0
0 lo0
4608
default/0.0.0.0 15.13.136.11
UG
3
40 lan0 1500
15.13.136.0/255.255.248.0
15.13.136.66
U
1
153 lan0 1500
147.253.56.0/255.255.254.0
147.253.56.195
U
0
8 lan2
1500
147.253.144.64/255.255.255.240
147.253.144.66
U
0
8 lan1
1500
_______________________________________________________________
各カラムの意味は次のとおりです。
Dest
インターネットアドレスの宛先: ホスト名、ネットワーク名、または default
キーワードは、特定のリモートホストまたネットワークに経路指定を省略した
場合に最終的に使用されるワイルドカード経路です。 フラグ参照。
Netmask
ネットマスクと宛先インターネットアドレスの組み合わせによって、ルートの
ゲートウェイから到達できる IP アドレスの範囲が決まります。ホストルート
は、デフォルトですべて 1 ビットのネットマスクを持ちます。デフォルトルー
トは、デフォルトですべて 0 ビットのネットマスクを持ちます。ネットマスク
は IP パケットを転送するためのルートの選択にも使われます ( ルーティングア
ルゴリズムを参照)。
Gateway
宛先までに使用されるゲートウェイ: リモートゲートウェイまたはローカルホス
ト (Flags を参照)。
Flags
経路のタイプ:
U
経路が"up"、すなわち利用可能であること (ifconfig(1M) を参照)。
G
経路はゲートウェイとして、リモートホストを使用します。これ
以外の場合は、ローカルホストがゲートウェイとなります
(route(1M) を参照)。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-177
routing(7)
routing(7)
H
宛先はホストになります。これ以外の場合は、ネットワークとな
ります (route(1M) を参照)。
インタフェース接続:
Interface
lo0
システム起動後のローカル ループバック。
lan0, lan1,...
起動時に ifconfig コマンドが実行された後、ローカ
ルホストにインストールされるインタフェースカー
ド (ifconfig(1M) を参照)。
route コマンドの count と destination の各タイプフィールドの値により、 netstat -r ディスプレイでの G と H
フラグの有無と、経路タイプを決定します (下表参照)。
カウント
宛先タイプ
フラグ
=0
network
U
>0
network
UG
=0
host
>0
host
=0
default
default
経路タイプ
ローカルホスト自身のゲートウェイを経由するあるネッ
トワークへの経路
リモートホスト ゲートウェイを介したネットワーク経
路
UH
UGH
ローカルホストからリモートホストへの直接経路
リモートホスト ゲートウェイを介したリモートホスト
への経路
>0
U
UG
ローカルホストからのワイルドカード経路
リモートホスト ゲートウェイを介したワイルドカード
経路
サブネット
ネットワーク機能は、可変長サブネッティングをサポートします。インターネットアドレスは、次の形式の
ネットワークアドレスと ホストアドレスで構成されます。
192.34.17.0
サブネットアドレスはネットワークのインターネットアドレスの一部として定義されます。形式は次のとおり
です。
•
物理的に異なるネットワークを識別するネットワークアドレス。
•
同じネットワーク上の物理的に異なるサブネットワークを識別するサブネットアドレス。
ネットワーク管理者は、ホスト番号のスペースを使用して、ローカルネットワークのインターネットアドレス
をサブネットに分割することができます。この機能により、複数の物理ネットワークが 1つのインターネット
アドレスを共有できるようになります。
これを行うには、 3つのインターネットクラスを定義して、各ネットワークアドレスとホストアドレスをそれ
ぞれ対応させる必要があります。アドレスクラスは、アドレスのバイナリ形式の最上位ビットで定義されま
す。
Section 7-178
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
routing(7)
routing(7)
次の表に、各アドレスクラス別のネットワーク数、ノード数、およびアドレス範囲を示します。
ネットワーク当たりの
クラス
ネットワーク数
ノード数
アドレス範囲
A
127
16777215
0.0.0.1 − 127.225.225.254
B
16383
65535
128.0.0.1 − 191.255.255.254
C
2097151
255
192.0.0.1 − 223.244.244.243
—
—
224.0.0.0 − 255.255.255.255
Reserved
クラスAネットワークの最初の8ビットは、127に限ったネットワークスペースになります。この場合、定義済
みの各クラス間でノードの最大数に対応できるものとします。クラスBネットワークは、ネットワークアドレ
ス用として16ビット、およびノード定義用として16ビットに制限されます。
例えば、クラス C のアドレススペースは次のとおりです。
______________________________________
クラスC
クラスCの
の
サブネット
ネットワーク
部分
|
|
----10000000.00000110.00000001.11100001
------------------------------------------|
|
ネットワークアドレス
ホストアドレス
= 192.6.1
=1
______________________________________
特定のえられたホストに対するサブネットは、 32ビットのサブネット mask を指定した netmask パラメータを
含む ifconfig コマンドにより指定します (ifconfig(1M) を参照)。
インターネットアドレスの3種類のクラスに対するデフォルトマスクは、次のとおりです。
クラス A: 255.0.0.0
クラス B: 255.255.0.0
クラス C: 255.255.255.0
例のクラスCネットワーク番号は 192.34.17.0 です。最後のフィールドはホスト番号を指定します。したがっ
て、 192.34.17 というプリフィックスのあるホストはすべて、論理的に、かつ物理的に同じネットワーク上に
存在するものとして認識されます。
サブネットを使用しない場合、デフォルトマスクは 255.255.255.0 です。
サブネットが使われて、8 ビットのホストフィールドが上の例のように 3 ビットのサブネットと 5 ビットのホ
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-179
routing(7)
routing(7)
ストに分割されている場合は、サブネットマスクが 255.255.255.192 となります。
ホストが複数のインタフェースを持つ場合は、異なるサブネットに属することができます。以前のバージョン
と異なり、サブネットは同一のネットワークアドレスを持つ場合でも異なるサイズを持つことができます。こ
れは、各ホストインタフェースに対して別のネットマスクを使うことで実現されます。例えば上の netstat テー
ブル中にある lan1 および lan2 インタフェースは、同一ネットワーク 147.253 の異なるサブネットに接続され
ています。 lan1 の属するサブネットは、ネットマスクが 255.255.255.240 であるため最大 14 のホストを持つこ
とができます。
注記:
サブネット内の IP アドレスのホストポーションはすべて 1 ビットまたはすべて 0 ビットとなることが
できないため、このサブネットは 16 ホストではなく 14 しかサポートできないことに注意してくださ
い。
lan2 の属するサブネットは、ネットマスクが 255.255.254.0 であるため最大 510 のホストを持つことができま
す。
スーパーネット
スーパーネットは、より小さなネットワークの集まりです。スーパーネッティングは、ネットマスクを使って
小さなネットワークの集まりをスーパーネットに統合する技術です。この技術は、クラス C ネットワークに対
して特に有用です。クラス C ネットワークが持つことのできるホストは 254 だけです。この制限が厳しすぎる
企業もあるでしょう。これらの企業の場合は、ネットワーク部分のポーションのみを持つネットマスクをこの
クラス C ネットワークに適用してスーパーネットを作ることができます。このスーパーネットネットマスク
は、 ifconfig コマンドを使ってスーパーネットに接続するインタフェースに適用しなければなりません (ifconfig(1M) を参照)。例えばホストはそのインタフェースを設定してクラス C スーパーネット 192.6 に接続するた
め、そのインタフェースに対して IP アドレス 192.6.1.1 およびネットマスク 255.255.0.0 を設定することができ
ます。
ルーティングアルゴリズム
ルーティングテーブル エントリーには次の 3 種類があります。
•
特定ホストに対するエントリー。
•
特定ネットワーク上の全ホストに対するエントリー。
•
最初の 2 種類のエントリーに一致しない全宛先に対するワイルドカードエントリー。
IP パケットの転送用にルートを選択するため、ネットワークはルーティングテーブルから「一致」ルーティン
グテーブル エントリーの全セットを選択します。ルーティングエントリーのネットマスクと IP パケットの宛
先アドレスに対するビット毎 AND 演算の結果がルーティングエントリーの宛先アドレスに等しい場合、ルー
ティングテーブル エントリーは一致すると考えられます。
次にネットワーク機能は、ルーティングエントリーのセットから最長のネットマスクを選びます。ネットマス
クの長さは、32 ビット ネットマスクフィールドの最左ビット位置から始まって連続した 1 ビットの数で定義
されます。つまりネットワーク機能は、最も狭い IP アドレス範囲を指定するルーティングエントリーを選ぶの
です。例えば宛先/ネットマスクの組み合わせ (147.253.56.1, 0xFFFFFFFF) を持つホストルートエントリーは、
宛先/ネットマスクの組み合わせ (147.253.56.1, 0xFFFFFE00) を持つネットワーク ルートエントリーより限定的
Section 7-180
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
routing(7)
routing(7)
であるため、ネットワーク機能はホスト ルートエントリーを選びます。デフォルトのデフォルトルートは、宛
先/ネットマスクの組み合わせ(0,0)を持ちます。従ってデフォルトルートはすべての宛先に一致しますが、最も
限定的でありません。デフォルトルートは、他により限定的なルートがない場合のみ選択されます。
それでも複数のルーティングエントリーが残ることもあります。その場合、IP パケットは netstat -r によって
表示された最初のエントリーで転送されます。このような複数ルートには、次のようなものがあります。
•
ホストへの異なるゲートウェイを経由した 2 つ以上のルート。
•
ネットワークへの異なるゲートウェイを経由した 2 つ以上のルート。
•
2 つのデフォルトルート。
スーパーユーザーは route コマンド (route(1M) を参照)、または Internet Control Message Protocol (ICMP) リダイ
レクトメッセージで受信された情報を使用して、テーブルのエントリーを変更できます。
警告
仮想回線接続や双方向データグラム転送の場合は、ローカルホストと宛先ホストの両方で相互に route コマン
ドを実行 (直接接続されているホストの場合と同じように) する必要があります。
著者
routing はカリフォルニア大学バークレー校で開発されました。
ファイル
/etc/hosts
/etc/networks
参照
netstat(1), ifconfig(1M), route(1M)
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-181
sad(7)
sad(7)
名称
sad − STREAMS運用ドライバー
構文
#include <sys/types.h>
#include <sys/conf.h>
#include <sys/sad.h>
#include <stropts.h>
int ioctl(int fildes, int command, ... /* arg */);
説明
sad ドライバーは ioctl() 関数を使用して、 autopush 機能へのインタフェースを提供します。 sad ドライバーと
いうインタフェースによって、STREAMSのモジュールおよびドライバーに対する運用上の作業が実行可能に
なります。管理者は、 ioctl() 関数に command パラメーターを指定することにより、デバイスの autopush 情報
の構成、デバイスに関する情報の取り出し、およびモジュールリストのチェックが行えます。
fildes は、 open() を使用して /dev/sad をオープンしたときに得られたファイル記述子です。 command は、実
行すべき運用上の機能を指定します。 arg は、データ構造体へのポインターです。 command が SAD_SAP ま
たは SAD_GAP の場合、 arg はタイプ strapush の構造体を指します。 command が SAD_VML の場合、 arg は
タイプ str_list の構造体を指します。
ioctlコマンド
STREAMSモジュールまたはドライバーに対して運用上の機能を実行する各コマンドは、以下にあげる ioctl()
コマンドで指定します。
SAD_SAP
スーパーユーザーは、デバイスの autopush 情報を構成することができます。 arg パ
ラメーターは strapush 構造体( <sys/sad.h> ヘッダファイルで定義)を指します。この
構造体には次のメンバーがあります。
struct strapush {
uint sap_cmd;
long sap_major;
long sap_minor;
long sap_lastminor;
long sap_npush;
char sap_list[MAXAPUSH][FMNAMESZ+1];
};
sap_cmd
実行すべき構成のタイプを指定します。このフィールドには次の値
が指定できます。
SAP_ALL
Section 7-182
Hewlett-Packard Company
−1−
全マイナーデバイスを構成します。
HP-UX 11i Version 2: September 2004
sad(7)
sad(7)
SAP_RANGE
ある範囲のマイナーデバイスを構成します。
SAP_ONE
1個のマイナーデバイスを構成します。
SAP_CLEAR
以前の設定をクリアします。このコマンドを使用す
るときは、 sap_major と sap_minor フィールドだけ
を指定します。以前の指定が SAP_ALL だった場合
は、 sap_minor フィールドを0(ゼロ)に設定しま
す。以前の指定が SAP_RANGE だった場合は、
sap_minor フィールドをその範囲内で最小のマイ
ナーデバイス番号に設定します。
sap_major
メジャーデバイス番号を指定します。
sap_minor
マイナーデバイス番号を指定します。
sap_lastminor
マイナーデバイスの範囲を指定します。
sap_npush
プッシュするモジュールの個数を指定します。この値は MAXAPUSH( <sad.h> で定義)以下でなければなりません。またこの値は
NSTRPUSH を超えてはいけません。
プッシュするモジュールが順番に格納された配列を指定します。
sap_list
SAD_GAP
sad ドライバーを使用して、デバイスの autopush 構成情報を取り出します。デバイス
を指定するために、 strapush 構造体( SAD_SAP コマンドを参照)の sap_major および
sap_minor フィールドを、問い合せ対象のデバイスのメジャーおよびマイナーデバイ
ス番号に設定します。
arg は strapush 構造体を指していなければなりません。正常終了した場合、 strapush
構造体には、そのデバイスの構成で使用された情報がすべて格納されます。モジュー
ルリスト中で未使用のエントリーは、値0(ゼロ)で示されます。
SAD_VML
モジュールリストをチェックします。例えば、特定のモジュールがインストールされ
ているかどうかを確認することができます。 arg パラメーターは str_list 構造体(
<stropts.h> ヘッダファイルで定義)を指します。この構造体には次のメンバーがあり
ます。
struct str_list {
int sl_nmods;
struct str_mlist *sl_modlist;
};
sl_nmods
ユーザーが配列に割り当てたエントリーの数を指定します。
sl_modlist
モジュール名の配列を指します。 str_mlist 構造体(同じく、 <stropts.h> ヘッダファイ
ルで定義)は次の通りです。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-183
sad(7)
sad(7)
struct str_mlist {
char l_name[FMNAMESZ+1];
};
ここで l_name はモジュール名の配列を指定します。
l_name 配列が有効な場合 SAD_VML コマンドは値0(ゼロ)で戻ります。この配列に無
効なモジュール名が指定されている場合、このコマンドは値1で戻ります。異常終了
時は値-1で戻ります。
注意
STREAMSドライバーである sad は、通常の STREAMS I_STR ioctl() もサポートしています。
int ioctl(fildes, I_STR, strp);
int fildes;
struct strioctl *strp;
この形式のときは、 strioctl 構造体の ic_cmd フィールドに SAD_SAP, SAD_GAP, または SAD_VML
を指定します。 ic_dp フィールドは strapush 構造体を指します( 説明の SAD_SAP コマンドの項を参
照)。詳細については、 streamio(7) 参照ページを参照してください。
戻り値
特に明記されていない限り、 sad ioctl() コマンドは正常終了した場合に値0(ゼロ)を戻します。それ以外の場合
は値-1を戻します。
エラー
以下の条件が発生した場合、 sad ioctl コマンドは対応する値を戻します。
SAD_SAP
[EEXIST]
指定されたメジャー/マイナーデバイス番号の組み合わせ
(sad_major/sad_minor) は、すでに構成されています。
[EFAULT]
[EINVAL]
arg パラメーターは割り当てられたアドレス空間外を指しています。
メジャーデバイス番号(sad_major) 、モジュール数(sap_list[MAXAPUSH][FMNAMESZ+1]) またはモジュール名リストが無効です。
[ENODEV]
デバイスが autopush 用に構成されていません。この値は SAD_GAP
コマンドから戻されます。
[ENOSR]
内部 autopush データ構造体を割り当てることができません。
[ENOSTR]
メジャーデバイスがSTREAMSドライバーを表していません。
[ERANGE]
コマンドが SAP_RANGE のときに sap_lastminor フィールドが
sap_minor 未満か、または SAP_CLEAR コマンドで指定されたマイ
Section 7-184
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
sad(7)
sad(7)
ナーデバイスが存在しません。
[EACCES]
SAD_SAP ioctl を実行できるのはスーパーユーザーだけです。
[EFAULT]
arg パラメーターは割り当てられたアドレス空間外を指しています。
[EINVAL]
メジャーデバイス番号(sad_major) が無効です。
[ENODEV]
デバイスが autopush 用に構成されていません。
[ENOSTR]
メジャーデバイスがSTREAMSドライバーを表していません。
[EFAULT]
arg パラメーターは割り当てられたアドレス空間外を指しています。
[EINVAL]
モジュール名リストが無効です。
SAD_GAP
SAD_VML
参照
autopush(1m), ioctl(2), open(2), streamio(7).
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-185
scsi(7)
scsi(7)
名称
scsi − Small Computer System Interface デバイスドライバ
説明
SCSI(Small Computer System Interface) はコンピュータと周辺装置の相互接続に関する米国規格です。 HP-UX は、
SCSI パラレルインタフェース (ANSI Std X3.131-199X, "SCSI-3" を参照) 上の SCSI デバイスプロトコルおよび
Fibre Channel インタフェース (ANSI Std X3.269-199X, "Fibre Channel Protocol for SCSI" を参照) をサポートして
います。 SCSI 規格は各種デバイスに対する仕様を含んでいます。この項では、すべての SCSI デバイスドライ
バーに対する一般的な SCSI インタフェースについて説明します。特定のデバイスタイプについての情報は、
デバイスタイプごとに SCSI 周辺装置デバイスドライバーについて説明したマニュアルの項で調べることがで
きます。
SIOC_INQUIRY ioctl はすべての SCSI デバイスドライバーがサポートしています。この ioctl は SCSI デバイス
ごとの INQUIRY コマンドデータを返します。このデータはデバイス識別と機能情報を含んでいます。 inquiry
データには、複数のバージョンの SCSI 規格があるので、複数のバージョンの inquiry データ宣言が用意されて
います。 SCSI-1 バージョンは旧製品との互換性のために提供されています。
SIOC_CAPACITY ioctl は現在のデバイスサイズを示します。デバイスサイズは論理ブロックのサイズと論理ブ
ロックの数として定義されます。このデバイスサイズ データの判定方法は、デバイスの種類ごとに異なりま
す。論理ブロックサイズや論理ブロックの数が0の場合は、デバイスサイズが未知であるか、デバイスが 現在
I/O 操作を実行できないか、 I/O 操作がそのデバイスに対して意味がない場合です。非常に大きなデバイスの
場合、 ioctl の引き数がオーバーフローすることがあります。大きなデバイスに対しては、 SIOC_CAPACITY
ではなく、 SIOC_STORAGE_CAPACITY を使うようにしてください。また、 DIOC_CAPACITY の方を使う
ようにしてください (disk(7) を参照)。
ヘッダファイル <sys/scsi.h> は、 SCSI デバイスに有用な情報を持っています。次の情報は <sys/scsi.h> に定義
されています。
#define SIOC_INQUIRY
#define SIOC_CAPACITY
_IOR(’S’, 2, union inquiry_data)
_IOR(’S’, 3, struct capacity)
#define SIOC_STORAGE_CAPACITY _IOR(’S’, 101, storage_capacity_t)
/* SCSI-1 inquiry structure */
struct inquiry {
unsigned char
Section 7-186
dev_type;
unsigned int
rmb:1;
unsigned int
dtq:7;
unsigned int
iso:2;
unsigned int
ecma:3;
unsigned int
ansi:3;
unsigned int
resv:4;
unsigned int
rdf:4;
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
scsi(7)
scsi(7)
unsigned char
added_len;
unsigned char
dev_class[3];
char
vendor_id[8];
char
product_id[16];
char
rev_num[4];
unsigned char
vendor_spec[20];
unsigned char
resv4[40];
unsigned char
vendor_parm_bytes[32];
};
/* SCSI-2 inquiry structure */
struct inquiry_2 {
unsigned int
periph_qualifier:3;
unsigned int
dev_type:5;
unsigned int
rmb:1;
unsigned int
dtq:7;
unsigned int
iso:2;
unsigned int
ecma:3;
unsigned int
ansi:3;
unsigned int
aenc:1;
unsigned int
trmiop:1;
unsigned int
resv1:2;
unsigned int
rdf:4;
unsigned char
added_len;
unsigned char
resv2[2];
unsigned int
reladr:1;
unsigned int
wbus32:1;
unsigned int
wbus16:1;
unsigned int
sync:1;
unsigned int
linked:1;
unsigned int
resv3:1;
unsigned int
cmdque:1;
unsigned int
sftre:1;
char
vendor_id[8];
char
product_id[16];
char
rev_num[4];
unsigned char
vendor_spec[20];
unsigned char
resv4[40];
unsigned char
vendor_parm_bytes[32];
};
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-187
scsi(7)
scsi(7)
/* union for SIOC_INQUIRY ioctl */
union inquiry_data {
struct inquiry inq1;
/* SCSI-1 inquiry */
struct inquiry_2 inq2;
/* SCSI-2 inquiry */
};
/* structure for SIOC_CAPACITY ioctl */
struct capacity {
uint32_t lba;
uint32_t blksz;
};
/* structure for SIOC_STORAGE_CAPACITY ioctl */
typedef struct {
uint64_t lba;
uint32_t blksz;
} storage_capacity_t;
SIOC_XSENSE ioctl は、デバイスの状態とエラーの詳細情報がある場合には、それを返します。検出 (状態)
データには複数のバージョンの SCSI 規格があるので、複数のバージョンについて、検出データの宣言を用意
しています。 SCSI-1 および非整列バージョンは旧製品との互換性のためだけに提供されています。最後の
SIOC_XSENSE ioctl 呼び出しの後、 CHECK-CONDITION による REQUEST SENSE コマンドデータが新たに発
生していない場合は、 xsense_aligned.error_class と sense_2_aligned.error_code フィールドは値0になります。
より正確な REQUEST SENSE データ操作が必要なアプリケーションは、 SCSI デバイス制御ドライバーを使用
する必要があります (scsi_ctl(7) を参照)。
次の情報は、 <sys/scsi.h> に定義されています。
#define SIOC_XSENSE
_IOR(’S’, 7, union sense_data)
/* structure for SIOC_XSENSE ioctl */
union sense_data {
struct xsense_aligned r_sense1a; /* SCSI and CCS devices */
struct sense_2_aligned r_sense2a;
/* SCSI-2 devices */
};
/* structure for SCSI-1 and SCSI-CCS sense data */
struct xsense_aligned {
unsigned int
valid:1;
unsigned int
error_class:3;
unsigned int
error_code:4;
unsigned char seg_num;
unsigned int
Section 7-188
parms:4;
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
scsi(7)
scsi(7)
unsigned int
sense_key:4;
unsigned char lba[4];
unsigned char add_len;
unsigned char copysearch[4];
unsigned char sense_code;
unsigned char resv;
unsigned char fru;
unsigned char field;
unsigned char field_ptr[2];
unsigned char dev_error[4];
unsigned char misc_bytes[106];
};
/* structure for SCSI-2 sense data */
struct sense_2_aligned {
unsigned int
info_valid:1;
unsigned int
error_code:7;
unsigned char seg_num;
unsigned int
filemark:1;
unsigned int
eom:1;
unsigned int
ili:1;
unsigned int
resv:1;
unsigned int
key:4;
unsigned char info[4];
unsigned char add_len;
unsigned char cmd_info[4];
unsigned char code;
unsigned char qualifier;
unsigned char fru;
unsigned char key_specific[3];
unsigned char add_sense_bytes[113];
};
エラー
SCSI デバイスドライバーの呼び出しによって、次のエラーが発生する可能性があります。
[EACCES]
そのデバイスあるいは操作に対して必要とされるパーミッションがありません。
[ENXIO]
オープン呼び出しの結果の場合は、指定したアドレスにデバイスが見つからなかった
ことを示します。他の呼び出しの場合は、指定したアドレスが範囲外か、デバイスが
既にアクセスできなくなっていることを示します。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-189
scsi(7)
scsi(7)
[EINVAL]
オープン呼び出しの結果の場合は、デバイスドライバーがそのデバイスをサポートし
ていないことを示しています (例: 不正なデバイスタイプ)。他の呼び出しの場合は、
要求そのものまたは要求の引き数が正しくないことを示します。
これはデバイスの使用準備ができていないか、要求した操作が他の操作と衝突してい
[EBUSY]
ることを示します (例えば、デバイスが他のデバイスドライバー経由で現在オープン
しているか、排他アクセスが実行されています)。
SCSI プロトコルや通信の問題が発生しているか、 SCSI コマンドの結果が正常な状態
[EIO]
ではありません。
特定のSCSI 周辺装置デバイスドライバーの説明をするマニュアルエントリーには、エラーについての追加の説
明があります。
警告
正式にサポートされていないデバイスの使用は、データ損失やシステムパニックやデバイス破損の原因になる
ことがあります。 HP-UX デバイスドライバーは、デバイスが SCSI-2 に準拠していることを想定しています。
SCSI-CCS だけに準拠したサポートされていないデバイスは動作するかもしれませんが、推奨しません。
SCSI-1 だけに準拠したサポートされていないデバイスは使用しないでください。
システム稼働中の SCSI バス接続の変更 (再接続) はサポートされていません。電源異常をサポートしていない
システムに接続された SCSI デバイスの電源のオン/オフはサポートされていません。このような操作は、デー
タ損失やシステムパニックの原因になることがあります。
scsi_ctl インタフェースをサポートしているシステムでは、 SIOC_CMD_MODE、 SIOC_SET_CMD と
SIOC_RETURN_STATUS ioctlは既に使われていません (scsi_ctl(7) を参照)。 scsi_ctl インタフェースを使用し
て SCSI デバイスを直接操作すると、機能的により完全で簡単な低レベルの SCSI デバイス制御ができます
(scsi_ctl(7) を参照)。
意味のあるサイズを持たないデバイスだけをサポートしているドライバーでは、 SIOC_CAPACITY ioctl をサ
32
ポートしていない可能性があります。バイト数で表した全体のデバイスサイズは、デバイスによっては 2 −1
を超える可能性があります。
制約
sdisk/schgr/sflop/stape
SIOC_EXCLUSIVE ioctl は、排他アクセス権の取得と解放のために使用できます。排他アクセスは、他のアプ
リケーションによる同時アクセスを防止するもので、これが必要になる操作や望ましいとされる環境もありま
す。次の排他アクセス制御引き数をサポートしています。
Section 7-190
0
論理ユニット (LUN) に対する排他アクセスの解放
1
論理ユニット (LUN) に対する排他アクセスの取得
2
SCSI ターゲットに対する排他アクセスの解放
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
scsi(7)
scsi(7)
3
SCSI ターゲットに対する排他アクセスの取得
4
SCSI バスに対する排他アクセスの解放
5
SCSI バスに対する排他アクセスの取得
SIOC_MEDIUM_CHANGED ioctl は、リムーバブルメディア デバイスでメディアが変更されたことを示しま
す。値「1」は最後に SIOC_MEDIUM_CHANGED ioctl を呼び出してから、デバイスメディアが変更されたこ
とを示します。メディアの変更後、最初の呼び出しだけがこの情報を受け取ることに注意してください。これ
は、複数のアプリケーションがメディアの変更を検出しようとした場合に、メディアの変更を検出できない場
合があることを示します。この問題を回避するために、 SIOC_EXCLUSIVE ioctl を使用して取得する排他アク
セスを使うことができます。
次の情報は <sys/scsi.h> に定義されています。
#define SIOC_MEDIUM_CHANGED _IOR(’S’, 42, int)
#define SIOC_EXCLUSIVE
_IOR(’S’, 68, int)
scsi_disk
SIOC_VPD_INQUIRY ioctl を使用すると、詳細なデバイス固有情報を取得することができます。 page_code
フィールドは、要求する SCSI バイタルプロダクト データ(VPD)のページを示します。 page_buf フィールドに
は、要求したページデータが保存されます。
次の情報は <sys/scsi.h> に定義されています。
#define SIOC_VPD_INQUIRY _IOWR(’S’, 10, struct vpd_inquiry)
/* union for SIOC_VPD_INQUIRY ioctl */
struct vpd_inquiry {
char
page_code;
char
page_buf[126]; /* buffer for VPD page info */
/* VPD page code
*/
};
ファイル
/usr/include/sys/scsi.h
参照
diskinfo(1M), ioctl(2), autochanger(7), scsi_ctl(7), scsi_disk(7), scsi_tape(7)
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-191
scsi_ctl(7)
scsi_ctl(7)
名称
scsi_ctl − デバイスドライバー用の SCSI パススルードライバー
説明
通常、 SCSI デバイスは、そのデバイスタイプ専用のドライバが存在する場合は、そのドライバで制御しま
す。 SCSI を直接アクセスするデバイス (ディスク) 用、あるいはシーケンシャルアクセスするデバイス (テー
プ) 用といったデバイス専用のドライバは、正しい論理デバイスとして動作するように、デバイスとドライバ
の状態を調整します。 scsi_ctl パススルードライバは、通常これらのデバイスタイプ専用のドライバによって
サポートされていない SCSI デバイスやコマンドを使用できるようにします。
scsi_ctl による open() 呼び出しが成功するためにデバイスが存在し SCSI Inquiry コマンドに応答することが必要
であるかどうかは、マイナー番号によって決まります。いったんオープンされると、 SCSI 通信パラメータの変
更や SCSI コマンドの実行や他の SCSI 操作をするために ioctl() 呼び出しを使用することができます。 scsi_ctl
は対象デバイスを論理的に解析しようとしないので、 read() と write() の呼び出しはサポートされていませ
ん。
例外を除いて、ここで述べる ioctl はすべての SCSI デバイスドライバ (デバイス専用のデバイスドライバを含
む) で使用可能です。これらの ioctl を使用するためには、スーパーユーザー特権やデバイスへの書き込みパー
ミッションが必要です。これらの ioctl に関係するすべてのデータ構造体中の 予約済みのフィールドには 0 を
入れなければいけません。
特殊デバイスファイルのマイナー番号
SIOC_IO ioctl を実行する際には、デバイス固有のドライバー (sdisk など) ではなく、 scsi_ctl ドライバーを使う
ことを推奨します。このためには、 scsi_ctl 用のデバイス特殊ファイルを作成する必要があります。
mknod(1M) を使って、マイナー番号を次のように置換してください。
/usr/sbin/mknod
name c 203 0xiitl0o
ここで、マイナー番号の各要素は次のように構成されます。
ii
「インスタンス」番号により、制御インタフェースカードを識別する 2つの 16 進数。インス
タンス値は ioscan(1M) の出力の「インタフェース」ハードウェア型の I コラムに表示されま
す。
t
ドライブ (ターゲット) アドレスを識別する 16 進数。
l
デバイス内の論理ユニット番号 (LUN) を識別する 16 進数。
0
16 進数 0。マイナー番号の位置を確保するものです。
o
次のようなオプションの値。 0 の場合はオープン時に Inquiry を実行してデバイスが存在する
ことを確認し (この方法をお勧めします)、 2 の場合はオープン時に Inquiry を禁止します。
SCSI 通信パラメータ
SCSI HP-UX パラレル SCSI インタフェースおよびファイバチャンネル インタフェースのデバイスプロトコルを
サポートします。ここで説明する SCSI 通信パラメータは特定の SCSI インタフェースにだけ適用されることが
Section 7-192
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
scsi_ctl(7)
scsi_ctl(7)
あり、そのような場合は説明の中で注記されています。
SCSI 通信パラメータは SCSI 通信に関係する機能を制御します。通信パラメータは、バス (リンク)、ターゲッ
ト、論理ユニット番号 (LUN) の 3つの異なるスコープレベルで定義します。バス通信パラメータは、特定のバ
スに接続されているすべてのターゲットに適用します。ターゲット通信パラメータは、特定のターゲットに関
係するすべての LUN に適用します。 LUN 通信パラメータは、特定の LUN に適用します。 SCSI 通信パラメータ
は、すべての (デバイス専用と scsi_ctl ) デバイスドライバに適用します。
パワーアップ時とリセット後は、すべての同時平行 SCSI デバイスとホストは非同期のデータ転送を使って通信
します。非同期のデータ転送は要求 (REQ) と確認 (ACK) シグナルを使います。 REQ と ACK シグナルを順番に
使用すると、通信プロトコルが簡単になりますが、 I/O パフォーマンスが限られてしまいます。 SCSI ターゲッ
トとホスト間の I/O パフォーマンスを向上させるために同期のデータ転送を使用できます。同期のデータ転送
は、 REQ と ACK の順序の規制を小さくすることで I/O パフォーマンスを向上させます。複数の REQ を送信する
のを認めることで、シグナル伝送遅れと一時的な転送率の不均衡をより効率的に許容できます。同期のデータ
転送を使用できるようにするため、 SCSI ターゲットとホストは、相互に受け入れ可能な最大限の REQ-ACK オ
フセットとデータ転送率パラメータを決定しなければなりません (ネゴシエーション)。最大 REQ-ACK オフセッ
トパラメータは、送信する REQ の最大限に許容できる数を示します。値 0 は非同期のデータ転送を示すために
使用します。他の値は同期のデータ転送を示します。適切な値は一般に受信するデータの FIFO のサイズに依存
します。大きい値は、データ転送率を向上させる傾向があります。最大データ転送率パラメータは、「バース
ト」データ転送率 (連続する同期のデータ転送の最小の許容可能時間) を示します。 SCSI 同期のデータ転送要
求 (SDTR) メッセージは、ネゴシエーションプロセスを初期化し、 SCSI コマンドの処理に対応します。
パワーアップ時とリセット後は、すべての同時平行 SCSI デバイスとホストは、8 ビットデータ転送を使って通
信します。 SCSI ターゲットとホスト間の I/O 性能を向上させるために、16 ビット (幅) データ転送を使用する
ことができます。ワイドデータ転送を使用するために、 SCSI ターゲットとホストは相互に受け入れ可能なデー
タ転送幅パラメータのネゴシエーションをしなければいけません。ネゴシエーションプロセスを初期化するた
めに使用される SCSI ワイドデータ転送要求 (WDTR) メッセージは、 SCSI コマンドの処理に対応します。
SCSI デバイスによっては、実行中の複数のコマンドを同時に処理することができます。そのようなデバイス
は、処理のためのコマンドを保持しているコマンドキューを持っています。このコマンドキューを使用するこ
とで、デバイスがホストからの新しいコマンドを待つ時間を減少して I/O パフォーマンスを向上させます。コ
マンドキューは、本質的には、 ‘‘read-ahead’’ と ‘‘immediate-reporting’’ をサポートしているデバイスの I/O パ
フォーマンスを向上させないことに注意してください (scsi_disk(7) と scsi_tape(7) 参照)。 SCSI デバイスとホス
トは、これらの複数の同時に実行中のコマンドを処理するためにコマンドタグを使用します。コマンドキュー
が有効になっているときはいつでも、特定の LUN によって扱われるそれぞれの実行中のコマンドは、ユニーク
なコマンドタグを持っています。
SCSI デバイスは、 SCSI INQUIRY コマンドデータで今までに述べてきた特別な通信機能をサポートする能力を示
します。通常は、 SCSI INQUIRY コマンドデータとネゴシエーションプロトコルによって、ホストとデバイスに
I/O パフォーマンスを最大限にするための適切な通信パラメータを決定できるようになります。現在の通信パラ
メータの設定は SIOC_GET_LUN_PARMS, SIOC_GET_TGT_PARMS, SIOC_GET_BUS_PARMS ioctl を使用し
て確認できます。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-193
scsi_ctl(7)
scsi_ctl(7)
通信の問題点を回避したり、最適なパラメータを決定する際に外部の状況を反映させるために、 SCSI 通信パラ
メータを制限することが望ましい場合もあります。 SCSI の通信パラメータ制限は、 SIOC_SET_LUN_LIMITS, SIOC_SET_TGT_LIMITS そして SIOC_SET_BUS_LIMITS ioctl を使用して指定できます。指定した通信
パラメータ制限と対応する実際の現在の通信パラメータの間には差がある場合もあることに注意してくださ
い。この差は、デバイス専用ドライバの能力、インタフェースドライバの能力、インタフェースハードウェア
の能力、デバイスの能力、ネゴシエーションプロセスによる遅延、現在実行しているコマンドによる遅延、デ
バイスへの送信を待っているコマンドによる遅延などによるものです。 SCSI の (デバイス専用、または
scsi_ctl) デバイスドライバに対応する LUN がオープンされていないとき、通信パラメータ制限の指定は close()
と open() 呼び出しの間で保持されないことに注意してください。
現在の SCSI 通信パラメータ制限の指定は、 SIOC_GET_LUN_LIMITS, SIOC_GET_TGT_LIMITS と
SIOC_GET_BUS_LIMITS ioctl を使用して確認できます。
論理単位の通信パラメータは、 SIOC_GET_LUN_PARMS, SIOC_SET_LUN_LIMITS と
SIOC_GET_LUN_LIMITS ioctl を使用して管理できます。
SIOC_GET_LUN_PARMS ioctl は、現在の LUN 通信パラメータ値を示します。 max_q_depth フィールドは、
タグの付いたキューを使用可能にするかどうか、使用可能な場合には同時にアクテイブとなることが許可され
るコマンドの最大数を示します。 max_q_depth がゼロの場合は、タグの付いたキューは禁止されます。 1 の
場合は、タグは使用されていますが、コマンドはまだ順番に処理されています。 1 よりも大きい場合は、タグ
が使用されていて、この max_q_depth が同時にアクティブにすることができるコマンドの数を指定します。
SIOC_SET_LUN_LIMITS ioctl は、 LUN 通信パラメータ制限の推薦値を提供するために使用されます。
max_q_depth フィールドは、タグの付いたキューを使用可能にするかどうか、使用可能な場合には同時にアク
テイブとなることが許可されるコマンドの最大数を示します。 SIOC_GET_LUN_LIMITS ioctl は現在指定され
ている LUN 通信パラメータを示します。
ターゲットの通信パラメータは、対応する LUN に対して SIOC_GET_TGT_PARMS, SIOC_SET_TGT_LIMITS
と SIOC_GET_TGT_LIMITS ioctl を使用して管理できます。 SIOC_GET_TGT_PARMS ioctl は、現在のター
ゲット通信パラメータ値を示します。 width, reqack_offset, および xfer_rate フィールドは、現在ネゴシエート
されているデータ転送パラメータを示します。 width が 8 の場合には、通常の幅のデータ転送が有効です。 16
の場合は、ワイドデータ転送が有効です。 reqack_offset がゼロの場合は、非同期転送が有効で、 xfer_rate は
無意味になります。 reqack_offset がゼロでない場合は、非同期転送が有効で、最大「バースト」データ転送率
は 1 秒あたり xfer_rate ワードです。このワードのサイズは、 width に示される値と同じです。
SIOC_SET_TGT_LIMITS ioctl は、ターゲット通信パラメータ制限の推薦値を示します。 max_width フィール
ドは、データ転送に使用される最大バス幅を指定をします。 max_reqack_offset フィールドは現在送られてい
る REQ の最大数を示します。値 0 は、非同期のデータ転送シグナルが現在使用されていることを示します。
max_xfer_rate フィールドは、同期データ転送中に許可される最大「バースト」データ率の指定をします。
SIOC_SET_TGT_LIMITS ioctl は、ターゲット通信パラメータ制限の指定をします。 width, reqack_offset,
xfer_rate, max_width, max_reqack_offset, max_xfer_rate フィールドはパラレル SCSI にのみ適用されます。
バス通信パラメータは、対応する LUN に対して SIOC_GET_BUS_PARMS, SIOC_SET_BUS_LIMITS と
Section 7-194
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
scsi_ctl(7)
scsi_ctl(7)
SIOC_GET_BUS_LIMITS ioctl を使用して管理できます。
SIOC_GET_BUS_PARMS ioctl は、現在のバス通信パラメータ値を示します。 max_width フィールドは、対応
するバスに接続されているターゲットデバイスへのデータ転送の最大データ転送幅を示します。
max_reqack_offset フィールドは、対応するバスに接続されているターゲットデバイスへのデータ転送の際に送
信される REQ 最大数を示します。 max_xfer_rate フィールドは、対応するバスに接続去れているターゲットデ
バイスへのデータ転送の最大「バースト」データ転送率を示します。
SIOC_SET_BUS_LIMITS ioctl は、対応するバスに接続されているターゲットのバス通信パラメータ制限の指
定をします。 max_width フィールドは、対応するバスに接続されているターゲットデバイスへのデータ転送の
推奨最大データ転送幅を指定します。 max_reqack_offset フィールドは、対応するバスに接続されているター
ゲットデバイスへのデータ転送の際に送信される REQ の最大数を指定します。 max_xfer_rate フィールドは、
対応するバスに接続されているターゲットデバイスへのデータ転送の際の最大「バースト」データ転送率を指
定します。 SIOC_GET_BUS_LIMITS ioctl は、現在指定されているバス通信パラメータ制限を示します。
max_width, max_reqack_offset および max_xfer_rate フィールドはパラレル SCSI にのみ適用されます。
次の定義は、 <sys/scsi.h> 中に含まれています。
/* SCSI communication parameter ioctls */
#define SIOC_GET_LUN_PARMS
_IOR(’S’, 58, struct sioc_lun_parms)
#define SIOC_GET_TGT_PARMS
_IOR(’S’, 59, struct sioc_tgt_parms)
#define SIOC_GET_BUS_PARMS
_IOR(’S’, 60, struct sioc_bus_parms)
#define SIOC_GET_LUN_LIMITS
_IOR(’S’, 61, struct sioc_lun_limits)
#define SIOC_GET_TGT_LIMITS
_IOR(’S’, 62, struct sioc_tgt_limits)
#define SIOC_GET_BUS_LIMITS
_IOR(’S’, 63, struct sioc_bus_limits)
#define SIOC_SET_LUN_LIMITS
_IOW(’S’, 64, struct sioc_lun_limits)
#define SIOC_SET_TGT_LIMITS
_IOW(’S’, 65, struct sioc_tgt_limits)
#define SIOC_SET_BUS_LIMITS
_IOW(’S’, 66, struct sioc_bus_limits)
struct sioc_lun_parms {
unsigned int flags;
unsigned int max_q_depth;
unsigned int reserved[4];
/* maximum active I/O’s */
/* reserved for future use */
};
struct sioc_lun_limits {
unsigned int flags;
unsigned int max_q_depth;
unsigned int reserved[4];
/* reserved for future use */
};
struct sioc_tgt_parms {
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-195
scsi_ctl(7)
scsi_ctl(7)
unsigned int flags;
unsigned int width;
/* bits */
unsigned int reqack_offset;
unsigned int xfer_rate;
/* bytes/sec */
unsigned int reserved[4];
/* reserved for future use */
};
struct sioc_tgt_limits {
unsigned int flags;
unsigned int max_reqack_offset;
unsigned int max_xfer_rate;
unsigned int max_width;
/* bytes/sec */
/* bits */
unsigned int reserved[4];
/* reserved for future use */
};
struct sioc_bus_parms {
unsigned int flags;
/* reserved for future use */
unsigned int max_width;
unsigned int max_reqack_offset;
unsigned int max_xfer_rate;
unsigned int reserved[4];
/* bytes/sec */
/* reserved for future use */
};
struct sioc_bus_limits {
unsigned int flags;
/* reserved for future use */
unsigned int max_width;
unsigned int max_reqack_offset;
unsigned int max_xfer_rate;
unsigned int reserved[4];
/* bytes/sec */
/* reserved for future use */
};
SCSI コマンドと操作
SIOC_IO ioctl によって、任意の SCSI コマンドを、デバイスに送信することができます。 SCSI コマンドプロト
コルの全詳細は自動的に処理されます。
flags フィールド値を表すのに、次のフラグを使用できます。
SCTL_READ
data_length フィールドが 0 でなければ、データイン状態が要求され
ます。このフラグが存在しなければ、 data_length フィールドが 0 で
ないとき、データアウト状態が要求されます。
SCTL_INIT_SDTR
同期データ転送要求交渉は、このコマンドとともに実行する必要が
あります。このフラグはパラレル SCSI にのみ適用されます。
Section 7-196
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
scsi_ctl(7)
scsi_ctl(7)
SCTL_INIT_WDTR
ワイドデータ転送要求交渉は、このコマンドとともに実行する必要
があります。このフラグはパラレル SCSI. にのみ適用されます。
SCTL_NO_DISK
識別メッセージ内に SCTL_NO_DISC discpriv ビットが設定されてい
ません。このフラグはパラレル SCSI にのみ適用されます。
cdb フィールドは、 SCSI コマンドバイトを表します。コマンドバイト数は、 cdb_length フィールドで表され
ます。 SCSI コマンド状態では、これらのコマンドバイトは、ターゲットデバイスに送られます。
SCSI コマンドのデータ状態用データ領域のアドレスは、 data フィールドで表されます。 data_length フィール
ドは、転送されるデータのバイト数の最大値を表します。 data_length が 0 の場合は、データ状態にならない
ことを示します。データ状態での大部分の SCSI コマンドは、コマンドバイト中のどこかに含まれるデータ長情
報を要求します。呼び出し側は、 data_length フィールドと cdb データ長値の両方を正確に指定する必要があ
ります。その長さは SCSI_MAXPHYS より短くなければならず、さらにこの長さを制限する処理系もありま
す。
max_msecs フィールドは、デバイスがコマンドを終了するのに必要な最大時間をミリ秒で表します。コマンド
が終了することなくこの時間が満了すると、システムは回復プロシージャを実行してデバイスのアテンション
を取り戻そうとします。これらの回復プロシージャには、タグの打切り、打切りは、デバイスおよびバスのリ
セットといった操作が含まれます。 max_msec フィールドの値が 0 の場合は、タイムアウト期間が無限で、シ
ステムはコマンドの終了を無限に待つことを示しています。
SIOC_IO ioctl 呼び出しが戻るときは、すべてのコマンドの処理が終了しています。大部分の SIOC_IO ioctl 呼
び出しは、0(成功) を返します。コマンドの結果できた詳細な ioctl データは、呼び出し側の観点から「成功」
か「失敗」かを評価するために使われます。 cdb_status フィールドは cdb コマンドの結果を示します。
cdb_status フィールドが S_CHECK_CONDITION 状態を示した場合は、 sense_status フィールドは関連する読
み出したデータを集めるのに使われた SCSI REQUEST SENSE コマンドの結果を示しています。これらの状態
フィールドは、次の値のどれか 1つを含んでいます。
SCTL_INVALID_REQUEST
SCSI コマンド要求が不適で、実行されない場合
SCTL_SELECT_TIMEOUT
ターゲットデバイスがホストの SCSI インタフェースの選択に答えな
い (デバイスが存在しないか、応答しない) 場合
SCTL_INCOMPLETE
デバイスが選択に答えるが、コマンドが終了しない (デバイスに時間
がかかりすぎたか、通信障害が発生した) 場合
S_GOOD
デバイスが正常にコマンドを終了した場合
S_CHECK_CONDITION
デバイスが読み取ったデータが使用可能なことを示した場合
S_CONDITION_MET
デバイスが正常にコマンドを終了して、要求された操作 (検索または
プリフェッチ) を完了した場合
S_BUSY
デバイスが他の処理中でビジー状態のため、そのコマンドを受け入
れることができなかったことを示した場合
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-197
scsi_ctl(7)
scsi_ctl(7)
S_INTERMEDIATE
デバイスが、一連の結合したコマンド (サポートされていません。
「警告」参照) の 1つであるこのコマンドを正常に終了した場合
S_I_CONDITION_MET
デバイスが、 S_INTERMEDIATE と S_CONDITION_MET (サポー
トされていません。「警告」参照) の両方を示していた場合
S_RESV_CONFLICT
デバイスが、コマンドが既存のリザーブと衝突したことを示した場
合
S_COMMAND_TERMINATED
デバイスは、コマンドがホストのシステムによって早く終了したこ
とを示した場合
S_QUEUE_FULL
デバイスは、コマンドキューが一杯で、コマンドを受け付けること
ができなかったことを示した場合
data_xfer フィールドは、cdb コマンドのデータ状態に実際に転送したデータバイト数を示します。このフィー
ルドは、 cdb_status フィールドが S_GOOD か S_CHECK_CONDITION を含むときのみに有効です。
sense_xfer フィールドは、有効な読み取りデータバイト数を示します。このフィールドは、 cdb_status フィー
ルドが S_CHECK_CONDITION 値を含み、 sense_status フィールドが S_GOOD 値を含むときのみ有効です。
SIOC_ABORT ioctl は、 SCSI ABORT メッセージを LUN に送信します。これによって、このイニシェータから
の LUN へのアクテイブなコマンドがすべてクリアされます。
SIOC_RESET_DEV ioctl は、 SCSI デバイスをリセットします (アクティブコマンドをすべてクリアすることも
含めて)。パラレル SCSI SIOC_RESET_DEV ioctl により SCSI BUS DEVICE RESET メッセージが関連するター
ゲットに送信されます。ファイバチャンネルでは、 SIOC_RESET_DEV ioctl により TARGET RESET タスク管理
関数がグローバルプロセス ログアウト (GPRLO) の直前に関連するターゲットに送信されます。
SIOC_RESET_BUS ioctl はファイバチャンネルに適用されません。
SIOC_RESET_BUS ioctl は、システムに関連するバス上の SCSI バスリセット状態を生成します。 SCSI バスリ
セット状態は、すべてのバス上のデバイスをリセットします (全デバイスの実行中の全コマンドの消去を含
む)。 SIOC_RESET_BUS ioctlは、ファイバチャンネルに適用されません。
デバイス制御操作実行中に、他の SCSI コマンドを禁止することが必要であったり、便利であったりすることが
あります。通常、これは SIOC_EXCLUSIVE ioctl を使って排他アクセス権を得ることで実行しますが、ときに
は不可能なことがあります。関連する引き数は、次のどれか 1つの整数値を示します。
0
論理ユニットへの排他アクセス権をリリースする
1
論理ユニットへの排他アクセス権を得る
2
ターゲットへの排他アクセス権をリリースする
3
ターゲットへの排他アクセス権を得る
4
バスへの排他アクセス権をリリースする
5
バスへの排他アクセス権を得る
排他アクセスができないことがあります (例えば、マウントされたファイルシステムを含むデバイス上での診
断操作など)。優先順位モードは、関係する LUN に対する、デバイス特有のドライバの全 I/O 操作 (例えばファ
Section 7-198
Hewlett-Packard Company
−7−
HP-UX 11i Version 2: September 2004
scsi_ctl(7)
scsi_ctl(7)
イルシステム I/O や仮想メモリ、仮想記憶ページスワッピング) と、全 SCSI デバイスドライバ オープンコール
( scsi_ctl オープンコールを含む) をブロックします。これらの I/O 操作オープンコールは、優先順位モードが有
効になっている全期間ブロックされます。優先順位モードが有効になっている間、 SIOC_IO 操作のみを実行
する必要があります (これらの操作はブロックされていません)。 SIOC_PRIORITY ioctl は、 LUN 優先順位
モードを制御します。この ioctl は、デバイス制御ドライバでのみ利用可能です。値「1」は、優先順位モード
を有効にします。値「0」は、優先順位モードを無効にします。
ヘッダファイル <sys/scsi.h> には、 SCSI デバイス制御用の有用な情報があります。以下は、 <sys/scsi.h> に含
まれています。
/* SCSI device control ioctls */
#define SIOC_IO
_IOWR(’S’, 22, struct sctl_io)
#define SIOC_RESET_DEV
_IO(’S’, 16)
#define SIOC_RESET_BUS
_IO(’S’, 9)
#define SIOC_PRIORITY_MODE _IOW(’S’, 67, int)
/* Structure for SIOC_IO ioctl */
struct sctl_io
{
unsigned
flags;
unsigned char cdb_length;
unsigned char cdb[16];
void
*data;
unsigned
data_length;
unsigned
max_msecs;
unsigned
data_xfer;
unsigned
cdb_status;
unsigned char sense[256];
unsigned
sense_status;
unsigned char sense_xfer;
unsigned char reserved[64];
};
例
fildes が SCSI デバイス用の有効なファイル記述子だと仮定してください。最初の例は、 SCSI INQUIRY コマン
ドを実行しています。
#include <sys/scsi.h>
struct sctl_io sctl_io;
#define MAX_LEN 255
unsigned char inquiry_data[MAX_LEN];
HP-UX 11i Version 2: September 2004
−8−
Hewlett-Packard Company
Section 7-199
scsi_ctl(7)
scsi_ctl(7)
memset(sctl_io, 0, sizeof(sctl_io)); /* clear reserved fields */
sctl_io.flags = SCTL_READ;
sctl_io.cdb[0] = 0x12;
/* input data expected */
/* can use scsi.h CMDinquiry */
sctl_io.cdb[1] = 0x00;
sctl_io.cdb[2] = 0x00;
sctl_io.cdb[3] = 0x00;
sctl_io.cdb[4] = MAX_LEN;
/* allocation length */
sctl_io.cdb[5] = 0x00;
sctl_io.cdb_length = 6;
/* 6 byte command */
sctl_io.data = &inquiry_data[0];
sctl_io.data_length = MAX_LEN;
sctl_io.max_msecs = 10000;
/* data buffer location */
/* maximum transfer length */
/* allow 10 seconds for cmd */
if (ioctl(fildes, SIOC_IO, &sctl_io) < 0)
{
/* request is invalid */
}
次の例は、 SCSI TEST UNIT READY コマンドを試みて、デバイスがレディか、レディでないか、また別の状
態なのかをチェックします。
#include <sys/scsi.h>
struct sctl_io sctl_io;
memset(sctl_io, 0, sizeof(sctl_io)); /* clear reserved fields */
sctl_io.flags = 0;
/* no data transfer expected */
sctl_io.cdb[0] = 0x00;
/* can use CMDtest_unit_ready */
sctl_io.cdb[1] = 0x00;
sctl_io.cdb[2] = 0x00;
sctl_io.cdb[3] = 0x00;
sctl_io.cdb[4] = 0x00;
sctl_io.cdb[5] = 0x00;
sctl_io.cdb_length = 6;
/* 6 byte command */
sctl_io.data = NULL;
/* no data buffer is provided */
sctl_io.data_length = 0;
/* do not transfer data */
sctl_io.max_msecs = 10000;
/* allow 10 seconds for cmd */
if (ioctl(fildes, SIOC_IO, &sctl_io) < 0)
{
/* request is invalid */
}
else if (sctl_io.cdb_status == S_GOOD)
Section 7-200
Hewlett-Packard Company
−9−
HP-UX 11i Version 2: September 2004
scsi_ctl(7)
scsi_ctl(7)
{
/* device is ready */
}
else if (sctl_io.cdb_status == S_BUSY ||
(sctl_io.cdb_status == S_CHECK_CONDITION &&
sctl_io.sense_status == S_GOOD &&
sctl_io.sense_xfer > 2 &&
(sctl_io.sense[2] & 0x0F) == 2)) /* can use sense_data */
{
/* device is not ready */
}
else
{
/* unknown state */
}
警告
間違った scsi_ctl 操作 (存在しないデバイスへのアクセスなど) は、データ損失、システムのパニックとデバイ
スの破損などの原因になります。
SIOC_EXCLUSIVE ioctl は、 SIOC_IO コマンドに先だってデバイスへの排他アクセス権を得るために使用し
ます。排他アクセス権が得られない場合は、 SIOC_IO コマンドはデバイス専用のドライバコマンドを混ぜる
こともできますが、望ましい結果が得られないかもしれません。
デバイス専用のドライバは、不適切だったり面倒な SIOC_IO コマンドを拒否する能力があります。 しかし、
そのような操作のすべてを知る、あるいは検出することはできないので、デバイスの内部状態を変更するコマ
ンドを使う時にデバイス専用のドライバの混乱を避けるために注意する必要があります。
SIOC_PRIORITY_MODE ioctl を間違って使用すると、簡単にシステムがデッドロックします。通常は、優先
順位モードを可能にする前に呼び出しプロセスをメモリにロックすることが必要です (plock(2) 参照)。
大部分の SCSI コマンドは、論理ユニット番号 (LUN) フィールドを持っています。 Parallel HP-UX オペレーティ
ングシステムの SCSI のインプリメンテーションは、 SCSI IDENTIFY メッセージを使って論理ユニットを選択
します。アクセスされる LUN が 0 でない場合でも、 cdb の LUN 部分は通常 0 に設定されていなければいけま
せん。
コマンドを結合しての使用はサポートされていません。
データ状態の大部分の SCSI コマンドは、コマンドバイト内にデータ長の情報を必要とします。 data_length
フィールドと cdb データ長の値は、正しいコマンド結果を得るためには正確に指定しなければいけません。
非常に大きな (または、無限の) タイムアウト値は、同時平行 SCSI バス (潜在的にシステム全体) をハングさせ
る原因になります。
HP-UX 11i Version 2: September 2004
− 10 −
Hewlett-Packard Company
Section 7-201
scsi_ctl(7)
scsi_ctl(7)
デバイスやバスのリセット操作は、タイムアウトが終了した時にデバイスの注意を得るために使用できます。
デバイスをリセットすることは、 I/O エラーやキャッシュされたデータの損失の原因になります。これはデー
タの損失やシステムのパニックの原因になります。
HP-UX オペレーティングシステムの SCSI インプリメンテーションでは、ドライバのオープン時に inquiry デー
タのアクセスの同期をとるので、 SCSI INQUIRY データを SIOC_IO ioctl の代わりに SIOC_INQUIRY ioctl を使
用して得ることは、一般的に望ましいことです。
通信パラメータは、デバイス専用のドライバ能力によって影響されるので、デバイス専用のドライバの使用に
より、通信パラメータが変更される場合があります。
SIOC_CAPACITY ioctl は、 scsi_ctl では、容量がデバイスに特有なためにサポートされていません。
ファイル
/usr/include/sys/scsi.h
/usr/include/sys/scsi_ctl.h
参照
mknod(1M), ioctl(2), scsi(7)
Section 7-202
Hewlett-Packard Company
− 11 −
HP-UX 11i Version 2: September 2004
scsi_disk(7)
scsi_disk(7)
名称
scsi_disk − SCSI 直接アクセス (ディスク) デバイスドライバ
説明
このセクションでは、文字型特殊デバイスドライバを使用する SCSI ディスク、 CD-ROM および光磁気ディス
クデバイススのアクセス用インタフェースを説明します。
SCSI 直接アクセスデバイスは、データブロックの列をストアします。各直接アクセスデバイスは、多数のデー
タブロックと1つの論理ブロックサイズから構成される固有のデバイスサイズを持っています。すべてのデー
タブロックは、同じ論理ブロックサイズです。 I/O 操作は、ブロックの整数倍のサイズを持っているので、 1
つの論理ブロックサイズが可能な最小の I/O 量です。デバイスブロック サイズは、 DIOC_DESCRIBE 、
DIOC_CAPACITY および SIOC_CAPACITY ioctlを使用して決定できます。 (disk(7) および scsi(7)参照。 disc3
では、 SIOC_CAPACITY はサポートされていません )。メディアがインストールされていない、または他の理
由によって、直接アクセスデバイスが使用不可能な状態の場合は、デバイスは0のサイズを持っていると解釈
されます。そのようなデバイスへの open() 呼出しは正常終了しますが、引き続く read() および write() 呼出し
は異常終了します。
ioctl(2) のマンページに操作や引き数の使用法が説明されています。使われる arg としては、通常、特定のioctl
の #define 文に使われている引き数のアドレスが使われます。例の項にサンプルコードがありますのでそれを
参照してください。
効率を改善するために、多くの SCSI ディスクデバイスはキャッシュを持っています。これらのキャッシュ
は、読取りと書込み操作の両方で使用されます。「先読み」と呼ばれる読込みキャッシュは、読取り要求を見
越してディスクドライブにデータを読み取らせるために使用されます。先読みを行うと、ユーザーにとって効
率が明らかに改善されます。書込みキャッシュの使用は、「即時レポート」と呼ばれます。即時レポートは、
データのメディアへの書込みが実際にコミットされる前に完了したという書込み状態をレポートすることで、
I/O 効率を改善します。引き続く物理的書込み操作が異常終了した場合は、データが失われる可能性がありま
す。メディアの傷による物理的書込み障害は、ディスクドライブが自動スペアリングを使用することで大きく
削減されます。即時レポートとメディアへの記録の間に電源障害が発生すると、キャッシュのデータが失われ
ます。しかし、これらのイベントの間隔は、そのような損失が起きないように一般に比較的小さいです。
SIOC_GET_IR ioctlは、デバイスが現在即時レポート機能を使用しているかどうかを決定するために使用しま
す。値 1 は、即時レポートが使用可能であることを示します。値0は、即時レポートが使用不可能であること
を示します。 SIOC_SET_IR ioctlは、即時レポートを明示的に使用可能または使用不可能にするために使用し
ます。 0の値は、即時レポートを使用不可能にします。値 1 は、即時レポートを使用可能にします。
SIOC_SYNC_CACHE ioctlによって、メディアに対して、デバイス内でデータをキャッシュすることを強制で
きます。
ほとんどの SCSI 着脱可能メディアのディスクデバイスは、 "prevent" および "allow" メディア着脱コマンドをサ
ポートしています。データ破壊およびデータアクセス障害を避けるために、メディアの着脱は、着脱可能メ
ディアのディスクデバイススが開かれている間は防止されています。メディアの着脱はサポートされていない
ので、 SIOC_MEDIUM_CHANGED ioctlはサポートされていません。ヘッダファイル <sys/scsi.h> は、直接ア
クセスデバイスの制御に関する情報を含んでいます。次の定義は、 <sys/scsi.h> に含まれています。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-203
scsi_disk(7)
scsi_disk(7)
/* ioctl support for SCSI disk devices */
#define SIOC_GET_IR
_IOR(’S’, 14, int)
#define SIOC_SET_IR
_IOW(’S’, 15, int)
#define SIOC_SYNC_CACHE
-IOW(’S’, 70, int)
SIOC_FORMAT ioctlは、すべてのメディア表面を再フォーマットします。他のアプリケーションに影響がない
ことを保証するために、再フォーマットの前には、 DIOC_EXCLUSIVE ioctlを使用して( disk(7)参照) デバイ
スへの排他的アクセスを行います。 fmt_optn フィールドは、メディア位置を選択するために使用されます。
ほとんどのデバイスでは、1つのメディア位置だけをサポートしています。これらのデバイスでは、値0を使用
します。値0は、複数のメディア位置をサポートしているデバイスのデフォルトの位置を選択するためにも使
用できます。 interleaveフィールドは、セクタインタリーブを指定するために使用します。値0は、適切なデ
フォルトのインタリーブを使用することを指定します。
EXAMPLES
次のサンプルコードは、 scsi_disk に影響を与える ioctl の使用方法を示したものです。
#include <stdio.h>
#include <fcntl.h>
#include <sys/errno.h>
#include <sys/diskio.h>
#include <sys/scsi.h>
Describe (dfd)
int dfd;
{
int ret;
disk_describe_type descr_type;
if ((ret = ioctl (dfd, DIOC_DESCRIBE, &descr_type)) != 0) {
exit(1);
}
printf ("\nSuccessful ioctl DIOC_DESCRIBE \n");
printf (" model number: %s\n", descr_type.model_num);
printf (" interface: %d <20=scsi>\n", descr_type.intf_type);
}
Exclusive (dfd)
int dfd;
{
int ret, flag=1;
if ((ret = ioctl (dfd, DIOC_EXCLUSIVE, &flag)) != 0) {
exit(1);
}
}
Section 7-204
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
scsi_disk(7)
scsi_disk(7)
Enable_WOE (dfd)
int dfd;
{
int ret, flag=1;
if ((ret = ioctl (dfd, SIOC_WRITE_WOE, &flag)) != 0) {
exit(1);
}
printf ("\nSuccessful ioctl SIOC_WRITE_WOE \n");
}
main (argc, argv)
int argc;
char ** argv;
{ int ret, fd; if (argc != 2) {
printf ("Usage: %s <disk3_device> \n", argv[0]);
exit(1);
}
if ((fd = open (argv[1], O_RDWR)) < 0) {
exit (1);
}
Describe (fd);
Exclusive (fd);
Enable_WOE (fd);
}
警告
今までのディスクデバイススは小さな
(通常 512バイト) ブロックサイズがを持っていました。しかし、(光ディスクやディスクアレイなどの) 新しい
ディスクデバイススの多くは比較的大きなブロックサイズを持ちます。直接 rawディスクアクセスを使用する
アプリケーションは、 DIOC_DESCRIBE, DIOC_CAPACITY, あるいは SIOC_CAPACITY ioctl を使用して適
切な最小 I/O サイズを決定しなければなりません。
ディスクデバイスがオープンしている間の媒体の着脱および挿入はサポートしておらず、媒体を着脱あるいは
挿入すると予期しない結果を招くことがあります。媒体の着脱防止策を破ろうとしないでください。防止策を
破ってデバイス容量を変更しても識別されないことがあります。
I/O 動作サイズを大きくすると、より効果があると期待されます。しかし、デバイスのキャッシュに比べて
SCSI ディスク I/O 動作が大きすぎる場合、媒体の最高速度のデータ転送レートを維持するために必要なキャッ
シュスペースをデバイスが得られないことがあります。この結果、より小さな 動作サイズと比較して、I/O 性
能が低下することがあります。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-205
scsi_disk(7)
scsi_disk(7)
制約
光磁気ディスクデバイス
SIOC_VERIFY_WRITES ioctlは書込みモードを制御します。通常、書き込まれたデータは、メディアに正しく
ストアされたとみなされます。確認書込みモードは、データが正しく書き込まれたことを保証するため書込ま
れたデータを検証します。検証は、書込み効率を大きく減少させ、通常は必要ありません。 SIOC_VERIFY_WRITES ioctlは、確認書込みを可能または不可能にするために使用します。 0値は確認書込みを不可能に
します。値 1 は確認書込みを可能にします。確認書込みは本来は光磁気ディスクを意図していますが、通常の
ディスクデバイスに対しても書込み検証をサポートしているシステムもあります。
SIOC_VERIFY ioctlは、メディア領域が正当なデータ(正しく書き込まれている)を含んでいるか検証します。
検証されたメディア領域は、読取りを試みたときに I/O エラーを起こしません。検証されるメディア領域は、
start_lba および block_cnt フィールドで指定されます。検証は、本来は光磁気ディスクを意図していますが、
通常のディスクデバイスに対しても検証操作をサポートしているシステムもあります。
SIOC_WRITE_WOE ioctlは、光磁気ディスクデバイススに使用する書込みモードを制御します。通常、光磁気
書込み操作では、物理的なヘッドを2回パスさせることが必要です。最初のパスで、書き込むメディア領域を
消去します。 2番目のパスで、実際にデータを書き込みます。無消去書込みモードは、最初の(メディア領域の
消去)パスをスキップすることによって書込み効率を大きく改善します。正しくデータが書き込まれたことを保
証するために、無消去書込み操作は空白であることがわかっているメディア(消去済みまたは未使用)にのみ行
います。 SIOC_WRITE_WOE ioctlは、無消去書込みを可能または不可能にするために使用します。 0値は無
消去書込みを不可能にします。値 1 は無消去書込みを可能にします。
SIOC_ERASE ioctlは、メディア領域を明示的に消去します。消去されるメディア領域は、 start_lba および
block_cnt フィールドで指定されます。この方法で消去されたメディア領域には、無消去書込みモードを使用し
て書き込めます。消去されたメディア領域は、あるデータ値(すなわち0)が書き込まれたメディア領域とは異な
ります。消去されたメディア領域は読み込めません。消去されたメディア領域に読込みを試みた場合は、一般
には I/O エラーが発生します。
SIOC_VERIFY_BLANK ioctlは、メディア領域が消去されていて、無消去書込みモードを使用して書込むのに
適しているか検証します。検証されるメディア領域は、 start_lba および block_cnt フィールドで指定されま
す。
次の光磁気ディスクデバイス 固有の情報は、 <sys/scsi.h> に含まれています。
#define SIOC_WRITE_WOE
_IOW(’S’, 17, int)
#define SIOC_VERIFY_WRITES
_IOW(’S’, 18, int)
#define SIOC_ERASE
_IOW(’S’, 19, struct scsi_erase)
#define SIOC_VERIFY_BLANK
_IOW(’S’, 20, struct scsi_verify)
#define SIOC_VERIFY
_IOW(’S’, 21, struct scsi_verify)
/* structure for SIOC_ERASE ioctl */
struct scsi_erase {
Section 7-206
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
scsi_disk(7)
scsi_disk(7)
unsigned int start_lba;
unsigned short block_cnt;
};
/* structure for SIOC_VERIFY_BLANK and SIOC_VERIFY ioctls */
struct scsi_verify {
unsigned int start_lba;
unsigned short block_cnt;
};
ファイル
/usr/include/sys/scsi.h
参照
mediainit(1M), mknod(1M), ioctl(2), disk(7), scsi(7)。
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-207
scsi_tape(7)
scsi_tape(7)
名称
scsi_tape − SCSI シーケンシャルアクセス(テープ)デバイスドライバ
説明
SCSI シーケンシャルアクセス(テープ)デバイスは、データブロックの列をストアします。固定または可変サイ
ズのブロックモードを使用して、データの読取りや書込みが行われます。デバイスがサポートしている場合
は、通常は可変サイズのブロックモードが使用されます(すべてのブロックが同じサイズの場合でも)。固定サ
イズのブロックモードは、一般には可変サイズのブロックをサポートしていないテープデバイスでのみ使用さ
れます。固定サイズのブロックモードは、可変サイズのブロックをサポートしているテープデバイスでも I/O
効率を改善するために使用できます。
一般に、 SCSI テープデバイスは、 mt(7) 汎用テープ デバイスインタフェースを通して制御されます。このセ
クションでは、 SCSI テープデバイスに固有の機能を説明します。
テープデバイスでは、 SIOC_CAPACITY ioctl ( scsi(7)参照) を残存テープ容量を決定するために使用できま
す。 blksz フィールドは、デバイスの通常ブロックサイズを示します。この値は、デバイスの現在のブロック
サイズかもしれませんし、そうでないかもしれません。 lba フィールドで示されるブロック数は、残存メディ
アにどれくらいのデータが書き込めるかの概算です。残存容量情報を提供していないデバイスでは、0のサイ
ズが返されます。実際に書き込めるデータ量は、ブロックサイズ、メディアの傷、データ圧縮やストリーミン
グ管理能力等の要因に依存して、指示された値より高くなったり低くなったりします。
効率を改善するために、ほとんどの SCSI テープデバイスはキャッシュを持っています。「先読み」と呼ばれる
読取りキャッシュは、読取り要求を見越してテープドライブにデータを読み取らせるために使用されます。先
読みを行うと、ユーザーにとっては効率は明らかに改善されます。書込みキャッシュの使用は、「即時レポー
ト」と呼ばれます。即時レポートは、書き込み中のデータが実際にメディアへ渡される前に、完了したという
書き込み状態をレポートすることによって I/O 効率を改善します。これによりアプリケーションプログラム
は、追加データを供給でき、「ストリーミング」と呼ばれる連続したメディア動作が可能になります。
SIOC_GET_IR ioctlは、デバイスが現在即時レポート機能を使用しているかどうかを決定するために使用しま
す。値‘‘1’’は即時レポートが使用可能であることを示します。デフォルトでは、デバイスドライバは、即時レ
ポートを使用可能にしようとします。 SIOC_SET_IR ioctlは、即時レポートを明示的に使用可能または使用不
可能にするために使用します。 0の値は即時レポートを使用不可能にします。値‘‘1’’は即時レポートを使用可
能にします。 MTIOCTOP ioctlの MTNOP コマンドは、すべてのキャッシュされたデータをメディアに書き込
ませる(コミットさせる)ために使用します。 SIOC_SET_IR ioctlによってセットされたデバイスの即時レポー
トモードは、 close() および open() 呼出しを超えて保存されますが、システムのリブートを超えては保存され
ません。
SIOC_GET_BLOCK_SIZE ioctlは、デバイスの現在のブロックサイズを示します。 0のブロックサイズはデバ
イスが可変サイズブロックモードであることを示します。 0でない値のブロックサイズはデバイスが固定サイ
ズブロックモードであることを示します。
SIOC_SET_BLOCK_SIZE ioctlは、現在のブロックサイズを指定されたバイト数に変更します。ブロックサイ
ズを0に設定すると、可変サイズブロックモードが使用されます。 0でない値のブロックサイズは、固定サイズ
ブロックモードを使用することを指定します。デフォルトではデバイスドライバは、オープン時にブロックサ
Section 7-208
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
scsi_tape(7)
scsi_tape(7)
イズを 0に設定しようとします。デバイスが可変サイズブロックモードをサポートしていない場合は、ドライ
バは固定サイズブロックモード用に適切なブロックサイズを選択します。 SIOC_SET_BLOCK_SIZE ioctlに
よって設定されたデバイスのブロックサイズは、 close() および open() 呼出しを超えて保存されますが、シス
テムのリブートを超えては保存されません。
SIOC_GET_BLOCK_LIMITS ioctlは、デバイスの最大および最小固定ブロックサイズを示します。デバイスの
最小固定ブロックサイズは min_blk_size フィールドで示されます。 max_blk_size フィールドは、デバイスで
サポートされている最大ブロックサイズとシステムでサポートされている最大ブロックサイズ (MAXPHYS) の
小さい方になります。これは使用しているデバイス、ドライバおよびホストのシステムの組合わせにおいて正
当な最大ブロックサイズです。
SIOC_GET_POSITION ioctlは、デバイスの現在のメディア位置を決定するために使用します。この機能をサ
ポートしているデバイスでは、結果の値は、将来に同位置にメディアを再移動するために使用されます。
SIOC_SET_POSITION ioctlは、デバイスでメディアの再移動のために使用します。この機能をサポートしてい
るデバイスでは、レコード、ファイルマークおよびセットマーク スペーシングを使用してメディアを再移動す
るよりも、この機構を使用した方が一般に早く完了します。指定する引き数値は、そのメディアボリュームに
対する以前の SIOC_GET_POSITION の結果になるはずです。
次の定義は、 <sys/scsi.h> に含まれています。
/* ioctl support for SCSI tape commands */
#define SIOC_GET_IR
_IOR(’S’, 14, int)
#define SIOC_SET_IR
_IOW(’S’, 15, int)
#define SIOC_GET_BLOCK_SIZE
_IOR(’S’, 30, int)
#define SIOC_SET_BLOCK_SIZE
_IOW(’S’, 31, int)
#define SIOC_GET_BLOCK_LIMITS _IOW(’S’, 32, struct scsi_block_limits)
#define SIOC_GET_POSITION
_IOR(’S’, 33, int)
#define SIOC_SET_POSITION
_IOW(’S’, 34, int)
/* structure for SIOC_GET_BLOCK_LIMITS ioctl */
struct scsi_block_limits {
unsigned min_blk_size;
unsigned max_blk_size;
};
警告
SCSI バスおよびデバイスをリセットすると、デバイスは、テープの最初 (BOT) にメディアを再移動することが
あります。この無意識のメディア再移動は、データの損失を起こします。 scsi_tapeドライバは、潜在的なデー
タ損失を示すために、引き続く最初の open() を失敗させようとします。
メディアがプログラムによって再移動される場合は、 scsi_tape ドライバはクローズ時にファイルマークを書き
込みません。デバイスをクローズする前にメディアを再移動するアプリケーションは、要求されたテープマー
クを書き込みます。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-209
scsi_tape(7)
scsi_tape(7)
参照
scsi(7), mt(7), mknod(1M)
Section 7-210
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
sioc_io(7)
sioc_io(7)
名称
sioc_io − SCSI パススルー インタフェース
説明
SCSI デバイスは、デバイス固有のドライバが備わっている場合に、そのドライバによって制御されます。
SCSI 直接アクセス (ディスク) デバイス用や順次アクセス (テープ) デバイス用などのデバイス固有のドライバ
は、デバイスとドライバの状態を調整して、デバイスの正しい論理動作を実行します。 sioc_io パススルー イ
ンタフェースにより、デバイス固有のドライバでは通常はサポートされていない SCSI デバイスとコマンドを
使用することができます。
SIOC_IO ioctl を使用するには、スーパーユーザー特権またはデバイス書き込みパーミッションが必要です。
sioc_io データ構造内のすべての予約済みフィールドは、ゼロにしておく必要があります。
SIOC_IO ioctl は、デバイスへ任意の SCSI コマンドの送信を可能にします。 SCSI コマンドプロトコルの詳細
はすべて自動的に処理されます。
SIOC_IO ioctl 用のデータ構造は、 <sys/scsi.h> から組み込まれます。
/* SCSI device control ioctls */
#define SIOC_IO
_IOWR(’S’, 22, struct sctl_io)
/* Structure for SIOC_IO ioctl */
struct sctl_io
{
unsigned
flags;
unsigned char cdb_length;
unsigned char cdb[16];
void
*data;
unsigned
data_length;
unsigned
max_msecs;
unsigned
data_xfer;
unsigned
cdb_status;
unsigned char sense[256];
unsigned
sense_status;
unsigned char sense_xfer;
unsigned char reserved[64];
};
以下のフラグを使用して、 flags フィールド値を指定することができます。
SCTL_READ
data_length フィールドがゼロ以外の場合は、データインフェーズが想定されます。こ
のフラグが設定されていない場合は、 data_length フィールドがゼロ以外の場合に、
データアウトフェーズが想定されます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-211
sioc_io(7)
sioc_io(7)
cdb フィールドは、SCSI コマンドバイトを指定します。コマンドバイトの長さは、 cdb_length フィールドに
よって指定されます。このコマンドバイトは、SCSI コマンドフェーズ中にターゲットデバイスに送信されま
す。
SCSI コマンドのデータフェーズ用データ領域アドレスは、 data フィールドによって指定されます。
data_length フィールドは、転送されるデータバイトの最大数を指定します。ゼロ値の data_length は、データ
フェーズが無いことを示します。データフェーズのあるほとんどの SCSI コマンドは、データ長情報がコマン
ドバイトに含まれていることを想定します。呼び出し側は、 data_length フィールドとすべての cdb データ長
の値を正しく指定しなければなりません。データ長は、 SCSI_MAXPHYS を超えてはなりません。処理系の中
には、この長さをさらに厳しく制限するものもあります。
max_msecs フィールドは、デバイスがコマンドの終了に要する最大時間をミリ秒単位で指定します。コマンド
がこの時間内に終了しないと、システムはデバイスの回復を試みます。この回復手順には、タグのアボート、
アボート、デバイスおよびバスリセットの各操作が含まれています。 max_msec フィールドがゼロの場合、タ
イムアウトは設定されず、システムはコマンド終了まで無限に待たなければならないことを示します。
SIOC_IO ioctl 呼び出しが戻った時点で、すべてのコマンド処理が終了します。ほとんどの SIOC_IO ioctl 呼び
出しは、ゼロを戻します (正常終了)。この結果生成された詳細な ioctl データを使用して、呼び出し側は「正常
終了」または「異常終了」を判断する必要があります。 cdb_status フィールドは、 cdb コマンドの結果を示し
ます。 cdb_status フィールドが S_CHECK_CONDITION ステータスを示す場合は、 sense_status フィールド
は、関連するセンスデータを収集するために使用した SCSI REQUEST SENSE コマンドの結果を示します。こ
れらのステータスフィールドには、以下のいずれかの値が格納されます。
SCTL_INVALID_REQUEST
SCSI コマンド要求が無効のため、実行できません。
SCTL_SELECT_TIMEOUT
ホスト SCSI インタフェースによる選択に応答しません (デバイスが存在しな
いか、応答しません)。
SCTL_INCOMPLETE
選択に応答しましたが、コマンドは終了しません (デバイスの処理時間が長
すぎたか、通信障害が発生しました)。
S_GOOD
コマンドは正常に終了しました。
S_CHECK_CONDITION
センスデータが使用可能です。
S_CONDITION_MET
コマンドは正常終了し、要求された操作 (検索またはプリフェッチ) が実行さ
れました。
S_BUSY
他の操作を実行中であるために、コマンドを受け付けません。
S_INTERMEDIATE
一連のリンクされたコマンドの1つであるこのコマンドを正常に終了しまし
た (サポートされていません。 警告を参照)。
S_I_CONDITION_MET
デバイスは、 S_INTERMEDIATE および S_CONDITION_MET の両方の状
況を示しました (サポートされていません。 警告を参照)。
Section 7-212
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
sioc_io(7)
sioc_io(7)
S_RESV_CONFLICT
コマンドが既存の予約値と重複しています。
S_COMMAND_TERMINATED
コマンドがホストシステムによって途中で終了しました。
S_QUEUE_FULL
コマンド待ち行列が現在いっぱいであるため、コマンドを受け入れることが
できません。
data_xfer フィールドは、 cdb コマンドのデータフェーズ中に実際に転送されたデータバイト数を示します。
このフィールドは、 cdb_status フィールドの値が、 S_GOOD または S_CHECK_CONDITION のいずれかの
場合のみ、有効です。 sense_xfer フィールドは、有効なセンスデータのバイト数を示します。このフィールド
は、 cdb_status フィールドの値が S_CHECK_CONDITION であり、 sense_status フィールドの値が S_GOOD
である場合のみ、有効です。
例
fildes は、SCSI デバイスの有効ファイル記述子であると想定します。最初の例では、SCSI INQUIRY コマンド
を実行します。
#include <sys/scsi.h>
struct sctl_io sctl_io;
#define MAX_LEN 255
unsigned char inquiry_data[MAX_LEN];
memset(sctl_io, 0, sizeof(sctl_io)); /* clear reserved fields */
sctl_io.flags = SCTL_READ;
sctl_io.cdb[0] = 0x12;
/* input data expected */
/* can use scsi.h CMDinquiry */
sctl_io.cdb[1] = 0x00;
sctl_io.cdb[2] = 0x00;
sctl_io.cdb[3] = 0x00;
sctl_io.cdb[4] = MAX_LEN;
/* allocation length */
sctl_io.cdb[5] = 0x00;
sctl_io.cdb_length = 6;
/* 6 byte command */
sctl_io.data = &inquiry_data[0];
sctl_io.data_length = MAX_LEN;
sctl_io.max_msecs = 10000;
/* data buffer location */
/* maximum transfer length */
/* allow 10 seconds for cmd */
if (ioctl(fildes, SIOC_IO, &sctl_io) < 0)
{
/* request is invalid */
}
次の例では、SCSI TEST UNIT READY コマンドを実行し、デバイスが待機中、非待機中、またはその他の状
態か確認します。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-213
sioc_io(7)
sioc_io(7)
#include <sys/scsi.h>
struct sctl_io sctl_io;
memset(sctl_io, 0, sizeof(sctl_io)); /* clear reserved fields */
sctl_io.flags = 0;
/* no data transfer expected */
sctl_io.cdb[0] = 0x00;
/* can use CMDtest_unit_ready */
sctl_io.cdb[1] = 0x00;
sctl_io.cdb[2] = 0x00;
sctl_io.cdb[3] = 0x00;
sctl_io.cdb[4] = 0x00;
sctl_io.cdb[5] = 0x00;
sctl_io.cdb_length = 6;
/* 6 byte command */
sctl_io.data = NULL;
/* no data buffer is provided */
sctl_io.data_length = 0;
/* do not transfer data */
sctl_io.max_msecs = 10000;
/* allow 10 seconds for cmd */
if (ioctl(fildes, SIOC_IO, &sctl_io) < 0)
{
/* request is invalid */
}
else if (sctl_io.cdb_status == S_GOOD)
{
/* device is ready */
}
else if (sctl_io.cdb_status == S_BUSY ||
(sctl_io.cdb_status == S_CHECK_CONDITION &&
sctl_io.sense_status == S_GOOD &&
sctl_io.sense_xfer > 2 &&
(sctl_io.sense[2] & 0x0F) == 2)) /* can use sense_data */
{
/* device is not ready */
}
else
{
/* unknown state */
}
警告
sioc_io 操作の使用法が正しくない場合は (存在しないデバイスへのアクセス試行も含まれます)、データ損失、
システムパニック、デバイス損傷を起こすことがあります。
Section 7-214
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
sioc_io(7)
sioc_io(7)
SIOC_IO コマンドを実行する前に SIOC_EXCLUSIVE ioctl により、デバイスに排他アクセスできるようにす
る必要があります。排他アクセスにしないと、 SIOC_IO コマンドはデバイス固有のドライバコマンドと混合
して、望ましくない結果が生じることがあります。
デバイス固有のドライバは、不適切な、または問題のある SIOC_IO コマンドを拒否することができます。た
だし、このような操作がすべて認識されて、検出されるわけではないため、デバイスの内部状態を変更するコ
マンドを使用する際には、デバイス固有のドライバを混乱させないように十分注意する必要があります。
SIOC_PRIORITY_MODE ioctl の使用法を誤ると、ただちにシステムデッドロックが発生します。通常は、優
先順位モードを使用可能にする前に、呼び出しプロセスをメモリにロックしておく必要があります ( plock(2) を
参照)。
ほとんどの SCSI コマンドには、論理ユニット番号 (LUN) フィールドが割り当てられています。 HP-UX オペ
レーティングシステム上のパラレル SCSI 処理系は、SCSI IDENTIFY メッセージにより論理ユニットを選択し
ます。 cdb の LUN 部分は通常、アクセス対象となる LUN がゼロでない場合でも、ゼロに設定する必要があり
ます。
リンクされたコマンドは使用できません。
データフェーズのあるほとんどの SCSI コマンドは、データ長情報がコマンドバイトに組み込まれていること
を想定しています。正しいコマンドの実行結果を得るために data_length フィールドとすべての cdb データ長
の値を正しく指定しなければなりません。
非常に大きい (または、無限の) タイムアウト値を設定すると、パラレル SCSI バス (潜在的にはシステム全体)
がハングすることがあります。
デバイスおよびバスリセット操作により、タイムアウト発生時点でデバイスを回復させることができます。
デバイスのリセットにより、入出力エラーやキャッシングされたデータの損失が発生して、データの損失やシ
ステムパニックにつながることがあります。
SCSI INQUIRY データを取得する場合は通常、 SIOC_IO ioctl ではなく、 SIOC_INQUIRY ioctl を使用してく
ださい。その理由は、HP-UX オペレーティングシステム上の SCSI 処理系は、ドライバのオープン呼び出し中
に問い合わせデータへアクセスするためです。
通信パラメータはデバイス固有のドライバの機能に影響されることがあるため、デバイス固有のドライバを使
うことによって、通信パラメータが変更されることがあります。
ファイル
/usr/include/sys/scsi.h
/usr/include/sys/scsi_ctl.h
参照
ioctl(2), scsi(7), scsi_ctl(7)
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-215
slp_syntax(7)
slp_syntax(7)
名称
slp_syntax − SLP サービスタイプ構文
説明
SLP API は、SLP サービス情報の照会時、サービスの登録時、およびサービスの登録解除時にサービスタイプ
情報が渡されることが必要です。SLP API は、サービスタイプ情報を、URL フォーマットでも受け付けます。
サービスタイプ文字列には、次の情報が含まれます。
サービスタイプの名前。
そのサービス名を担当する命名機関
サービスタイプ文字列の形式は次のとおりです。
service:abstract-type.naming-authority:concrete-type
The abstract-type (抽象タイプ) は、サービスのタイプを説明する、短い説明文字列です。
naming-authority (命名機関) は、そのサービスを命名した組織の名前です。 naming-authority は省略可能です
が、省略した場合は IANA が命名機関となり、IANA は、サービスタイプを登録することを要求します (RFC
2609 を参照)。
concrete-type (具象タイプ) も省略可能です。抽象タイプのサブタイプの種類を表します。
たとえば、
printer は IANA が所有する抽象タイプであり、 printer:lpr は IANA が所有する具象タイプです。
サービスタイプ文字列の公式の定義は、RFC 2609『Service Templates and Service Schemes』にあります。
サービスタイプ文字列の例
weather.nasa:wtp
NASA が所有する (架空の) 気象サービスタイプ。WTP プロトコルを使用しま
す。
weather.nasa:swtp
NASA が所有する (架空の) 気象サービスタイプ。SWTP プロトコルを使用しま
す。
chat.superchat
SuperChat が所有するチャットサービスタイプ。
printer.samba
samba プリンターサービスタイプ。
ftp
IANA ftp サービスタイプ。
telnet
IANA telnet サービスタイプ。
サービスタイプの比較
サービスタイプは、 SLPFindSrvs()
呼び出しによって返される URL を判別するうえで重要なので、サービスがどのように比較されるかを理解し
ておく必要があります。 SLPReg() の srvtype として、3つのサービス printer:lpr、 printer、および
Section 7-216
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
slp_syntax(7)
slp_syntax(7)
printer.acme が登録されているとします。クライアントプログラムが service:printer を srvtype として
SLPFindSrvs() を呼び出すと、 printer:lpr と printer の URL が返されます (printer.acme
の URL は返されません)。一方、 printer:lpr または printer.acme を srvtype として SLPFindSrvs() を呼び出す
と、 printer:lpr または printer.acme の URL が返されます。つまり、具象タイプを使用すると、抽象タイプと
具象タイプが同じであるサービスだけが返されます。抽象タイプだけを使用すると、その抽象タイプ (および
命名機関) のすべてのサービスが返されます。
SLP サービス URL 構文
SLP API は、URL 構文フォーマットのサービスタイプ文字列を受け付けます。 URL 文字列は、パラメータと
して、 SLPReg()、 SLPDeReg()、 SLPFindSrvs()、および SLPParseSrvURL() の各関数に渡され、その結果と
して、 SLPSrvURLCallback() コールバック関数に返されます。 SLP は、SLP API 関数を呼び出すときに「必
ず」使用しなければならない、サービス URL という特殊なタイプの URL を定義します。サービス URL の構
文は次のとおりです。
SLP サービス URL = service:service-type://addrspec
service-type は、上で説明したとおりのサービスタイプです。 addrspec には、URL 構文に適合する任意のアド
レスを使用でき、ネットワーク位置として変換されます。 service: 文字列および :// 文字列は必須です。
サービス URL の例
service:weather.nasa:wtp://weather.nasa.com:12000
service:weather.nasa:swtp://weather.nasa.com:12001
service:chat.superchat://chat.superchat.com;auth=ldap
SLP では、サービス URL を使用する必要があります。サービス URL を使用しない場合は、API 関数が
SLP_PARSE_ERROR を返します。サービス URL が必要になるのは、SLP API 設計者が、service-type をパラ
メータとして SLPDeReg() 呼び出しに渡すことを許可しないためです。service-type がないため、呼び出し側
は、 SLPDeReg() において、同じ標準 URL に登録されている様々なタイプのサービスを区別できません。
SLPFindSrvs() 関数は、LDAPv3 検索フィルタ構文で検索文字列が渡されることを要求します。
参照
slpd(1M), libslp(3N), slp.reg(4)
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-217
socket(7)
socket(7)
名称
socket − プロセス間通信
説明
ソケットは、プロセスがローカルまたはリモートに通信するための通信端点です。ソケットは、システムコー
ルによってアクセスされます (socket(2) を参照)。
次の ioctl() 要求は、 <sys/ioctl.h> に定義されています (ioctl(2) を参照)。
アドレス arg の整数が0でない値の場合は、ソケットはノンブロッキングモードになります。
FIOSNBIO
0の場合は、ソケットはブロッキングモードになります。ブロッキングモードがデフォルトで
す。 FIONBIO 要求と FIOSNBIO 要求は等価ですが、 FIOSNBIO を使用するようにしてくだ
さい。ノンブロッキングモードの使用方法は、 accept(2), connect(2), recv(2) および send(2) を
参照してください。
SOCK_STREAM ソケットでは、ソケットから現在読取り可能なバイト数をアドレス arg の整数
FIONREAD
に返します。 SOCK_DGRAM ソケットでは、現在読取り可能なバイト数に sockaddr 構造体
(<sys/socket.h> で定義) のサイズを加えた値をアドレス arg の整数に返します。
SIOCATMARK SOCK_STREAM TCP ソケットでは、着信した TCP ストリームを帯域外データバイトの開始点ま
で読み取っている場合は、アドレス arg の整数に0でない値を返します。着信した TCP それ以
外の場合は、ストリームは帯域外データバイトの開始点まで読み取られてはいません。
SOCK_STREAM TCP ソケット以外のソケットでは、アドレス arg の整数に常に0を返します。
SIOCSPGRP
この要求は、ソケットに関連するプロセスグループまたはプロセス ID を、アドレス arg の整
数値にセットします。ソケットの状態が変更されると、ソケットに関連するプロセスグループ
またはプロセス ID にシグナルが送信されます。帯域外データを受信すると、 SIGURG が送
られます。下記の FIOASYNC のように、ソケットが非同期の場合は SIGIO が送られます。
アドレス arg の整数値が正の場合は、指定された値と一致するプロセス ID を持つプロセスに
シグナルが送信されます。値が負の場合は、指定された値の絶対値と等しいプロセスグループ
のすべてのプロセスにシグナルが送信されます。値が0の場合は、シグナルはどのプロセスに
も送信されません。上記のシグナル配信機構を使用可能にするには、 0でない整数値でこの要
求を発行してください。プロセスグループまたはプロセス ID 値のデフォルトは0です。
SIOCGPGRP
この要求は、ソケットに関連するプロセスグループまたはプロセス ID をアドレス arg の整数
に返します。返される整数値の詳細は、上記の SIOCSPGRP を参照してください。
FIOASYNC
アドレス arg の整数が0でない場合は、この要求はソケットの状態を非同期にします。 0の場
合は、ソケットは同期モードになります(デフォルト)。次のいずれかの条件に一致すると、非
同期モードは SIGIO シグナルの配信を使用可能にします。
•
新しいデータが到着した場合
•
連結指向のプロトコルでは、追加した発信バッファ領域が使用可能になったか、または接
続が確立または切断された場合
Section 7-218
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
socket(7)
socket(7)
SIGIO シグナルを送信するには、ソケットに関連するプロセスグループ、またはプロセス ID
を0でない値にしてください。シグナルは、上記の SIOCSPGRP のセマンティクスに従って送
られます。
ソケットは、 fcntl(2) の O_NDELAY および O_NONBLOCK フラグ (<fcntl.h> で定義) をサポートしていま
す。 O_NONBLOCK フラグがセットされた場合は、ソケットは POSIX-スタイルのノンブロッキングモードに
なります。 O_NDELAY フラグがセットされた場合は、ソケットはノンブロッキングモードになります。それ
以外の場合は、ソケットはブロッキングモードになります。ブロッキングモードがデフォルトです。ノンブ
ロッキングモードの使用方法は、 accept(2), connect(2), recv(2) および send(2) を参照してください。
fcntl() の O_NONBLOCK と O_NDELAY フラグ、および ioctl() の FIOSNBIO 要求の両方をサポートしている
ので、ここでは、各機能がどのように相互作用するかを説明します。 O_NONBLOCK または O_NDELAY フ
ラグがセットされている場合は、 recv() および send() 要求は FIOSNBIO 要求に関わらず動作します。
O_NONBLOCK フラグも O_NDELAY フラグもセットされていない場合は、 FIOSNBIO 要求は recv() および
send() の動作を制御します。
制約
AF_CCITT の場合
af_ccitt ソケットには、 FIOSNBIO, FIONREAD, SIOCGPGRP および SIOCSPGRP ioctl() 要求のみが定義され
ています。
著者
socket はカリフォルニア大学バークレー校で開発されました。
参照
fcntl(2), getsockopt(2), ioctl(2), socket(2)
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-219
streamio(7)
streamio(7)
名称
streamio − STREAMS ioctlコマンド
構文
#include <sys/types.h>
#include <stropts.h>
int ioctl(int fildes, int command, ... /* arg */);
説明
STREAMS ioctl コマンドは ioctl() システムコールのサブセットであり、ストリームに対してさまざまな制御機
能を実行します。
fildes はストリームを指すオープン中のファイル記述子です。 command は実行すべき制御機能を指定します。
これについては後で説明します。 arg はこのコマンドで必要なその他の情報を表します。 arg のタイプはコマ
ンドによって異なりますが、一般には整数または command 固有のデータ構造体を指すポインターです。 command および arg はストリームヘッドによって解釈されます。これらの引き数の一定の組み合わせがストリー
ム中のモジュールまたはドライバーに渡されます。
これらのSTREAMSコマンドは ioctl のサブセットなので、 ioctl の項であげられたエラーが発生する可能性が
あります。さらにこれらのエラーのほかにもこのシステムコールは、 fildes で指されるストリームがマルチプ
レクサの下でリンクされていた場合または command がストリームに対して有効な値ではなかった場合、制御
機能を実行せずに errno を [EINVAL] に設定して異常終了します。
また、 ioctl の項で説明しているように、STREAMSモジュールおよびドライバーがエラーを検出することもあ
ります。この場合、モジュールまたはドライバーは、エラーの値を格納したエラーメッセージをストリーム
ヘッドに送信します。これによって、それ以降のシステムコールは errno をこの値に設定して異常終了するよ
うになります。
以下にあげる ioctl コマンドとエラー値は、すべてのSTREAMSファイルに適用されます。
I_ATMARK
ストリームヘッド読み取り待ち行列中の現在のメッセージが、下流のモジュールに
よって「マーク」されているかどうかををユーザーに報告します。 arg は、ストリー
ムヘッド読み取り待ち行列にマークされたメッセージが複数存在する場合の、チェッ
ク方式を決定します。以下の値が指定できます。
ANYMARK
現在のメッセージがマークされているかどうかをチェックします。
LASTMARK
現在のメッセージが、待ち行列中でマークされているメッセージの
中で最後のものかどうかをチェックします。
ANYMARK と LASTMARK の両方が設定された場合は、 ANYMARK が LASTMARK より優先されます。
戻り値は、マーク条件に合致した場合1で、それ以外の場合0です。
Section 7-220
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
I_CANPUT
一定の優先順位範囲が書き込み可能かどうかをチェックします。 arg は問題の優先順位範囲を
指定します。戻り値は、 arg で指定された優先順位範囲がフロー制御されている場合0、その
範囲が書き込み可能な場合1、そしてエラーの場合−1です。
I_CKBAND
ストリームヘッド読み取り待ち行列に、指定された優先順位範囲のメッセージが存在するかど
うかをチェックします。戻り値は、指定された優先順位のメッセージが存在した場合1で、エ
ラーの場合−1です。 arg は、問題の優先順位範囲の値を格納した整数でなければなりません。
I_FDINSERT
ユーザーが指定した1つまたは複数のバッファーからメッセージを作成し、もう1つのストリー
ムに関する情報を追加して、メッセージを下流へ送信します。このメッセージは制御部と省略
可能なデータ部とから構成されます。送信されるデータ部および制御部は、以下で説明するよ
うに、別々のバッファーに格納されていることで区別されます。
arg は strfdinsert 構造体を指します。これには次のメンバーが含まれています。
struct strbuf
ctlbuf;
struct strbuf
databuf;
long
options;
int
fildes;
int
offset;
ctlbuf strbuf 構造体( putmsg(2) を参照)の len フィールドは、このメッセージで送信する制御情
報のバイト数にポインターのサイズを加算した値に設定しなければなりません。 strfdinsert 構
造体の fildes は、もう1つのストリームのファイル記述子を指定します。 offset は、語境界に
合っていなければならず、 I_FDINSERT がポインターを格納する位置を、制御バッファーの
先頭からのバイト数で指定します。このポインターは、 strfdinsert 構造体の fildes に対応する
ストリームのドライバーの、読み取り待ち行列構造体のアドレスを示します。 databuf strbuf
構造体の len フィールドは、このメッセージで送信するデータ情報のバイト数か、またはデー
タ部を送信しない場合は0に設定しなければなりません。
flags は、作成するメッセージのタイプを指定します。通常の (非優先順位)メッセージを作成す
る場合は flags を0に設定し、優先順位の高いメッセージを作成する場合は flags を RS_HIPRI
に設定します。 I_FDINSERT は、内部フロー制御条件のためにストリーム書き込み待ち行列
が一杯のとき、通常のメッセージをブロックします。しかし優先順位が高いメッセージについ
ては、この条件が発生してもブロックしません。また、書き込み待ち行列が一杯であっても
O_NONBLOCK が設定されているときは、通常のメッセージでもブロックしません。代り
に、異常終了して、 errno を [EAGAIN] に設定します。
このほか I_FDINSERT は、メッセージブロックが使用可能になるのを待つためにブロックし
ます(ただし、内部リソース不足の場合はブロックしません)。この場合は、優先順位や
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-221
streamio(7)
streamio(7)
O_NONBLOCK の指定とは無関係にブロックが行われます。メッセージの一部だけが送信さ
れることはありません。
上記以外に I_FDINSERT が異常終了する場合として、 strfdinsert 構造体の fildes に対応する
ストリームのストリームヘッドがエラーメッセージを受信した場合があげられます。この場
合、 errno はそのエラーメッセージ中の値に設定されます。
I_FIND
ストリーム中に現在存在する全モジュールの名前を、 arg で指定された名前と比較します。こ
のコマンドは、モジュールが存在した場合値1を戻し、モジュールが存在しなかった場合値0(
ゼロ)を戻します。
I_FLUSH
この要求は arg の値に従って、すべての入力待ち行列、出力待ち行列、またはその両方をフ
ラッシュ(初期化)します。有効な arg の値は次の通りです。
FLUSHRW
書き込みおよび読み取り待ち行列をフラッシュします。
FLUSHW
書き込み待ち行列をフラッシュします。
FLUSHR
読み取り待ち行列をフラッシュします。
パイプまたはFIFOにモジュールが1つもプッシュされていなかった場合は、両端のストリーム
ヘッドの読み取り待ち行列が arg の値に従ってフラッシュされます。
FLUSHR が設定され、かつ fildes がパイプの場合は、パイプのこちら側の読み取り待ち行列と
他端の書き込み待ち行列がフラッシュされます。 fildes がFIFOの場合は、両方の待ち行列がフ
ラッシュされます。
FLUSHW が設定され、かつ fildes がパイプで、しかもパイプの他端が存在する場合は、パイ
プの他端の読み取り待ち行列とこちら側の書き込み待ち行列がフラッシュされます。 fildes が
FIFOの場合は、FIFOの両方の待ち行列がフラッシュされます。
FLUSHRW が設定されている場合は、すべての読み取り待ち行列がフラッシュされます。つ
まり、FIFOの読み取り待ち行列とパイプの両端の読み取り待ち行列がフラッシュされます。
パイプまたはFIFOに各モジュールがプッシュされている場合、正しいフラッシュ処理は
pipemod モジュールによって行われます。このモジュールは、パイプの中間点に置く必要があ
るので、他のモジュールより先にパイプ上にプッシュしなければなりません。
I_FLUSHBAND
特定の優先順位範囲のメッセージをフラッシュします。 arg は bandinfo 構造体を指します。
この構造体には以下のメンバーがあります。
unsigned char
int
Section 7-222
bi_pri:
bi_option;
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
bi_option フィールドの値には、 I_FLUSH コマンドの項で説明した FLUSHR, FLUSHW, また
は FLUSHRW が指定できます。
I_GETBAND
ストリームヘッド読み取り待ち行列の先頭メッセージの優先順位範囲を、 arg が指す整数に戻
します。
I_GETCLTIME
クローズ遅延時間を arg が指すlong型変数に戻します。
I_SETCLTIME
ストリームのクローズ時、書き込み待ち行列にデータがある場合のストリームヘッドの遅延時
間を、ユーザーが設定できるようにします。ストリームヘッドは、各モジュールおよびドライ
バーをクローズする前に、データの排出を可能にするために、指定された時間だけ処理を遅延
します。遅延後もデータが残っている場合、そのデータはフラッシュされます。 arg はミリ秒
単位の遅延時間へのポインターです。この値はシステムで有効な最も近い値に切り上げられま
す。デフォルトは15秒です。
I_GETSIG
SIGPOLL シグナルを受信するために登録していた呼び出し側プロセスに対し、イベントを戻
します。イベントは、 I_SETSIG コマンドで定義された arg ビットマスクの形式で戻されま
す。
I_GRDOPT
読み取りモードの現在の設定を、引き数 arg が指す int に戻します。読み取りモードについて
は read(2) で説明しています。
I_GWROPT
書き込みモードの現在の設定を、引き数 arg が指す int に戻します。書き込みモードについて
は I_SWROPT で説明しています。
I_LINK
2つのストリームを接続します。 fildes は多重化ドライバーに接続されたストリームのファイル
記述子であり、 arg はもう1つのドライバーに接続されたストリームのファイル記述子です。
arg で示されたストリームは、多重化ドライバーの下に接続されます。 I_LINK は多重化ドラ
イバーに対し、このリンクオペレーションについて肯定応答メッセージをストリームヘッドに
送信することを要求します。この呼び出しは、正常終了の場合マルチプレクサID番号(このマ
ルチプレクサを接続解除するときに使用される識別子、 I_UNLINK を参照)を戻し、異常終了
の場合−1を戻します。
I_LIST
ストリーム上の全モジュール名の一覧をユーザーに報告します。これには最上位のドライバー
名まで含まれます。 arg が NULL の場合、戻り値は、 fildes が指すストリーム上にある、ドラ
イバーも含めたモジュールの数になります。これによってユーザーは、モジュール名用に十分
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-223
streamio(7)
streamio(7)
なスペースを割り当てることができます。 arg が NULL でない場合、 arg は str_list 構造体を
指していなければなりません。この構造体には次のメンバーがあります。
int
struct
sl_nmods;
str_mlist *sl_modlist;
str_mlist 構造体には次のメンバーがあります。
char
l_name[FMNAMESZ+1];
sl_nmods は、ユーザーがこの配列に割り当てたエントリーの数を示します。正常終了した場
合、戻り値は0で、 sl_modlist にはモジュール名のリストが格納され、 sl_nmods は格納された
エントリー数を示します。
I_LOOK
fildes が指すストリームのストリームヘッドの直下にあるモジュールの名前を取り出し、それ
を arg が指しているヌルで終了する文字列中に格納します。 arg が指すバッファーは、
FNAMESZ+1 バイト以上の大きさが必要です。 #include <stropts.h> 宣言が必要です。
I_NREAD
ストリームヘッド読み取り待ち行列の先頭メッセージのデータブロック中にあるデータのバイ
ト数を数え、その値を arg が指す場所に格納します。このコマンドの戻り値は、ストリーム
ヘッド読み取り待ち行列中のメッセージ数です。例えば、 arg にはゼロが戻されたのに ioctl
の戻り値がゼロより大きい場合は、待ち行列の先頭にゼロ長メッセージがあることになりま
す。
I_PEEK
ユーザープロセスが、ストリームヘッド読み取り待ち行列の先頭メッセージの内容をのぞき見
る(peek)ことができるようにします。このとき、メッセージは待ち行列から削除されません。
I_PEEK ioctl の処理方法は、メッセージを削除しない点を除けば、 getmsg() 関数と同じです。
arg パラメーターは strpeek 構造体( <stropts.h> ヘッダファイル内)を指しており、この構造体
には次のメンバーがあります。
struct strbuf
ctlbuf;
struct strbuf
databuf;
long
options;
ctlbuf および databuf が指す strbuf 構造体には、次のメンバーがあります。
int maxlen;
int len;
char *buf
strbuf 構造体の maxlen フィールドには、取り出される制御情報またはデータ情報のバイト数
を指定しなければなりません。 options フィールドには RS_HIPRI または0(ゼロ)を指定しま
す。このフィールドが RS_HIPRI に設定されている場合、 I_PEEK ioctl は待ち行列上で優先
Section 7-224
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
順位の高いメッセージを捜します。このフィールドが0に設定されている場合、 I_PEEK ioctl
は待ち行列上で先頭のメッセージを参照します。
I_PEEK は、メッセージが取り出された場合1を戻し、メッセージが見つからなかった場合は
値0(ゼロ)を戻します。メッセージを待つことはしません。正常終了した場合、 ctlbuf は制御
バッファー中の制御情報を指し、 databuf はデータバッファー中のデータ情報を指します。ま
た options には RS_HIPRI または0(ゼロ)が格納されています。
I_PLINK
2つのストリームを接続します。 fildes は多重化ドライバーに接続されたストリームのファイル
記述子であり、 arg はもう1つのドライバーに接続されたストリームのファイル記述子です。
arg で示されたストリームは、恒久的リンクを介して、多重化ドライバーの下に接続されま
す。 I_PLINK は多重化ドライバーに対し、このリンクオペレーションについて肯定応答メッ
セージをストリームヘッドに送信することを要求します。この呼び出しは、上流の多重化ドラ
イバーに結合されたファイル記述子がクローズされた後も存在する、恒久的リンクを作成しま
す。この呼び出しは、正常終了の場合マルチプレクサID番号(このマルチプレクサを接続解除
するときに使用される識別子、 I_PUNLINK を参照)を戻し、異常終了の場合−1を戻します。
このほか I_PLINK ioctl が異常終了する場合として、多重化ドライバーがリンク要求について
肯定応答してくるのを待っているときに、 fildes のストリームヘッドでエラー (M_ERROR)
メッセージまたはハングアップ (M_HANGUP) メッセージを受信する場合があります。また、
M_IOCACK または M_IOCNAK メッセージの中にエラーが戻されることもあります。このよ
うな場合、 I_PLINK は異常終了し、 errno をメッセージ中の値に設定します。
I_POP fildes が指すストリームのストリームヘッドの直下のモジュールを削除します。パイプからモ
ジュールを削除するには、そのモジュールがプッシュされた側から削除しなければなりませ
ん。 I_POP 要求では、 arg は0でなければなりません。
I_PUNLINK
恒久的リンクで接続されており、 fildes および arg で指定された2つのストリームの接続を解除
します。 fildes は多重化ドライバーに接続されたストリームのファイル記述子です。 arg は、
ストリームを多重化ドライバーの下にリンクしたときに I_PLINK によって戻されたマルチプ
レクサID番号です。 arg が MUXID_ALL の場合は、 fildes への恒久的リンクであるストリー
ムがすべて接続解除されます。 I_PLINK と同様、このコマンドは多重化ドライバーに対し、
リンク切断について肯定応答することを要求します。
I_PUSH
arg が名前を指しているモジュールを、現在のストリームの一番上、ストリームヘッドの直下
にプッシュします。ストリームがパイプの場合、モジュールはパイプの両端のストリームヘッ
ドの間に挿入されます。その後、新しくプッシュされたモジュールのオープンルーチンを呼び
出します。
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-225
streamio(7)
streamio(7)
I_RECVFD
I_SENDFD ioctl がストリームパイプ上で送信したメッセージに結合されたファイル記述子を取
り出します。 arg はデータバッファーへのポインターで、このバッファーは strrecvfd データ
構造体を格納するのに十分な大きさがなければなりません。この構造体には次のメンバーがあ
ります。
int
fd;
uid_t
uid;
gid_t
gid;
char
fill[8]
fd は整数のファイル記述子です。 uid および gid は、送信側ストリームのユーザーIDおよびグ
ループIDです。
O_NONBLOCK が設定されていない場合、 I_RECVFD はメッセージがストリームヘッドに到
着するまで、ブロックします。 O_NONBLOCK が設定されている場合、ストリームヘッドに
メッセージが存在しなければ、 I_RECVFD は異常終了し、 errno を [EAGAIN] に設定しま
す。
ストリームヘッドにあるメッセージが I_SENDFD によって送信されたメッセージの場合、そ
のメッセージに格納されているファイルポインターに、新しいユーザーファイル記述子が割り
当てられます。この新しいユーザーファイル記述子は strrecvfd 構造体の fd フィールドに置か
れます。この構造体は、 arg が指すユーザー データバッファーにコピーされます。
I_SENDFD
fildes に結合されているストリームに対し、ファイルポインターを含むメッセージを、スト
リームパイプの他端のストリームヘッドへ送信するよう要求します。ファイルポインターは
arg に対応します。これは、オープンしているファイルのファイル記述子でなければなりませ
ん。
I_SENDFD は arg を対応するシステム ファイルポインターに変換します。それからメッセー
ジブロックを割り当てて、そこにファイルポインターを挿入します。送信側プロセスのユー
ザーIDおよびグループIDも挿入します。このメッセージは、接続されているストリームパイ
プの他端のストリームヘッドの読み取り待ち行列に、直接つながれます。
I_SETCLTIME
ストリームのクローズ時、書き込み待ち行列にデータがある場合のストリームヘッドの遅延時
間を、ユーザープロセスが設定できるようにします。 arg パラメーターは、ミリ秒単位の遅延
時間へのポインターです。この値はシステムで有効な最も近い値に切り上げられます。デフォ
ルトは15秒です。
ストリームヘッドは、STREAMSモジュールおよびドライバーをクローズする前に、指定され
た時間だけ処理を遅延します。これは、書き込み待ち行列上のデータの排出を可能にするため
です。遅延後もデータが書き込み待ち行列に残っている場合、待ち行列はフラッシュされま
Section 7-226
Hewlett-Packard Company
−7−
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
す。
I_SETSIG
fildes に結合されているストリームで特定のイベントが発生したときに SIGPOLL シグナル(
signal(2) を参照)を発行することを、ユーザーがカーネルに対して要求していると、ストリー
ムヘッドに通知します。 I_SETSIG はSTREAMSにおいて非同期処理をサポートしています。
arg の値は、ユーザーにシグナルを使って通知すべきイベントを指定するビットマスクです。
これは以下の定数の組み合わせたビット単位のORで、特に明記された場合を除き、任意の組
み合わせが指定できます。
S_BANDURG
S_RDBAND と一緒に使用すると、優先順位メッセージがストリームヘッド読
み取り待ち行列の先頭に達したとき、 SIGPOLL の代りに SIGURG が生成さ
れます。
S_ERROR
M_ERROR メッセージがストリームヘッドに達しました。
S_HANGUP
M_HANGUP メッセージがストリームヘッドに達しました。
S_HIPRI
優先順位の高いメッセージがストリームヘッド読み取り待ち行列に存在しま
す。これは、メッセージがゼロ長の場合も設定されます。
S_INPUT
M_PCPROTO 以外のメッセージがストリームヘッド読み取り待ち行列に到着
しました。このイベントは旧リリースとの互換性のためにサポートされてい
ます。これは、メッセージがゼロ長の場合も設定されます。
S_MSG
SIGPOLL シグナルを含むSTREAMSシグナルメッセージが、ストリームヘッ
ド読み取り待ち行列の先頭に達しました。
S_OUTPUT
ストリームヘッドの直下の書き込み待ち行列は、もう一杯ではありません。
これは、データを下流へ送信(書き込み)するための待ち行列に空きがあるこ
とをユーザーに通知します。
S_RDBAND
優先順位範囲メッセージ(範囲>0)がストリームヘッド読み取り待ち行列に到
着しました。これは、メッセージがゼロ長の場合も設定されます。
S_RDNORM
通常の(非優先順位)メッセージがストリームヘッド読み取り待ち行列に到着
しました。これは、メッセージがゼロ長の場合も設定されます。
S_WRBAND
0より大きい優先順位範囲の待ち行列が下流に存在し、書き込み可能です。こ
れは、優先順位データを下流へ送信(書き込み)するための待ち行列に空きが
あることをユーザーに通知します。
S_WRNORM
このイベントは S_OUTPUT と同じです。
ユーザープロセスは、 arg ビットマスクを値 S_HIPRI に設定することにより、優先順位の高
いメッセージについてのみシグナルを受信するように指定することができます。
HP-UX 11i Version 2: September 2004
−8−
Hewlett-Packard Company
Section 7-227
streamio(7)
streamio(7)
SIGPOLL シグナルを受信したいプロセスは、 I_SETSIG を使って、明示的にその受信を登録
しなければなりません。同じストリーム上で同じイベントに対して、複数のプロセスがシグナ
ルの受信を登録した場合は、イベントの発生時に各プロセスにシグナルが通知されます。
arg の値がゼロの場合、呼び出し側プロセスは登録が解除され、それ以降 SIGPOLL シグナル
が通知されなくなります。
I_SRDOPT
引き数 arg の値を使用して、読み取りモード( read(2) を参照)を設定します。有効な arg の値
は次の通りです。
RNORM
バイトストリーム モード(デフォルト)
RMSGD
メッセージ破棄モード
RMSGN
メッセージ非破棄モード
RMSGD と RMSGN の両方を設定するとエラーになります。 RMSGD および RMSGN は
RNORM より優先されます。
さらに、 arg に次のフラグを設定することにより、ストリームヘッドによる制御メッセージの
処理方法を変更することが可能です。
RPROTNORM 制御メッセージがストリームヘッド読み取り待ち行列の先頭にある場合、
EBADMSGで read を異常終了します。これがデフォルトです。
RPROTDAT
ユーザーが read を発行したとき、メッセージの制御部をデータとして渡しま
す。
RPROTDIS
ユーザーが read を発行したとき、メッセージの制御部を破棄します。データ
部は、存在すれば渡します。
I_STR arg が指すデータから内部STREAMS ioctl メッセージを構築し、それを下流に送信します。
この機構は、ユーザーの ioctl 要求を下流のモジュールおよびドライバーに送信するために提
供されています。これによって、 ioctl を使用して情報を送信することができ、また下流の受
信側から上流に情報が送信されれば、それをユーザーに戻すことができます。 I_STR は、シ
ステムが肯定または否定の応答メッセージで応答するまで、あるいは要求が一定時間後に「タ
イムアウト」になるまで、ブロックします。要求がタイムアウトになった場合は、 errno を
ETIMEに設定して異常終了します。
ストリーム上では、同時に1個の I_STR しかアクティブにできません。それ以上の I_STR 呼
び出しは、アクティブな I_STR がストリームヘッドで完了するまで、ブロックされます。こ
れらの要求に対するデフォルトのタイムアウト間隔は15秒です。この呼び出しには、 O_NONBLOCK ( open(2) を参照)フラグは影響しません。
Section 7-228
Hewlett-Packard Company
−9−
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
要求を下流に送信するためには、 arg は strioctl 構造体を指していなければなりません。この
構造体には次のメンバーがあります。
int
ic_cmd;
int
ic_timeout;
int
ic_len;
char
*ic_dp;
ic_cmd は、下流のモジュールまたはドライバーに対する内部 ioctl コマンドであり、 ic_timeout は I_STR 要求がタイムアウトになる前に肯定応答を待つ秒数です(−1=無限、 0=デフォル
トを使用、>0=指定通り)。デフォルトのタイムアウトは無限です。 ic_len はデータ引き数のバ
イト数で、 ic_dp はデータ引き数へのポインターです。 ic_len フィールドは2通りに使用され
ます。入力時には渡されたデータ引き数の長さを格納し、コマンドからのリターン時にはユー
ザーに戻されたバイト数を格納します( ic_dp が指すバッファーは、ストリーム中の任意のモ
ジュールまたはドライバーが戻すデータの最大量を格納するのに十分な大きさがなければなり
ません)。ストリームヘッドは、 strioctl 構造体が指す情報を内部 ioctl コマンドメッセージに
変換し、それを下流に送信します。
I_SWROPT
引き数 arg の値を使用して、書き込みモードを設定します。 arg に設定できるビットは次の通
りです。
SNDZERO
0バイトの書き込みが発生したとき、0長のメッセージを下流に送信します。0
バイトの書き込みが発生したとき、0長のメッセージを送信しないためには、
このビットを arg に設定してはいけません。
I_UNLINK
fildes および arg で指定された2つのストリームの接続を解除します。 fildes は多重化ドライ
バーに接続されたストリームのファイル記述子です。 arg は I_LINK によって戻されたマルチ
プレクサID番号です。 arg が MUXID_ALL の場合は、 fildes にリンクされている全ストリー
ムが接続解除されます。 I_LINK と同様、このコマンドは多重化ドライバーに対し、リンク切
断について肯定応答することを要求します。
戻り値
各コマンドで別に記述された場合を除き、STREAMS ioctl() 呼び出しの戻り値は、正常終了した場合0(ゼロ)、
異常終了した場合−1(マイナス1)です。
エラー
STREAMS ioctl コマンドは、次の条件が発生した場合、指定された機能を実行せずに、 errno を [EINVAL] に
設定して異常終了します。
•
fildes で指定されたストリームが、多重化ドライバーの下にリンクされている場合。
HP-UX 11i Version 2: September 2004
− 10 −
Hewlett-Packard Company
Section 7-229
streamio(7)
streamio(7)
•
command パラメーターが、ストリームに対して有効な値でない場合。
このほか、以下の条件が発生した場合、STREAMS ioctl コマンドは対応する値で戻ります。
I_ATMARK
[EINVAL]
arg の値が不当です。
I_CANPUT
[EINVAL]
arg の値が不当です。
I_CKBAND
[EINVAL]
arg の値が不当です。
I_FDINSERT
[EINVAL]
strfdinsert 構造体中の fildes パラメーターで指定されたオープンしているファイル記
述子は無効です。
[EINVAL]
ポインターのサイズに offset を加算した値は、 ctlptr によって指定されたバッファー
に対する len フィールドの値を超えています。
[EINVAL]
offset は、データバッファー中の正しく境界合わせされた位置を指していません。
[EINVAL]
options に未定義の値が指定されました。
[EFAULT]
arg が指す場所、あるいは ctrlbuf または databuf は、割り当てられたアドレス空間外
です。
[EAGAIN]
非優先順位メッセージを作成しようとしたところ、 O_NONBLOCK オプションが設
定されており、しかもストリームの書き込み待ち行列が内部フロー制御条件のために
一杯だったので、 ioctl 要求が異常終了しました。
[ENOSR]
STREAMSのメモリーリソースが不十分だったため、作成しようとしたメッセージ用
にバッファーを割り当てることができませんでした。
[ENXIO]
I_FDINSERT ioctl 呼び出しの fildes で指定されたストリーム上または strfdinsert 中の
fildes で指定されたストリーム上で、ハングアップが受信されました。
[ERANGE]
databuf によって指定されたバッファーに対する len フィールドの値が、ストリーム
上の一番上のモジュールに対するパケットの最小および最大サイズの範囲外です。
[ERANGE]
databuf によって指定されたバッファーに対する len フィールドの値が、メッセージ
のデータ部の最大許容サイズより大きい値です。
[ERANGE]
ctlbuf によって指定されたバッファーに対する len フィールドの値が、メッセージの
制御部の最大許容サイズより大きい値です。
Section 7-230
Hewlett-Packard Company
− 11 −
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
このほか、 I_FDINSERT ioctl が異常終了する場合として、 strfdinsert 構造体の fildes フィールドで指
定されたストリームがエラー(M_ERROR) メッセージを受信した場合があげられます。この場合、
errno がエラーメッセージ中のエラー値に設定されます。
I_FIND
[EINVAL]
arg は有効なモジュール名を格納していません。
[EFAULT]
arg は割り当てられたアドレス空間外を指しています。
I_FLUSH
[ENOSR]
STREAMSのメモリーリソース不足のため、フラッシュオペレーション用にバッ
ファーを割り当てることができません。
[EINVAL]
arg パラメーターの値が不当です。
[ENXIO]
fildes 上でハングアップが受信されました。
I_FLUSHBAND
[EINVAL]
bi_pr パラメーターの値が最大範囲を超えているか、または bi_option パラメーターが
FLUSHR, FLUSHW, または FLUSHRW 以外です。
I_GETBAND
[ENODATA]
ストリームヘッド読み取り待ち行列上にメッセージが存在しません。
I_GETSIG
[EINVAL]
ユーザープロセスは、 SIGPOLL シグナルを受信するよう登録されていません。
[EFAULT]
arg は割り当てられたアドレス空間外を指しています。
I_GRDOPT
[EFAULT]
arg は割り当てられたアドレス空間外を指しています。
[EAGAIN]
リンクオペレーションを実行するための記憶領域割り当てが、一時的に不可能です。
[EBADF]
arg パラメーターで指定されたオープンしているファイル記述子は無効です。
[ENXIO]
fildes 上でハングアップが受信されました。
[EINVAL]
fildes で指定されたストリームは、多重化をサポートしていません
[EINVAL]
arg で指定されたファイルがストリームでないか、またはこのストリームはすでにマ
I_LINK
ルチプレクサの下にリンクされています。
[EINVAL]
このリンクオペレーションは、多重化構成の結果、
「ループ」を生じる可能性があります。つまり、 arg パラメーターで指定されたドラ
HP-UX 11i Version 2: September 2004
− 12 −
Hewlett-Packard Company
Section 7-231
streamio(7)
streamio(7)
イバーは、複数箇所でこの構成にリンクされています。
[ENOSR]
STREAMSメモリーリソースが不足しているため、このコマンド用に十分な記憶領域
を割り当てることができません。
[ETIME]
ストリームヘッドが肯定応答メッセージを受信する前にタイムアウトになりました。
このほか I_LINK ioctl は、ドライバーからの肯定応答を受信する前に fildes に対応するストリームヘッ
ドで M_ERROR または M_HANGUP メッセージを受信した場合、異常終了します。また、
M_IOCACK または M_IOCNAK メッセージの中にエラーが戻されることもあります。このような場
合、 I_LINK ioctl は異常終了し、 errno をメッセージ中の値に設定します。
I_LIST
[EINVAL]
sl_nmods が1未満です。
[EAGAIN]
バッファーを割り当てることができませんでした。
I_LOOK
[EINVAL]
ストリーム中にモジュールがありません。
[EFAULT]
arg は割り当てられたアドレス空間外を指しています。
I_NREAD
[EFAULT]
arg は割り当てられたアドレス空間外を指しています。
I_PEEK
[EINVAL]
options パラメーターの値が不当です。
[EFAULT]
arg の指す場所、あるいは ctrlbuf または databuf は、割り当てられたアドレス空間外
です。
[EBADMSG]
参照されたメッセージは、 I_PEEK コマンドで有効なメッセージではありません。
I_PLINK
[ENXIO]
fildes パラメーターが指定するストリーム上で、ハングアップが受信されました。
[ETIME]
ストリームヘッドで肯定応答メッセージを受信する前に、タイムアウトが発生しまし
た。
[EAGAIN]
リンクオペレーションを実行するための記憶領域割り当てが、一時的に不可能です。
[EBADF]
arg で指定されたオープンしているファイル記述子は無効です。
[EINVAL]
fildes で指定されたストリームは、多重化をサポートしていません。
[EINVAL]
arg で指定されたファイルがストリームでないか、またはすでに多重化ドライバーの
下にリンクされています。
Section 7-232
Hewlett-Packard Company
− 13 −
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
[EINVAL]
このリンクオペレーションは、多重化構成の結果、
「ループ」を生じる可能性があります。つまり、 arg で指定されたドライバーは、複
数箇所でこの構成にリンクされています。
I_POP
[EINVAL]
ストリーム中にモジュールが存在しません。
[ENXIO]
ポップ中のモジュールからエラー値が戻されました。
[ENXIO]
fildes 上でハングアップが受信されました。
I_PUNLINK
[ENXIO]
fildes 上でハングアップが受信されました。
[ETIME]
ストリームヘッドで肯定応答メッセージを受信する前に、タイムアウトが発生しまし
た。
[EAGAIN]
リンクオペレーションを実行するための記憶領域割り当てが、一時的に不可能です。
[EINVAL]
arg が有効なマルチプレクサID番号ではありません。
[EINVAL]
fildes はパイプのファイル記述子です。
このほか I_PUNLINK ioctl が異常終了する場合として、マルチプレクサがリンク解除要求に肯定応答
するのを待っているときに、 fildes のストリームヘッドでエラー(M_ERROR) メッセージまたはハング
アップ(M_HANGUP) メッセージを受信する場合があります。また、 M_IOCACK または M_IOCNAK
メッセージの中にエラーが戻されることもあります。このような場合、 I_PUNLINK ioctl は異常終了
し、 errno をメッセージ中の値に設定します。
I_PUSH
[EINVAL]
無効なモジュール名が使用されました。
[EFAULT]
arg は割り当てられたアドレス空間外を指しています。
[ENXIO]
プッシュ中のモジュールからエラー値が戻されました。プッシュは異常終了しまし
た。
[ENXIO]
fildes 上でハングアップが受信されました。
I_RECVFD
[EAGAIN]
O_NONBLOCK オプションが設定されている場合に、メッセージがストリームヘッ
ド読み取り待ち行列に存在しませんでした。
[EFAULT]
arg パラメーターは割り当てられたアドレス空間外を指しています。
[EBADMSG]
ストリームヘッド読み取り待ち行列に存在するメッセージには、渡されたファイル記
述子が格納されていません。
HP-UX 11i Version 2: September 2004
− 14 −
Hewlett-Packard Company
Section 7-233
streamio(7)
streamio(7)
[EMFILE]
オープンしているファイルが多過ぎます。これ以上多くのファイル記述子をオープン
することはできません。
[ENXIO]
fildes 上でハングアップが受信されました。
I_SENDFD
[EAGAIN]
送信側のストリームヘッドは、ファイルポインター用のメッセージブロックを割り当
てることができませんでした。
[EAGAIN]
受信側ストリームヘッドの読み取り待ち行列が一杯で、メッセージの受け付けができ
ませんでした。
[EBADF]
arg パラメーターーで指定されたオープンしているファイル記述子は無効です。
[EINVAL]
fildes パラメーターはストリームを参照していません。
[ENXIO]
fildes 上でハングアップが受信されました。
I_SETCLTIME
[EINVAL]
arg の値が不当です。
I_SETSIG
[EINVAL]
ユーザープロセスは、 SIGPOLL シグナルを受信するよう登録されていません。
[EAGAIN]
シグナル要求を格納するデータ構造体の割り当てができませんでした。
I_SRDOPT
[EINVAL]
arg の値が不当です。
[EINVAL]
ic_len フィールドが表すバイト数が、0(ゼロ)未満か、またはメッセージのデータ部
I_STR
(ic_dp) の最大許容サイズより大きい値です。
[EINVAL]
ic_timeout フィールドの値が−1未満です。
[EFAULT]
arg が指す場所、あるいは ic_dp または ic_len によって指定されたバッファーエリア
は割り当てられたアドレス空間外です。
[ENOSR]
STREAMSメモリーリソース不足のため、 ioctl 要求用のバッファーの割り当てができ
ませんでした。
[ENXIO]
fildes で指定されたストリーム上でハングアップが受信されました。
[ETIME]
肯定応答が受信される前に、 ioctl 要求がタイムアウトになりました。
このほか I_STR ioctl が異常終了する場合として、ストリームヘッドがエラー(M_ERROR) またはハン
グアップ(M_HANGUP) を示すメッセージを受信する場合があります。また、 M_IOCACK または
Section 7-234
Hewlett-Packard Company
− 15 −
HP-UX 11i Version 2: September 2004
streamio(7)
streamio(7)
M_IOCNAK メッセージの中にエラーが戻されることもあります。このような場合、 ioctl は異常終了
し、 errno をメッセージ中の値に設定します。
I_SWROPT
[EINVAL]
arg パラメーターの値が不当です。
I_UNLINK
[ENXIO]
fildes 上でハングアップが受信されました。
[ETIME]
ストリームヘッドで肯定応答メッセージを受信する前に、タイムアウトが発生しまし
た。
[EINVAL]
arg が指定するマルチプレクサID番号が無効か、または fildes はすでに多重化ドライ
バーの下にリンクされています。
このほか I_UNLINK ioctl が異常終了する場合として、マルチプレクサがリンク解除要求に肯定応答す
るのを待っているときに、 fildes のストリームヘッドがエラー(M_ERROR) メッセージまたはハング
アップ(M_HANGUP) を受信する場合があります。また、 M_IOCACK または M_IOCNAK メッセー
ジの中にエラーが戻されることもあります。このような場合、 I_UNLINK ioctl は異常終了し、 errno
をメッセージ中の値に設定します。
参照
close(2), fcntl(2), getmsg(2), ioctl(2), open(2), poll(2), putmsg(2), read(2), write(2), signal(4).
HP-UX 11i Version 2: September 2004
− 16 −
Hewlett-Packard Company
Section 7-235
strlog(7)
strlog(7)
名称
strlog − STREAMSログドライバー
説明
STREAMSログドライバーは、ユーザーレベル プロセスと STREAMSのドライバーおよびモジュールに対し、
エラーロギング機能およびイベントトレース機能を提供します。これらの処理は、ユーザーインタフェースお
よびカーネルインタフェースを通して行われます。さらにSTREAMSログドライバーは、エラーログ メッセー
ジとイベントトレース メッセージを、ネットワークトレースおよびロギング機能(NetTL)に転送します(
nettl(1M), netfmt(1M), および nettlconf (1M) を参照)。
このドライバーがユーザーレベル プロセスに提供するインタフェースは、 ioctl() システムコールおよび
STREAMSメッセージフォーマットのサブセットです。これらのプロセスは、エラーログ プロセス、トレース
ログ プロセス、およびその他のエラーまたはイベントメッセージを生成するユーザープロセスです。このユー
ザーインタフェースは、ログドライバーからのログメッセージの収集と、ユーザープロセスからのログメッ
セージの生成を行います。
さらにログドライバーは、関数呼び出しインタフェースを通して、カーネル中のSTREAMSドライバーおよび
モジュールからもログメッセージを受け付けます。カーネルインタフェースは、STREAMSドライバーおよび
モジュールからの要求すなわち呼び出しをログメッセージ中に入れます。
ログドライバーが受け付けたログメッセージは、 NetTLにも送られます。NetTLを使用すると、ロギングすべ
きメッセージの種類の制御と、ロギングされたメッセージのフォーマット処理およびフィルタ処理が行えま
す。
カーネルインタフェース
STREAMSドライバーおよびモジュールは、 strlog 関数を呼び出すことによって、ログメッセージを生成しま
す。
#include <sys/strlog.h>
int strlog (mid, sid, level, flags, fmt [, value ]...);
short mid;
short sid;
char level;
ushort flags;
char *fmt;
int value;
mid
ログメッセージを発行するドライバーまたはモジュールの STREAMSモジュールID番号を指定しま
す。
sid
mid で識別されるSTREAMSモジュールまたはドライバーに関連するマイナーデバイスのサブID番
号を指定します。
Section 7-236
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
strlog(7)
strlog(7)
トレーサーが発行するイベントメッセージの中から一定レベル以下のメッセージを選別するための
level
基準レベルを指定します。
複数のフラグをさまざまな組み合わせで設定することができます。指定可能なフラグは次の通りで
flags
す。
SL_ERROR
エラーログ プロセス用のメッセージを設定します。
SL_TRACE
トレーサー用のメッセージを設定します。
SL_CONSOLE メッセージはコンソールに表示されるよう設定します。
SL_FATAL
致命的なエラーを通知します。
SL_NOTIFY
メッセージのコピーをシステム管理者にメールで送信するよう要求を出します。
以下のフラグは追加です。これらは、 strerr または strace では使用されず、STREAMSメッセージ
をNetTLにマッピングするために使用されます。これについては、後の「STREAMSとNetTLの関
係」を参照してください。
SL_WARN
警告メッセージを設定します。
SL_NOTE
注記メッセージを設定します。
printf 形式のフォーマット文字列です。 %x, %l, %o, %u, %d, %c, および %s 変換指定が指定でき
fmt
ます。
フォーマット文字列に対応する数値引き数または文字引き数です。引き数はいくつでも指定するこ
values
とができます。
ユーザーインタフェース
ユーザープロセスは、 /dev/strlog に対して open() を呼び出すことによって、ログドライバーにアクセスしま
す。このデバイスを1回オープンするごとに、新しいストリームが得られます。ユーザープロセスは、 /dev/strlog をオープンした後、自分がエラーログ プロセスかまたはトレースログ プロセスかを示します。そのために
は、 I_STR ioctl() システムコールを発行し、その際、 strioctl 構造体の ic_cmd フィールドに適切な値を設定
し、さらに trace_ids 構造体に適切なデータと制御情報を設定します。
struct trace_ids {
short ti_mid;
short ti_sid;
char
ti_level;
short ti_flags;
};
ic_cmd の値は次の通りです。
I_ERRLOG
エラーログ プロセスであることを示します。 trace_ids データは不要です。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-237
strlog(7)
strlog(7)
I_TRCLOG
トレースログ プロセスであることを示します。1個以上の trace_ids 構造体から成る配
列を格納したデータバッファが必要です。
trace_ids 構造体のあるフィールドの値が-1の場合、 /dev/strlog は、メッセージ中のこのフィールドに対応する
値についてはまったく制約条件を付けずにメッセージを受け付けます。それ以外の場合 strlog は、メッセージ
の mid および sid の値が trace_ids 構造体の対応するフィールドと同じで、しかもメッセージのレベルが
trace_ids 構造体の level の値以下のメッセージだけを受け付けます。
いったんログプロセスが I_STR ioctl() システムコールを発行すると、その後STREAMSログドライバーは、制
約条件に一致するログメッセージをログプロセスへ送信する処理を開始します。ログプロセスは getmsg() シス
テムコールを介してログメッセージを受け取ります。このシステムコールで渡されるメッセージの制御部に
は、次の log_ctl 構造体が含まれます。
struct log_ctl {
short mid;
short sid;
char
level;
short flags;
long
long
int
ltime;
ttime;
seq_no;
};
log_ctl 構造体の ltime, ttime, および seq_no はそれぞれ、メッセージ発行時刻をブート時以来のマシン単位時間
で表した値、対応する時刻を1970年1月1日以来の秒数で表した値、およびシーケンス番号を示します。 1970
年1月1日以来の秒数で表した時刻が提供されているのは、メッセージの日付と時刻を簡単に計算できるように
するためです。ブート時以来のマシン単位時間で表した時刻が提供されているのは、ログメッセージ同士の相
対的なタイミングを決定できるようにするためです。
エラーログ プロセスまたはトレースログ プロセス以外のユーザープロセスは、ログメッセージを strlog に送
信することができます。ログドライバーは、メッセージの制御部にある log_ctl 構造体の flags フィールドおよ
び level フィールドと、メッセージの適切にフォーマットされたデータ部だけを受け付けます。メッセージの
データ部が適切にフォーマットされているとは、ヌルで終了するフォーマット文字列が格納されており、その
後ろに最大3個の引き数がそれぞれ1ワードに詰められて、文字列の最後に付加されている形式です。
エラーロギング システムとトレースロギング システムには、それぞれ異なるシーケンス番号が割り振られま
す。これらのシーケンス番号は、メッセージの転送状況を追跡するために使用することができます。シーケン
ス番号に抜けがある場合は、ログプロセスが正常にログを転送しなかったことを示します。これが生じるの
は、ログプロセスが何らかの理由でメッセージの送信を停止した場合です(詳細については、 strace(1M) およ
び strerr(1M) コマンドの参照ページを参照)。メッセージのデータ部には、フォーマット文字列 (ヌルで終了)
のテキストと、その後ろの最大3個の引き数が格納されます。
Section 7-238
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
strlog(7)
strlog(7)
STREAMSとNetTLの関係
STREAMSエラーログ メッセージとイベントトレース メッセージは、どちらもNetTLログメッセージにマップ
され、NetTLへ送られます。 NetTLはメッセージを、DISASTER, ERROR, WARNING, およびINFORMATIVEと
いう4つのログクラスに分類します。 NetTLログクラスは、以下の規則に従って、 flags から決定されます。
If (flags & SL_ERROR)
NetTLログクラス
then
if (flags & SL_FATAL) ====> DISASTER
if (flags & SL_WARN) ====> WARNING
if (flags & SL_NOTE) ====> INFORMATIVE
otherwise
====> ERROR
else
all messages
====> INFORMATIVE
デフォルトでは、DISASTERおよびERRORメッセージだけがロギングされます。この設定を変更するには、
nettl コマンドまたは nettlconf コマンドを使用します( nettl(1M) および nettlconf (1M) を参照)。
NetTLによって使用されるSTREAMSサブシステムIDは STREAMS です。
NetTL機能によってロギングされたメッセージは、 netfmt コマンドにより、読み取り可能な形式にフォーマッ
トすることができます( netfmt(1M) を参照)。また netfmt は、フィルタ設定ファイルを受け付け、これを使用し
て STREAMSモジュールIDおよびサブIDのフィルタ処理を行います。このフィルタ設定ファイルのSTREAMS
用の構文を次に示します。
STREAMS module_id sub_id
module_id および sub_id には10進数値またはワイルドカードの ’*’ が指定できます。
戻り値
特に明記されない限り、 strlog ioctl() コマンドは正常終了した場合、値0(ゼロ)を戻します。それ以外の場合は
値-1を戻します。
エラー
以下の条件が発生した場合、 strlog ドライバーの ioctl() コマンドは、 errno を対応する値に設定します。
[ENXIO]
I_TRCLOG ioctl() システムコールで trace_ids 構造体が指定されませんでした。
[ENXIO]
I_STR ioctl() システムコールが認識できませんでした。
ユーザープロセスが送信したメッセージのフォーマットが間違っていても、ドライバーはエラーを戻しませ
ん。
例
以下の各例は、 strlog インタフェースの基本的な使用方法を示します。
次のコード例は、STREAMS モジュールがメッセージをコンソールへ表示する方法を示します。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-239
strlog(7)
strlog(7)
strlog(TMUX,minor(mydev),0,SL_CONSOLE|SL_FATAL,
"TMUX driver (minor:%d) suffers resource shortage.",
minor(mydev));
次のコード例は、ユーザープロセスが ioctl() コマンド I_ERRLOG を使用して、STREAMS ログドライバーに
自分を登録する方法を示します。
struct strioctl iocerr:
int logfd;
if ((logfd = open("/dev/strlog", O_RDWR)) == -1) {
printf("Cannot open /dev/strlog\n");
exit(1);
}
iocerr.ic_cmd = I_ERRLOG;
iocerr.ic_timout = 0;
iocerr.ic_len = 0;
iocerr.ic_dp = NULL;
ioctl(logfd, I_STR, &iocerr);
次のコード例は、ユーザーレベル プロセスがメッセージを strlog ドライバーへ送信するところを示します。
struct strbuf control, data;
struct log_ctl log;
char *warning = "Fatal error for user level process";
int logfd;
if ((logfd = open("/dev/strlog", O_RDWR)) == -1) {
printf("Cannot open /dev/strlog\n");
exit(1);
}
control.len = control.maxlen = sizeof(log);
control.buf = (char *)&lc;
data.len = data.maxlen = strlen(warning);
data.buf = warning;
lc.level = 2;
lc.flags = SL_FATAL|SL_CONSOLE;
Section 7-240
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
strlog(7)
strlog(7)
putmsg(logfd, &control, &data, 0);
以下の各例は、STREAMS に関連したNetTL機能の使用方法を示します。 NetTL の一般的な使用方法について
は nettl(1M), netfmt(1M), nettlconf (1M) を参照してください。NetTL によって使用される STREAMS サブシステ
ムID は STREAMS です。
netfmt はコマンド引き数としてフィルタ設定ファイルを受け付けます。次の例のフィルタ設定ファイルは、モ
ジュールIDが1、サブID が100のメッセージをフォーマットするために使用されます。
STREAMS
1
100
次の例のフィルタ設定ファイルは、モジュールID が 2 の全メッセージとサブID が 101 の全メッセージを表示
するために使用できます。
STREAMS
2
*
STREAMS
*
101
ファイル
/dev/strlog
クローンインタフェースを指定します。
<sys/strlog.h>
ストリームログ用のヘッダファイルを指定します。
<stropts.h>
STREAMSオプションおよび ioctl() コマンド用のヘッダファイルを指定し
ます。
参照
strace(1M), strerr(1M), clone(7), streamio(7), getmsg(2), putmsg(2), write(2), open(2), ioctl(2), nettl(1M), netfmt(1M), nettlconf(1M).
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-241
sttyv6(7)
sttyv6(7)
名称
stty − バージョン6/PWB互換のターミナルインタフェース
注釈
これらの機能は、古いプログラムを変換するために含まれており、新しいコードでは使用しません。 termio(7)
に説明されているインタフェースを使用してください。これらの変換は、 UNIX タイムシェアリング システム
第7版(バージョン7)から移植されたプログラムでは、いくつかのV7フラグが異なって定義されているため動作
しません。
説明
これらのルーチンは、 UNIX タイムシェアリング システム第6版(バージョン6)、および PWB の stty と gtty 呼
出しを、同じ関数を実行する現在のioctlにマップしようとします。マッピングは完全ではありません。機能の
変換方法を下記に説明します。このエントリーを学習する前に termio(7) を学習してください。
次のデータ構造は、インクルードファイル <sgtty.h> に定義されています。
struct sgttyb {
char
sg_ispeed;
char
sg_ospeed;
char
sg_erase;
char
int
sg_kill;
/* input speed */
/* output speed */
/* erase character */
/* kill character */
sg_flags;
/* mode flags */
}
sgtty.hに定義されているフラグは次のとおりです。
#define HUPCL
01
#define XTABS
02
#define LCASE
04
#define ECHO
010
#define CRMOD
020
#define RAW
040
#define ODDP
0100
#define EVENP
0200
#define ANYP
0300
#define NLDELAY 001400
#define TBDELAY 002000
#define CRDELAY 030000
#define VTDELAY 040000
#define BSDELAY 0100000
Section 7-242
#define CR0
0
#define CR1
010000
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
sttyv6(7)
sttyv6(7)
#define CR2
020000
#define CR3
030000
#define NL0
0
#define NL1
000400
#define NL2
001000
#define NL3
001400
#define TAB0
0
#define TAB1
002000
#define NOAL
004000
#define FF0
0
#define FF1
040000
#define BS0
0
#define BS1
0100000
stty(2) コマンド (ioctl TIOCSETP) が実行されると、古い sgttyb 構造体のフラグは新しい等価な termio 構造体に
マップされます。その後、 TCSETA コマンドが実行されます。
次の表は、古い sgttyb フラグと現在の termio フラグの間のマッピングを示します。下記で説明されない
termio 構造体のフラグはクリアされます。
HUPCL (セットした場合)
termio の HUPCL フラグをセット
HUPCL (クリアした場合)
termio の HUPCL フラグをクリア
XTABS (セットした場合)
termio の TAB3 フラグをセット
XTABS (クリアした場合)
termio の TAB3 フラグをクリア
TBDELAY (セットした場合)
termio の TAB1 フラグをセット
TBDELAY (クリアした場合)
termio の TAB1 フラグをクリア
LCASE (セットした場合)
termio の IUCLC, OLCUC および XCASE フラグをセット
LCASE (クリアした場合)
termio の IUCLC, OLCUC および XCASE フラグをクリア
ECHO (セットした場合)
termio の ECHO フラグをセット
ECHO (クリアした場合)
termio の ECHO フラグをクリア
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-243
sttyv6(7)
sttyv6(7)
NOAL (セットした場合)
termio の ECHOK フラグをセット
NOAL (クリアした場合)
termio ECHOK のフラグをクリア
CRMOD (セットした場合)
termio の ICRNL および ONLCR フラグをセット。また、 CR1 をセットした場合は、 termio の
CR1 フラグをセットし、 CR2 をセットした場合は、 termio の ONOCR および CR2 フラグを
セットします。
CRMOD (クリアした場合)
termio の ONLRET フラグをセット。また NL1 をセットした場合は、 termio の CR1 フラグを
セットし、 NL2 をセットした場合は termio の CR2 フラグをセットします。
RAW (セットした場合)
termio の CS8 フラグをセットし、 termio の ICRNL および IUCLC フラグをクリア。また、デ
フォルト値の 6文字と0.1秒がMINとTIMEにそれぞれ割り当てられます。
RAW (クリアした場合)
termio の BRKINT, IGNPAR, ISTRIP, IXON, IXANY, OPOST, CS7, PARENB, ICANON および ISIG フラグ
をセット。また、デフォルト値コントロール-Dとnullが制御文字 EOF と EOL にそれぞれ割り
当てられます。
ODDP (セットした場合)
EVENP もセットした場合は、 termio の INPCK フラグをクリア。それ以外の場合は、 termio
の PARODD フラグをセットします。
VTDELAY (セットした場合)
termio の FFDLY フラグをセット
VTDELAY (クリアした場合)
termio の FFDLY フラグをクリア
BSDELAY (セットした場合)
termio の BSDLY フラグをセット
BSDELAY (クリアした場合)
termio の BSDLY フラグをクリア
さらに、 termio の CREAD ビットがセットされているときに、ボーレートが110の場合は、 CSTOPB ビットが
セットされます。
TIOCSETP を使用すると、 sgttyb 構造体の ispeed エントリーは termio の CBAUD フィールドの適切な速度に
マップされます。 sgttyb の erase および kill エントリーは termio のeraseおよびkill文字にマップされます。
gtty(2) (ioctl TIOCGETP) コマンドが実行されると、 termio(7) の TCGETA コマンドが最初に実行されます。結果
として得られる termio 構造体は、sgttyb構造体にマップされ、ユーザーに返されます。
次の表は、 termio のフラグがどのように古い sgttyb 構造体にマップされるかを示します。下記で説明されな
い sgttyb 構造体のすべてのフラグはクリアされます。
Section 7-244
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
sttyv6(7)
sttyv6(7)
HUPCL (セットした場合)
sgttyb の HUPCL フラグをセット
HUPCL (クリアした場合)
sgttyb の HUPCL フラグをクリア
ICANON (セットした場合)
sgttyb の RAW フラグをセット
ICANON (クリアした場合)
sgttyb の RAW フラグをクリア
XCASE (セットした場合)
sgttyb の LCASE フラグをセット
XCASE (クリアした場合)
sgttyb の LCASE フラグをクリア
ECHO (セットした場合)
sgttyb の ECHO フラグをセット
ECHO (クリアした場合)
sgttyb の ECHO フラグをクリア
ECHOK (セットした場合)
sgttyb の NOAL フラグをセット
ECHOK (クリアした場合)
sgttyb の NOAL フラグをクリア
PARODD (セットした場合)
sgttyb の ODDP フラグをセット
PARODD (クリアした場合)
sgttyb の ODDP フラグをクリア
INPCK (セットした場合)
sgttyb の EVENP フラグをセット
PARODD INPCK (両方ともクリアした場合)
sgttyb の ODDP および EVENP フラグをセット
ONLCR (セットした場合)
sgttyb の CRMOD フラグをセット。また CR1 をセットした場合は sgttyb の CR1 フラグをセッ
トし、 CR2 をセットした場合は sgttyb CR2 のフラグをセットします。
ONLCR (クリアした場合)
CR1 をセットした場合は sgttyb の NL1 フラグをセットし、 CR2 をセットした場合は sgttyb の
NL2 フラグをセット
TAB3 (セットした場合)
sgttyb の XTABS フラグをセット
TAB3 (クリアした場合)
sgttyb の XTABS フラグをクリア
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-245
sttyv6(7)
sttyv6(7)
TAB1 (セットした場合)
sgttyb の TBDELAY フラグをセット
TAB1 (クリアした場合)
sgttyb の TBDELAY フラグをクリア
FFDLY (セットした場合)
sgttyb の VTDELAY フラグをセット
FFDLY (クリアした場合)
sgttyb の VTDELAY フラグをクリア
BSDLY (セットした場合)
sgttyb の BSDELAY フラグをセット
BSDLY (クリアした場合)
sgttyb の BSDELAY フラグをクリア
TIOCGETP を使用すると termio の CBAUD フィールドは、 sgttyb 構造体の ispeed および ospeed エントリーに
マップされます。また、 termio のeraseおよびkill文字は sgttyb の erase および kill エントリーにマップされま
す。
sgttyb と termio 構造体は1対1のマッピングではありませんので、古い TIOCSETP および TIOCGETP 呼出しを
使用すると、予期せぬ結果を生じることがあります。したがって新しいコードでは、 TIOCSETP および
TIOCGETP 呼出しは、現在これらと等価である TCSETA および TCGETA でそれぞれ置き換えてください。
参照
stty(2), termio(7)
Section 7-246
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
TCP(7P)
TCP(7P)
名称
TCP − インターネット転送制御プロトコル
構文
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
s = socket(AF_INET, SOCK_STREAM, 0); s = socket(AF_INET6, SOCK_STREAM, 0);
説明
TCP プロトコルは、信頼性のあるフロー制御された双方向のデータ転送を提供します。 SOCK_STREAM ソ
ケット型をサポートするために使用するバイト列のプロトコルです。 TCP は、相手側との間に仮想回線を構築
します。仮想回線は、リモート インターネットアドレス、リモートポート、ローカル インターネットアドレス
およびローカルポートから構成されます。 IP は、ホスト間でメッセージを直送するためにインターネットアド
レスを、指定されたホストで TCP エンティティを識別するためにポート番号を使用します。
TCP を使用するソケットは、 アクティブまたはパッシブになります。 connect() は、パッシブソケットへの接
続を開始するアクティブソケットを作成します(connect(2) 参照)。パッシブソケットを作成するには、 bind()
システムコールでソケットをバインドした後に listen() システムコールを使用します(listen(2) および bind(2) 参
照)。パッシブソケットだけが、受信接続を受け付けるために accept() 呼び出しを使用できます(accept(2) 参
照)。
パッシブソケットは、複数のネットワークからの受信接続要求に対応するように 指定できます。これは 「ワイ
ルドカードアドレッシング」と呼ばれ、単一のサーバで複数のネットワークのクライアントにサービスを提供
できます。すべてのネットワークからの要求をリスンするソケットを作成するには、AF_INET ファミリーの場
合はインターネットアドレス INADDR_ANY を、AF_INET6 ファミリーの場合は in6addr_any をバインドして
ください。ワイルドカードアドレッシングを使用する場合でも、 TCP ポートを指定できます。ポートにゼロが
指定された場合は、システムがポートを割り当てます。
いったん accept() が接続要求と出会うと、相手側との間に仮想回線が確立されます。 bind() はローカルポート
とローカル インターネットアドレスを提供し、 accept() は接続を要求している相手側からリモートポートとリ
モート インターネットアドレスを収集します。
システムは、下記に説明する 4つのソケットオプション TCP_MAXSEG, TCP_NODELAY,
TCP_ABORT_THRESHOLD, および TCP_CONN_ABORT_THRESHOLD (インクルードファイル
<netinet/tcp.h> で定義)をサポートしています。 TCP_MAXSEG オプションは getsockopt() でだけ使用できま
すが、 TCP_NODELAY、 TCP_ABORT_THRESHOLD、および TCP_CONN_ABORT_THRESHOLDは setsockopt() で設定し getsockopt() でテストできます (getsockopt(2) 参照)。これらの4つのオプションは getsockopt/setsockopt 呼び出しでレベル (level)を IPPROTO_TCP に設定する必要があります。
TCP_MAXSEG
(非論理オプション) アプリケーションは TCP SOCK_STREAM ソケットの
現在のセグメントのサイズを受信できます。現在のセグメントのサイズ
は、 optvalに返されます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-247
TCP(7P)
TCP(7P)
TCP_NODELAY
(論理オプション)少量の出力を即座に送信
TCP_ABORT_THRESHOLD
(非論理オプション) ESTABLISHED 状態での接続に対する 2番目のしきい
値タイマーを設定します。このオプションでは、しきい値タイマーの値を
1000分の 1秒単位で設定します。
タイマーが切れてパケットを再送しなければならない場合、RFC
1122,4.2.3.5 に記述されているように、TCP は最初に、待機していた時間
の合計を 2つのしきい値と比較します。 2番目のしきい値 (R2) よりも長く
待機していた場合、TCP は接続を解除します。このオプションのデフォル
ト値は、ndd の調整可能なパラメーター tcp_ip_abort_interval の現在の値
です。tcp_ip_abort_interval のデフォルト値についての詳細は、 ndd(1M)を
参照してください。
TCP_CONN_ABORT_THRESHOLD
(非論理オプション) 接続を確立する間の 2番目のしきい値タイマーを設定
します。このオプションでは、しきい値タイマーの値を 1000分の 1秒単位
で設定します。
このオプションは、設定された値が接続を確立する間に使用されることを
除き、 TCP_ABORT_THRESHOLD と同じです。タイマーが切れて SYN
パケットを再送しなければならない場合、TCP は最初に、待機していた時
間の合計を 2つのしきい値と比較します。 2番目のしきい値よりも長く待
機していた場合、TCP は接続を解除します。このオプションのデフォルト
値は nddの調整可能なパラメーター tcp_ip_abort_cinterval の現在の値で
す。tcp_ip_abort_cinterval のデフォルト値についての詳細は、 ndd(1M) を
参照してください。
TCP_NODELAY が設定されている場合は、システムは確認応答を受信後に、少量の出力を 1つのパケットに
まとめずに即座に送信します。 TCP_NODELAY が設定されていない場合は、システムは送信する未確認応答
データがない場合は、データが現れたときに送信します。送信する未確認応答データがある場合は、システム
はいったん確認応答を受信すると、少量のデータを1つのパケットにまとめて送信します。応答を受信しない
マウスイベント列を送信するウィンドウマネージャのようなクライアントでは、このようなパケット化は遅延
の重大な原因となります。 TCP_NODELAY オプションは、このような状況を避けるために使用します。しか
し、 TCP_NODELAY オプションを設定すると、ネットワークに多数の小さいパケットを送信することになる
かもしれません。
デフォルトでは、ソケットを作成するときに TCP_NODELAY を設定しません。
setsockopt() または getsockopt() 呼び出しで TCP オプションにアクセスするのに使用するオプションレベル
は、getprotobyname() から使用可能な TCP のプロトコル番号です(getprotoent(3N) 参照)。
確立された TCP 接続に SO_KEEPALIVE オプションが使用可能で接続が 2時間アイドルの場合は、リモート
Section 7-248
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
TCP(7P)
TCP(7P)
TCP の接続が切れていないことを確認するために、TCP はリモートソケットにパケットを送信します。リモー
ト TCP が適時に応答しない場合は、TCP は TCP 自身の通常の再伝送アルゴリズムに従って、保持されたパ
ケットを送信し続けます。リモート TCP が特定の時間内に応答しない場合は、TCP は接続を切ります。次の
ソケット システムコール(例えば recv())が errno に [ETIMEDOUT] を設定し、エラーを返します。
SO_KEEPALIVE の可能な使用についての詳細は、 getsockopt(2) を参照してください。
デフォルトの送信および受信バッファサイズは、32768 バイトです。 (下記の 警告参照)。 TCP ストリームソ
ケットの送信および受信バッファサイズは、 setsockopt() システムコールの SO_SNDBUF オプションおよび
SO_RCVBUF オプション、または t_optmgmt() システムコールの C XTI_SNDBUF オプションおよび
XTI_RCVBUF オプションを使用して変更できます。詳細は getsockopt(2) または t_optmgmt(3) を参照してくだ
さい。
TCP ストリームソケットの最大転送バッファサイズは、2147483647 バイトです。 TCP ストリームソケットの
最大受信バッファサイズは、1073725440 バイトです。これらの最大値は、ndd 変数 tcp_xmit_hiwater_max およ
び tcp_recv_hiwater_max を使って下げることができます。.
エラー
ソケット操作が異常終了すると、次のエラーが errno に返されることがあります。エラーリストの詳細につい
ては、個々のシステムコールのマニュアルを参照してください。
[EISCONN]
ソケットはすでに接続されています。
[ENOBUFS]
内部データ構造用に使用できるバッファスペースがありません。
[ETIMEDOUT]
再送が多すぎたため接続が切れました。
[ECONNRESET]
相手側のソケットが接続を強制的に終了しました。
[ECONNREFUSED]
リモートの相手側が積極的に接続の確立を拒否しました(通常はポートを
リスン中のプロセスがないため)。
[EADDRINUSE]
指定したアドレスはすでに使用中です。
[EADDRNOTAVAIL]
指定したアドレスは、このマシンでは使用できません。
警告
デフォルトのソケット バッファサイズは、将来のリリースやパッチでお知らせすることなく増やすかもしれま
せん。そのため、 listen() を呼び出す前に、アプリケーションが SO_RCVBUF で setsockopt() を呼び出すべき
であり、最初に SO_RCVBUF で getsockopt() を呼び出して、使用しようとしている新しい受信バッファが、現
在のバッファサイズより小さくないことを確かめるべきです。これらのプログラミング上のきまりは、接続が
確立した後 TCP 受信窓の減少に対する TCP プロトコル制限と一致します。
IPv6 は、オプションの IPv6 ソフトウェアがインストールされている HP-UX 11i バージョン 1.0 でサポートさ
れます。現在、HP-UX 11i バージョン 1.6 を実行しているシステムでは、IPv6 はサポートされません。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-249
TCP(7P)
TCP(7P)
著者
ソケットの TCP へのインタフェースはカリフォルニア大学バークレー校で開発されました。
参照
getsockopt(2)、socket(2)、send(2)、recv(2)、t_open(3)、t_optmgmt(3)、socket(7)、inet(7F)、ndd(1M)
RFC 793
Transmission Control Protocol
RFC 1122
Requirements for Internet hosts
RFC 1323
TCP Extensions for High Performance
RFC 1878
Variable Length Subnet Table for IPv4
RFC 2018
TCP Selective Acknowledgement Options
RFC 2414
Increasing TCP’s Initial Window
RFC 2582
NewReno Modifications to TCP’s Fast Recovery Algorithm
Section 7-250
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
tels(7)
tels(7)
名称
tels, telm − STREAMS Telnet スレーブ (疑似端末) ドライバと、STREAMS Telnet マスタードライバ (telnetd のみ
で使用)
構文
#include <sys/termios.h>
#include <sys/strtio.h>
int open("/dev/pts/tN", O_RDWR);
説明
Telnet 疑似端末は、マスターデバイスとスレーブデバイスという密接に連結された 1 組のキャラクタ型デバイ
スで構成されます。マスターとスレーブの両デバイスドライバはともに動作しながら Telnet 接続を行います。
以下に示すように、サーバ側ではマスターが telnetd への接続を行い、スレーブは Telnet アプリケーションプ
ロセス用の端末操作の特殊なファイルアクセスを提供します。
-------------------------------|
疑似端末機能
|
アプリケーション <--> |--------------------------------| <--> telnetd
プロセス
| スレーブ | マスター |
|
(tels)
|
(telm)
|
-------------------------------ptem ( STREAMS pty エミュレーションモジュール) と、上部に (簡潔にするためにここでは示していません)
ldterm ( STREAMS 回線規則モジュール) を持つスレーブドライバ tels は、 termio(7) で説明されているような
端末インタフェースを提供します。 termio(7) に説明されている端末インタフェース用のデバイスには、背後に
ハードウェア装置がある一方、スレーブデバイスには telnetd があり、 マスター側の Telnet 疑似端末で操作し
ます。
個々のマスターデバイスのファイルシステムにはノードがありません。マスタードライバは STREAMS
clone(7) ドライバとしてセットアップされ、 その主デバイス番号はクローンドライバのメジャーデバイス番号
に設定され、その副デバイス番号は telm ドライバのメジャーデバイス番号に設定されます。マスタードライバ
は、デバイスファイル パラメータ /dev/telnetm のある open(2) システムコールを使用して telnetd でオープンさ
れます。クローンオープンは、次に利用できるマスターデバイスのマイナー番号を見つけ出します。マスター
デバイスと、対応するスレーブデバイスの両方がまだオープンされていない場合に限って、マスターデバイス
が使用できるようになります。
STREAMS Telnet サブシステムを使用するには、マスタードライバ用ノード /dev/telnetm および N 個の Telnet
スレーブデバイスをインストールする必要があります。
スレーブデバイスの数は、調整可能なカーネルパラメータ nstrtel によって設定され、SAM を使用して変更す
ることができます。指定省略時の最小値は 60 です。nstrtel の値は、オープン可能な telnet セッション数の上
限値です。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-251
tels(7)
tels(7)
Telnet スレーブデバイスでは複数のオープンが可能です。
マスタードライバとスレーブドライバはすべての STREAMS メッセージを隣接するドライバに渡します。接続
が Telnet のクライアント側からクローズされた場合は、 対応するスレーブデバイスに M_HANGUP メッセー
ジが送られ、そのスレーブデバイスが使用不能になります。スレーブ側のプロセスは、スレーブ デバイスファ
イルに対して write(2) システムコールを出したときに ENXIO のエラーとなります。ただし、スレーブのスト
リームに残っているデータであればどれでも読み取ることができます。すべてのデータの読み取りが終わる
と、 read(2) システムコールは 0 を戻し、スレーブがもう使用できないことを示します。
著者
tels() と telm() は、HP で開発されました。
ファイル
/dev/telnetm
Streams Telnet マスター クローンデバイス
/dev/pts/tN
Streams スレーブデバイス。 N はスレーブデバイスのマイナー番号で、0 < N < nstrtel
です。
参照
insf(1M), open(2), ioctl(2), streamio(7), ldterm(7), telnetd(1M), ptem(7)
Section 7-252
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
名称
termio, termios − 汎用ターミナルインタフェース
説明
HP-UX の非同期の通信ポートはすべて、使用されるハードウェアには依存しない 1つの汎用インタフェースを
使用します。例えば rlogin (rlogin(1) を参照) のようなネットワーク接続は、疑似ターミナルインタフェース
(pty(7) を参照) を使用します。
ここでは、このような汎用インタフェースに共通の機能について説明します。
ターミナルファイルのオープン
ターミナルファイルをオープンする場合、実際に連結が確立されるまでそのプロセスは待たされます。ただし
ユーザープログラムがターミナルファイルをオープンすることは、通常はあまりありません。オープンするの
は getty (getty(1M) を参照) のような特殊なプログラムであり、ユーザーには標準入力、標準出力、標準エラー
ファイルとして渡されるのが普通です。
O_NDELAY フラグと O_NONBLOCK フラグ (open(2) を参照) の両方がクリアされている場合は、 open はモ
デム接続要求 (modem(7) を参照) が完了するまでブロックされます。また O_NDELAY フラグと O_NONBLOCK フラグのどちらかがセットされている場合は、 open はモデム接続要求が完了するのを待たずに正常終
了します。また CLOCAL フラグ (「制御モード」を参照) の値によって open(2) の動作が変わることもありま
す。
プロセスグループ
各ターミナルはそれぞれに対応するフォアグラウンド プロセスグループを 1つ持つことができます。このフォ
アグラウンド プロセスグループは、シグナルを生成する入力文字の操作の際に特別な役割を果たします。
コマンドインタプリタ プロセスは、関連するいくつかのプロセスを 1つのプロセスグループの中に入れて、そ
のプロセスグループをターミナルに割り当てるという手順により、あるターミナルに別の jobs (プロセスグ
ループ) を割り当てることができます。またプロセスはターミナルのフォアグラウンド プロセスグループの値
を得たり変更したりすることもできます。ただし、そのためにはパーミッションの要求が満たされている必要
があります (tcsetpgrp(3C) と tcgetpgrp(3C) を参照)。ターミナルインタフェースは、フォアグラウンド プロセス
グループに入っていないプロセスからのターミナルへのアクセスの制限にも使用されます。
あるプロセスグループ中のすべてのプロセスの上位のプロセスが同じプロセスグループに含まれているか、あ
るいは、そのグループのセッション (「セッション」を参照) に含まれていない場合は、そのプロセスグループ
は親なしのプロセスグループと言われます。
セッション
セッション (setsid(2) または setpgrp(2) を参照) を生成するプロセスはセッションリーダとなります。すべての
プロセスグループは必ず 1つのセッションに属します。プロセスは、自分のプロセスグループが属している
セッションのメンバーとなります。新しく生成されたプロセスは、自分の上位のプロセスが属しているセッ
ションのメンバーになります。プロセスが属するセッションを変更することも可能です (setpgid(2) または setpgrp(2) を参照)。通常、1つのセッションは 1つのログインから生成されたすべてのプロセス (その子プロセスも
含む) から構成されます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-253
termio(7)
termio(7)
制御ターミナル
ターミナルはプロセスの制御ターミナルになれます。制御ターミナルを持つセッションでは、すべてのプロセ
スは同じ制御ターミナルを持ちます。1つのターミナルは複数のセッションの制御ターミナルにはなれませ
ん。セッションの制御ターミナルはセッションリーダによって割り当てられます。セッションリーダが制御
ターミナルを持たず、かつ、まだどのセッションにも割り当てられていないターミナル デバイスファイルを
O_NOCTTY オプション (open(2) を参照) を使わずにオープンした場合、オープンされたターミナルがその
セッションの制御ターミナルになります。そしてそのセッションのセッションリーダのプロセスグループが、
制御ターミナルのフォアグラウンド プロセスグループになります。制御ターミナルがセッションに結び付けら
れているときは、そのセッションのセッションリーダは、制御ターミナルを制御するプロセスとなります。
fork() (fork(2) を参照) を実行した場合、制御ターミナルは子プロセスに継承されます。 setsid() や setpgrp() を
使って新しいセッションを生成した場合 (setsid(2) または setpgrp(2) を参照)、あるいは、制御ターミナルと関
連付けられているすべてのファイル記述子がクローズされた場合は、プロセスは制御ターミナルを放棄しま
す。
制御プロセスが終了したとき、制御ターミナルは現在のセッションから切り離され、新しいセッションリーダ
を得られるようになります。 SIGHUP シグナルは制御ターミナルのフォアグラウンド プロセスグループ中の
すべてのプロセスに送られます。それ以降、他のプロセスからターミナルへのアクセスは拒否され (「ターミ
ナルアクセス制御」を参照)、そのターミナルにはモデム切断が送られたかのように扱われます。
ターミナルアクセス制御
制御ターミナルのフォアグラウンド プロセスグループ中のプロセスからは読み取り操作を行うことができます
(詳しくは「入力処理とデータ読み取り」の項目を参照)。制御ターミナルのフォアグラウンド プロセスグルー
プ以外のプロセスと、そのプロセスが属するプロセスグループ中のプロセスは、その制御ターミナルのバック
グラウンド プロセスグループに属するものとされます。バックグラウンド プロセスグループ中のプロセスから
の制御ターミナルの読み取りは拒否されます。このとき、読み取りを行おうとしたプロセスが SIGTTIN シグ
ナルを無視あるいはブロックしているか、 (vfork が fork とは別に実現されているシステムで) そのプロセスが
vfork(2) を呼び出したがまだ exec(2) を呼び出していないか、あるいは、そのプロセスのプロセスグループが親
なしであるか、のいずれかの場合は、 read() は errno を EIO に設定して −1 を返し、シグナルは送られませ
ん。それ以外の場合は読み取りは拒否され、そのプロセスが属するプロセスグループに SIGTTIN シグナルが
送られます。デフォルトでは SIGTTIN シグナルが送られたプロセスは停止します。
制御ターミナルのフォアグラウンド プロセスグループ中のプロセスからは、書き込み操作を行うことができま
す (「データ書き込みと出力処理」を参照)。ただし TOSTOP (「ローカルモード」を参照) が設定されている
SIGTTOU シグナルを、無視もブロックもしないか、あるいは (vfork が fork とは別に実現されているシステム
で) そのプロセスが vfork(2) を呼び出したが exec(2) はまだ呼び出していないかのどちらかの場合は、バックグ
ラウンド プロセスグループ中のプロセスからの制御ターミナルへの書き込みは拒否されます。書き込みが拒否
され、かつ、バックグラウンド プロセスグループが親なしであるときは、 write() は、 errno を EIO に設定し
て −1 を戻します。書き込みが拒否され、かつ、バックグラウンド プロセスグループが親なしではないとき
は、書き込みを行おうとしたプロセスが属するプロセスグループに SIGTTOU シグナルが送られます。デフォ
ルトでは SIGTTOU シグナルが送られたプロセスは停止します。
Section 7-254
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
ターミナルパラメータを変更する呼び出しは書き込みと同様に扱われますが、その場合、 TOSTOP の設定は
無視されます。言い換えれば、 TOSTOP が設定されている場合のターミナルへの書き込みと同様に扱われま
す。
入力処理とデータ読み取り
ターミナル デバイスファイルとして扱われるターミナルデバイスは全二重モードで操作することができます。
すなわち、データの出力が行われている最中でもデータ入力を受け付けることができます。各ターミナル デバ
イスファイルは 入力キューを持ちます。この入力キューには、ターミナルデバイスに着信してプロセスに読み
取られる前のデータがシステムによって保存されます。入力キューに保存されるデータの最大文字数は
MAX_INPUT で決められます。この最大数はそれぞれの処理系に依存しますが、少なくても 256 以上であるこ
とが保証されています。入力がこの最大数に達したとき、保存された文字は通知なしに破棄されます。
入力の処理は正規モードあるいは非正規モードのいずれかで処理されます (「正規モード入力処理」と「非正
規モード入力処理」を参照)。さらに入力文字の処理方法は c_iflag フィールド (「入力モード」を参照) と
c_lflag フィールド (「ローカルモード」を参照) に依存します。例えば、ターミナルから受け取った文字を即座
にターミナルに書き込むような エコーの処理などがその例です。エコーは全二重モードでの操作によく使われ
るものです。
ターミナル デバイスファイルからプロセスへのデータの読み取りの方法は、そのターミナル デバイスファイル
が正規モードか非正規モードかに依存します。
その他には open(2) や fcntl(2) で O_NONBLOCK フラグや O_NDELAY フラグがセットされているかどうかに
も依存します。 O_NONBLOCK フラグと O_NDELAY フラグの両方がクリアされている場合は、読み取りや
呼び出しはデータが使用可能な状態になるかシグナルが受け取られるまでブロックされます。 O_NONBLOCK
フラグと O_NDELAY フラグのどちらかがセットされている場合は、読み取りや呼び出しはブロックされるこ
となく、以下の 3つのいずれかの状態で終了します。
•
読み取りや呼び出し要求を満足するだけの量のデータがある場合は、 read() は要求されたデータを
すべて読み取って正常終了し、読み取った文字数を返します。
•
読み取りや呼び出し要求を満足するだけの量のデータがない場合は、 read() は読み取れるだけの
データを読み取って正常終了し、読み取った文字数を返します。
•
使用可能なデータがなく、 O_NONBLOCK フラグがセットされている場合は、 read() は −1 を返
すとともに、 errno を EAGAIN に設定します。使用可能なデータがなく、 O_NONBLOCK フラグ
がクリアされ、 O_NDELAY フラグがセットされている場合は、 read() はデータを読み取らずに正
常に終了し、0 を返します。
データの利用率、有用性、利用価値は、入力処理モードが正規モードであるか非正規モードであるかに依存し
ます。次の項では「正規入力処理モード」と「非正規入力処理モード」について説明します。
正規入力処理モード (消去と抹消の処理)
正規入力処理モードではターミナルからの入力は行を単位として処理されます。行は改行文字 (NL)、EOF 文
字 (EOF)、行終端文字 (EOL) あるいは (EOL2) のどれかで区切られています (NL、 EOF、 EOL、 EOL2 につ
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 7-255
termio(7)
termio(7)
いては、「特殊文字」を参照)。この場合、読み取りや呼び出しは、行全体が入力されるかシグナルが受け取ら
れるまで戻りません。また読み取り / 呼び出しで何文字要求されていても、入力は 1行単位で返されます。し
かし実際には、読み取りは 1行単位で行う必要はなく、何文字単位で読み取りを要求しても (1 文字でも)、
データが失われることはありません。
MAX_CANON は 1行の文字数の上限を表します。この上限はそれぞれの処理系に依存しますが、少なくとも
256 以上であることが保証されています。
1行中の文字が MAX_CANON を超えたときは、現在の行の中のすべての文字は通知なしに破棄されます。
消去と抹消の処理は、 ERASE 文字 WERASE あるいは KILL 文字 (「特殊文字」を参照) の 3つの特殊文字が
受け取られたときに行われます。この処理はまだ NL、EOF、EOL、EOL2 のどの文字でも区切られていない
入力キューの中のデータを操作します。この、どの区切り文字でも区切られていない入力キューの中のデータ
が、現在 (カーソルが) いる行となります。 ERASE 文字は現在 (カーソルが) いる行中の最後に入力した文字を
(もしそれが存在すれば) 消去します。 WERASE 文字は、現在行の最後に入力したワードを (それが存在すれ
ば) 消去します。ここでワードとは空白を除く文字の連続として定義されます (タブは空白として扱われま
す)。 KILL 文字は現在 (カーソルが) いる行中のすべてのデータを消去し、オプションによっては改行文字
(NL) を出力します。これらの文字はキーを押した時点で処理され、これらの文字に続くバックスペースやタブ
には影響を与えません。 ERASE 文字、 WERASE 文字と、 KILL 文字は現在 (カーソルが) いる行が空のとき
は何もしません。 ERASE 文字、 WERASE 文字と、 KILL 文字は入力キューには保存されません。
非正規入力処理モード (MIN/TIME の相互作用)
非正規入力処理モードでは、入力文字は行単位で取り扱われることはなく、消去や抹消の処理も行われませ
ん。非正規入力処理モードでは、 c_cc 配列(「termios 構造体」を参照) の MIN と TIME のメンバーの値を用
いて、受け取った文字をどのように処理するかが決定されます。 MIN は read() が正常に終了するために必要
な最小文字数を表します。 TIME は 0.10 秒刻みのタイマで、短時間に大量のデータが送られてきたときのタイ
ムアウトの設定に使われます。 MIN と TIME の値の相互作用 (組み合せ) には、以下の 4つの場合がありま
す。
ケース A: MIN > 0, TIME > 0
この場合は TIME は、文字入力のインターバルタイマとして使われ、最初の文字が受け取られるとアクティブ
状態になります。この場合のタイマは文字入力のインターバルタイマなので、各文字を受け取るたびにタイマ
はリセットされます。 MIN と TIME の間の相互作用は以下の通りです。
•
文字を 1つ受け取ると、文字入力のインターバルタイマが開始されます。
•
文字入力のインターバルタイマが終了する前に MIN 文字を受け取ることができた場合は、読み取
りは正常終了します (ただしタイマは各文字を受け取るごとにリセットされることに注意してくだ
さい)。 MIN 文字を受け取る前にタイマが終了した場合は、終了の時点までに受け取った文字が
ユーザーに返されます。
•
タイマは文字を受け取るまで開始されないため、もし TIME が終了した場合でも、最低 1 文字は返
されることになります。 MIN > 0, TIME > 0 の場合、最初の 1 文字が受け取られるかシグナルが受
Section 7-256
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
け取られることによってこの仕組みが起動されるまでは、読み取りはブロックされます。
ケース B: MIN > 0, TIME = 0
このケースでは TIME の値が 0 であるため、タイマは動作せず、 MIN の値だけが意味を持ちます。ペンディ
ング読み取りでは、前の読み取りが終了してから MIN 文字が受け取られるか、シグナルが受け取られるまで
はブロックされます。このケースでレコードベースのターミナル I/O を行うと、読み取り操作で無限にブロッ
クされることがあります。
ケース C: MIN = 0, TIME > 0
このケースでは MIN の値が 0 であるので、 TIME は文字入力のインターバルタイマではなく、 read() 関数が
呼ばれた時点で起動される読み取りタイマとして働きます。 1つの文字が受け取られるか、あるいは、読み取
りタイマが終了した時点で、読み取り条件は満たされます。タイマが終了した場合は文字は返されません。タ
イマが終了しなかった場合で読み取り条件が満たされるのは、文字が受取られた場合のみです。このケースで
は文字の受信を待って読み取りが無限にブロックされることはありません。すなわち、読み取りが始まってか
ら TIME 0.10 秒以内に文字が受け取られなかった場合は、 read() はデータを読み取らず 0 を返します。
ケース D: MIN = 0, TIME = 0
読み取りを指定された文字数と現在使用可能な文字数のうち、少ない方の値が返され、それ以上の文字入力を
待つことはしません。使用可能な文字がない場合は、 read() はデータを読み取らずに 0 を返します。
MIN と TIME の相互作用について、さらにいくつか説明します。
1.
上の説明のように MIN と TIME の相互作用は対称的ではありません。例えば MIN > 0 で TIME =
0 である場合は TIME は何の意味も持ちませんが、逆に MIN = 0 で TIME > 0 である場合は、
MIN と TIME の双方が意味を持ちます。すなわち MIN は 1 文字受け取ると要求が満たされま
す。
2.
ケース A (MIN > 0, TIME > 0 ) の場合、 TIME は文字入力のインターバルタイマを表しますが、
ケース C (MIN = 0, TIME > 0 ) の場合は、 TIME は読み取りタイマを表します。
この 2つの点は MIN/TIME が持つ機能の二重性を表しています。ケース A とケース B (いずれも MIN > 0 )
は、短時間に大量のデータが着信するような状況 (例えばファイル転送プログラム。プロセスに対して一度に
少なくとも MIN 個の文字の受信が要求されます) を取り扱うことを目的としています。ケース A では文字入
力のインターバルタイマはユーザーにとっては一種の安全基準として利用されるのに対して、ケース B ではタ
イマは利用されません。
ケース C とケース D は 1 文字ずつの時間間隔の空いた入力を取り扱うことを目的としています。これはスク
リーンベースのアプリケーションのように、スクリーンを書き換える前に入力キューの中に文字が存在するか
どうかの判断が必要な用途に適しています。ケース C では読み取りはタイマ制御されるのに対して、ケース D
では読み取りはタイマ制御されません。
さらに MIN は読み取るデータの長さではなく、常に最小値を指定するという点にも注意してください。例え
ば、あるプログラムが 20 文字を指定して読み取りを起動し、そのとき MIN が 10 で入力キューに 25 文字の
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 7-257
termio(7)
termio(7)
データがあった場合、ユーザーには 20 文字が返されます。プログラムがすべての文字を読み取るように指定
していた場合は、25 文字すべてがユーザーに返されます。
さらに TIME が 0 より大きく MIN が MAX_INPUT より大きい場合は、 MIN 文字を受け取ろうとしても
MAX_INPUT を超えた文字は通知なしに破棄されるため、読み取りは終了できなくなってしまいます。 TIME
が 0 で MIN が MAX_INPUT より大きい場合は、シグナルを受け取らない限り、読み取りは終了できなくなり
ます。
特殊文字
ある特定の文字は入力、出力、あるいはその両方において特別な意味を持ちます。特に断わりがない限り、各
特殊文字は変更したり使用不能にしたりすることができます。文字を使用不能にする場合にはその値を
_POSIX_VDISABLE に設定します (unistd(5) を参照)。これらの特殊な機能とそのデフォルトの文字は以下の
通りです。
(Rubout または ASCII DEL) 入力時の特殊文字で、 ISIG (「ローカルモード」を参照) が
INTR
セットされている場合に有効になります。 SIGINT シグナルを生成し、ターミナルが制御
ターミナルである場合には、このシグナルはフォアグラウンド プロセスグループ中のすべ
てのプロセスに送られます。通常、 SIGINT を受け取ったプロセスは終了させられます
が、このシグナルを無視、保留、あるいはトラップして、別に定めたところへ受け取らせ
るように設定し直すことも可能です (signal(2) および signal(5) を参照)。 ISIG がセットさ
れている場合、 INTR 文字は処理が済むと破棄されます。 ISIG がクリアされている場合
は、 INTR 文字は通常の文字データとして処理され、シグナルは送られません。
(Ctrl- または ASCII FS) 入力時の特殊文字で、 ISIG (「ローカルモード」を参照) がセッ
QUIT
トされている場合に有効になります。この文字の取り扱いは、 SIGINT の代わりに
SIGQUIT シグナルが送られることを除けば、 INTR 文字とほぼ同様です。このシグナル
を受けとったプロセスは単に終了するだけではなく、処理系がコアファイルをサポートし
ている場合は現在のワークディレクトリに core と呼ばれるコアイメージ ファイルを作り
ます。
(ASCII NUL) 入力時の特殊文字で、 shl(1) のシェルレイヤ機能 shl(1) を使用している場合
SWTCH
にのみ有効になります。シェルレイヤ機能は汎用ターミナルインタフェースの一部ではあ
りません。汎用ターミナルインタフェースに SWTCH 文字が送られた場合、特殊処理は何
も行われません。
(#) 入力時の特殊文字で、 ICANON (「ローカルモード」を参照) がセットされている場合
ERASE
に有効になります。 ERASE は前の文字を消去しますが、 NL、EOF、EOL、EOL2 の各文
字で区切られた行の先頭を越えて文字を消去することはしません。 ICANON がセットさ
れている場合は、 ERASE 文字は上記の処理が済むと破棄されます。 ICANON がセットさ
れていない場合は、 ERASE 文字は通常の文字データとして処理されます。
WERASE
(無効) ICANON (「ローカルモード」参照) が有効になっている場合、入力の特殊文字が認
識されます。直前のワードを消去します。 NL、EOF、EOL、あるいは EOL2 の各文字に
Section 7-258
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
よって区切られた、行の先頭を越えては消去しません。 ICANON がセットされている場
合は、処理の際に WERASE 文字は無視されます。 ICANON がセットされていない場合
は、 WERASE 文字は通常のデータを表す文字として扱われます。
KILL
(@) 入力時の特殊文字で、 ICANON がセットされている場合に有効になります。 KILL は
NL、EOF、EOL、EOL2 の各文字で区切られた行全体を抹消します。 ICANON がセット
されている場合、 KILL 文字は上記の処理が済むと破棄されます。 ICANON がセットさ
れていない場合は、 KILL 文字は通常の文字データとして処理されます。
EOF
(Control-D または ASCII EOT) 入力時の特殊文字で、 ICANON がセットされている場合に
有効になります。 EOF はターミナルから EOF を生成するために使用されます。 EOF が受
け取られると、まだ読み込まれていないすべての文字が改行を待たずに、ただちにプログ
ラムに渡されます。 EOF は文字データとしては取り扱われません。したがって、文字の入
力が待たれていない場合 (EOF が行頭で入力された場合)、 read() は EOF を意味する文字
カウント 0 を返します。 ICANON がセットされている場合は、 EOF 文字は上記の処理が
済むと破棄されます。 ICANON がセットされていない場合は、 EOF 文字は通常の文字
データとして処理されます。
NL
(ASCII LF) 入力時の特殊文字で、 ICANON がセットされている場合に有効になります。
NL は行の区切り (\n) を表します。 ICANON がセットされている場合は、 NL 文字は上記
の処理が済むと破棄されます。 ICANON がセットされていない場合は、 NL 文字は通常
の文字データとして処理されます。
EOL
(ASCII NUL) 入力時の特殊文字で、 ICANON がセットされている場合に有効になりま
す。 EOL は NL と同様に行の区切りを表しますが、通常は使用されません。 ICANON が
セットされていない場合は、 EOL 文字は通常の文字データとして処理されます。
EOL2
(無効) ICANON がセットされているときには、入力中の特殊文字が認識されます。 EOL2
は EOL と同じような行の区切りを表す文字です。通常は使用されません。 ICANON が
セットされていない場合は、 EOL2 文字は通常の文字データとして処理されます。
SUSP
(無効) 入力時の特殊文字で、 ISIG がセットされている場合に有効になります。 SUSP 文
字が受け取られると SIGTSTP シグナルを生成し、ターミナルが制御ターミナルである場
合には、このシグナルはフォアグラウンド プロセスグループ中のすべてのプロセスに送ら
れます。処理の後、 SUSP 文字は破棄されます。 ISIG がクリアされている場合は、 SUSP
文字は通常の文字データとして処理され、シグナルは送られません。コマンドインタプリ
タ プロセスは通常、 SUSP に Control-Z を割り当てます。
DSUSP
(無効) 入力中で認識される特殊文字 ISIG がセットされておりフォアグラウンド プロセス
グループに属する 1つのプロセスが、 DSUSP 文字を読もうとしている場合、 SIGTSTP シ
グナルが、端末がそのために端末を制御しているフォアグラウンド プロセスグループに属
するすべてのプロセスに送られ DSUSP 文字が廃棄されます。 ISIG がセットされていない
場合、 DSUSP 文字は通常のデータ文字として処理されます。 DSUSP は、入力されるとき
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 7-259
termio(7)
termio(7)
ではなく、フォアグラウンド プロセスグループに属するプロセスが DSUSP 文字を読もう
としたときにシグナルが送られる点を除いて、 SUSP によく似ている点に注意してくださ
い。
STOP
(Control-S または ASCII DC3) 入出力時の特殊文字で、 IXON (出力制御) がセットされてい
る場合に有効になります。 STOP 文字はターミナルデバイスへの出力を一時的に中断しま
す。 STOP は CRT ターミナルなどを使用していて、その出力が読む前に流れていってし
まわないようにするためなどに役立ちます。出力が中断されていて、かつ IXON がセット
さているとき、 STOP 文字は無視されます。 IXON がセットされている場合は STOP 文字
は上記の処理にのみ使用され、文字は破棄されます。データとしては使用されません。
IXON がクリアされている場合は STOP 文字は通常の文字データとして処理され、シグナ
ルは送られません。 IXOFF (入力制御) がセットされている場合、入力キュー中の読み取
られていない文字がシステムで定義された上限を超えたときに、 STOP 文字がターミナル
デバイスに送られます。これはバッファがオーバーフローしそうなとき、ターミナルデバ
イスにデータの送信を中断させる場合に使われます。
START
(Control-Q または ASCII DC1) 入出力時の特殊文字で、 IXON (出力制御) がセットされて
いる場合に有効になります。 START 文字は中断されていた出力を再開するために使用さ
れます。出力が中断されておらず、かつ IXON がセットされているとき STOP 文字は無視
されます。 IXON がセットされているとき、 START 文字は無視されます。 IXON がクリ
アされている場合は START 文字は通常の文字データとして処理され、シグナルは送られ
ません。 IXOFF (入力制御) がセットされている場合、入力キュー中の文字がシステムで
定義された値を下回った時点で START 文字がターミナルデバイスに送られます。これは
入力キューがオーバーフローするおそれがなくなったときに使われます。
CR
(ASCII CR) 入力時の特殊文字で、 ICANON がセットされている場合に有効になります。
ICANON と ICRNL がセットされていて IGNCR がセットされていない場合、この文字は
NL に変換され、 NL 文字と同じ働きをします。 ICANON と IGNCR がセットされている
場合は CR 文字は無視されます。 ICANON がセットされていて ICRNL と IGNCR がセッ
トされていない場合、 CR 文字は通常の文字データとして取り扱われます。
LNEXT
(無効) 入力中で認識される特殊文字。次の文字の持つ特殊な意味を無視します。上記のす
べての特殊文字について働きます。これにより、特殊な機能を持つ文字として、システム
に解釈させないようにすることができます。
端末のポートがオープンされたときには、特殊文字には、デフォルトの文字の値が割り当てられます。デフォ
ルトの値は、System V Interface Definition, Third Edition (SVID3) で指定されています。ただし、 WERASE (CtrlW) および LNEXT (Ctrl-V) の各文字に関しては、 _POSIX_VDISABLE に設定されています。これは、過去の
HP-UX のリリースとのバイナリ互換性を保つためです。ポートのオープン時に割り当てられるデフォルトの文
字の値は stty コマンド (stty(1) 参照) により、システム全体の全ポートに対して変更可能です。この文字の値
は、特定のポートに対しても、オープンされているときに stty コマンドを使うことによって変更できます。
NL、CR の各文字を変更したり、使用不能にすることはできません。残りの特殊文字に対する各文字の値は各
Section 7-260
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
自の好みで変更したり、使用不能にすることができます。
ICANON がセットされている場合は (「ローカルモード」を参照)、 ERASE、KILL、EOF の各文字は、その
前に \ 文字を付けることによりエスケープすることができ、この場合は特殊機能は働きません。これらの文字
と残りの特殊文字は、 LNEXT 文字 (上の LNEXT を参照) を前に置くことにより、エスケープすることができ
ます。
複数の特殊機能が同じ文字に割り当てられている場合、その文字が入力された場合にどの特殊機能が働くかは
定義されません。
モデム切断
モデムの切断が制御ターミナルのターミナルインタフェースによって検出され、かつ、ターミナルの c_cflag
フィールド (「制御モード」を参照) 中の CLOCAL がクリアされている場合は、 SIGHUP シグナルが制御
ターミナルの制御プロセスに送られ、(特に設定が変更されていない限り) 制御プロセスは終了させられます。
それ以降のそのターミナルデバイスからの読み取りではすべて、デバイスがクローズされるまでファイル終了
指示子が返されます。したがって、モデム切断の後に、ターミナルに対する読み取りを行い、EOF が返される
かどうかをチェックしていたプロセスを終了させることができます。ターミナルデバイスに対する write() は、
デバイスがクローズされるまで errno を EIO に設定して −1 を返します。
ターミナル デバイスファイルのクローズ
ターミナル デバイスファイルをクローズしようとするプロセスは、そのデバイスにまだ送られずにいるすべて
の出力をデバイスに送ります。これは出力が中断されていても行われます。この最後のクローズは、たとえノ
ンブロッキング I/O が指定されていても、すべての出力がターミナルデバイスに送られるまでは常にブロック
されます。受信されてはいるが、まだ読み取られていない入力はすべて破棄されます。
データ書き込みと出力制御
文字が書き込まれた場合、そのデータは出力キューに格納されます。出力キュー中の文字は、その前に書かれ
た文字が出力されるとすぐにターミナルへ送られます。これらの文字の処理方法は c_oflag フィールド (「出力
モード」を参照) の設定に依存します。入力された文字はその順に出力キューに送られることによってエコー
されます。プロセスの出力が速いためにその送信処理が追い付かず、出力キューの容量を超えた場合、そのプ
ロセスは中断されます。そしてキューに格納された文字の量があるしきい値以下になったら、そのプロセスは
再開されます。
termios 構造体
<termios.h> ヘッダファイルで定義される termios 構造体を用いると、ターミナルの I/O の動作を制御するルー
チンが使用可能になります。この構造体は次のように定義されます。
#define NCCS 16
struct termios {
tcflag_t
c_iflag;
/* input modes */
tcflag_t
c_oflag;
/* output modes */
tcflag_t
c_cflag;
/* control modes */
tcflag_t
c_lflag;
/* local modes */
HP-UX 11i Version 2: September 2004
−9−
Hewlett-Packard Company
Section 7-261
termio(7)
termio(7)
tcflag_t
cc_t
c_reserved;
c_cc[NCCS];
/* reserved for future use */
/* control chars */
};
特殊文字は配列 c_cc で定義されます。各特殊文字の相対位置とデフォルト値は以下の通りです。
INTR
VINTR
DEL
QUIT
VQUIT
Control-|
ERASE
VERASE
#
KILL
VKILL
@
EOF
VEOF
Control-D
EOL
VEOL
NUL
EOL2
VEOL2
disabled
MIN
VMIN
NUL
TIME
VTIME
Control-D
SUSP
VSUSP
disabled
START
VSTART
Control-Q
STOP
VSTOP
Control-S
WERASE
VWERASE
disabled
LNEXT
VLNEXT
disabled
DSUSP
VDSUSP
disabled
termio 構造体
termio 構造体は termios 構造体によって置き換えられたもので、旧製品との互換性のために用意されているも
のです (「termio に関する警告」を参照)。この構造体は <termio.h> ヘッダファイルで以下のように定義されて
います。
#define NCC
8
struct termio {
unsigned short c_iflag;
/* input modes */
unsigned short c_oflag;
/* output modes */
unsigned short c_cflag;
/* control modes */
unsigned short c_lflag;
/* local modes */
char
c_line;
/* line discipline */
unsigned char c_cc[NCC]; /* control chars */
};
モード
以下の 4つの項目はそれぞれ termios および termio 構造体 (「termio に関する警告」を参照) を用いて設定でき
るターミナルの性質について説明します。以下で明示的に定義されていないモードのフィールド中のビットは
無視されますが、将来の互換性の問題を避けるためには、常にクリアしておく必要があります。
Section 7-262
Hewlett-Packard Company
− 10 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
入力モード
c_iflag フィールドは基本的なターミナル入力の制御の設定に使われます。
IGNBRK
ブレーク条件の無視。
BRKINT
ブレーク時のシグナル割り込み。
IGNPAR
パリティエラー時の文字の無視。
PARMRK
パリティエラーのマーク。
INPCK
入力のパリティチェック。
ISTRIP
文字のストリップ。
INLCR
入力時の NL から CR への変換。
IGNCR
CR の無視。
ICRNL
入力時の CR から NL への変換。
IUCLC
入力時の大文字から小文字への変換。
IXON
start/stop の出力制御。
IXANY
任意の文字でのスタートの制御。
IXOFF
start/stop の入力制御。
IMAXBEL
入力行が長すぎるときに BEL を有効にする。
ブレーク条件は、ある一定時間以上続けて送信される値 0 のビットの列として定義されます。例えばすべての
データが 0 である文字フレーミングやパリティエラーは、1つのブレーク条件として処理されます。
IGNBRK がセットされている場合は、ブレーク条件は無視されます。したがってブレーク条件がプロセスに読
み取られることはありません。 IGNBRK がクリアされ BRKINT がセットされている場合は、ブレーク条件は
入力キューと出力キューの両方を吐き出し、もしそのターミナルがフォアグラウンド プロセスグループの制御
ターミナルであるならば、ブレーク条件はフォアグラウンド プロセスグループに SIGINT シグナルを 1つ送出
します。 IGNBRK と BRKINT のどちらもセットされていない場合は、ブレーク条件は通常の 1つの \0 文字と
して読まれます。 PARMRK がセットされている場合は \377, \0, \0 のような 3 文字の列として読まれます。
IGNPAR がセットされている場合は、フレーミングや (ブレーク以外の) パリティエラーの文字は無視されま
す。
PARMRK がセットされ IGNPAR がクリアされている場合は、フレーミングや (ブレーク以外の) パリティエ
ラーの文字は、 \377, \0, X (X にはエラーとして受け取った文字のデータが入る) のような 3 文字の列として読
まれます。このとき X はエラーとして受け取った文字のデータが入ります。 ISTRIP がクリアされている場
合、正当な \377 という文字は \377, \377 のように読まれます。 PARMRK と IGNPAR の両方がクリアされて
いる場合、フレーミングや (ブレーク以外の) パリティエラーの文字は \0 文字という文字として読まれます。
INPCK がセットされているときは、入力時のパリティチェックが行われます。 INPCK がクリアされていると
きは、入力時のパリティチェックは行われません。入力時のパリティチェックが行われるかどうかはパリティ
検出を行うかどうかとは関係ありません (「制御モード」を参照)。 PARENB がセットされ (「制御モード」を
参照) INPCK がクリアされている場合は、パリティ生成が行われますが、入力時のパリティチェックは行われ
ません。すなわち、ターミナルが接続されているハードウェアはパリティビットの認識はしますが、そのター
ミナルの特殊ファイルは、そのビットが正しいかどうかのチェックをしないということです。
HP-UX 11i Version 2: September 2004
− 11 −
Hewlett-Packard Company
Section 7-263
termio(7)
termio(7)
以降の表は IGNBRK、BRKINT、IGNPAR、PARMRK の各フラグ間の関係を表しています。 Input のカラム
に書かれている文字は、以下のようなさまざまなタイプの入力文字を表します。
0
NUL 文字 (\0)
C
NUL 以外の文字
P
パリティエラーの検出
F
フレーミングエラーの検出
大かっこで囲まれたものは複数の条件が正しいことを表します。
INPCK フラグがクリアされている場合は、パリティエラーで受け取られた文字はこの表の通りには処理され
ず、パリティエラーが起きていない場合と同様に取り扱われます。各フラグのカラムでは、 Set はフラグが
セットされていることを、 Clear はフラグがセットされていないことを、 X はフラグがセットされていてもい
なくてもかまわないことを表します。 Read のカラムはアプリケーションコードに渡される文字を示します。
— はアプリケーションコードには文字や条件が渡されないことを示します。この値が SIGINT と書かれている
場合は、文字は渡されずに SIGINT シグナルが制御ターミナルのフォアグラウンド プロセスグループに送られ
ます。
Input
IGNBRK
BRKINT
IGNPAR
PARMRK
0[PF]
Set
X
X
X
Read
—
0[PF]
Clear
Set
X
X
SIGINT
0[PF]
Clear
Clear
X
Set
’\377’,’\0’,’\0’
’\0’
0[PF]
Clear
Clear
X
Clear
C[PF]
X
X
Set
X
—
C[PF]
X
X
Clear
Set
’\377’,’\0’,C
C[PF]
X
X
Clear
Clear
’\0’
’\377’
X
X
X
Set
’\377’,’\377’
ISTRIP がセットされている場合は、入力された文字の上位 1 ビットが除去され、下位 7 ビットのみが有効に
なります。 ISTRIP がセットされていない場合は 8 ビットすべてが有効です。
INLCR がセットされているとき NL 文字は CR 文字に変換されます。 IGNCR がセットされているとき CR 文
字は無視されます (読み取られません)。 IGNCR がクリアされ ICRNL がセットされているときは、 CR 文字
は NL 文字に変換されます。
IUCLC がセットされているときは、受け取った大文字のアルファベット文字は小文字に変換されます。
IXON がセットされている場合は、start/stop の出力制御が行われます。すなわち、 STOP 文字を受け取ると出
力は中断し、 START 文字を受け取ると中断された出力を再開します。 IXANY、IXON がセットされている場
合は、フレーミングやパリティエラーのない文字が入力されると、中断出力を再開します。これらの 2つのフ
ラグがセットされており、出力が中断されていて、かつ、フレーミングあるいはパリティエラーがある文字が
入力されると、その文字を処理した結果データが読み取られた場合のみ出力は再開されます。 IXON がセット
されているときは、 START、STOP の 2つの文字はデータとして読まれることはなく、単にフロー制御を行い
Section 7-264
Hewlett-Packard Company
− 12 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
ます。 IXON がクリアされているときは、 START 、STOP の 2つの文字はデータとして読まれます。
IXOFF がセットされている場合は、入力時の start/stop 制御が行われます。入力キュー中の文字の数がシステ
ムで定義されたの上限値を超えたとき、システムは STOP 文字を送信します。これは入力キューの容量
(MAX_INPUT) を超える文字を受け取る前に、ターミナルデバイスにデータの転送を中断させるために利用さ
れます。その後入力キューから文字が読み取られ、入力キュー中の文字数がシステムで定義されたの下限値を
下回った時点で、システムは START 文字を送信し、ターミナルデバイスは (入力キューのオーバフローの心配
なく) データ転送を再開します。またデッドロックの可能性を避けるために、正規モードで入力バッファ中に
行の区切りが存在しない場合は、 IXOFF は無視されます。この場合 STOP 文字は、入力キュー中の文字数が
上限値に達したときではなく、それ以降で行区切りが受け取られた時点で送信されます。入力キュー中の文字
(行区切りを持つ) 完全な行がすべて読み取られて、行区切りのない入力途中の行のみがある場合は、入力
キュー中の文字数が下限値に達していなくても START 文字が送られます。 ICANON がセットされていて、入
力ストリーム中の行区切りの間の文字数が上限値を超えている場合は、 STOP 文字がタイミングよく送られな
いか、あるいはまったく送られないこともあるので、 IXOFF がバッファのオーバフローやデータ損失を防げ
るという保証はありません。
IMAXBEL が設定されている場合、入力キューがあふれると ASCII BEL 文字がエコーされます。これ以降の入
力は保持されませんが、入力キューにあるものはそのまま保持されます。 IMAXBEL が設定されていないと、
ASCII BEL はエコーされず、入力キューがあふれたときには入力キューにはいっているものは廃棄されます。
入力制御フラグの初期値はすべてクリアされた状態です。
出力モード
c_oflag フィールドはシステムの出力処理の取り扱いの設定に使われます。
OPOST
出力の後処理
OLCUC
出力時の小文字から大文字への変換
ONLCR
出力時の NL から CR-NL への変換
OCRNL
出力時の CR から NL への変換
ONOCR
出力時のカラム 0 での CR の無視
ONLRET
NL が CR の機能を果たすように設定
OFILL
充填文字をディレイに使用
OFDEL
フィルに NUL ではなく DEL を使用
NLDLY
ニューラインのディレイの指定
NL0
ディレイなし
NL1
ディレイタイプ 1
CRDLY
キャリッジリターンのディレイの指定
CR0
ディレイなし
CR1
ディレイタイプ 1
CR2
ディレイタイプ 2
CR3
ディレイタイプ 3
HP-UX 11i Version 2: September 2004
− 13 −
Hewlett-Packard Company
Section 7-265
termio(7)
termio(7)
TABDLY
水平タブのディレイの設定
TAB0
ディレイなし
TAB1
ディレイタイプ 1
TAB2
ディレイタイプ 2
TAB3
タブをスペースとして解釈
XTABS
タブをスペースとして解釈
BSDLY
バックスペースのディレイの設定
BS0
ディレイなし
BS1
ディレイタイプ 1
VTDLY
垂直タブのディレイの設定
VT0
ディレイなし
VT1
ディレイタイプ 1
FFDLY
フォームフィードのディレイの設定
FF0
ディレイなし
FF1
ディレイタイプ 1
OPOST がセットされている場合は、残りのフラグで指定された後処理を出力文字に対して行います。 OPOST
がセットされていない場合は文字に対する変更は行われません。
OLCUC がセットされている場合は、出力文字を小文字から大文字に変換します。この機能は IUCLC との組
み合せでよく使用されます。
ONLCR がセットされている場合、 NL 文字は CR-NL 文字のペアに変換されます。 OCRNL がセットされて
いる場合、 CR 文字は NL 文字に変換されます。 ONOCR がセットされている場合、現在のカラムが 0(行の先
頭) のときは CR 文字は出力されません。 ONLRET がセットされている場合、 NL 文字はキャリッジリターン
処理を行うものとして処理されます。すなわちカラムポインタは 0 に設定され、 CR がディレイに用いる値を
使ってディレイします。 ONLRET がセットされていない場合は、 NL 文字は単にラインフィードの動作のみ
を実行します。すなわち NL は指定された値でディレイし、カラムポインタは変更されません。すべての場合
でカラムポインタは CR 文字が送られてきた時点で 0 に設定されます。
ディレイビットは、ある文字がターミナルに送られたときに、どのくらいの長さ転送を中断するかを指定しま
す。この中断は出力装置の機械的な、あるいはその他の動作のための時間を想定しています。 NL0、CR0、
TAB0、BS0、VT0、FF0 のそれぞれの値はディレイしないことを意味します。 OFILL がセットされている場
合は、充填文字が時間指定のディレイの代りに出力されます。これはボーレートの高いターミナルなどを使っ
ている場合に最小のディレイで十分なときに役立ちます。 OFDEL がセットされている場合は、通常の充填文
字である NUL の代りに DEL が送られます。
書式送りと垂直タブのディレイが指定されている場合は約 2 秒間のディレイが行われます。
改行のディレイは約 0.10 秒間です。 ONLRET がセットされている場合は改行のディレイの代りにキャリッジ
リターン用のディレイが使われます。 OFILL がセットされている場合は充填文字が 2つ送られます。
キャリッジリターンのディレイタイプ 1 の場合は現在のカラム位置に依存します。タイプ 2 では約 0.10 秒間
Section 7-266
Hewlett-Packard Company
− 14 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
のディレイ、そしてタイプ 3 では約 0.15 秒間のディレイが行われます。ただし OFILL がセットされている場
合は、タイプ 1 では充填文字が 2つ、タイプ 2 では充填文字が 4つ送られます。
水平タブのディレイタイプ 1 の場合は現在のカラムの位置に依存します。タイプ 2 では約 0.10 秒間のディレ
イが行われます。タイプ 3 の場合タブはスペースに解釈されて送られます。ただし OFILL がセットされてい
る場合は、どのディレイタイプの場合も充填文字が 2つ送られます。
バックスペースのディレイは約 0.05 秒間のディレイとなりますが、 OFILL がセットされている場合は充填文
字が 1つ送られます。
実際のディレイは回線速度やシステムの負荷に依存します。
出力制御の各フラグの初期値はすべてクリアされた状態です。
制御モード
c_cflag フィールドターミナルのハードウェア制御の設定を行います。
CBAUD
Baud rate:
CSIZE
Character size:
B0
ハングアップ
CS5
5 ビット
B50
50 ボー
CS6
6 ビット
B75
75 ボー
CS7
7 ビット
B110
110 ボー
CS8
8 ビット
B134
134.5 ボー
B150
150 ボー
CSTOPB
ストップビットを 2つ送ります。通常は 1つ。
B200
200 ボー
CREAD
データの受信を可能にします。
B300
300 ボー
PARENB
パリティを可能にします。
B600
600 ボー
PARODD
奇数パリティ。通常は偶数パリティ
B900
900 ボー
HUPCL
最後のクローズ時にハングアップします。
B1200
1200 ボー
CLOCAL
ローカル回線。通常はダイヤルアップ
B1800
1800 ボー
LOBLK
shl(1) での使用のために予約済み
B2400
2400 ボー
B3600
3600 ボー
B4800
4800 ボー
B7200
7200 ボー
B9600
9600 ボー
B19200
19200 ボー
B38400
38400 ボー
EXTA
External A
EXTB
External B
CBAUD ビットはボーレートを指定します。ボーレート 0 を表す B0 は、連結をハングアップするのに使用さ
れます。 B0 が指定されている場合、これはモデム制御回線 (modem(7) を参照) の終了を意味し、通常、回線は
切断されます。ある特定のハードウェアでは、ボーレートを変更できない場合もあります。 CBAUD は termio
HP-UX 11i Version 2: September 2004
− 15 −
Hewlett-Packard Company
Section 7-267
termio(7)
termio(7)
構造体とともに使用されます。 termios 構造体を使う場合は、入出力のボーレートの参照や変更のために使用
可能なルーチンが用意されています (「termios 構造体関連の関数」を参照)。
CSIZE ビットは入出力時の文字のビットサイズを指定します。このビットサイズはパリティビットの分を含み
ません。 CSTOPB がセットされている場合は、ストップビットとして 2 ビットが、セットされていない場合
は 1 ビットが使用されます。例えば 110 ボーで使用する場合、多くのデバイスは 2 ストップビットを必要とし
ます。
PARENB がセットされている場合はパリティの生成が可能になり、出力される各文字にパリティビットが付加
されます。さらに、パリティの検出も可能になり、入力される各文字のパリティが正しいかどうかチェックさ
れます。 PARENB がセットされているときで、 PARODD がセットされている場合には、奇数パリティが用い
られ、 PARODD がセットされていない場合は偶数パリティが使用されます。 PARENB がクリアされている場
合はパリティの生成もパリティチェックも行われません。
CREAD がセットされている場合にのみ入力の受信が可能です。 CREAD をクリアすると入力した文字は受信
されません。
HUPCL と CLOCAL ビットの意味は、モデム制御のモードとタイプに依存します。詳しくは modem(7) を参照
してください。
HUPCL がセットされている場合は、最後にポートをオープンしたプロセスがそのポートをクローズするか、
プロセス自身が終了した時点で、そのポートのモデム制御回線が切断されます。
CLOCAL がセットされている場合は、連結はモデム ステータスラインの状態に依存します。 CLOCAL がク
リアされている場合は、モデム ステータスラインはモニタされます。
通常の状況では read() の呼び出しはモデム接続が終了するまでブロックされます。しかし O_NDELAY フラグ
と O_NONBLOCK フラグのいずれかがセットされているか、 CLOCAL がセットされている場合は、 open()
は連結を待たずにただちに終了します。 CLOCAL がセットされている場合の、連結がまだなされていない、
あるいは連結が切れてしまったファイルに対する read() と write() の効果については「モデム切断」を参照し
てください。
LOBLK はシェルレイヤ機能で使用されます (shl(1) を参照)。シェルレイヤ機能は一般のターミナルインタ
フェースの一部ではなく、一般のターミナルインタフェースは LOBLK ビットを使用しません。
ターミナルのオープン直後のハードウェア制御フラグの初期値は、 B300、CS8、CREAD、HUPCL となって
います。
ローカルモード
c_lflag フィールドはターミナルの制御に使用されます。
Section 7-268
ISIG
シグナルを使用可能にします。
ICANON
正規入力 (削除と抹消の処理を行います)
XCASE
正規入力での大文字 / 小文字表現
ECHO
エコーを可能にします。
Hewlett-Packard Company
− 16 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
ECHOE
ERASE バックスペースの列のエコーで行います。
ECHOK
行抹消文字の後で NL エコーします。
ECHONL
NL をエコーします。
NOFLSH
割り込み、quit、サスペンド状態の後のフラッシュを無効にします。
TOSTOP
バックグラウンドからの出力に対して SIGTTOU を送ります。
ECHOCTL
制御文字を ˆ 文字で、 DEL を ˆ? でエコーします。
ECHOPRT
消去を指定された文字を実際に消去します。
ECHOKE
BS SP BS でラインキルにある行全体を消去します。
FLUSHO
出力をフラッシュします。
PENDIN
次の読み込みあるいは入力文字で、未処理の入力を再処理します。
IEXTEN
拡張機能を使用可能にします。
ISIG がセットされている場合は、各入力文字が INTR、QUIT、SUSP、DSUSP などの特殊制御文字 (「プロセ
スグループ制御 IOCTL コマンド」を参照) であるかどうかをチェックします。もし入力文字がこれらの制御文
字であった場合は、その文字に対応する機能が実行され、その文字はデータとしては読み込まれません。 ISIG
がセットされていない場合はチェックは行われず、通常のデータ文字として取り扱われます。つまりこれらの
特殊入力機能は ISIG がセットされているときにのみ使用可能です。
ICANON がセットされている場合は正規入力モードでの処理が行われます。すなわち消去や抹消などの編集機
能が働き、 NL、EOF、EOL、EOL2 で区切られた入力文字行の編集が可能になります。 ICANON がクリアさ
れている場合は、読み取りは直接入力キューから行われます。読み取りの際は、 MIN で指定された文字数が
受け取られるか、あるいは入力される文字の間で TIME で指定されたタイムアウト値が終了するまでブロック
されます (「非正規入力処理モード (MIN/TIME の相互作用)」を参照)。これにより 1 文字入力の場合でも、連
続する大量の入力を効率よく受け取ることが可能になります。時間の指定は 0.10 秒単位です。
XCASE がセットされていて、かつ ICANON がセットされている場合は、 \ 文字に続いて入力された文字は大
文字として読み込まれ、また出力時にも \ 文字に続いて出力されます。このモードでは、入出力時に次のエス
ケープシーケンスを使用することができます。
実際の値 :
入出力方法 :
‘
\’
|
\!
{
\(
}
\)
\
\\
例えば A と入力する場合は \a と、 \n と入力する場合は \\n と、 \N と入力する場合は \\\n と入力してくださ
い。 XCASE は通常 IUCLC と OLCUC の組み合せで文字セットが 64 文字に制限されたターミナルを使用す
るときに使われます。この場合は、入力時には XCASE の処理が行われる前に IUCLC の処理が行われ、出力
時には XCASE の処理が行われた後に OLCUC の処理が行われます。したがって A という入力は IUCLC 処理
によって a に変換されます。 \A という入力は、まず IUCLC がこれを \a に変換し、次に XCASE がこれを A
に変換します。
HP-UX 11i Version 2: September 2004
− 17 −
Hewlett-Packard Company
Section 7-269
termio(7)
termio(7)
ECHO がセットされている場合、文字は受け取られた時点でターミナルにエコーされます。 ECHO がクリア
されている場合は、文字はエコーされません。
ICANON がセットされている場合は正規入力モードで処理されます。この場合は、「正規入力処理モード」の
項ですでに説明したように消去や抹消の編集機能が利用でき、 NL、EOF、EOL、EOL2 で区切られる入力文
字の行を編集することができます。さらに次のエコー機能が利用できます。
ECHO と ECHOE がセットされている場合、 ERASE、WERASE を入力すると BS SP BS という 3つの ASCII
形式の文字の列をエコーし、 CRT スクリーン上の最後の文字を消去します。
ECHO と ECHOPRT がセットされており、 ECHOE がクリアされている場合、シーケンス中の最初の ERASE
および WERASE 文字は、バックスラッシュ (\) をエコーし、そのあとに消去される文字 (列) が続きます。さ
らに ERASE あるいは WERASE 文字が続くと、削除された文字 (列) が逆順にエコーされます。次の非消去文
字によって、それがエコーされる前に、スラッシュ (/) がタイプされます。
ECHOKE および ECHO がセットされていると、 KILL 文字は ECHOE および ECHOPRT によって指定され
た方法を使って CRT スクリーン上の行の各文字を消去します。
ECHOCTL および ECHO がセットされていると、 ASCII TAB、ASCII NL、START および STOP 文字、
ASCII CR、および ASCII BS を除くすべての制御文字 (8 進で 0 から 37 の間のコードを持つ文字) が ˆchar でエ
コーされます。ここで char は制御文字のコードに 8 進の 100 を足したコードを持つ文字です。
ECHOK がセットされ ECHOKE がセットされていない場合、その行が削除されていることを強調するため、
NL 文字が、行抹消文字のあとにエコーされます。
ECHONL がセットされている場合は、 ECHO がクリアされている場合でも NL 文字がエコーされます。これ
はターミナルがローカルエコー (つまり半 2 重) に設定されているときに有用です。
エスケープされない限り EOF 文字はエコーされません。 ASCII EOT がデフォルト EOF 文字として指定されて
いるため、 EOT によってターミナルがハングアップすることは避けられます。
NOFLSH がセットされている場合は、通常の入出力キューの quit、割り込み、中断に伴うフラッシュは行われ
ません。しかし BRKINT がセットされている場合のブレークの受信に伴うデータのフラッシュには、
NOFLSH は影響を与えません。
TOSTOP ビットがセットされていて、かつ、そのプロセスが SIGTTOU シグナルを無視あるいはブロックしな
い場合、フォアグラウンド プロセスグループに入っていないプロセスが制御ターミナルに書き込もうとすると
拒否されます。もし書き込みが拒否され、そのプロセスが親なしのプロセスグループに属する場合は、 write()
は errno を EIO にセットし −1 を返し、シグナルは送られません。もし書き込みが拒否され、そのプロセスが
親なしのプロセスグループに属していない場合は、 SIGTTOU シグナルがそのプロセスグループに送られま
す。
FLUSHO がセットされている場合、ターミナルデバイスに書かれたデータは廃棄されます。このビットはプロ
グラムによってセットされます。 FLUSHO をクリアすることによって、プログラムで FLUSHO の効果をなく
することができます。
Section 7-270
Hewlett-Packard Company
− 18 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
PENDIN がセットされている場合、次の文字が入力として着信したときに、読まれていなかった入力は再処理
され、再度エコーされる可能性があります。
ICANON がセットされているときは ERASE、KILL、EOF の各文字はその前に \ 文字を付けることによってエ
スケープでき、この場合は特殊機能は実行されません。
IEXTEN は、 ECHOCTL、ECHOPRT、ECHOKE、FLUSHO、および PENDIN 機能を許可する前にセット
しなければなりません。また、特殊文字 WERASE および LNEXT は IEXTEN がセットされたときにのみ許可
されます。 IEXTEN は、他のいかなる機能にも影響しません。
ローカル制御のフラグの初期値はすべてのビットがクリアされた状態です。
特殊制御文字
特殊制御文字は c_cc 配列で定義されます。すべての特殊文字は変更することができます。正規モードと非正規
モードでの各要素の名前と説明を次の表に示します。
サブスクリプト使用法
正規モード
非正規モード
説明
VEOF
EOF 文字
VEOL
EOL 文字
EOL2 文字
VEOL2
ERASE 文字
VERASE
WERASE 文字
VWERASE
VINTR
INTR 文字
VINTR
KILL 文字
VKILL
VMIN
1MIN 値
VQUIT
VQUIT
QUIT 文字
VSTART
VSTART
START 文字
VSTOP
VSTOP
STOP 文字
VSUSP
VSUSP
SUSP 文字
VDSUSP
VDSUSP
VLNEXT
VLNEXT
DSUSP 文字
TIME 値
VTIME
LNEXT 文字
termios 構造体関連の関数
以降の関数は termios 構造体を使用するときに使われる関数です。関数 cfsetispeed() および cfsetospeed() の
ターミナルデバイスへの効果は、 tcsetattr() 関数が正常に呼び出されるまで有効になりません。これらの関数
についての詳細はマニュアルの各エントリを参照してください。
HP-UX 11i Version 2: September 2004
− 19 −
Hewlett-Packard Company
Section 7-271
termio(7)
termio(7)
termios 構造体関数
関数
説明
cfgetospeed()
出力ボーレートの取り出し
cfgetispeed()
入力ボーレートの取り出し
cfsetospeed()
出力ボーレートの設定
cfsetispeed()
入力ボーレートの設定
tcgetattr()
ターミナルの状態の取り出し
tcsetattr()
ターミナルの状態の設定
termio 構造体関連の IOCTL コマンド
ioctl() システムコールには termio 構造体を使用してターミナルファイルを操作するものがいくつかあります (
「termio 構造体」を参照)。このとき要求されたコマンドを認識できない場合は、 errno を [EINVAL] に設定し
て −1 を返します。
termio 構造体を参照する ioctl() システムコールは次のような形式になります。
ioctl (fildes, command, arg)
struct termio *arg;
この形式で使われるコマンドは、以下の通りです。
TCGETA
指定されたターミナルのパラメータを取り出して arg で与えられた termio 構造体に格
納します。このコマンドはバックグラウンドプロセスからも行うことができますが、
その情報はすぐにフォアグラウンドプロセスによって変更されてしまう場合がありま
す。
TCSETA
指定されたターミナルのパラメータを、 arg で与えられた termio 構造体の値に設定し
ます。変更はただちに行われます。このコマンドが要求されているときに文字が出力
されると、その結果は定義できず、誤った出力が行われる場合があります。
TCSETAW
新しいパラメータを設定する前には、出力が完全に終了するのを待ちます。この形式
は出力に影響するパラメータを変更する際に使用します。
TCSETAF
出力が完全に終了するのを待ち、入力キューをフラッシュした後に新しいパラメータ
を設定します。
termio に関する警告
最初の 8つの特殊制御文字 (「termios 構造体」を参照) だけ、設定および読み出しが可能です。 VEOL と
VEOF のインデックスの値は VTIME と VMIN のインデックスの値と同じものです。したがって ICANON が
セットされている場合は、 VEOL あるいは VTIME が追加される行末文字となり、 VEOF と VMIN が EOF 文
字となります。 ICANON がクリアされている場合は、 VEOL あるいは VTIME は文字入力のインターバルタ
イマの値となり、 VEOF あるいは VMIN は読み出される最小の文字となります。
Section 7-272
Hewlett-Packard Company
− 20 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
構造体を使用しない関数
termio 構造体と termios 構造体のどちらも使用しない次の関数は制御ターミナルのために使用されます。これ
らの関数についての詳細はマニュアルの各エントリを参照してください。
構造体を使用しない関数
関数
説明
tcsendbreak()
ブレークの送信
tcdrain()
出力が完了するまで待つ
tcflush()
入出力キューのフラッシュ
tcflow()
入出力の中断あるいは再開
tcgetpgrp()
フォアグラウンド プロセスグループ id の読み出し
tcsetpgrp()
フォアグラウンド プロセスグループ id の設定
tcgetsid()
セッション id の獲得
システム非同期の I/O IOCTL コマンド
次の ioctl() システムコールは I/O のためのシステム非同期のコマンドで、以下のような形式になります。
ioctl (fildes, command, arg)
int arg;
この形式で使われるコマンドは以下の通りです。
FIOSSAIOSTAT
arg で指定された整数が 0 以外の場合は、システム非同期の I/O が可能になりま
す。すなわち、ターミナル デバイスファイルが「使用可能な読み取りデータが
ない」状態から「使用可能な読み取りデータがある」状態へ変った時点で、
SIGIO が FIOSSAIOOWN で指定されたプロセスに送られるようになります (以
下を参照)。 FIOSSAIOOWN で指定されたプロセスがない場合は、そのターミ
ナル デバイスファイルを最初にオープンしたプロセスに SIGIO が送られます。
指定されたプロセスが終了した場合、 SIGIO シグナルはどのプロセスにも送ら
れません。
arg で指定された整数が 0 の場合は、システム非同期の I/O ができなくなりま
す。
ターミナル デバイスファイルをオープンした時点でのデフォルトではシステム
非同期の I/O はできません。
FIOGSAIOSTAT
システム非同期の I/O が可能な場合は arg で指定された整数に 1 が格納されま
す。そうでない場合は、 arg は 0 になります。
FIOSSAIOOWN
システム非同期の I/O からの SIGIO シグナルを受け取るプロセス ID を arg で
指定される整数の値に設定します。 arg で与えられた整数に対応するプロセス
が見つからない場合、呼び出しは errno を [ESRCH] に設定し −1 を返します。
適切な特権を持つユーザーはどのプロセスでも SIGIO シグナルの受信先に指定
HP-UX 11i Version 2: September 2004
− 21 −
Hewlett-Packard Company
Section 7-273
termio(7)
termio(7)
することができます。適切な特権を持たないユーザーによって呼び出された場
合で、呼び出したプロセスが SIGIO シグナルの受信を指定するプロセス自身で
はないときや、呼び出したプロセスの実ユーザー ID 、セーブされたユーザー
ID 、実効ユーザー ID のいずれかが、指定する側のプロセスの実ユーザー ID か
実効ユーザー ID と一致しないとき、あるいは、呼び出しプロセスが、 SIGIO
シグナルを受け取る呼び出しプロセスの子孫プロセスを指定していないとき、
呼び出しは errno を [EPERM] に設定し −1 を返します。
指定されたプロセスがその後に終了した場合には、 SIGIO シグナルはどのプロ
セスにも送られません。
ターミナル デバイスファイルをオープンした時点でのデフォルトでは、最初に
そのターミナル デバイスファイルがプロセスによって SIGIO シグナルの送り先
として指定されます。
SIGIO シグナルを受け取るプロセスの ID が、 arg で指定された整数にセットさ
FIOGSAIOOWN
れます。
回線制御 IOCTL コマンド
入出力を制御する ioctl() システムコールがいくつか用意されており、それらは以下の形式をとります。
ioctl (fildes, command, arg)
int arg;
これらのコマンドの形式は以下の通りです。
TCSBRK
出力が完全に行われるまで待ちます。 arg が 0 の場合は、ブレーク (少なくとも 0.25
秒間の 0 のビット列) が送られます。 tcsendbreak() 関数はこれと同じ働きをします
(tcsendbreak(3C) を参照)。
TCXONC
Start/stop の制御を行います。 arg が 0 の場合は出力をサスペンド状態にします。 arg
が 1 の場合は中断された出力を再開します。 arg が 2 の場合は STOP 文字を送りま
す。 arg が 3 の場合は START 文字を送ります。 arg がそれ以外の値の場合は、 errno
が [EINVAL] に設定され −1 を返します。 tcflow() 関数はこれと同じ働きをします
(tcflow(3C) を参照)。
TCFLSH
arg が 0 の場合は入力キューをフラッシュします。 arg が 1 の場合は出力キューをフ
ラッシュします。 arg が 2 の場合は入力キューと出力キューの両方をフラッシュしま
す。 arg がそれ以外の値の場合は、 errno が [EINVAL] に設定され −1 を返します。
tcflush() 関数はこれと同じ働きをします (tcflush(3C) を参照)。
BREAK の送信はデータ転送ラインを SPACE または 0 で、少なくとも 0.25 秒間ホー
ルドすることによって実現されます。 BREAK の送信中でも、データをデバイスに送
ることはできますが、シリアルデータ インタフェースの制限のため BREAK がデータ
に優先することがあります。したがって BREAK の間にデバイスに送られたデータは
Section 7-274
Hewlett-Packard Company
− 22 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
失われます。入力フロー制御のためにシステムが生成した XON/XOFF 文字も同様に
失われます。フロー制御文字がすぐに送られるとは限らないため、 BREAK が終了す
るまで XOFF フロー制御文字の転送も遅延されることにも注意してください。
その他の呼び出しは次のような形式になります。
ioctl (fildes, command, arg)
int *arg;
このコマンドの形式は以下の通りです。
FIONREAD
現時点でターミナル デバイスファイルから読み取ることのできる文字数を、 arg で指
定された int 型整数に返します。このコマンドはバックグラウンドプロセスからも行
うことができますが、そのデータ自身はバックグラウンドプロセスから読み取ること
はできません。
ノンブロッキング I/O IOCTL コマンド
O_NONBLOCK と O_NDELAY フラグをセットすることによって、 open(2) と fcntl(2) から容易にノンブロッ
キング I/O を使用することができます。この項で説明するコマンドは、以前に開発されたアプリケーションの
旧製品との互換性のために用意されています。 O_NONBLOCK と O_NDELAY を使用しないでノンブロッキ
ング I/O を行う ioctl() システムコールは次のような形式になります。
ioctl (fildes, command, arg)
int *arg;
これらのコマンドの形式は以下の通りです。
FIOSNBIO
arg で指定された整数が 0 以外の場合は、 FIOSNBIO 形式のノンブロッキング I/O が
可能になります。すなわち、それ以降のターミナル デバイスファイルへの読み取りと
書き込みはノンブロッキング形式で行われます (以下を参照)。 arg で指定された整数
が 0 の場合は、 FIOSNBIO 形式のノンブロッキング I/O はできなくなります。
FIOSNBIO 形式のノンブロッキング I/O の読み取りの場合は、デバイスファイルに対
するすべての読み取り要求はその結果が正常終了か異常終了かにかかわらずブロック
されません。このような読み取り要求の終了には以下の 3つの場合があります。
•
要求を満たすだけの十分な使用可能なデータがあった場合は、読み取りは正常終
了し、読み取られたデータを受信し、その文字数を返します。
•
要求を満たすだけの十分な使用可能なデータがなかった場合は、読み取りは正常
終了し、読み取ることができた分だけのデータを受け取り、その文字数を返しま
す。
•
使用可能なデータがまったくなかった場合には、読み取りは errno を [EWOULDBLOCK] に設定し −1 を返します。
HP-UX 11i Version 2: September 2004
− 23 −
Hewlett-Packard Company
Section 7-275
termio(7)
termio(7)
FIOSNBIO 形式のノンブロッキング I/O の書き込みの場合は、デバイスファイルに対
するすべての書き込み要求は、結果が正常終了か異常終了かにかかわらずブロックさ
れません。このような書き込み要求の終了には以下の 3つの場合があります。
•
要求を満たすだけの十分な使用可能領域がシステムバッファにあった場合は、書
き込みは正常終了し、データは書き込まれ、書かれた文字数を返します。
•
要求を満たすだけの十分な使用可能領域がシステムバッファになかった場合は、
書き込みは正常終了し、書ける分だけのデータが書き込まれ、実際に書かれた文
字数を返します。
•
システムバッファにまったく空きがなかった場合には、書き込みは errno を
[EWOULDBLOCK] に設定し −1 を返します。
FIOSNBIO 形式のノンブロッキング I/O が O_NONBLOCK や O_NDELAY フラグ
(open(2) と fcntl(2) を参照) の機能が衝突する場合は、常に O_NONBLOCK と
O_NDELAY が FIOSNBIO 形式のノンブロッキング I/O に優先します。つまり、
O_NONBLOCK と O_NDELAY のどちらかがセットされている場合は、 O_NDELAY
や O_NONBLOCK の定義にしたがってドライバは読み取り要求を実行することを意
味します。 O_NONBLOCK と O_NDELAY の両方がクリアされている場合は、
FIOSNBIO 形式のノンブロッキング I/O が使用されます。
ターミナル デバイスファイルをオープンした時点でのデフォルトでは、 FIOSNBIO
形式のノンブロッキング I/O は使用できなくなっています。
FIOGSNBIO
FIOSNBIO 形式のノンブロッキング I/O が可能である場合は、 arg で指定された整数
に 1 がセットされます。それ以外の場合は、 arg で指定された整数には 0 がセットさ
れます。
プロセスグループ制御 IOCTL コマンド
ここで説明するプロセスグループ制御機能は、プロセスの遅延された中断の文字を除いて、tcgetattr()、
tcsetattr()、tcgetpgrp()、tcsetpgrp()、tcsetsid() の関数を用いて容易に実現することができます (詳しくは
tcattribute(3C)、tcgetpgrp(3C)、tcsetpgrp(3C)、tcgetsid(3C) を参照)。
次の構造体はプロセスグループ制御に使われるもので、 <bsdtty.h> で定義されています。
struct ltchars {
unsigned char t_suspc; /* stop process character*/
unsigned char t_dsuspc; /* delayed stop process character*/
unsigned char t_rprntc; /* reserved; must be ’_POSIX_VDISABLE’*/
unsigned char t_flushc; /* reserved; must be ’_POSIX_VDISABLE’*/
unsigned char t_werasc; /* reserved; must be ’_POSIX_VDISABLE’*/
unsigned char t_lnextc; /* reserved; must be ’_POSIX_VDISABLE’*/
};
Section 7-276
Hewlett-Packard Company
− 24 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
struct ltchars {
unsigned char t_suspc; /* stop process character */
unsigned char t_dsuspc; /* delayed stop process character */
unsigned char t_rprntc; /* reserved; must be ’_POSIX_VDISABLE’ */
unsigned char t_flushc; /* reserved; must be ’_POSIX_VDISABLE’ */
unsigned char t_werasc; /* reserved; must be ’_POSIX_VDISABLE’ */
unsigned char t_lnextc; /* reserved; must be ’_POSIX_VDISABLE’ */
};
これらの文字の初期値は _POSIX_VDISABLE で、すべての機能が使えないことを表します。各文字の意味は
以下の通りです。
t_suspc
フォアグラウンド プロセスグループをサスペンド状態にします。 サスペンド状態に
するシグナル (SIGTSTP) はフォアグラウンド プロセスグループ中のすべてのプロセ
スに送られます。通常は各プロセスは中断されますが、このシグナルを無視、ブロッ
クするように設定する、あるいは、トラップして別に定めたところへ受け取らせるよ
うに設定し直すことは可能です (signal(2) と signal(5) を参照)。 t_suspc が有効になっ
ている場合、通常この文字に対しては Control-Z あるいは ASCII SUB が割り当てられ
ています。 t_suspc の設定および読み出しは SUSP 特殊制御文字の場合と同様です。
t_dsuspc
t_suspc とほぼ同様のものですが、 サスペンド状態にするシグナル (SIGTSTP) は、そ
の文字が入力されたときではなく、送り先のプロセスが文字を読み取ろうとした時点
で送られます。 t_dsuspc が有効になっている場合、通常この文字には Control-Y ある
いは ASCII EM が割り当てられています。
予約済みの文字に _POSIX_VDISABLE 以外の文字を割り当てようとした場合、 ioctl() は errno に [EINVAL]
を設定して −1 を返します。このとき予約済みの文字は変更されません。
上記の構造体を使用する ioctl() システムコールは次のような形式になります。
ioctl (fildes, command, arg)
struct ltchars *arg;
これらのコマンドの形式は以下の通りです。
TIOCGLTC
プロセスグループの制御文字を読み出し、それを arg で指定された ltchars 構造体に格
納します。このコマンドはバックグラウンドプロセスからも実行できますが、そこで
得られた情報はすぐにフォアグラウンドプロセスによって変更されている可能性があ
ります。
TIOCSLTC
プロセスグループの制御文字を arg で指定された構造体で与えられたものに設定しま
す。
これ以外のプロセスグループ制御の ioctl() システムコールは次のような形式になります。
HP-UX 11i Version 2: September 2004
− 25 −
Hewlett-Packard Company
Section 7-277
termio(7)
termio(7)
ioctl (fildes, command, arg)
unsigned int *arg;
これらのコマンドの形式は以下の通りです。
TIOCGPGRP
ターミナルに接続されたフォアグラウンド プロセスグループを arg で指定された整数
に返します。このコマンドはバックグラウンドプロセスからも実行できますが、そこ
で得られた情報はすぐにフォアグラウンドプロセスによって変更されている可能性が
あります。この機能は tcgetpgrp() を用いて容易に実現することが可能です (tcgetpgrp(3C) を参照)。
ioctl() が異常終了した場合は、 errno を次のいずれかの値に設定し、 −1 を返しま
す。
[EBADF]
[ENOTTY]
fildes が正しいファイル記述子ではありません。
fildes で指定されたファイルが制御ターミナルではないか、呼び出した
プロセスが制御ターミナルを持っていません。
[EACCES]
fildes で指定されたファイルが呼び出しプロセスの制御ターミナルでは
あるが、その制御ターミナルのフォアグラウンド プロセスグループが存
在しません。
注意 : 将来のリリースでは [EACCES] は返されなくなる可能性がありま
す。ある制御ターミナルに対して定義されているフォアグラウンド プロ
セスグループがない場合の動作は、 POSIX で変更される可能性があり
ます。移植可能なアプリケーションにはこのエラー条件を使用しないで
ください。
TIOCSPGRP
ターミナルのフォアグラウンド プロセスグループを、 arg で指定された値に設定しま
す。この機能は tcsetpgrp() 関数を用いて容易に実現することができます (tcsetpgrp(3C) を参照)。
ioctl() が異常終了した場合は、 errno を次のいずれかの値に設定し、 −1 を返しま
す。
[EBADF]
fildes が正しいファイル記述子ではありません。
[EINVAL]
arg で指定されたプロセス ID がサポートされていない値です。
[ENOTTY]
呼び出しプロセスが制御ターミナルを持っていない、 fildes で指定され
たファイルが制御ターミナルではない、あるいは、制御ターミナルがす
でに呼び出しプロセスのセッションから切り離されている、のいずれか
です。
[EPERM]
arg で指定されたプロセス ID はサポートされている値であるが、そのプ
ロセスのプロセスグループ ID が呼び出しプロセスと同じセッション中
Section 7-278
Hewlett-Packard Company
− 26 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
のプロセスのものと一致していません。
TIOCGSID
fildes で指定されたターミナルのセッション ID を arg で指定された整数で返します。
この機能は tcgetsid() 関数を使って容易に実行されます (tcgetsid(3C) 参照)。
ioctl() コールが失敗した場合 −1 を返し、以下の値のうちの 1つに errno をセットしま
す。
TIOCLGET
[EBADF]
fildes は正しいファイル記述子ではありません。
[ENOTTY]
fildes に関連するデバイスはターミナルではありません。
[EACCES]
fildes はセッションに割り当てられたターミナルではありません。
プロセスグループの制御モードを取り出し arg で指定された整数に格納します。この
コマンドはバックグラウンドプロセスからも実行できますが、そこで得られた情報
は、すぐにフォアグラウンドプロセスによって変更されている可能性があります。
TIOCLSET
TIOCLBIS
プロセスグループの制御モードを、 arg で指定された値に設定します。
arg で指定された整数をビットマスクにして、プロセスグループの制御モードをセッ
トします。
TIOCLBIC
arg で指定された整数をビットマスクにして、プロセスグループの制御モードをクリ
アします。
次のビットがプロセスグループの制御モードとして定義されています。
LTOSTOP
バックグラウンドからの書き込みに対して SIGTTOU を送ります。
LTOSTOP のセットとクリアは TOSTOP フラグの場合と同様です (「ローカルモード」を参照)。 LTOSTOP
がセットされていてプロセスが制御ターミナルのフォアグラウンド プロセスグループに属していない場合、そ
のプロセスから制御ターミナルへの書き込みは拒否されます (「ターミナルアクセス制御」を参照)。
ターミナルサイズ IOCTL コマンド
次の ioctl() システムコールは fildes で指定されたターミナルサイズに関する情報の読み出しと変更に使われま
す。これらの ioctl() システムコールは、ターミナルサイズに関する情報の読み出しと変更に winsize 構造体を
使用します。 winsize 構造体は <termios.h> で定義され、次のメンバを持ちます。
unsigned short ws_row;
unsigned short ws_col;
/* Rows, in characters */
/* Columns, in characters */
unsigned short ws_xpixel; /* Horizontal size, in pixels */
unsigned short ws_ypixel; /* Vertical size, in pixels */
ターミナルサイズを表すこれらの要素の初期値はすべて 0 です。ターミナルサイズの値は汎用ターミナルイン
タフェースによって設定や読み出しが行われることはなく、汎用ターミナルインタフェースに対してはこれら
の機能は影響を及ぼしません。ターミナルサイズの値はアプリケーションがターミナルサイズ ioctl() システム
コール (ioctl(2) を参照) を通して操作するときに限り、その設定や読み出しが可能です。
HP-UX 11i Version 2: September 2004
− 27 −
Hewlett-Packard Company
Section 7-279
termio(7)
termio(7)
上記の構造体を使用する ioctl() システムコールは次のような形式になります。
ioctl (fildes, command, arg)
struct winsize *arg;
この形式を使ったコマンドです。
TIOCGWINSZ ターミナルサイズの値を読み出し、 arg で指定された winsize 構造体に格納します。
このコマンドはバックグラウンドプロセスからも実行できます。
TIOCSWINSZ
ターミナルサイズの値を、 arg で指定された winsize 構造体の値に設定します。新し
い値が以前の値と 1つでも異なる場合には、 SIGWINCH シグナルがターミナルの
フォアグラウンド プロセスグループ中のすべてのプロセスに対して送られます。
コンソール出力リダイレクション IOCTL コマンド
通常はシステムコンソールに送られる出力は、システム内の任意の TTY デバイスあるいは疑似デバイスにリ
ダイレクトで来ます。コンソール出力のリダイレクションに使われる ioctl() システムコールは次の形式です。
ioctl (fildes, command, arg)
int arg;
この形式を使ったコマンドです。
TIOCCONS
システムコンソールの出力をリダイレクトします。通常システムコンソールに送られ
る出力は、カーネルの printf 要求であってもコンソール特殊ファイルを経由するもの
であっても、 fildes によって参照されるターミナルに送られます。 arg の値は無視さ
れます。この要求を実行するにはスーパーユーザーの権限が必要です。必要な権限を
持たない場合は、 errno を [EPERM] にセットして −1 が戻ります。 fildes がクローズ
されて、コンソール出力が異なるデバイスにリダイレクトされなかった場合は、この
コマンドをあとで呼び出すと、再度物理的なコンソールデバイスに再度リダイレクト
されます。
警告
HP-UX のさまざまな処理系では、一見ターミナルのように見える非シリアルインタフェース (例えばビット
マップ グラフィックスディスプレイ) や、今まで説明した機能では実現できない「smart cards」を使用してい
ます。したがってすべてのシステムが正確に今まで説明した標準をそのまま満たしているとは限りません。各
処理系はそのシステム固有のドキュメント中に、標準から逸脱した部分について記述しておく必要がありま
す。
FIOSSAIOSTAT
BSD 4.2 の FIOASYNC に類似したものですが、機密保護を目的とした拡張がさ
れています。
FIOGSAIOSTAT
もともと HP で開発されました。これは FIOSSAIOSTAT を補完し、システム非
同期の状態を、コマンドインタプリタ プロセスが I/O TTY の状態をセーブある
いはリストアすることを可能にしています。
Section 7-280
Hewlett-Packard Company
− 28 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
FIOSSAIOOWN
BSD 4.2 の FIOSETOWN に類似したものですが、機密保護を目的とした拡張が
されています。
FIOGSAIOOWN
BSD 4.2 の FIOGETOWN と同じものです。 BSD 4.2 のこの機能はプロセスグ
ループを使用しているのに対して、 HP-UX では単にプロセスを使用している点
が異なります。
FIOSNBIO
BSD 4.2 の FIONBIO と同じものですが、 open() と fcntl() に関して、 O_NDELAY または O_NONBLOCK フラグをセットした際に相互干渉が起きないよう
に変更されています。
FIOGNBIO
もともと HP で開発されました。これは FIOSNBIO を補完し、 FIOSNBIO 形式
のノンブロッキングコマンドインタプリタ プロセスが、 I/O TTY の状態を、
セーブあるいはリストアすることを可能にしています。
一般的なターミナルインタフェースは、 cblock というシステムリソースを使って、転送中のデータや通信ポー
トを経由して受理されるデータを保持しています。このような cblock は、システムをデータが通るたびに、再
利用のために連続的に使われては解放されます。システムにおける cblock の設定が少なすぎる場合、 cblock
のプールが一次的あるいは恒久的に足りなくなる場合があり、データの損失、システムのハングアップ、パ
フォーマンスの低下などが起こる可能性があります。
cblock が不足した可能性がある場合は、 dmesg (dmesg(1M) 参照) を使って cblock の不足を示唆するようなメッ
セージがないかを見るために、システムのメッセージバッファを検査できます。あるいは、ダンプのコアファ
イルを検査する際には、 adb (adb(1) 参照) を使うこともできます。メッセージの形式は次の通りです。
WARNING: cblock exhaustion occurred n times
ここで n は、OS が cblock を要求したが提供されなかった回数を示します。このメッセージがある場合は、
カーネルを再構成して cblock の数を増やす必要があります。
cblock の長さは 32バイトです。システムで設定されているデフォルトの cblock の数は 8292 です。
これは、オプションの調整可能なシステムパラメータ nclist を使うことによって変更可能で、これによりシス
テムで利用する cblock の数を自由に設定できます。
SAM あるいは kctune(1M) を使って、 nclist の値を変更できます。
制約
ワークステーション
ワークステーション マシンの内蔵のシリアルポートは、ボーレートの設定として 57 600 と 115 200 もサポート
しています。このようなボーレートで実用的な長さのケーブルを使うためには、 RS-232 から RS-422 へのコン
バータが必要な可能性があります。 (RS-232 では、19 200 ボーまでしか規定されていないため)
時間遅延はサポートされていません。
ワークステーション システムの内蔵のシリアルポートは、 RTS および CTS のフロー制御機能、設定可能な受
理 FIFO トリガレベル、接待可能な転送リミットを持っています。デバイスファイル マイナー番号のビット、
HP-UX 11i Version 2: September 2004
− 29 −
Hewlett-Packard Company
Section 7-281
termio(7)
termio(7)
ioctl() 呼び出し (termiox(7) を参照)、あるいは、 stty コマンド (stty(1) を参照) を用いて、 RTS/CTS ハードウェ
アハンドシェークを可能にすることができます。
デバイスファイル マイナー番号の 2 ビットを用いて、受信 FIFO トリガレベルを設定することができます。受
信 FIFO トリガレベルは、システムで生成される受信割り込みのレベルを設定するために使用されます。受信
FIFO トリガレベルを小さな値に設定すると、システムはさらにすばやい文字入力の受信に対応できます。しか
しトリガレベルを小さな値に設定すると、余分な割り込みの処理のためにシステムのオーバヘッドが上がりま
す。 FIFO トリガレベルを大きくすると、着信したデータ通信量のシステム割り込みのオーバヘッドが少なく
なり、受信 FIFO がオーバーランする前にハードウェアからのデータ読み取りを行うことができます。 RTS フ
ロー制御を使用する場合には、受信 FIFO トリガレベルは受信 FIFO を保護するハードウェア RTS も決定しま
す。また受信 FIFO トリガレベルを大きく設定すると、 XOFF フロー制御の反応は低下します。これは着信の
データフローが軽い場合には、システムによる XOFF 文字の受信が若干遅延されるからです。受信 FIFO トリ
ガレベルの適切な設定は、シリアルポートがどのくらい使用されるかに依存します。多くのアプリケーション
では、受信 FIFO トリガレベルは 8 (c3,c2 = 10) が適切だと思われます。
デバイスファイル マイナー番号の 2 ビットは、転送リミット、すなわち転送 FIFO に正常に入れられる文字数
を決定します。転送リミットを小さな値に設定すると、XOFF 文字の受信から、あるいは、 CTS の再実行から
フロー制御までのトランスミッターの応答性を向上させられますが、それに対してシステム割り込みオーバ
ヘッドが増加します。転送リミットを大きな値に設定すると、割り込みオーバヘッドを少なくすることができ
る代わりに、トランスミッターのフロー制御が行われた後でも転送 FIFO の中の残りのデータが転送されるた
めに、フロー制御の応答性は悪くなります。フロー制御の後のデータの受信量の許容量が小さなデバイスを用
いて通信を行う場合は、適切な転送リミットを設定する必要があります。
デバイスファイルのマイナー番号
ワークステーションのデバイスファイル番号は次の形式になります。
0xIIC0HM
ここで、
II =
2 桁 (8 ビット) の 16 進数でシリアルインタフェースのインスタンスを示します。
C =
FIFO 制御用の 1 桁の 16 進数 (4 ビット)。各ビットの値は以下の通りです。
受信 FIFO トリガレベル
c
2
レベル
c
c
0
リミット
0
0
1
0
0
1
0
1
4
0
1
4
1
0
8
1
0
8
1
1
14
1
1
12
3
Section 7-282
転送リミット
c
Hewlett-Packard Company
− 30 −
1
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
H =
1 桁の 16 進数 (4 ビット) で、診断アクセスとハードウェアフローを制御します。
ビット
診断用電話アクセス
h2
予約
h1
h0
M =
値
h3
予約
RTS/CTS ハードウェアフロー制御を有効にする
ハードウェア フローステートとポートアクセス タイプを決定する 16 進数数字 (4 ビット)。
各ビットの値は以下の通りです。
ビット
値
m3
TI/ALP
m2
0 = Simple プロトコル (アメリカ)
1 = CCITT プロトコル (ヨーロッパ)
m1m0
00 = 直接接続
01 = ダイヤルアウトモデム
10 = ダイヤルインモデム
11 = 無効
サーバー
時間遅延は直接はサポートされていません。時間遅延を使用する場合は、(現在のボーレートに依存する) 適当
な数の充填文字が出力されます。充填文字は、少なくても要求された時間だけ出力されます。
システム指定の入力フロー制御の値は、下限値は 60、上限値は 180、許される入力の最大値は 512 です。
HP 98196A (正式には 27140A オプション 800) インタフェースは次のハードウェア設定をサポートしていませ
ん。
CBAUD
B200, B38400, EXTA, EXTB.
HP A1703-60003 と HP 28639-60001 インタフェースは 9600 を超えるボーレートはサポートしていません。さら
にポート 0 の次のハードウェア設定は、デフォルト (9600 ボー、8 ビット文字、1 ストップビット、パリティ
なし) から変更することはできません。
CBAUD, CSIZE, CSTOPB, PARENB, PARODD.
HP の J2094A インタフェースは 19200 を超えるボーレートをサポートしません。
J2094A インタフェースは RTS と CTS フロー制御機能、および、設定可能な受信 FIFO トリガレベルと転送リ
ミットをサポートしています。デバイスファイル マイナー番号のビット、 ioctl() 呼び出し (termiox(7) を参
照)、あるいは、 stty コマンド (stty(1) を参照) を用いて、 RTS/CTS ハードウェアハンドシェークを可能にする
ことができます。
デバイスファイル マイナー番号 :
HP-UX 11i Version 2: September 2004
− 31 −
Hewlett-Packard Company
Section 7-283
termio(7)
termio(7)
サーバーのデバイスファイル マイナー番号は次のような形式になります。
0xIIPPHM
ただし
II =
2 桁の 16 進数 (8 ビット) で、シリアルインタフェースの実例を示します。
PP =
2 桁の 16 進数 (8 ビット) で、シリアルインタフェース上のこのデバイスのポート番号を示し
ます。
H =
1 桁の 16 進数 (4 ビット) で、診断アクセスおよびハードウェアフローを制御します。 (HP
J2094A 専用)
ビット
カードの診断
h2
ポートの診断
h1
h0
M =
値
h3
予約
RTS/CTS ハードウェアフロー制御を有効にする
ハードウェアのフロー制御を決定する 16 進数の数字 (4 ビット)。
ビット
値
m3
TI/ALP
m2
0 = Simple プロトコル (アメリカ)
1 = CCITT プロトコル (ヨーロッパ)
m1m0
00 = 直接接続
01 = ダイアルアウトモデム
10 = ダイヤルインモデム
11 = 無効
著者
termios は HP と IEEE Computer Society で開発されました。
termio は HP、AT&T、カリフォルニア大学バークレー校で開発されました。
ファイル
/dev/console
/dev/cua*
/dev/cul*
/dev/tty*
/dev/ttyd*
Section 7-284
Hewlett-Packard Company
− 32 −
HP-UX 11i Version 2: September 2004
termio(7)
termio(7)
参照
adb(1), shl(1), stty(1), kctune(1M), dmesg(1M), mknod(1M), fork(2), ioctl(2), setsid(2), signal(2), stty(2), setpgid(2),
blmode(3C), cfspeed(3C), tccontrol(3C), tcattribute(3C), tcgetpgrp(3C), tcsetpgrp(3C), tcgetsid(3C), signal(5), unistd(5),
sttyV6(7), tty(7), modem(7), termiox(7)
標準準拠
termio: SVID2、SVID3、XPG2
termios: AES、SVID3、XPG3、XPG4、FIPS 151-2、POSIX.1
HP-UX 11i Version 2: September 2004
− 33 −
Hewlett-Packard Company
Section 7-285
termiox(7)
termiox(7)
名称
termiox − 拡張一般ターミナルインタフェース
構文
#include <sys/termiox.h>
ioctl (int fildes, int request, struct termiox * arg)
説明
拡張一般ターミナルインタフェースは、一般ターミナルインタフェースである termio(7) を補完するもので、非
同期のハードウェアフロー制御と拡張された非同期の機能のローカルなインプリメンテーションをサポートし
ます。いくつかのシステムはハードウェアの制限によりこれらの機能のすべてはサポートしていません。また
ある関数の使用ができないシステムもあります。このような場合は、そのビットは無視されます。これらの機
能がサポートできる場合は、ここで説明するインタフェースを使用しなければなりません。
ハードウェアフロー制御モード
ハードウェアフロー制御は、termioの IXON, IXOFF および IXANY 文字フロー制御を補完するものです(詳し
くは termio(7) を参照)。文字フロー制御は、デバイス間のデータストリームに制御文字を挿入することによっ
て、あるデバイスから他のデバイスへのデータの転送を制御するときに行われます。ハードウェアフロー制御
は、非同期のインタフェースのワイヤ(回路)上の電気的な信号を利用して、あるデバイスから他のデバイスへ
のデータの転送を制御するときに行われます。文字フロー制御とハードウェアフロー制御は同時に設定するこ
とができます。
非同期の全二重アプリケーションでは、Electronic Industries Association の EIA-232-D Request To Send (RTS) と
Clear To Send (CTS) の回路が、ハードウェアフロー制御の方法として勧められています。
EIA-232-D 標準は単方向のハードウェアフロー制御のみを定めています。すなわち、Data Circuit-terminating
Equipment あるいは Data Communications Equipment (DCE) は、データの転送を中断させる Data Terminal Equipment (DTE)を表しています。termiox インタフェースは単方向と双方向のハードウェアフロー制御をサポートし
ており、双方向フロー制御が可能な場合は、 DCE または DTE がインタフェースを通るデータの転送の中断を
表します。
クロックモード
Isochronousフロー制御とクロックモード通信はサポートされていません。
ターミナルパラメータ
termioxインタフェースで使用されるデバイスの挙動を制御するパラメータは、 termiox 構造体で指定されま
す。この構造体は <sys/termiox.h> ヘッダファイルで定義されています。いくつかの ioctl() システムコール(詳
しくは ioctl(5) を参照)は、この termiox 構造体を用いてパラメータのフェッチや変更を行います。 termiox 構
造体次のメンバーを持ちます。
Section 7-286
unsigned short x_hflag;
/* hardware flow control modes */
unsigned short x_cflag;
/* clock modes */
unsigned short x_rflag;
/* reserved modes */
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
termiox(7)
termiox(7)
unsigned short x_sflag;
/* spare local modes */
x_hflag フィールドはハードウェアフロー制御モードを表します。
RTSXOFF 0000001 入力時の RTS ハードウェアフロー制御を可能にします。
CTSXON 0000002 入力時の CTS ハードウェアフロー制御を可能にします。
RTS と CTS 回路は CCITT モデム接続に影響されたものです。 RTS と CTS 回路は CCITT モデム接続とハード
ウェアフロー制御の両方に使われるため、 CCITT モデムとハードウェアフロー制御を同時に行うことはできま
せん。
さまざまなハードウェアフロー制御の手法が、適当なビットをセットすることによって選択できます。例えば
双方向 RTS/CTS フロー制御は RTSXOFF ビットと CTSXON ビットの両方をセットすることによって選択する
ことができます。単方向 CTS ハードウェアフロー制御は CTSXON ビットのみをセットすることによって選択
することができます。
RTSXOFF がセットされている場合は、Request to Send (RTS) 回路(ライン)が raise され、非同期のポートが入
力を中断して欲しい場合は Request to Send (RTS) ラインが lower されます。 RTS ラインが lower された場合
は、それに接続されたデバイスは RTS が raise されるまで出力を中断します。
CTSXON がセットされている場合は、Clear To Send (CTS) 回路(ライン)が接続されたデバイスに raise されて
いるときのみ、出力が行われます。 CTS ラインが接続されたデバイスに lower されているときは、 CTS が
raise されるまで出力は中断されます。
termiox 構造体関連の IOCTL コマンド
termiox 構造体を使用する ioctl() システムコールは以下のような形式になります。
ioctl (fildes, command, arg)
struct termiox *arg;
コマンドの形式は以下のとおりです。
TCGETX
引き数は termiox 構造体へのポインタです。現在のターミナルパラメータがフェッチ
されてこの構造体にしまわれます。
TCSETX
引き数は termiox 構造体へのポインタです。現在のターミナルパラメータがこの構造
体で与えられた値に設定されます。変更はただちに行われます。以下のエラーが返さ
れる場合があります。
[EINVAL]
ポートがハードウェアフロー制御をサポートしていません。
[ENOTTY]
そのポートのファイル記述子は CCITT モードのアクセス用に設定され
ています。ハードウェアフロー制御は CCITT モードのデバイスでは利
用できません。
TCSETXW
引き数は termiox 構造体へのポインタです。現在のターミナルパラメータがこの構造
体で与えられた値に設定されます。変更は出力キューにしまわれたすべての文字が転
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-287
termiox(7)
termiox(7)
送された後に行われます。この形式は出力に影響を与えるパラメータを変更するとき
に使用されます。以下のエラーが返される場合があります。
[EINVAL]
ポートがハードウェアフロー制御をサポートしていません。
[ENOTTY]
そのポートのファイル記述子は CCITT モードのアクセス用に設定され
ています。ハードウェアフロー制御は CCITT モードのデバイスでは利
用できません。
TCSETXF
引き数は termiox 構造体へのポインタです。現在のターミナルパラメータがこの構造
体で与えられた値に設定されます。変更は出力キューにしまわれたすべての文字が転
送され、入力キューの中の文字が破棄された後に行われます。以下のエラーが返され
る場合があります。
[EINVAL]
ポートがハードウェアフロー制御をサポートしていません。
[ENOTTY]
そのポートのファイル記述子は CCITT モードのアクセス用に設定され
ています。ハードウェアフロー制御は CCITT モードのデバイスでは利
用できません。
著者
termiox はHPとAT&Tで開発されました。
ファイル
/dev/tty* あるいはその下のディレクトリのファイル
参照
ioctl(2), termio(7), modem(7)
Section 7-288
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
timod(7)
timod(7)
名称
timod − ioctl()呼び出しをトランスポートインタフェース
メッセージへ変換するSTREAMSモジュール
説明
timod モジュールは、トランスポートインタフェース(TI)をサポートしているトランスポートユーザーからの
ioctl() 呼び出しを、TIをサポートしているトランスポートプロトコル提供者が受け付け可能なメッセージに変
換するSTREAMSモジュールです。これによってユーザーは、特定のTI関数を独立したオペレーションのよう
に起動することが可能になります。このリリースのHP-UXでは、 t_open(3) を実行する時点で、 timod の自動
プッシュは行いません。 TLIおよびXTIの各ライブラリは、このモジュールがなくても、本マニュアルページ
で説明する最小単位の操作を実行できるように修正されています。カーネルの中にモジュールが確保されてい
るので、バイナリ互換の問題はありません。ただし、再コンパイルの必要なアプリケーションで、自動プッ
シュを要求するものについては、コードを修正しないと正しく動作しない場合があります。
ユーザーは、STREAMS I_PUSH ioctl() および I_POP ioctl() 関数を呼び出すことにより、 timod モジュールを
デバイスストリーム上にプッシュまたはデバイスストリーム上から削除します(TLI関数 t_open() は、ユーザー
に代って timod をデバイスストリーム上にプッシュします)。 timod モジュールをプッシュするストリーム
は、トランスポートインタフェースに適合しているトランスポート提供者が一端を占めていなければなりませ
ん。 tirdwr(7) は timod に対するもう1つのインタフェースで、 read() および write() システムコールをサポー
トします。 tirdwr がストリーム上へプッシュされていた場合、ユーザーは timod をプッシュする前に、
I_POP ioctl を使用して tirdwr モジュールをストリームから削除しなければなりません。
timod は、以下に示す ioctl() コマンドが生成するメッセージ以外のSTREAMSメッセージを、隣のモジュール
またはドライバーへ透過的に渡します。 timod は、 strioctl.ic_cmd フィールドが以下の値である I_STR ioctl()
を処理します( I_STR ioctl および strioctl 構造体について、詳細は streamio(7) を参照)。
TI_BIND
このTIコマンドは、アドレスをトランスポートプロトコル提供者にバインドします。本モ
ジュールが TI_BIND ioctl() 呼び出しに対して発行するSTREAMSメッセージは、 TIメッセー
ジタイプ T_bind_req と等価です。 TI_BIND ioctl() 呼び出しが正常終了したことへの応答と
して本モジュールが戻すSTREAMSメッセージは、TIメッセージタイプ T_bind_ack と等価で
す。
TI_UNBIND
このTIコマンドは、トランスポートプロトコル提供者へのアドレスのバインドを解除しま
す。本モジュールが TI_UNBIND ioctl() 呼び出しに対して発行するSTREAMSメッセージは、
TIメッセージタイプ T_unbind_req と等価です。 TI_UNBIND ioctl() 呼び出しが正常終了した
ことへの応答として本モジュールが戻すSTREAMSメッセージは、TIメッセージタイプ
T_ok_ack と等価です。
TI_GETINFO
このTIコマンドは、トランスポートプロトコル提供者から、 TIプロトコル固有の情報を取り
出します。本モジュールが TI_GETINFO ioctl() 呼び出しに対して発行するSTREAMSメッ
セージは、 TIメッセージタイプ T_info_req と等価です。 TI_GETINFO ioctl() 呼び出しが正
常終了したことへの応答として本モジュールが戻すSTREAMSメッセージは、TIメッセージタ
イプ T_info_ack と等価です。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-289
timod(7)
timod(7)
TI_OPTMGMT このTIコマンドは、トランスポートプロトコル提供者との間で、TIプロトコル固有のオプ
ションの取り出し、設定、およびネゴシエーションを行います。本モジュールが TI_OPTMGMT ioctl() 呼び出しに対して発行するSTREAMSメッセージは、 TIメッセージタイプ
T_optmgmt_req と等価です。 TI_OPTMGMT ioctl() 呼び出しが正常終了したことへの応答と
して本モジュールが戻すSTREAMSメッセージは、TIメッセージタイプ T_optmgmt_ack と等
価です。
戻り値
timod モジュールが ioctl() 呼び出しに対してエラーを戻す場合、戻り値の下位8ビットには <tiuser.h> ヘッダ
ファイルで定義されているTIエラーコードが設定されています。 TIエラーのタイプがTSYERRの場合は、戻り
値の次の8ビットに <errno.h> ヘッダファイルで定義されているエラーが設定されています。 ioctl() 呼び出し
でエラーが発生したときに本モジュールが発行する STREAMSメッセージは、TIメッセージタイプ
T_error_ack と等価です。
ファイル
<xti.h>
XTI関数のエラーコードを定義します。
<tiuser.h>
TI関数のエラーコードを定義します。
<tihdr.h>
TI関数のメッセージタイプを定義します。
<errno.h>
システムエラーのエラーコードを定義します。
参照
ioctl(2), t_open(3), streamio(7), tirdwr(7)
Section 7-290
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
tirdwr(7)
tirdwr(7)
名称
tirdwr − トランスポートインタフェース ユーザーによる読み取り/書き込み用STREAMSモジュール
説明
tirdwr モジュールは、トランスポートインタフェース(TI)をサポートしているトランスポートユーザーに対
し、 TIをサポートしているトランスポートプロトコル提供者へのもう1つのインタフェースを提供する
STREAMSモジュールです。この別のインタフェースによってトランスポートユーザーは、 read() および
write() 関数を使用してトランスポートプロトコル提供者と通信できるようになります。 putmsg() および
getmsg() 関数を続けて使用することも可能ですが、これらの関数はユーザープロセスとデバイスストリーム間
でしかデータメッセージの転送を行いません。 getpmsg() および putpmsg() は、 tirdwr と一緒に使用するべき
ではありません。
ユーザーはSTREAMS I_PUSH ioctl() 関数を呼び出すことによって、 tirdwr モジュールをデバイスストリーム
上にプッシュします。 tirdwr は timod(7) に対するもう1つの別のインタフェースです。 timod がストリーム上
へプッシュされていた場合、ユーザーは tirdwr をプッシュする前に、 I_POP ioctl を使用して timod モジュー
ルをストリームから削除しなければなりません。 tirdwr モジュールをプッシュするストリームは、トランス
ポートインタフェースに適合しているトランスポート提供者が一端を占めていなければなりません。本モ
ジュールがデバイスストリーム上にプッシュされると、その後ユーザーはTI関数を呼び出すことができなくな
ります。ユーザーがTI関数を呼び出そうとすると、ストリーム上でエラーが発生します。エラーが検出される
と、その後の呼び出しは異常終了し、 errno が[EPROTO]に設定されます。ユーザーは、デバイスストリーム
から tirdwr モジュールを削除するためには、STREAMS I_POP ioctl() 関数を呼び出します。
プッシュおよびポップ時のモジュールの動作
tirdwr モジュールは、デバイスストリーム上にプッシュされるとき、宛先がユーザーの既存のメッセージを
チェックして、そのメッセージタイプを調べます。既存のメッセージが通常のデータメッセージならば、その
メッセージをユーザーに転送します。プロセス管理に関係するメッセージ、例えば、ユーザーに対してシグナ
ルを生成するメッセージなどは、すべて無視します。それ以外のメッセージが存在すれば、ユーザーの要求に
対してエラーを戻し、 errno を[EPROTO]に設定します。
tirdwr モジュールは、デバイスストリームからポップされるとき、トランスポートプロトコル提供者から正常
リリース指示をすでに受信しているかどうかをチェックします。正常リリース指示を受信していた場合は、正
常リリース要求をトランスポートコネクションのリモート側に送信します。 tirdwr モジュールは、デバイスス
トリームのクローズ時にもこの動作を実行します。
読み取りおよび書き込み時のモジュールの動作
tirdwr モジュールは、トランスポートプロトコル提供者から制御部を含まないメッセージを受信すると(
putmsg(2) および getmsg(2) 参照ページを参照)、そのメッセージを上流の隣へ透過的に渡します。例外はゼロ長
のデータメッセージで、本モジュールはこのようなメッセージを解放し、上流へ渡すことはしません。
本モジュールは、トランスポートプロトコル提供者から制御部を含むメッセージを受信すると、以下の動作の
うちの1つを実行します。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-291
tirdwr(7)
tirdwr(7)
制御部付きのデータメッセージに対しては、制御部を削除し、それからそのメッセージを上流の隣へ
渡します。
優先データを表しているメッセージに対しては、エラーを生成します。それ以降のシステムコールは
errno を[EPROTO]に設定して異常終了します。
トランスポートプロトコル提供者からの正常リリース指示を表しているメッセージに対しては、ファ
イルの終り(EOF)を示すゼロ長データメッセージを生成し、このメッセージを上流の読み取り中プロセ
スへ渡します。正常リリース指示が格納された元のメッセージは解放されます。
トランスポートプロトコル提供者からの強制的接続解除指示を表しているメッセージに対しては、こ
れ以降の write() および putmsg() 呼び出しが、 errno を[ENXIO]に設定して異常終了するようにしま
す。これ以降の read() および getmsg() 呼び出しは、残っていたデータをすべて読み取った後は、ファ
イルの終り(EOF)を示すゼロ長データメッセージを戻します。
上記以外のメッセージに対しては、エラーを生成し、それ以降の呼び出しは errno を[EPROTO]に設定
して異常終了するようにします。
参照
getmsg(2), putmsg(2), read(2), write(2), t_open(3), streamio(7), timod(7).
Section 7-292
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
tty(7)
tty(7)
名称
tty − 制御ターミナルインタフェース
説明
/dev/tty ファイルは各プロセスごとに存在し、そのプロセスのプロセスグループの制御ターミナルの別名とな
ります。これはプログラムやシェルのコマンド列が、出力のリダイレクトに関係なくターミナルにメッセージ
を出力したいときに役立ちます。さらに、出力の表示が必要だが現在使用しているターミナルを探すのが面倒
なときにも、出力先のファイル名として指定することができます。
ファイル
/dev/tty
/dev/tty∗
参照
termio(7)
標準準拠
tty: AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-293
UDP(7P)
UDP(7P)
名称
UDP − インターネット ユーザーデータグラム プロトコル
構文
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AF_INET, SOCK_DGRAM, 0);
s = socket(AF_INET6, SOCK_DGRAM, 0);
説明
UDP は、単純で信頼性の保証されないデータグラム プロトコルであり、インターネットプロトコル ファミリ
中の SOCK_DGRAM ソケットをサポートするものです。 UDP ソケットは連結を確立しないソケットで、通常
は sendto() と recvfrom() 呼び出しを用いてデータのやりとりを行います (send(2) と recv(2) を参照)。また connect() 呼び出しを使って連結確立のシミュレーションを行うこともできます (connect(2) を参照)。この場合は、
どこからパケットを受け取るかを指定できるだけではなく、将来的に send() あるいは write() システムコール
でパケットが転送される宛先を固定することができます。 recv() および read() 呼び出しは、送られるメッセー
ジがさほど重要でない場合に使われます。
UDP のアドレス形式は TCP で用いられるものと同じです。さらに UDP は通常のインターネットアドレス形式
に加えて、ポート識別子を持っています。ただし UDP ポートドメインと TCP ポートドメインは別のものであ
り、 UDP ポートは TCP ポートに接続できないので注意してください。
UDP ソケットのデフォルトの送信バッファーサイズは 65535 バイトです。UDP ソケットのデフォルトの受信
バッファーサイズは 2147483647 バイトです。UDP ソケットの送信および受信バッファーのサイズは、 setsockopt() システムコールの SO_SNDBUF および SO_RCVBUF オプション、または t_optmgmt() システムコー
ルの XTI_SNDBUF および XTI_RCVBUF オプションを使って設定できます。これらのバッファーの最大サイ
ズは 2147483647 バイトです。最大受信バッファーサイズは、 ndd のパラメータ udp_recv_hiwater_max を
使って小さくすることができます。
UDP データグラムソケットの最大メッセージサイズは、IP データグラムの最大サイズと UDP データグラムソ
ケットのバッファーサイズの小さい方によって制限されます。UDP メッセージの最大メッセージサイズは、IP
データグラムの最大サイズによって 65507 バイトに制限されます。したがって、ソケットバッファーの最大サ
イズを使うと、複数の最大サイズのメッセージを送信キューに置くことができます。UDP データグラムソケッ
トに対する受信および送信メッセージサイズの最大値のデフォルトは 65535 バイトです。
UDP ブロードキャストの最大メッセージサイズは、現状リンクの MTU サイズに制限されます。
エラー
ソケット操作が異常終了すると、次のエラーが errno に返されることがあります。エラーリストの詳細につい
ては、個々のシステムコールのマニュアルを参照してください。
Section 7-294
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
UDP(7P)
UDP(7P)
[EISCONN]
データグラムの送信を試みた宛先アドレスのソケットがすでに別の連結を
持っています。
[ENOBUFS]
内部データ構造用に使用できるバッファスペースがありません。
[EADDRINUSE]
作成を試みたソケットのポートが、すでに他のソケットに割り当てられてい
ます。
[EADDRNOTAVAIL]
作成を試みたソケットのネットワークアドレスに対応するネットワークイン
タフェースが存在しません。
警告
IPv6 は、オプションの IPv6 ソフトウェアがインストールされている HP-UX 11i バージョン 1.0 でサポートさ
れます。現在、HP-UX 11i バージョン 1.6 を実行しているシステムでは、IPv6 はサポートされません。
著者
UDPへのソケットインタフェースはカリフォルニア大学バークレー校で開発されました。
参照
ndd(1M), getsockopt(2), recv(2), send(2), socket(2), t_open(3), t_optmgmt(3), inet(7F), socket(7)
RFC 768
User Datagram Protocol
RFC 1122
Requirements for Internet hosts
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-295
UNIX(7P)
UNIX(7P)
名称
UNIX − ローカル通信ドメインプロトコル
構文
#include <sys/types.h>
#include <sys/un.h>
説明
一般に Unix ドメインプロトコルと言われるローカル通信ドメインプロトコルです。このプロトコルでは、パ
ス名のアドレスフォーマットと、 AF_UNIX アドレスファミリを使用します。このプロトコルは、同じノード
上で実行されるプロセス間の通信で、インターネットプロトコル ファミリ(TCP/IP または UDP/IP) の代りに
使用することができます。これを使用すると、ローカル IP ループバックの場合に比べ、実行の
オーバヘッドが少ないために、非常に高いスループットが得られます。データは、データリンク層
(OSI Level 2) ではなくトランスポート層 (OSI Level 4) でループバックされます。
AF_UNIX アドレスファミリでサポートされるのは SOCK_STREAM だけです。
ローカル通信ドメインプロトコルの HP-UX 実現仕様では、 recv() (recv(2) を参照) および send() (send(2) を参
照) の MSG_OOB フラグはサポートしません。
アドレッシング
AF_UNIX ソケットアドレスはパス名です。その長さは最後のnullバイトを含めて最大92バイトです。
AF_UNIX ソケットに対する bind() の呼出しでは、 structsockaddr_un 構造体を使用します(詳しくは bind(2) を
参照)。この構造体へのポインタは、 struct sockaddr に対するポインタが必要となるすべての AF_UNIX ソ
ケット システムコールで必ず使用します。
<sys/un.h> インクルードファイルで、この構造体は定義されています。この構造体の中には、注目すべき
フィールドが 2つあります。 1つは sun_family で、これは AF_UNIX にセットされなければなりません。もう1
つは sun_path です。これはnullで終了する文字列で、ソケットに対応するファイルのパス名 (例えば
/tmp/mysocket) を指定します。
アドレスにバインドする必要のあるのは、受け側の(listenを行う)ソケットだけです。接続要求を行う側のソ
ケットは、このアドレスに対して接続を行いますが、ソケット自身のアドレスは必要はありません。
AF_UNIX ソケットを用いたプロセス間通信の詳細については、 BSD ソケットインタフェース プログラマガイ
ドを参照してください。
ソケット バッファサイズ
ストリームソケットとデータグラムソケットの場合、最大の送信および受信バッファサイズは 262142 バイト
です。デフォルトのバッファサイズは、32768 バイトです。送信および受信バッファサイズは、 setsockopt()
システムコールの SO_SNDBUF と SO_RCVBUF オプションを使用して変更することができます。詳しくは
getsockopt(2) を参照してください。
Section 7-296
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
UNIX(7P)
UNIX(7P)
著者
AF_UNIX はカリフォルニア大学バークレー校で開発されました。
参照
getsockopt(2), socket(2)
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-297
vlan(7)
vlan(7)
名称
vlan - 仮想 LAN (VLAN)
構文
/usr/sbin/lanadmin -V create vlanid vlanid [pri priority] [tos ToS_value]
[vppa vppa] [name name] [tos_override level] [pri_override level] ppa
/usr/sbin/lanadmin -V delete vppa
/usr/sbin/lanadmin -V modify [vlanid vlanid] [pri priority] [tos ToS_value]
[name name] [tos_override level] [pri_override level] vppa
/usr/sbin/lanadmin -V scan
/usr/sbin/lanadmin -V info vppa
/usr/sbin/lanadmin -V basevppa
/usr/sbin/lanadmin -V help
/usr/sbin/lanadmin lanadmin -p ppa
説明
VLAN は論理的、または "仮想" ネットワークセグメントのことで、複数の物理ネットワークをまたぐことが
できます。 VLAN の最大の利点は、どの目的地がどのトラフィックを受け取るかを決定することによって、ブ
ロードキャストとマルチキャストのトラフィックを分ける事ができ、これによりスイッチとエンドステーショ
ンのリソースを効率良く使用することができます。
ここでは、HP-UX 仮想 LAN(VLAN) の対話型管理を行うコマンドについて説明しています。
lanadmin の -V コマンドを使って対話的に VLAN を変更した場合、システムをリブートするとその変更は保存
されません。リブート後も変更を保存しておきたい場合は、 SAM インタフェースを使用するか、 /etc/rc.config.d/vlanconf 構成ファイルを手動で編集しなくてはいけません。
lanadmin -V
VLAN の作成、変更、削除、問い合わせをする lanadmin オプションです。
lanadmin -p
上位レイヤープロトコルまたはアプリケーションが実行されているかどうかを確認する
lanadmin オプションです (VLAN を削除する前に使用します)。
lanadmin オプション
lanadmin コマンドの VLAN に関するのオプションは次の通りです。
lanadmin -V create vlanid vlanid [pri priority] [tos ToS_value] [vppa vppa] [name name] [tos_override level]
[pri_override level]
VLAN の ID、 vlanid 、は VLAN がどのフレームに属しているか識別します。 vlanid の有効な範囲は
0 から 4094です。
Section 7-298
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
vlan(7)
vlan(7)
landamin -V create のコマンドオプションは次の通りです。
pri priority
priority はフレームヘッダ内のタグの 802.1p 優先順位です。スイッチは 802.1p 優先
順位を使用します。 priority の有効な範囲は 0 から 7 で、デフォルト値は 0 です。
tos ToS_value
ToS は IP ヘッダの IP 優先順位です。スイッチは IP 優先順位を無視します。ルー
ターはこの値を使用します。有効な範囲は 0 から 255 で、デフォルト値は 0 です。
vppa vppa
仮想 PPA (VPPA) は VLAN に関連付けられた PPA です。どちらもユニークなハード
ウェアインスタンスを持たないので仮想です。
name name
VLAN の名前です ( オプション )。VLAN の名前のデフォルト値はヌル文字列 ("") で
す。しかし lanadmin では UNNAMED と表示されます。
tos_override level
ToS override は、着信 IP パケットのヘッダにある IP レベル優先順位を無視する機能
を提供します。着信トラフィックへの ToS override レベル文字列は次の通りです。
pri_override level
IP_HEADER
IP ヘッダ内の ToS 値が使用されます。
ETHER_HEADER
Ether ヘッダの 802.1p 優先順位が ToS 値に変換されます。
CONF_TOS
指定した ToS 値が使用されます。
CONF_PRI
指定した 802.1 優先順位の値が ToS 値に変換されます。
priority override は IP レベル優先順位 (IPV4 ToS オクテット) をリンクレベル 802.1p
ユーザー優先順位に変換します。 priority override は発信フレームにのみ適用されま
す。発信トラフィックへの priority override レベル文字列は次の通りです。
CONF_PRI
指定した優先順位の値が使用されます。
IP_HEADER
IP ヘッダの ToS が 802.1p 優先順位に変換されます。
CONF_TOS
指定した ToS 値が 802.1 優先順位に変換されます。
lanadmin -V scan
全ての VLAN とそのプロパティを検出します。
lanadmin -V info vppa
1つの VLAN とそのプロパティを検出します。このコマンドは、成功すると 0 を、失敗すると -1 を返
します。
lanadmin -V basevppa
仮想 PPA (VPPA) の適用可能な最小値を取得します。
lanadmin -p
lanadmin 上位レイヤープロトコルまたはアプリケーションが実行されているかどうかを確認するオプ
ションです (VLAN を削除する前に使用します)。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-299
vlan(7)
vlan(7)
lanscan オプション
lanscan コマンドは、 lan0, lan1 のようにシステム上で使用可能なインタフェースの数を示します。次の、 lanscan オプションは VLAN の情報を表示するのに使うことができます。
lanscan -a
システム上の全インタフェースの MAC アドレスを表示します。
lanscan -i
システム上の全インタフェースの名前を表示します。
lanscan -m
全インタフェースの MAC タイプを表示します。
lanscan -n
全インタフェースのネットワーク管理 ID を表示します。
lanscan -p
全インタフェースの PPA または VPPA 番号を表示します。
lanscan -v
詳細表示モードで詳細情報を表示します。
例
ここでは、新規と既存の lanadmin コマンドと lanscan コマンドについてと仮想 LAN (VLAN) 上での使用法を
説明します。
VLAN の作成
VLAN が LAN カードと関連付けられているとき、 lanscan の出力では、ハードウェアパスの下に VLANx と
表示されます ( x はユニークな VLAN インタフェース番号 )。
VLAN を作成するには、SAM または lanadmin create コマンドを使用します。 VLAN の作成には、必須の引き
数とオプションの引き数が複数あります。オプションの引き数が指定されていない場合は、マンページの最初
に示されているデフォルト値が使用されます。
ユーザーが VPPA 番号の最小値 (5000) より大きい仮想 PPA (VPPA) 番号を指定することも、システムに VPPA
番号の割当てを任せることも可能です。
例えば、新しい VPPA を PPA 0 上に VPPA を 6050、 vlanid を 4 で作成したい場合は、次のコマンドを実行し
ます。
# lanadmin -V create vlanid 4 vppa 6050 0
作成に成功すると次のようなメッセージが表示されます。
Successfully configured.
lan6050: vlanid 4 name UNNAMED pri 0 tos 0
tos_override IP_HEADER pri_override CONF_PRI ppa 0
このメッセージによって、システム上に VLAN 6050 が正しく作成されたことが分かります。 VLAN に名前を
割り当てなかった場合は、標準文字列 "UNNAMED" が名前として表示されます。
システムが VPPA を生成している間に PPA 1 上に VLAN を作成する場合は次のコマンドを実行します。
VLAN は lanid 75、優先順位 3、ToS 100、名前 honey、ToS override 値 CONF_TOS 、priority override 値
IP_HEADER で作成するものとします。
Section 7-300
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
vlan(7)
vlan(7)
# lanadmin -V create vlanid 75 pri 3 tos 100 name honey
tos_override CONF_TOS pri_override IP_HEADER 1
作成に成功すると次のようなメッセージが表示されます。
Successfully configured.
lan5000: vlanid 75 name honey pri 3 tos 100
tos_override CONF_TOS pri_override IP_HEADER ppa 1
システムは VPPA 5000 を割り当て、指定されたプロパティで VLAN の作成に成功しました。
次は別のプロパティで、インタフェース 1 上に VLAN を作成します。
# lanadmin -V create vlanid 76 pri 2 tos 200 name bee tos_override
ETHER_HEADER pri_override IP_HEADER 1
作成に成功すると次のようなメッセージが表示されます。
Successfully configured.
lan5001: vlanid 76 name bee pri 2 tos 200
tos_override ETHER_HEADER pri_override IP_HEADER ppa 1
PPA 0 上の VLAN 5060、PPA 1 上の VLAN 5000 と 5001 の作成に成功した後のシステムで lanscan 、 lanadmin
-V scan 、 lanscan -v のスナップショットは次のようになっています。
# lanscan
Hardware
Station
Crd
Hdw
Net-Interface
NM
MAC
HP-DLPI
DLPI
Path
Address
In#
State
NamePPA
ID
Type
Support
Mjr#
0/4/0/0
0x001083FF9951
0
UP
lan0
snap0
1
ETHER
Yes
119
VLAN6050
0x001083FF9951
6050
UP
lan6050 snap6050
14
ETHER
Yes
119
1/4/0/0
0x006023456789
1
DOWN
lan1
snap1
2
ETHER
Yes
119
VLAN5000
0x006023456789
5000
DOWN
lan5000 snap5000
15
ETHER
Yes
119
VLAN5001
0x006023456789
5001
DOWN
lan5001 snap5001
16
ETHER
Yes
119
上記の出力について、次の点に注意して下さい。
•
VPPA は ( x がユニークな番号 )、ハードウェアパスとして VLANx を持っています。
•
VPPA は、それが作成された PPA と同じ MAC アドレスになります。
•
VPPA は、それが作成された PPA と同じハードウェア状態になります。
•
VPPA は関連付けられた PPA を持っています。
•
lanscan 出力では、VPPA 情報は、それが作成された PPA の直後に表示されます。例えば、VLAN0 の情
報は lan0 の後に表示されます。 VLAN1 と VLAN2 の情報は lan1 の後に表示されます。VLAN1 と
VLAN2 は lan1 と関連付けられているからです。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-301
vlan(7)
vlan(7)
上記のスナップショットでは表示されていませんが、VPPA とそれが作成された PPA に共通なプロパティに速
度と MTU 設定があります。 lanadmin コマンドを使って、速度と MTU を確認することができます。
lanadmin -a vppa
lanadmin -s vppa
lanadmin -m vppa
lanadmin -V scan と lanscan -p の出力は次のようになります。
# lanadmin -V scan
VLAN
Physical
VLAN
Interface
Interface
ID
Pri
Pri
ToS
lan6050
lan0
4
0
CONF_PRI
0
IP_HEADER
UNNAMED
lan5000
lan1
75
3
IP_HEADER
100
CONF_TOS
honey
lan5001
lan1
76
2
IP_HEADER
200
ETHER_HEADER
bee
Override
Name
ToS
NAME
Override
Level
Level
# lanscan -p
0
6050
1
5000
5001
また、特定の VPPA の情報を取得するには、 lanadmin -V info vppa コマンドを使用することもできます。
VPPA 6050 の情報を取得する場合、次のコマンドを実行します。
# lanadmin -V info 6050
VLAN
Physical
VLAN
Interface
Interface
ID
lan0
4
Pri
Name
lan6050
Pri
ToS
Override
Level
0
CONF_PRI
ToS
NAME
Override
Level
0
IP_HEADER
UNNAMED
info コマンドの結果として VPPA 6050 に関連した情報のみが表示されることに注意して下さい。
次は lanscan -v 出力についてです。簡略して、lan0、lan1、新規に作成された VPPA からの出力だけが表示さ
れています。
# lanscan -v
Hardware
Station
Crd
Hdw
Net-Interface
NM
MAC
HP-DLPI
DLPI
Path
Address
In#
State
NamePPA
ID
Type
Support
Mjr#
Section 7-302
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
vlan(7)
vlan(7)
0/4/0/0
0x001083FF9951
0
UP
lan0 snap0
1
ETHER
Yes
119
Extended Station
LLC Encapsulation
Address
Methods
0x001083FF9951
IEEE HPEXTIEEE SNAP ETHER NOVELL
Driver Specific Information
gelan
Hardware
Station
Crd
Hdw
Net-Interface
NM
MAC
HP-DLPI
DLPI
Path
Address
In#
State
NamePPA
ID
Type
Support
Mjr#
VLAN6050
0x001083FF9951
6050
UP
lan6050 snap6050
14
ETHER
Yes
119
Extended Station
LLC Encapsulation
Address
Methods
0x001083FF9951
IEEE HPEXTIEEE SNAP ETHER NOVELL
Driver Specific Information
vlan
Vlan ID
Phy-PPA
Priority
0
0
4
ToS
Priority-Override
ToS-Override
Name
0
CONF_PRI
IP_HEADER
UNNAMED
Hardware
Station
Crd
Hdw
Net-Interface
NM
MAC
HP-DLPI
DLPI
Path
Address
In#
State
NamePPA
ID
Type
Support
Mjr#
1/4/0/0
0x006023456789
1
DOWN
lan1 snap1
1
ETHER
Yes
119
Extended Station
LLC Encapsulation
Address
Methods
0x006023456789
IEEE HPEXTIEEE SNAP ETHER NOVELL
Driver Specific Information
btlan
Hardware
Station
Crd
Hdw
Net-Interface
NM
MAC
HP-DLPI
DLPI
Path
Address
In#
State
NamePPA
ID
Type
Support
Mjr#
VLAN5000
0x006023456789
5000
DOWN
lan5000 snap5000
15
ETHER
Yes
119
Extended Station
LLC Encapsulation
Address
Methods
0x006023456789
IEEE HPEXTIEEE SNAP ETHER NOVELL
Driver Specific Information
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-303
vlan(7)
vlan(7)
vlan
Vlan ID
Phy-PPA
Priority
ToS
Priority-Override
ToS-Override
Name
75
1
3
64
CONF_PRI
IP_HEADER
honey
Hardware
Station
Crd
Hdw
Net-Interface
NM
MAC
HP-DLPI
DLPI
Path
Address
In#
State
NamePPA
ID
Type
Support
Mjr#
VLAN5001
0x006023456789
5001
DOWN
lan5001 snap5001
15
ETHER
Yes
119
Extended Station
LLC Encapsulation
Address
Methods
0x006023456789
IEEE HPEXTIEEE SNAP ETHER NOVELL
Driver Specific Information
vlan
Vlan ID
Phy-PPA
Priority
ToS
Priority-Override
ToS-Override
Name
1
2
200
IP_HEADER
ETHER_HEADER
bee
76
VPPA に IP アドレスを構成することができます。ここでは、VPPA 6050 を IP アドレス 192.1.1.1 に構成しま
す。 PPA と同様に、ifconfig コマンドを使って構成することができます。
# ifconfig lan6050 192.1.1.1 netmask 0XFFFFF800 up
lanscan -v、 lanscan、 lanadmin -V info、 lanadmin -V scan のスナップショットはそのまま残っています。
VLAN の変更
VLAN がトラフィックをサポートしている間も、VLAN を変更することができます。 vlanid が変更された場
合、トラフィックは変更前の vlanid ではなく、新しい vlanid に送受信されます。
ここでは、既存の VPPA のプロパティを変更し、 lanadmin と lanscan コマンド出力の対応する変化について
見ていきます。まず、VPPA 6050 の vlanid、優先順位、名前を変更します。次のコマンドを実行すると、VPPA
6050 の vlanid が 4 から 100 へ、優先順位が 0 から 7 へ、名前がデフォルト値から "candy" へ変更されます。
# lanadmin -V modify vlanid 100 priority 7 name candy 6050
Successfully modified lan6050.
Old value: vlanid 4 pri 0 name UNNAMED
New value: vlanid 100 pri 7 name candy
次に、VPPA 5000 のプロパティ tos、tos_override、pri_override を変更します。次のコマンドを実行すると、tos
が 100 から 64へ、tos_override が CONF_TOS から IP_HEADERへ、pri_override が IP_HEADER から
CONF_PRI へ変更されます。
# lanadmin -V modify tos 64 tos_override IP_HEADER pri_override CONF_PRI
5000
Section 7-304
Hewlett-Packard Company
−7−
HP-UX 11i Version 2: September 2004
vlan(7)
vlan(7)
Successfully modified lan5000.
Old value: tos 100 tos_override CONF_TOS pri_override IP_HEADER
New value: tos 64 tos_override IP_HEADER pri_override CONF_PRI
PPA 0 上の 2 VPPAs: VPPA 6050 と PPA 1 上の VPPA 5000 の変更に成功した後のシステムの lanadmin -V scan、
lanadmin -V info、 lanscan -v スナップショットは次のようになっています。 lanscan スナップショットは変更
前と同じですが、 lanscan -v と lanadmin -V scan スナップショットは変化しています。
# lanadmin -V scan
VLAN
Physical
VLAN
Interface
Interface
ID
Pri
Name
Pri
ToS
ToS
Override
Override
Level
Level
NAME
lan6050
lan0
100
7
CONF_PRI
0
IP_HEADER
candy
lan5000
lan1
75
3
CONF_PRI
64
IP_HEADER
honey
lan5001
lan1
76
2
IP_HEADER
64
ETHER_HEADER
bee
また、特定の VPPA の情報を得るのに、 lanadmin -V info vppa コマンドを使用することもできます。 VPPA
6050 の情報を得たい場合、次のコマンドを実行します。
# lanadmin -V info 6050
VLAN
Physical
VLAN
Interface
Interface
ID
lan0
100
Pri
Name
lan6050
Pri
ToS
Override
Level
7
CONF_PRI
ToS
NAME
Override
Level
0
IP_HEADER
candy
VLAN の削除
VLAN を削除する前に、全てのアプリケーションや上位レイヤープロトコルが VLAN 上で起動していないこと
を、次のコマンドを実行して確認して下さい。
# lanadmin -p VPPA
このコマンドを実行すると、現在インタフェースが使用しているアプリケーションやコマンドが表示されま
す。例えば、lan5000 で IP アドレスの構成だけが行われている場合、 lanadmin -p の出力は次のようになりま
す。
# lanadmin -p 5000
ifconfig
ifconfig
ifconfig コマンドは IP アドレスを構成するのに使用されるので、ifconfig と表示されています。同じものが 2
つ表示されているのは、IPv4 を構成するのに ifconfig が使われますが、インタフェース上では IP と ARP の両
方を構成しているからです。
HP-UX 11i Version 2: September 2004
−8−
Hewlett-Packard Company
Section 7-305
vlan(7)
vlan(7)
IP と ARP ストリームを外すには、以下のコマンドを実行します。
# ifconfig lan5000 unplumb
再度 lanadmin -p 5000 を実行しても、何も表示されません。このようになればインタフェースを削除できま
す。この VLAN を削除するには、次のように delete オプションを使用してください。
# lanadmin -V delete 5000
lanadmin -p PPA コマンドは、インタフェース上で使用されている、または構成されているコマンドを表示し
ます。もうひとつの例として、lan5001 インタフェースを削除します。
# lanadmin -p 5001
ifconfig
ifconfig
mib2agt
scopeux
インタフェース上で構成されている IP と ARP に加え、2 つのアプリケーション mib2agt と scopeux がインタ
フェース上で使用されています。これらのアプリケーションは起動時に、それぞれ /sbin/rc2.d/S565SnmpMib2
と /sbin/rc2.d/S810mwa の起動スクリプトによって開始されます。これらのユーティリティを停止させるため
に、スクリプトの停止シーケンスを実行します。 lan5001 インタフェースを削除するために、次のコマンドを
実行します。
# ifconfig lan5001 unplumb
# /sbin/rc2.d/S565SnmpMib2 stop
# /sbin/rc2.d/S810mwa stop
今度は lanadmin -p 5001 を実行しても何も表示されません。これで、インタフェースを削除できます。
インタフェースを削除した後は、起動スクリプトの開始シーケンスを実行してユーティリティを開始します。
# /sbin/rc2.d/S565SnmpMib2 start
# /sbin/rc2.d/S810mwa start
注記:起動スクリプトの開始、停止シーケンスはシステム上の全てのインタフェースに影響しますので、削除が
完了したらすぐに再開させてください。
上記の例では制限がありません。インタフェースを使用するアプリケーションは、お使いの環境によって異な
ります。
警告
lanadmin -V コマンドを使って対話的に VLAN を変更した場合、システムをリブートするとその変更は保存さ
れません。リブート後も変更を保存しておきたい場合は、 SAM インタフェースを使用するか、 /etc/rc.config.d/vlanconf 構成ファイルを手動で編集しなくてはいけません。
Section 7-306
Hewlett-Packard Company
−9−
HP-UX 11i Version 2: September 2004
vlan(7)
vlan(7)
著者
lanadmin は、HP で開発されました。
参照
lanadmin(1M), lanscan(1M), 『Using HP-UX VLANs』
IEEE 802.1d, IEEE 802.1Q
HP-UX 11i Version 2: September 2004
− 10 −
Hewlett-Packard Company
Section 7-307
vxfsio(7)
vxfsio(7)
名称
vxfsio − VxFS ファイルシステムの制御関数
構文
#include <sys/types.h>
#include <sys/fs/vx_ioctl.h>
int ioctl(int fildes, int cmd, ... /∗ arg ∗/);
説明
vxfs ioctl(2) の拡張により、オープンしているファイルをさらに制御できるようになりました。
引き数 fildes には、オープンしているファイルの記述子を指定します。
データ型および arg には、 cmd で指定したコマンドのタイプに固有の値があります。特に指定のない限り、
arg は int 型として扱われます。コマンドとファイルのステータスフラグの記号名は、 sys/fs/vx_ioctl.h ヘッダ
ファイルで定義します。
注記
場合によっては、 fsadm_vxfs(fsadm_vxfs(1M)を参照) がファイルのエクステントマップを再編成し、連続性が
損なわれることがあります。ただし、固定のエクステントサイズとなっているファイルの形態が変更されるこ
とはありません。
コマンドとステータスフラグの記号名
コマンドとステータスフラグの記号名は sys/fs/vx_ioctl.h ヘッダーファイルで定義されています。利用可能な
VxFS ioctl は、以下のとおりです。
•
VX_FREEZE
•
VX_GET_IOPARAMETERS
•
VX_GETCACHE
•
VX_GETEXT
•
VX_GETFSOPT
•
VX_SETCACHE
•
VX_SETEXT
•
VX_THAW
VX_FREEZE
ファイルシステムの同期を取り、その後で凍結します。ファイルシステムをいったん凍結すると、
VX_THAW 操作を行うまで、そのファイルシステムには一切の操作が行えなくなります。引き数 arg
には、タイムアウト値を秒で指定します。指定したタイムアウト間隔内に VX_THAW 操作を行わない
と、ファイルシステムが自動的に VX_THAW を実行します。
Section 7-308
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
vxfsio(7)
vxfsio(7)
このコマンドは、適切な特権を持つユーザーのみがファイルシステムのルートディレクトリで使用で
きます。
ファイルシステムを正常に凍結すると、 VX_FREEZE ioctl は 0 (ゼロ)を返します。この操作にエラー
が起こると -1 を返し、外部変数の errno を汎用の診断値にセットします。
VX_GET_IOPARAMETERS
最適化されたアプリケーションI/O用のI/Oパラメータを取得します。引き数 arg は sys/fs/vxio.h で定義
されているタイプ vx_ioparameters の構造体へのポインタとなります。Direct I/O または Discovered
Direct I/O を使用するアプリケーションの最適I/O要求サイズが、この構造体に返されます。バッファ付
きI/Oを使ったアプリケーションには、I/O要求に対して stat で返される st_blksize 値を使用する必要が
あります。 VX_GET_IOPARAMETERS ioctl は 0(ゼロ)を返します。このパラメータにエラーが起こる
と -1 を返し、外部変数の errno を汎用の診断値にセットします。
vx_ioparameters 構造体のフィールドは以下のとおりです。
size_t vi_read_preferred_io; /* preferred read size in bytes */
size_t vi_read_nstream; /* num of preferred reads to stream */
size_t vi_read_unit_io; /* less preferred read size in bytes */
size_t vi_write_preferred_io; /* preferred write size in bytes */
size_t vi_write_nstream; /* num of preferred writes to stream */
size_t vi_write_unit_io; /* less preferred write size in bytes */
size_t vi_pref_strength; /* strength of preferences */
size_t vi_breakup_size; /* I/O breakup size in bytes */
size_t vi_align_offset; /* adj for alignment calculations */
dev_t vi_block_device; /* bdev number for this cdev */
Direct I/O または Discovered Direct I/O を有効にしようとするアプリケーションは、 vi_read_preferred_io と vi_read_nstream の積に等しい数の読み取り要求を出す必要があります。一般に、
vi_read_preferred_io と vi_read_nstream の積の倍数または累乗が、性能上良い値となります。書き込
みの場合も、 vi_write_preferred_io と vi_write_nstream パラメータに対して同じ規則があてはまりま
す。
アプリケーションがラージファイルに対して順次I/O操作を行っている場合は、ファイルシステムの
Discovered Direct I/O サイズよりも大きな I/O 要求を出す必要があります。これにより、Discovered
Direct I/O として I/O 要求が実行されます(Discovered Direct I/O要求は、Direct I/O と同様にバッファな
しの要求であり、ファイル拡張の際に同期を取りながらiノードを更新する必要がありません)。ファイ
ルがキャッシュよりも大きい場合は、バッファなしのI/Oを使用することで、多くの有用なデータが
キャッシュから捨てられることがなくなり、CPUのオーバーヘッドが低減されます。 Discovered Direct
I/O に関する情報は vxtunefs(1M) のマニュアルページを参照してください。
VX_GETCACHE
ファイルに対して有効なキャッシング通知を得ます。引き数 arg は、 int を指すポインタでなければな
りません。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 7-309
vxfsio(7)
vxfsio(7)
キャッシング通知を正しく得ると、 VX_GETCACHE ioctl は 0(ゼロ)を返し、通知を arg に返します。この操
作にエラーが起こると -1 を返し、外部変数の errno を汎用の診断値にセットします。
VX_GETEXT
エクステント情報を読み取り、 fildes に関連するエクステント情報を返します。引き数 arg は、
sys/fs/vx_ioctl.h に定義されている構造体の型 vx_ext をポイントしていなければなりません。持続性の
あるエクステント情報だけが表示可能です。
エクステント情報を正しく読み取ると、 VX_GETEXT ioctl は 0(ゼロ)を返します。この操作にエラー
が起こると -1 を返し、外部変数の errno を汎用の診断値にセットします。
VX_GETFSOPT
ファイルシステムのオプションを読み取ります。引き数 arg は int を指すポインタでなければなりませ
ん。ファイルシステム上でルートの iノードをオープンできるユーザーであれば、このコマンドを使用
することができます。 arg に返すオプションは、以下のとおりです。
VX_FSO_BLKCLEAR
新しく割り当てた全ブロックの内容はすべて 0 であることを保証します (mount_vxfs(1M) の
マウントオプション blkclear を参照)。
VX_FSO_CACHE_CLOSESYNC
iノードまたはデータの変更をロギングしていない場合、ファイルのクローズ時にディスク
にその変更を書き込みます (mount_vxfs(1M) のマウントオプション mincache=closesync を参
照)。
VX_FSO_CACHE_DIRECT
同期が取られていないI/Oを、ファイルに VX_DIRECT キャッシュ通知を設定しているとき
と同じように操作します。さらに、 iノードまたはデータの変更をロギングしていない場
合、ファイルのクローズ時にディスクにその変更を書き込みます (mount_vxfs(1M) のマウン
トオプション mincache=direct を参照)。
VX_FSO_CACHE_DSYNC
O_SYNC や VX_DIRECT の通知が設定されていない書き込みを、ファイルに VX_DSYNC
通知を設定しているときと同じように操作します。さらに、 iノードまたはデータの変更を
ロギングしていない場合、ファイルのクローズ時にディスクにその変更を書き込みます
(mount_vxfs(1M) のマウントオプション mincache=dsync を参照)。
VX_FSO_CACHE_TMPCACHE
遅延拡張書き込みが無効にされました。
iノードまたはデータの変更をロギングしていない場合、ファイルのクローズ時にディスク
にその変更は書き込まれません (mount_vxfs(1M) のマウントオプション mincache=tmpcache
を参照)。
Section 7-310
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
vxfsio(7)
vxfsio(7)
VX_FSO_CACHE_UNBUFFERED
同期が取られていないI/Oを、ファイルに VX_UNBUFFERED キャッシング通知を設定して
いるときと同じように操作します。さらに、 iノードまたはデータの変更をロギングしてい
ない場合、ファイルのクローズ時にディスクにその変更を書き込みます (mount_vxfs(1M) の
マウントオプション mincache=unbuffered を参照)。
VX_FSO_DELAYLOG
一部のシステムコールは、インテントログが書き込まれる前に戻ります (mount_vxfs(1M) の
マウントオプション delaylog を参照)。
VX_FSO_NODATAINLOG
同期書き込みを行うユーザーデータをインテントログに記録しません (mount_vxfs(1M) のマ
ウントオプション nodatainlog を参照)。
VX_FSO_NOLOG
ファイルシステムの構造的な変更をインテントログに記録しません (mount_vxfs(1M) のマウ
ントオプション nolog を参照)。
VX_FSO_OSYNC_CLOSESYNC
iノードまたはデータの変更をロギングしていない場合、 O_SYNC を指定してアクセスし
たファイルをクローズする時点で、ディスクにその変更を書き込みます (mount_vxfs(1M) の
マウントオプション convosync=closesync を参照)。
VX_FSO_OSYNC_DELAY
すべての O_SYNC 書き込みは直ちに行われず、遅延されます。ファイルのクローズ時に実
行される特定のアクションはありません。
VX_FSO_OSYNC_DIRECT
O_SYNC I/Oをすべて、ファイルに VX_DIRECT キャッシュ通知を設定しているときと同
じように操作します。さらに、 iノードまたはデータの変更をロギングしていない場合、
O_SYNC を指定してアクセスしたファイルをクローズする時点で、ディスクにその変更を
書き込みます (mount_vxfs(1M) のマウントオプション convosync=direct を参照)。
VX_FSO_OSYNC_DSYNC
O_SYNC 書き込みをすべて、ファイルに VX_DSYNC キャッシュ通知を設定しているとき
と同じように操作します。さらに、 iノードまたはデータの変更をロギングしていない場
合、 O_SYNC を指定してアクセスしたファイルをクローズする時点で、ディスクにその変
更を書き込みます (mount_vxfs(1M) のマウントオプション convosync=dsync を参照)。
VX_FSO_OSYNC_UNBUFFERED
O_SYNC I/Oをすべて、ファイルに VX_UNBUFFERED キャッシング通知を設定している
ときと同じように操作します。さらに、 iノードまたはデータの変更をロギングしていない
場合、 O_SYNC を指定してアクセスしたファイルをクローズする時点で、ディスクにその
変更を書き込みます (mount_vxfs(1M) のマウントオプション convosync=unbuffered を参
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 7-311
vxfsio(7)
vxfsio(7)
照)。
VX_FSO_SNAPPED
このファイルシステムに対するスナップショットのバックアップを保守します。
VX_FSO_SNAPSHOT
このファイルシステムは、別のファイルシステムのスナップショット バックアップです。
VX_FSO_TMPLOG
インテントログは通常、遅れて書き込まれます (mount_vxfs(1M) のマウントオプション
tmplog を参照)。
VX_FSO_VJFS
HP OnLineJFS 製品がインストールされていません。
ファイルシステムのオプションを正しく得ると、 VX_GETFSOPT ioctl は 0(ゼロ)を返します。この操
作にエラーが起こると -1 を返し、外部変数の errno を汎用の診断値にセットします。
VX_SETCACHE
キャッシング通知を設定します。これらの通知を使用することで、アプリケーションは最も効果的な
形式のキャッシングをファイルシステムに指示することができます。
注記: VX_SETCACHE が使用できるのは、HP OnLineJFS 製品だけに限られています。
arg の値をビット単位の OR 演算で結合することによって、複数の通知を設定できます。 arg に指定で
きる値は、以下のとおりです。
VX_DIRECT
読み取りと書き込みの操作に関連するデータを、キャッシュしないで直接、ユーザーが指
定したバッファーに、またはユーザーが指定したバッファーから転送します。このオプ
ションの使用時には、すべてのI/O操作はブロック境界で始まり、I/O操作の長さはブロック
サイズの倍数でなければなりません。I/O操作用のバッファーは、ワード境界で整列してい
なければなりません。
I/O要求が整列基準を満たしていない場合は、I/O要求をデータ同期I/O操作として実行しま
す。
VX_DSYNC
データ同期I/Oモードにします。データ同期I/Oモードでは、書き込み操作でデータを外部媒
体に転送した後、呼び出し元に戻ります。ただし、 iノードを更新する必要があるときを除
き、 iノードの同期を取りながら更新することはありません。
VX_NOREUSE
バッファー中のデータを保持しません。したがって、後でアプリケーションで使用するこ
とはできなくなります。
Section 7-312
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
vxfsio(7)
vxfsio(7)
VX_RANDOM
ファイルをランダムにアクセスします。先読みを行うことはできません。
VX_SEQ
ファイルを順次にアクセスします。最大先読みを行います。
VX_UNBUFFERED
読み取り/書き込みの操作に伴うデータを、ユーザーが指定したバッファーへ、またはユー
ザーが指定したバッファーから、キャッシングせずに直接転送します。整列の制約は
VX_DIRECT キャッシング通知に関連した制約と同一です。
ファイルが拡張されるかスペースがファイルへ割り当てられ、 VX_UNBUFFERED 通知が
設定された場合、書き込み動作から制御が返されるまで iノードはディスクへ同時に書き込
まれません。
VX_RANDOM と VX_SEQ キャッシング通知は相互に排他的です。同様に VX_DIRECT 、
VX_DSYNC 、 VX_UNBUFFERED のうち、1つだけを指定します。
VX_RANDOM 、 VX_SEQ および VX_NOREUSE のキャッシング通知は、ファイル単位で保持されま
す。1つのプロセスが通知を変更すると、そのファイルをアクセスしているプロセスすべてのI/O操作
が影響を受けます。
VX_DIRECT 、 VX_DSYNC 、および VX_UNBUFFERED のキャッシング通知は、開いているファイ
ルのインスタンス単位で保持されるので、1つのプロセスが通知を変更しても、別のプロセスによるこ
れらの通知の設定およびI/O操作には影響を与えません。
キャッシング通知を正しく設定すると、 VX_SETCACHE ioctl は 0(ゼロ)を返します。この操作にエ
ラーが起こると -1 を返し、外部変数の errno を汎用の診断値にセットします。
VX_SETEXT
エクステント情報を設定します。
注記: VX_SETTEXT が使用できるのは、HP OnLineJFS 製品だけに限られています。
arg で指定したパラメーターに応じてエクステント情報を設定します。引き数 arg は、 sys/fs/vx_ioctl.h
に定義されている構造体のタイプ vx_ext をポイントします。 sys/fs/vx_ioctl.h には、以下のメンバーが
含まれています。
ext_size
reserve
a_flags
ext_size は、ブロック単位でファイルの固定のエクステントサイズを要求します。固定のエクステント
サイズが必要ない場合、0を指定してデフォルトの割り当て方針を使用します。ファイルの切り捨て
や確保されているスペースの割り当て解除によって現在の間接ブロックがすべて解放された場合を除
き、固定のエクステントサイズの変更は、間接ブロックを含んでいるファイルの効力がなくなった後
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 7-313
vxfsio(7)
vxfsio(7)
に行われます。
reserve は、ファイルに事前に割り当てるスペース量を設定します(ブロック単位)。 reserve の量が現
在確保している量より多い場合は、 reserve の量に合わせて、ファイルにスペースが追加されて割り当
てらます。 reserve の量が現在確保している量より少ない場合は、割り当てられるスペースが少なくな
ります。割り当て量が現在のファイルサイズより少なくなることはありません。
ファイルに確保する量を、要求プロセスの ulimit(2) より多くすることはできません。ただし、すでに
確保している量の方が多い場合、要求プロセスの ulimit(2) に削減されることはありません。既存の低
密度ファイル用にスペースを確保しても、空洞を埋め込むようにはブロックは割り当てられず、単に
ファイルの最後にブロックが割り当てられるだけです。したがって、ファイル内のブロック数よりも
確保した量の方が大きくなることがあります。
スペースの確保とはファイルに事前にスペースを割り当てることなので、確保する量はファイルのサ
イズとは無関係です。
a_flags は、確保するスペースのタイプを指示する場合に使用します。以下のものを指定できます。
VX_ALIGN
すべての新しいエクステントを、割り当てユニットの先頭に対して ext_size だけ相対する
境界に整列させます。 VX_CONTIGUOUS も設定している場合、この実行で割り当てられ
る 1つのエクステントは整列の制約の対象にはなりません。
VX_CHGSIZE
ファイルに直ちにスペースを確保します。スペースの確保により増量したサイズとブロッ
ク数情報を使用して、ファイルのオンディスク iノードを更新します。この操作は、適切な
特権を持っているユーザーだけに限られています。
VX_CONTIGUOUS
隣接するスペースを (1つのエクステントとして) 割り当てます。この後の割り当てでは
ext_size が固定のエクステントサイズとなりますが、このフラグに対しては効力がありませ
ん。ファイルが間接エクステントまで入り込むと、要求されたスペース量が間接エクステ
ントのサイズと同じでない限り、スペースの確保は正常に動作しません。空のファイルに
対して隣接する割り当てを要求した場合は、このようなことは発生しません。 VX_CHGSIZE ファイルに直ちにスペースを確保します。スペースの確保により増量したサイズとブ
ロック数情報を使用して、ファイルのオンディスク iノードを更新します。この操作は、適
切な特権を持っているユーザーだけに限られています。
VX_NOEXTEND
事前に割り当てられているスペースをすべて使用してしまうと、拡張ができないファイル
であることを示します。必要であれば、別に ioctl を実行することによって確保する量を増
やすことができますが、ファイルが自動的に拡張することはありません。
Section 7-314
Hewlett-Packard Company
−7−
HP-UX 11i Version 2: September 2004
vxfsio(7)
vxfsio(7)
VX_NORESERVE
ファイルに確保するスペースは、持続的に割り当てられているものではありません。この
スペースの確保情報でオンディスク iノードを更新することはないので、確保したスペース
はシステムクラッシュで消滅してしまいます。確保したスペースは、ファイルをクローズ
するまで、ファイルに関連付けられます。ファイルのクローズ時に現在のファイルサイズ
に調整されます。
VX_TRIM
確保するスペースの量を、ファイルをオープンしたプロセスが前回にそのファイルをク
ローズした時点でのファイルサイズに調整します。
エクステント情報を設定するには、ファイルへの書き込みパーミッションが必要ですが、ファイルを
オープンできるプロセスであれば、エクステント情報を得ることができます。エクステント情報は通
常のファイルだけに適用されます。1つのファイルで保持されるエクステント情報は 1セットだけで
す。 VX_ALIGN と VX_NOEXTEND の割り当てフラグだけが、ファイルで持続的に有効な属性で
す。有効性が持続される割り当てフラグは他にもありますが、割り当てフラグとして表示することは
できません。 VX_GETEXT ioctl で表示できるフラグは、 VX_ALIGN、 VX_NOEXTEND、および
VX_TRIM だけです。
エクステント情報を正しく設定すると、 VX_SETEXT ioctl は 0(ゼロ)を返します。この操作にエラー
が起こると -1 を返し、外部変数の errno を汎用の診断値にセットします。
VX_THAW
VX_FREEZE 操作によって凍結されているファイルシステムを操作できるようにします。引き数 arg
は、NULL でなければなりません。 VX_THAW 操作を出すプロセスが、ファイルシステムのルート
ディレクトリをオープンしていなければなりません。また、プロセス自体がファイルシステムをブ
ロックすることがないよう、ファイルシステムの凍結を行った後には、ファイルシステムをアクセス
しないようにしなければなりません。
このコマンドは、適切な特権を持つユーザーのみがファイルシステムのルートディレクトリで使用で
きます。
ファイルシステムを正常に解凍すると、 VX_THAW ioctl は 0(ゼロ)を返します。この操作にエラーが
起こると -1 を返し、外部変数の errno を汎用の診断値または診断セクションに表示されている診断に
セットします。
HP-UX 11i Version 2: September 2004
−8−
Hewlett-Packard Company
Section 7-315
vxfsio(7)
vxfsio(7)
例
以下の例では、 -o delaylog オプションでJFS ファイルシステムをマウントしたかどうかを確認するために、ア
プリケーションコードが VX_GETFSOPT をどのように使用できるかを示します。
int
arg = 0;
int
fd;
ioctl(fd, VX_GETFSOPT, &arg);
if (arg & VX_FSO_DELAYLOG) {
printf("FS mounted with delaylog option!\n");
}
診断
操作にエラーが起こると errno: の内、以下のいずれかの値が返されます。
EACCESS
呼び出し側のプロセスは、 fildes で指定したファイルを書き込みアクセスすることはできませ
ん。
EAGAIN
ファイルシステムは現在凍結されていません。
EBADF
The fildes 引き数が書き込み用にオープンするための有効なファイル記述子ではありません。
EFAULT
引き数に指定したアドレスが無効です。
EFBIG
このプロセスの最大ファイルサイズより大きいスペースを確保しようとしました。
EINVAL
コマンドまたは引き数が無効です。
EIO
操作を実行しようとした時点で、I/Oエラーが発生しました。
ENODEV
fildes に指定したファイルは、 vxfs ファイルシステムのルートディレクトリではありません。
ENOSPC
要求されたスペースを得ることはできませんでした。
EPERM
プロセスに適切な特権がありません。
EROFS
ファイルシステムは読み取り専用にマウントされています。
ETIMEDOUT この呼び出しの前に VX_FREEZE のタイムアウトが時間切れになりました。
参照
fsadm_vxfs(1M), mount_vxfs(1M), vxtunefs(1M), fcntl(2), getrlimit(2), ioctl(2), ulimit(2)
Section 7-316
Hewlett-Packard Company
−9−
HP-UX 11i Version 2: September 2004
xopen_networking(7)
xopen_networking(7)
名称
xopen_networking − X/Openネットワークインタフェース
説明
X/Open は、 X/Open CAE Specification, Networking Services, Issue 4 (UNIX 95) および、 X/Open CAE Specification,
Networking Services, Issue 5 (UNIX 98) において、XTI、ソケット、および IPアドレス分解能のインタフェース
について定義しています。これらのインタフェースの詳細については、上述の仕様書を参照するか、Prentice
Hall 出版の Go Solo という本を参照してください。 Go Solo には、その他の SPEC 1170 のマンページに対する
上述の仕様書が掲載されたCD-ROMが添付されています。
コンパイル環境
ネットワークサービス (XTI、ソケット) を使用する場合、 _XOPEN_SOURCE を定義し、
_XOPEN_SOURCE_EXTENDED を値 1 で定義しなければなりません。
_XOPEN_SOURCE マクロは、コンパイル環境で自動的に定義されることもありますが、アプリケーションの
移植性を確実にするために、コンパイルのコマンド行で、または各ソースモジュールの先頭で、ヘッダをイン
クルードする前にこのマクロを定義する必要があります。 _XOPEN_SOURCE_EXTENDED マクロは、コンパ
イル環境で自動的に定義されません。
c89 および cc ユーティリティーは、標準ライブラリに対して追加の -l のオペランドを認識します。
-l xnet
このオペランドを使用すると、リンカーが適切な X/Open ネットワークインタ
フェースライブラリを検索するようになり、前述の仕様で参照しているすべて
の関数が有効になります。C ライブラリを明示的に指定するために -l c オペラ
ンドも指定する場合、 -l c オペランドの指定の前に -l xnet オペランドを指定す
る必要があります。
著者
X/OPEN XTI 、 ソケットおよび、 IP アドレス分解能インタフェースは、X/OPENが開発しました。
参照
XTIライブラリ関数 :
t_accept(3), t_alloc(3), t_bind(3), t_close(3), t_connect(3), t_error(3), t_free(3), t_getinfo(3), t_getprotaddr(3),
t_getstate(3), t_listen(3), t_look(3), t_open(3), t_optmgmt(3), t_rcv(3), t_rcvconnect(3), t_rcvdis(3), t_rcvrel(3),
t_rcvudata(3), t_rcvuderr(3), t_snd(3), t_snddis(3), t_sndrel(3), t_sndudata(3), t_strerror(3), t_sync(3), t_unbind(3)
ソケットインタフェース :
accept(2), bind(2), close(2), connect(2), fcntl(2), fgetpos(3S), fsetpos(3S), ftell(3S), getpeername(2), getsockname(2),
getsockopt(2), listen(2), lseek(2), poll(2), read(1), recv(2), recvfrom(2), recvmsg(2), select(2), send(2), sendmsg(2),
sendto(2), setsockopt(2), shutdown(2), socket(2), socketpair(2), write(1)
IPアドレス分解能インタフェース :
endhostent(3N), endnetent(3N), endprotoent(3N), endservent(3N), gethostbyaddr(3N), gethostname(3N),
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-317
xopen_networking(7)
xopen_networking(7)
getnetbyaddr(3N), getprotobynumber(3N), getservbyport(3N), htonl(3N), inet_addr(3N), ntohl(3N), sethostent(3N),
setnetent(3N), setprotoent(3N), setservent(3N)
Section 7-318
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
zero(7)
zero(7)
名称
zero − zero 特殊ファイル
説明
/dev/zero は zero 特殊ファイルです。 zero 特殊ファイルからの読み出しでは、常に「0」(\0文字) が返されま
す。
zero 特殊ファイル上に書きこまれたデータは破棄または無視されます。
zero 特殊ファイル上のシークは必ず成功します。
zero 特殊ファイルのプライベート mmap() は許可されています。( mmap(2)を参照してください。) 共有
mmap() は許可されていません。
例
以下の例の’buf ’には’len’バイトの \0文字が置かれます。
fildes = open("/dev/zero",...)
read(fildes, buf, len)
以下の例で、プロセスの’address’というメモリー位置に ’len’バイトの \0文字が置かれます。
fildes = open("/dev/zero",...)
address = mmap(0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE, fildes, any_offset)
ファイル
/dev/zero
参照
mmap(2), null(7).
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 7-319
ノート
Section 7-320
Hewlett-Packard Company
HP-UX 11i Version 2: September 2004
セクション 10
一般情報
セクション 10
一般情報
intro(9)
intro(9)
名称
intro − HP-UX 全般の情報セクションの概要
説明
本セクションでは、 HP-UX とオペレーティングシステムの概要、HP-UX 共通用語の用語集、などの HP-UX
全般の情報を収録しています。
参照
glossary(9), introduction(9)
次の Web サイトで HP-UX のドキュメントを入手できます。
http://docs.hp.com (英語)、http://docs.hp.com/ja (日本語)
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 9-1
glossary(9)
glossary(9)
名称
glossary − 一般的なHP-UXの用語説明
説明
HP-UXをはじめ、HP-UXライクなシステムでは、きわめて特殊な意味を持つ専門用語を使用します。この用語
集は、HP-UX以外の環境で使用する場合とは意味の異なる専門用語を正確に定義するものです。他の HP-UX
ドキュメントへの参照も含まれています。
sh(1), wait(2), fopen(3S) のように、かっこ付きローマ数字 (と大文字) が付いた イタリック体(または下線表示)
で書かれているものは、本ドキュメントの他のセクションを参照しています。 ボールド体 ( または反転表示)
の項目は、この用語集に登録されています。 computer font (オンライン マンページの場合は ボールド体 (また
は反転表示)) は、ファイル名や環境変数などを表す文字列です。イタリック体で書かれたマニュアル名は、お
使いのシステム内のドキュメントまたは個々のドキュメントを参照しています。
いくつかの用語および定義は、新しい IEEE POSIX 基準や X/Open Portability Guide に由来してはいますが、こ
のように定義することで明確にHP-UX オペレーティングシステムの特徴を反映しています。表現の違いは、
HP-UX システムの特徴をより明確にするために存在します。
用語エントリー
「現在のディレクトリ」を指す特殊ファイル名です。これは単独で使用することも、またディ
. (ドット)
レクトリのパス名の先頭に指定することもできます。 パス名決定を参照してください。 ドッ
トは、POSIX シェル、B シェル、および K シェルの特殊コマンドとしても使用できます。テ
キストエディタやフォーマッタで、正規表現を解析するとき、あるいはファイル名を指定する
ときに特殊な意味を持ちます。
.. (ドットドット)
「親ディレクトリ」を指す特殊ファイル名です。 ドットドットが 「パス名」の先頭にある場
合は、現在のディレクトリの親を指します。また、 ドットドットがパス名の中にある場合
は、パス名の文字列中にある ドットドットの前にあるディレクトリの親ディレクトリを指し
ます。特殊なケースとして ドットドットは、親のない任意のディレクトリの現在のディレク
トリ (通常は ルートディレクトリ )を指します。 パス名決定を参照してください。
.o (ドットオー)
このサフィックスは、慣例的に再配置可能オブジェクトファイルに付けられます。 「ドット
オー ファイル」という用語が、再配置可能オブジェクトファイルを表す場合もあります。こ
のようなファイル形式を 「ドットオー フォーマット」と呼ぶこともあります。 a.out(4) を参
照してください。
2次プロンプト シェルがディスプレイに表示し、さらに入力が必要なことを示す1つ以上の文字。このプロン
プトは、シェルの1 次プロンプトほど頻繁には現れません ( プロンプト参照)。これが表示さ
れた場合、通常は、文字列の正しい引用を省略したか (シェルに混乱を引き起こす原因)、コ
マンド行からシェルプログラミング言語のフロー制御構成体 ( for 構成体など) を入力したこ
とが原因です。デフォルトでは、シェルの2次プロンプトは不等号 (>) ですが、各自の .profile
Section 9-2
Hewlett-Packard Company
−1−
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
ファイルでシェル変数 PS2 を適宜設定することにより、再定義できます( Cシェルには2次プ
ロンプトはありません)。
a.out
通常、HP-UX の実行可能オブジェクトコードに付けます。フォーマットはマシンに依存しま
す。各インプリメンテーションについては、 a.out(4) で説明してあります。まだリンクされて
いないオブジェクトコードも同じ形式になりますが、 .o (ドットオー) ファイルとして参照さ
れます。 a.out はリンカ ld(1) が使用するデフォルトの出力ファイルでもあります。
ASCII
米国情報交換標準コード (American Standard Code for Information Interchange) の頭文字です。
ASCIIは、従来からのSystem Vのコード文字セットで、制御文字と表示可能文字を含む128の
文字を定義しています。各文字は、10進数の0∼127を示す7ビットの2進数値で表されます。
CS/80 または CS-80
一連のコマンドと CS/80 (コマンドセット 1980) コマンドセットというデータ転送プロトコル
によって、制御コンピュータとの通信を行う大容量記憶装置の系列。このコマンドセットは、
技術革新が進んだ際に、新製品/旧製品との互換性を高めるために実現されました。 CS/80 コ
マンドセット全体のうちサブセットのみをサポートしている大容量記憶装置もあり、これを通
常、 SS/80 (サブセット 1980) 装置といいます。
demon
UNIXの用語 daemon のスペルが誤ったもの
EOF
エンドオブファイルを参照してください。
Epoch
Epoch とは、 協定世界時 (UTC) の1970 年1 月1 日0 時0 分0 秒を意味します。数値の増分は、
Epochから参照時間までに経過した時間を表します。
不定期に発生するうるう秒は、 Epoch から参照時間までの秒数には織り込まれていません
(1970∼1988年の間に、14回のうるう秒があります)。
FIFO スペシャルファイル
ファイルの一種。 FIFO に書き込まれたデータは、ファーストイン-ファーストアウト式で読
み取られます。その他の特徴は、 open(2), read(2), write(2), lseek(2) に書かれています。
fork
既 存 の プ ロ セ ス か ら 実 行 す る と、 新 規 プ ロ セ ス を 作 成 す る HP-UX の シ ス テ ム コー ル (
fork(2))。新規プロセスを 子プロセスといい、既存のプロセスを 親プロセスといいます。子プ
ロセスは、親プロセスの正確なコピーを作ることにより作成されます。親プロセスと子プロセ
スは、それぞれに対応する fork が返す値によって、それぞれを識別できます ( 詳しくは
fork(2) を参照してください)。
init
初期化を実行する システムプロセスは、システム内のその他あらゆるプロセスの元になるも
ので、 ログインプロセスを開始するために使われます。 init には通常、 1 という プロセスID
があります。 init(1M) を参照してください。
I/Oリダイレクション
標準入力のデータのソースや標準出力、標準エラーのデータの宛先を変更するため、 HP-UX
のシェルが備えているメカニズム。 sh(1) を参照してください。
HP-UX 11i Version 2: September 2004
−2−
Hewlett-Packard Company
Section 9-3
glossary(9)
glossary(9)
内蔵ターミナルエミュレータを参照してください。
ITE
iノードはファイルを記述する構造体で、システム内では ファイル シリアルナンバーによって
iノード
識別されます。すべてのファイルやディレクトリには対応する iノードがあります。だれがど
のようにファイルにアクセスできるかを指定するパーミッションは、 iノードの一部である9
ビットフィールドに保存されています。 iノードには、ファイルサイズ、ファイルのユーザー
ID とグループID、リンク数、ファイル内容があるディスクブロックへのポインタもありま
す。 iノードと、1つ以上のディレクトリにあるiノードのエントリーとの連結を、 リンクとい
います。
ファイル シリアルナンバーを参照してください。
iノード番号
コンピュータのプロセスに、 母国語 、 地域習慣 、 コード文字セットに関するユーザーの要
LANG
件を知らせるための環境変数
LIF
論理交換形式を参照してください。
msqid
メッセージ待ち行列識別子を参照してください。
NLS
母国語サポートを参照してください。
NLSPATH
メッセージカタログの捜索パスを示すために使われる環境変数 ( メッセージカタログ参照)
PIC
位置独立コードを参照してください。
rawディスク
ディスクとユーザーの読み取り/書き込みバッファの間で直接転送を可能にする キャラクタ型
スペシャルファイルが存在するディスクに対する名称。 1回の読み取り/書き込み呼び出しが1
回のI/O呼び出しとなります。
SCCS
ソースコード制御システムを参照してください。
SCCSファイル ソースコード制御システム (SCCS) を使えるように修正された通常テキストファイル。この修
正は、 admin(1) コマンドによって自動的に行われます。 デルタを参照してください。
semid
セマフォ識別子を参照してください。
shmid
共有メモリ識別子を参照してください。
SS/80
CS/80 を参照してください。
stderr
標準エラーを参照してください。
stdin
標準入力を参照してください。
stdout
標準出力を参照してください。
tty
当初はテレタイプライターの省略形でしたが、現在は一般に ターミナルを表します。
UTC
Epoch を参照してください。
Section 9-4
Hewlett-Packard Company
−3−
HP-UX 11i Version 2: September 2004
glossary(9)
アーカイブ
glossary(9)
オブジェクトファイル (リンカ ld(1) で使われる .o ファイル) のグループなどといった、別の
ファイルの内容を含むファイル。アーカイブファイルは、 ar(1) またはそれと同じような
tar(1)、 cpio(1) などのプログラムで作成、管理します。 アーカイブは、 ライブラリと呼ぶこ
ともあります。
アクセス
ストレージからデータを読み取ったり、データを書き込んだりするプロセス、あるいはシステ
ムリソースを使用する権利のことです。アクセス権は、実効ユーザーID、実効グループID、
およびグループアクセスリストの3 つのプロセス特性によって管理されます。 access(2) シス
テムコールは、ファイルのアクセス権を、 amode パラメータのビットパターンに従って判断
して、ファイルの読み取り、書き込み、実行、存在確認を示します。 access(2) システムコー
ルは、ファイルのアクセス権を、 amode パラメータのビットパターンに従って、ファイルの
読み取り、書き込み、実行、存在確認を示します。 access(2) システムコールは、 実効ユー
ザーID の代わりに 実ユーザーID を、 実効グループID の代わりに 実グループID を使いま
す。
アクセスグループ
グループアクセスリストは、リソースのアクセス権を判断するために使われる 補助グループ
ID のセットです。アクセスのチェックは、以下の「 ファイルアクセス パーミッション」で説
明する方法で実行されます。
アクセスモード アクセスモードは、特定のファイルに対して許可されるアクセスの形式です。各インプリメン
テーションごとに、読み取り、書き込み、実行/ 検索のアクセスモードがそれぞれ異なりま
す。
アドレス
情報の格納や取出しの際に、メモリ位置の指定と識別のために使われる番号。 アドレスは、
宛先のマークや指示、コンピュータの各要素への命令、通信などの目的で使用されます。
メールでいう アドレスとは、情報転送にかかわるすべての要素が認識できる形式のデータ構
造のことです。ローカルシステムでは、単にユーザーの login 名を指す場合もあります。また
ネットワークシステムの場合の アドレスはネットワークソフトウェアに対するリソースの位
置を表します。
テキストエディタ ( vi, ex, ed, sed など) では、 アドレスは、与えられた命令の対象となるファ
イル内の行位置を指定します。
adb では、 アドレスは、特定のコマンドを実行するアセンブリ言語の命令を指定します。
fsdb などのディスクユーティリティでは、 アドレスは raw 型、あるいは ブロック型スペシャ
ルファイル 、 inode 番号、 ボリュームヘッダ、その他のファイル属性を指す場合がありま
す。
周辺装置に場合、 アドレスとは、コンピュータのI/Oデバイスの位置を指定する一連の値を表
します。アドレスの詳細な構成は各システムによって違います。シリーズ 700システムでは、
アドレスは最大2つの要素 ( 選択コード 、 機能番号 ) で構成されます。
HP-UX 11i Version 2: September 2004
−4−
Hewlett-Packard Company
Section 9-5
glossary(9)
glossary(9)
アドレス空間
プロセスが参照できるメモリ位置の範囲
アフィリエーション
「 ターミナルアフィリエーション」を参照してください。
移植可能なファイル名文字セット
次の図形的文字セットは、 IEEE 規格P1003.1に準拠するすべてのインプリメンテーションの
間で移植可能なものです。
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
01234567890._最後の3文字は、ドット、下線、ハイフンです。ハイフンは、移植可能なファイル名の先頭文
字としては使わないでください。
位置独立コード (PIC)
あらゆる仮想アドレスで、変更なしに実行可能なオブジェクトコード。位置独立コードは、
PC 関連のアドレッシングモードやリンケージテーブルを使えます。特に、共有ライブラリで
頻繁に使われ、この場合にはリンケージテーブルはダイナミックローダによって初期化されま
す。位置独立コードは、コンパイラで +z または +Z オプションを指定した場合に作成されま
す。
一般ファイル
HP-UX のファイルの1種で、ASCII形式のテキスト (プログラムソースなど)、バイナリデータ
( 実行可能ファイルコードなど) を格納します。一般ファイルは、ユーザーが I/O リダイレク
ション、エディタ、 HP-UX コマンドによって作成することができます。
イメージ
コマンド実行中のコンピュータ (マルチユーザーシステムにおいては、コンピュータの各自の
部分) の現在の状態。実行中の特定の時点におけるマシン状態の「スナップショット」とみな
される場合もあります。
インタリーブ係数
大容量記憶媒体のセクターにアクセスする順序を決定する数値。データ取得を効率化するた
め、最適化できます。
イントリンシック
システムコールを参照してください。
エンドオブファイル (EOF)
(1) stdio(3S) ルーチンによって、ファイルの論理末尾を超えて読み取りを行おうとしたときに
返されるデータ。この場合、エンドオブファイルは正しくは文字ではありません。
(2) ASCII文字 Ctrl-D
(3) stty(1) または ioctl(2) ( termio(7) 参照) で、ターミナル上でエンドオブファイルを表すもの
と定義された文字。通常は Ctrl-D
Section 9-6
Hewlett-Packard Company
−5−
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
(4) read(2) で、データの終了を示す戻り値
大文字変換
小文字から大文字表記への変換
親ディレクトリ ファイル階層構造であるディレクトリの1つ上のディレクトリを指します。 ルートディレクト
リ (/) を除くすべてのディレクトリには、1つ (1つのみ) の親ディレクトリがあります。 ルー
トディレクトリには親はありません。 ドットおよび ドットドットを参照してください。
親なしプロセス 親プロセスが何らかの理由で終了したときに残される 子プロセスのこと。 init ( init(1M) 参照)
は、すべての親なしプロセスを引き継ぎ、有効な親プロセスになります。
親なしプロセスグループ
すべてのプロセスの親プロセスが、それ自体グループの一部であるか、グループのセッション
の一部ではないプロセスグループ
親プロセス
既存のプロセスが、 fork(2) によって新規プロセスを作成する場合、既存のプロセスを新規作
成したプロセスの親プロセスといいます。すべてのプロセスには、1つの親プロセスがありま
す ( init プロセスを除く、 init 参照) が、各プロセスは、 fork(2) システムコールによって、い
くつかの新しいプロセスを作成できます。プロセスの親プロセスIDは、それを作成したプロ
セスの プロセスID です。
親プロセスID
新規プロセスは、現在アクティブなプロセスによって作成されます。あるプロセスの 親プロ
セスID は、それを作成したプロセスが存続する間は、そのプロセスのプロセスID となりま
す。作成したプロセスが終了した場合、 親プロセスID は init のプロセスIDとなります。
カーネル
HP-UX オペレーティングシステム。カーネルは、メモリ割当て、プロセス作成、プログラム
の実行スケジューリングなど、コンピュータのリソース管理を担当する実行可能ファイルコー
ドです。 HP-UX の実行中は、カーネルは常にRAM (ランダムアクセスメモリ) にあります。
下位ディレクトリ
サブディレクトリを参照してください。
階層ディレクトリ
各ディレクトリの中に他のディレクトリやファイルを含めることのできるディレクトリ (ファ
イルシステム) 構造
環境
コマンドの実行条件を定義するシェル変数群 ( EXINIT, HOME, PATH, SHELL, TERM, な
ど)。これらの条件には、ターミナルの特性、ホームディレクトリ、デフォルトの捜索パスな
どが含まれます。現在のプロセスにおける各シェル変数設定は、その下に作成されるすべての
子プロセスに渡されますが、各シェル変数設定は export コマンドを通じてエクスポートされ
ています ( sh(1) 参照)。エクスポートされないシェル変数設定は、現在のプロセスのみに対し
て 意 味 を も ち、 作 成 さ れ た 子 プ ロ セ ス は、 一 部 の シェ ル 変 数 に つ い て、 /etc/profile,
$HOME/.profile, または $HOME/.login のどれかを実行することにより、デフォルトに設定さ
れます。
HP-UX 11i Version 2: September 2004
−6−
Hewlett-Packard Company
Section 9-7
glossary(9)
機能番号
glossary(9)
シリーズ700 システムでは、1 つのインタフェースカードに複数のインタフェースがある場
合、各インタフェースは別の 機能として扱われ、それぞれに対応する唯一の機能番号を割り
当てられます。
キャラクタ型スペシャルファイル
データを1 バイト単位で転送するI/O デバイスに対応するスペシャルファイル。その他のバイ
トモードのI/Oデバイスには、プリンタ、9トラック磁気テープドライブ、 "raw"モードでアク
セスする場合のディスクドライブ ( raw ディスク参照) などがあります。 キャラクタ型スペ
シャルファイルの構造は特に定義されていません。
行
0個以上のニューライン以外の文字と、末尾のニューライン文字で構成される連続したテキス
ト文字
協定世界時 (UTC)
Epoch を参照してください。
共有メモリ識別子 (shmid)
共有メモリ識別子 (shmid) は、 shmget(2) システムコールによって作成されるユニークな正の
整数です。各 shmid にはメモリのセグメント (共有メモリセグメント) とそれに対応するデー
タ構造体があります。データ構造体を shmid_ds といい、次の要素が含まれます。
struct
ipc_perm shm_perm;
int
/* operation permission struct */
shm_segsz; /* size of segment */
ushort
shm_cpid;
/* creator pid */
ushort
shm_lpid;
/* pid of last operation */
uint
shm_nattch; /* number of current attaches */
time_t
shm_atime; /* last attach time */
time_t
shm_dtime; /* last detach time */
time_t
shm_ctime; /* last change time */
/* Times measured in secs since */
/* 00:00:00 GMT, Jan. 1, 1970 */
共有メモリ識別子は、 stdipc(3C) を使って作成します。
shm_perm は、 shmop(2) ま た は shmctl(2) の 操 作 に 対 す る パー ミッ ショ ン を 指 定 す る
ipc_perm 構造体です (下記参照)。この構造体には、次の要素が含まれます。
ushort cuid;
/* creator user id */
ushort cgid;
/* creator group id */
ushort uid;
/* user id */
ushort gid;
/* group id */
ushort mode;
Section 9-8
Hewlett-Packard Company
/* r/w permission */
−7−
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
shm_segsz は、共有メモリセグメントのサイズを指定します。 shm_cpid は、共有メモリ識別
子を作成したプロセスのプロセスIDです。 shm_lpid は、 shmop(2) 操作を行う最終プロセス
のプロセスIDです。 shm_nattch は、現在このセグメントがアタッチされているプロセスの数
です。 shm_atime は、上記の構造体の要素を変更した最後の shmat 操作の時間、 shm_dtime
は同様に最後の shmdt 操作の時間、 shm_ctime は同様に最後の shmctl(2) 操作の時間です。
共有メモリ操作パーミッション
shmop(2), shmctl(2) システムコールの説明では、操作に必要なパーミッションは操作ごとに示
されています。あるオブジェクトについて、特定のプロセスが shmop(2) または shmctl(2) の実
行パーミッションを持っているかどうかは、以下のように、そのオブジェクトのパーミッショ
ンモードビットによって判断します。
00400
ユーザーによる読み取り
00200
ユーザーによる書き込み
00060
グループによる読み取りと書き込み
00006
その他による読み取りと書き込み
次の条件のうち1つ以上に該当すれば、 共有メモリ識別子 (shmid) に対する shmop(2) または
shmctl(2) 操作の読み取り/書き込みパーミッションが与えられます。
•
•
プロセスの実効ユーザーIDが、スーパーユーザーであること。
プロセスの実効ユーザーIDが、 shmid に対応するデータ構造体の shm_perm.[c]uid と
一致し、 shm_perm.mode の"user" の部分 (0600) に適切なビットが設定されているこ
と。
•
プロセスの実効ユーザーID が、 shm_perm.[c]uid と一致せず、プロセスの実効グルー
プIDが shm_perm.[c]gid と一致するか、 shm_perm.[c]gid の1つがプロセスのグループ
アクセスリストにあり、 shm_perm.mode の"group"の部分 (060) に適切なビットが設定
されていること。
•
プロセスの実効ユーザーID が、 shm_perm.[c]uid と一致せず、プロセスの実効グルー
プIDが shm_perm.[c]gid と一致せず、 shm_perm.[c]gid がいずれもプロセスのグループ
アクセスリストになく、 shm_perm.mode の"other"の部分 (06) に適切なビットが設定さ
れていること。
上記以外の場合、対応するパーミッションは拒否されます。
共有ライブラリ 複数の異なるプログラムで共有できる実行可能ファイル。共有ライブラリのコードは ld(1) で
プログラムにリンクされず、ダイナミックローダによって、実行時にプロセスのアドレス空間
に対応させられます。共有ライブラリは、位置独立コードを必要とし、 ld(1) によって作成さ
れます。通常は、 .sl というファイル名サフィックスがつきます。
空白
表示された時に、カーソルやプリントヘッドを移動させても、画面や紙面の表示には影響を及
ぼさない1 つ以上の文字。 ASCII コードセットの空白文字は、スペース、タブ、ニューライ
HP-UX 11i Version 2: September 2004
−8−
Hewlett-Packard Company
Section 9-9
glossary(9)
glossary(9)
ン、紙送り、キャリッジリターン、垂直タブです。空白文字の一部 ( すべてとは限らない )
を、フィールド、ワード、コマンドオプションを区切るものと解釈するコマンドやルーチンも
あります。
クラッシュ
プログラムまたはシステムの予想外のシャットダウン。オペレーティングシステムがクラッ
シュした場合を「システムクラッシュ」といい、システムをリブートする必要があります。
グループ
グループID
グループID を参照してください。
全員が同じファイルセットへのアクセスを許可される必要のある0 人以上のユーザーの集ま
り。グループのメンバは、 /etc/passwd ファイルと /etc/logingroup ファイル(存在する場合) の
中で、グループ ID の数字 (0以上 UID_MAX 以下) によって定義されます。グループIDが同じ
ユーザーは、同じグループのメンバです。 ASCII形式のグループ名は、 /etc/group. ファイル
の各グループIDに対応しています。グループIDは、 ファイル階層構造の各ファイルにも対応
しており、各ファイルのモードには、このグループのみに適用されるパーミッションビットの
セットが格納されています。したがって、あるファイルに対応するグループに属しており、
ファイルのモードの中でそのグループに適切なパーミッションが与えられている場合には、そ
のファイルにアクセスできます。グループの同一性がプロセスに対応している場合、グループ
IDの値は、 実グループID , 実効グループID , 補助グループID 、あるいは セーブされたグルー
プID 参照されます。 特権グループ、および グループID設定ビットを参照してください。
グループID設定ビット
ファイルシステムのすべてのファイルのモードにあるシングルビット。 グループID設定ビッ
トが設定されているファイルが実行されると、ファイルを実行したプロセスの 実効グループ
ID は、ファイル所有者の 実グループID と同じに設定されます。 グループを参照してくださ
い。
グループアクセスリスト
グループアクセスリストは、リソースのアクセス権の判断に使われる 補助グループID です。
ファイルアクセス パーミッションの説明に従って、アクセスのチェックが行なわれます。
現在のディレクトリ
ワークディレクトリを参照してください。
現在のワークディレクトリ
ワークディレクトリを参照してください。
コード文字セット
文字セットと、セット内の各文字とそれに対応するビット表示の1対1の関係を設定する明確
なルール。 ASCII は、 コード文字セットの一種です。
子プロセス
既存のプロセスが fork(2) システムコールによって作成する新規プロセス。その後、新規プロ
セスは既存のプロセスに対する 子プロセスと呼ばれます。既存のプロセスは、新規プロセス
の 親プロセスとなります。 親プロセスと fork を参照してください。
Section 9-10
Hewlett-Packard Company
−9−
HP-UX 11i Version 2: September 2004
glossary(9)
コマンド
glossary(9)
特定の作業を実行させるための指令。 HP-UX のコマンドは、 シェルという コマンドインタ
プリタを通じて実行されます。 HP-UX は、 POSIXシェル (sh-posix(1)), Cシェル (csh(1)), およ
びコーンシェル (ksh(1)) の各種シェルをサポートしています。サポートされる各シェルの詳細
については、 sh(1) を参照してください。ほとんどのコマンドは、 ユーティリティという実行
可能ファイルによって実行されます。ユーティリティは、独立した実行可能オブジェクトコー
ド (プログラム) 、または、決められた順に実行する他のプログラムのリストを格納したファ
イル (シェルスクリプト) の形をとります。スクリプトには、他のスクリプトやオブジェクト
コード プログラムへの参照が記述されます。標準的な コマンドは、ユーティリティ名の後ろ
に、ユーティリティに渡される引き数を付けて表します。例えば、 "ls mydirectory" というコ
マンドでは、 "ls" はユーティリティ名、 "mydirectory"は"ls"というユーティリティに渡される
引き数を表します。
コマンドインタプリタ
標準入力 (キーボード入力またはファイル読み込み) から数行のテキストを読み込み、それら
を他のプログラムの実行要求として解釈するプログラム。 HP-UX のコマンドインタプリタを
シェルといいます。 sh(1) 、および関連するマンページを参照してください。
コマンドセット 1980
CS/80 を参照してください。
サブセット 1980
CS/80 を参照してください。
サブディレクトリ
ファイルシステム階層の中で、あるディレクトリよりも1レベル以上、下位にあるディレクト
リ。 下位ディレクトリという場合もあります。
シェル
HP-UX オペレーティングシステムへのユーザーインタフェース。コマンドインタプリタとイ
ンタプリタ プログラミング言語の両方として機能します。シェルは、ユーザーがログインす
るたびに自動的に実行されます。詳細については、 sh(1), およびシステムに付属して提供され
る指導書を参照してください。
シェルスクリプト
ファイルに格納され、ユーザーコマンド ( プログラム) として実行されるシェルコマンドと
シェルプログラミング言語構成体のシーケンス。シェルはシェルプログラミング言語を構成す
るコマンドと構成体を認識するため、コンパイルは必要ありません。シェルスクリプトを
シェルプログラムまたは コマンドファイルと呼ぶ場合もあります。 Shells User Guide を参照
してください。
シェルプログラム
シェルスクリプトを参照してください。
シグナル
プロセスに送信され、特別な状況やイベントをプロセスに知らせるソフトウェア割り込みで
す。イベントそのものをシグナルという場合もあります。 signal(2) を参照してください。
HP-UX 11i Version 2: September 2004
− 10 −
Hewlett-Packard Company
Section 9-11
glossary(9)
glossary(9)
システム
HP-UXオペレーティングシステムのことです。 カーネルを参照してください。
システムコール 高水準言語 (FORTRAN, Pascal, Cなど) を通じてユーザーに提供される HP-UXオペレーティン
グシステムのカーネル機能。「イントリンシック」、または「システム イントリンシック」
ともいいます。提供されているシステムコールの説明は、『 『HP-UX リファレンス』の第2
章にあります。
システムコンソール
HP-UX によってユニークなステータスを与えられた、スペシャルファイル /dev/console に対
応するキーボードとディスプレイ (あるいはターミナル)。すべてのブートROMエラーのメッ
セージ、 HP-UX システム エラーメッセージ、一部のシステム ステータスメッセージは、シ
ステムコンソールに送出されます。状況によっては (シングルユーザー状態など)、システム
コンソールは HP-UX との通信メカニズムのみを提供します。システムコンソールの設定と使
い方についての詳細は、システムに付属のシステム管理者マニュアルとユーザーガイドを参照
してください。
システム非同期I/O
I/O 実行方法の1つ。プロセスが、データがいつ到着するか、あるいはいつ書き込み要求を実
行できるかをドライバまたはサブシステムに問い合わせる方法です。ドライバまたはサブシス
テムにはバッファのセットがあり、プロセスはこれを通じて I/O を実行します。 ioctl(2),
read(2), select(2), および write(2) を参照してください。
システムプロセス
システムプロセスとは、システムのために実行されるプロセスです。インプリメンテーション
によって、特別に定義された特徴がある場合があります。
実グループID
システムの全ユーザーに割り当てられる正の整数。ユーザーと 実グループID の関連づけは、
/etc/passwd ファイルで行われます。『実』という修飾子が使われているのは、ユーザーが 実
効グループID も持っている場合があるからです。このため、 /etc/group ファイルの中で実グ
ループIDとグループ名が対応づけられている場合もありますが、必ずというわけではありま
せん。したがって、すべてのユーザーは、メンバーが1人だけのグループであるかもしれない
が、何らかのグループ (グループ名がない場合もある) のメンバーになっています。
プロセスが fork(2) によって子プロセスを作成するときには、そのプロセスの実グループID
は、親プロセスの実グループIDと同じになります。これは、プロセス内でファイルのアクセ
ス特権を決定する際に便利です。
実効グループID
すべてのプロセスには、 ファイルアクセス パーミッションの判断に使われる 実効グループID
があります。プロセスの 実効グループID は、そのプロセスが実行しているファイル (コマン
ド) によって判断されます。そのファイルのグループID 設定ビットが設定されている場合 (
ファイルのモードの一部、 モード参照)、そのプロセスの 実効グループID は、ファイルのグ
ループIDと同じに設定されます。これによって、そのプロセスはファイルのグループに属し
Section 9-12
Hewlett-Packard Company
− 11 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
たようになり、プログラムを正常に実行するためにアクセスする必要のあるファイルに、プロ
セスがアクセスできるようになります。ファイルのグループID設定ビットが設定されていな
い場合、プロセスの 実効グループID は、そのプロセスの上位のプロセスから引き継がれま
す。プロセスの 実効グループID の設定は、プログラムの実行中は維持され、その後プロセス
の実効グループIDは実グループIDと同じに設定されます。 グループ , 実グループID , および
グループID設定ビットを参照してください。
実効ユーザーID
プロセスには、 ファイルアクセス パーミッション (実効ユーザーIDが0、つまりスーパーユー
ザーの場合には、システムコールに関する他のパーミッションも) を判断するために使われる
実効ユーザーID があります。プロセスの実効ユーザーID は、そのプロセスが実行している
ファイル ( コマンド ) によって判断されます。そのファイルのユーザーID設定ビットが設定
されている場合 ( ファイルのモードの一部、 モード参照)、そのプロセスの 実効ユーザーID
は、ファイルのユーザーID と同じに設定されます。これによって、そのプロセスはファイル
の所有者に属したようになり、プログラムを正常に実行するためにアクセスする必要のある
ファイルに、プロセスがアクセスできるようになります。 mkdir や mail など、 ルートが所
有する HP-UX コマンドの多くは、他のユーザーがそれらのコマンドを実行できるよう、ユー
ザーID設定ビットが設定されています。ファイルのユーザーID設定ビットが設定されていな
い場合、プロセスの 実効ユーザーID は、そのプロセスの上位のプロセスから引き継がれま
す。 実ユーザーID および ユーザーID設定ビットを参照してください。
実ユーザーID
システムの全ユーザーに割り当てられる正の整数。実ユーザーIDは、 /etc/passwd ファイルの
中で、すべての有効な ログイン名に対して割り当てられています。『実』という修飾子が使
われているのは、ユーザーが 実効ユーザーID も持っている場合があるからです ( 実効ユー
ザーID 参照)。
プロセスが fork(2) によって子プロセスを作成するときには、そのプロセスの実ユーザーID
は、親プロセスの実ユーザーIDと同じになります。これは、プロセス内でファイルのアクセ
ス特権を決定する際に便利です。
終了シグナル
SIGQUIT によって送信されるシグナル ( signal(2) 参照)。終了シグナルを発生させるには、テ
レタイプハンドラによって終了シグナルとして定義されている文字を入力します ( stty(1),
ioctl(2), termio(7) 参照)。デフォルトは Ctrl-\ で生成される ASCII のFS文字 (ASCIIコード28)で
す。このシグナルは、通常は実行中のプログラムを終了させ、終了したプロセスの『コアイ
メージ』の入ったファイルを作成します。コアイメージは、デバッグに便利です。コアイメー
ジをサポートしていないシステムもあるため、そのようなシステムではこのファイルは作成さ
れません。
上位ディレクトリ
親ディレクトリを参照してください。
照合
優先順により設定されたルールに従った定義済みの順序による文字列の論理順序付け。これら
のルールは、照合要素間の照合順序を決め、母国語に対応して、複数の照合要素で構成される
HP-UX 11i Version 2: September 2004
− 12 −
Hewlett-Packard Company
Section 9-13
glossary(9)
glossary(9)
文字列の順序を管理するものです。
照合順序
照合要素をソートするときに適用される順序。母国語に対応するため、 照合順序は、現在の
LANG 環境変数の値で設定される 照合要素の相対順序と考えることができます。照合順序か
ら文字を省略したり、複数の照合要素に同じ相対順序を適用することができます ( string(3C)
参照)。
照合要素
文字列の論理順序 ( 照合順序 ) を決定するための照合に使われる最小単位。照合要素は、母国
語に合わせて、 1単位として照合を行う1文字または複数文字で構成されます。現在の LANG
環境変数の値で、現在の照合要素のセットを決定します。
小数点キャラクタ
数値の整数部分と端数部分を分ける文字。例えば、米国式の使用法では 小数点キャラクタと
して小数点を、ヨーロッパ式ではカンマを使います。
ジョブコントロール
ジョブコントロールは、ユーザーが特定のプロセスの実行を停止 (一時停止) したり、後で実
行を再開できるようにします。
ユーザーは、システムのターミナルドライバと、特定のシェル ( sh(1) 参照) を併せて提供され
る対話型インタフェースによって、この機能を使います。ターミナルドライバは、現在のフォ
アグラウンド プロセスグループを停止させ、ユーザーのジョブコントロールシェルに再開さ
せるユーザー定義の「一時停止文字」を認識します。ジョブコントロール シェルには、フォ
アグランドまたはバックグランドで停止したプロセスグループを継続させるコマンドがありま
す。ターミナルドライバは、バックグラウンド プロセスグループのメンバがユーザーのター
ミナルに対して読み取り/書き込みを行おうとした場合に、バックグラウンド プロセスグルー
プも停止することができます。これによって、ユーザーは フォアグラウンド プロセスグルー
プを割込みなく終了または一時停止し、停止した バックグラウンド プロセスグループを好き
なときに継続することができます。
使用法とインスタレーションについての詳細は stty(1), sh(1), および関連するシェルエント
リー、またインプリメンテーションについての詳細は signal(2) および termio(7) を参照してく
ださい。
所有者
ファイルの所有者は、通常はそのファイルの作成者です。しかし、ファイルの所有権は、スー
パーユーザーか現在の所有者が chown(1) コマンドか chown(2) システムコールを使って変更で
きます。ファイル所有者は、削除、コピー、移動、内容変更など、自分のファイルを自由に操
作できます。所有者はファイルのモードを変更することもできます。
シングルユーザー状態
HP-UX オペレーティングシステムで、システムコンソールがシステムとユーザーの間で唯一
の通信メカニズムである状態。慣例的に、シングルユーザー状態は通常、 init(1M) によって
実行レベル S または s に指定されます。 シングルユーザー状態とシングルユーザーシステム
を混同しないよう注意してください。シングルユーザー状態は、マルチユーザーシステムをソ
Section 9-14
Hewlett-Packard Company
− 13 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
フトウェアでシングルユーザー通信に制限するもので、シングルユーザーシステムは、複数の
固定ターミナルとは通信できません ( マルチユーザー状態を参照)。
シンボリックリンク
間接的にパス名を参照するファイルの1種。 symlink(4) を参照してください。
スーパーブロック
各ファイルシステムの大容量記憶媒体で、そのファイルシステムを記述しているブロック。
スーパーブロックの内容はインプリメンテーションによって違います。詳しくは、システムに
付属の『システム管理者』マニュアルを参照してください。
スーパーユーザー
HP-UX のシステム管理者。このユーザーは、すべてのファイルにアクセスし、特権操作を行
うことができます。 スーパーユーザーの 実ユーザーID と 実効ユーザーID は0 で、慣例的に
ユーザー名は root を使います。
スティッキービット
ファイルシステムのすべてのファイルのモードにあるシングルビット。 通常ファイルに設定
した場合、ファイルの実行が終了しても、ファイル内容はディスクにスワップバックされず、
メモリ上にとどまります。 通常ファイルにスティッキービットを設定できるのは スーパー
ユーザーだけです。スティッキービットは、 exec(2) によってファイルが実行されるたびに読
み込まれます。
ディレクトリに設定した場合、そのディレクトリのファイルは、ファイルの所有者、そのファ
イルを含むディレクトリの所有者、またはスーパーユーザーにしか削除やファイル名変更がで
きなくなります。 chmod(2), rename(2), rmdir(2), および unlink(2) を参照してください。
ストリーム
このマニュアルの第3 章で説明する標準 I/O ライブラリルーチンと合せて、よく使われる用
語。ストリームは、 fopen(3S) ライブラリルーチンによって返されるファイルポインタ ( FILE
*stream) として宣言) です。対応するバッファリングはあってもなくてもかまいません ( デ
フォルトではバッファリングが割り当てられていますが、これは setbuf (3S) で変更できま
す)。
スペシャルファイル
I/Oデバイスに対応するファイル。 デバイスファイルと呼ぶ場合もあります。スペシャルファ
イルは、 通常ファイルと同様に読み取り、書き込みされますが、読み取り/ 書き込み要求に
よって対応するデバイスが起動されます。慣例と整合性のため、これらのファイルは必ず
/dev ディレクトリに置きます。 ファイルを参照してください。
スペシャルプロセス
特定の (小さい) プロセスIDをもつプロセスは特別なプロセスです。通常のシステムでは、次
のように0, 1, 2というIDが割り当てられます。すなわち、プロセス0はスケジューラです。プ
ロセス1は初期化プロセス initで、システムのその他すべてのプロセスの元となります。プロ
セス1は、プロセス構造の制御に使われます。仮想メモリ、仮想記憶のページングシステムで
HP-UX 11i Version 2: September 2004
− 14 −
Hewlett-Packard Company
Section 9-15
glossary(9)
glossary(9)
は、プロセス2はページングデーモンです。
スラッシュ
リテラル文字 / を表します。スラッシュが1つだけの パス名は、そのプロセスの ルートディレ
クトリを表します。 パス名決定を参照してください。
正規表現
テキストを選択する0 文字以上の文字列。この文字列に含まれる文字は、すべてリテラルで
あっても
( つまり、正規表現が一致する対象が唯一であっても)、1 つ以上の文字が メタキャラクタで
あっても (つまり、1つの正規表現が複数のリテラル文字列に一致しても) かまいません。正規
表現は、指定したテキストに対して検索を実行するテキストエディタ ( ed(1), ex(1), vi(1) など)
や、ファイルの中で特定の文字列を検索するために作成されたコマンド ( 代表的なものは
grep(1)) で特に頻繁に使われます。シェルでも、コマンド行のファイル名を参照する場合など
に正規表現を使います。
制御ターミナル セッションに対応するターミナル。各セッションに対応する制御ターミナルは多くとも1 つ
で、制御ターミナルは1つのセッションのみに対応します。制御ターミナルから入力を行うこ
とにより、その制御ターミナルに対応するフォアグラウンド プロセスグループの全プロセス
にシグナルを送信できます。
制御プロセス
制御ターミナルとの接続を設定するセッションリーダ。その後、ターミナルがそのセッション
の制御ターミナルではなくなった場合、セッションリーダは制御プロセスではなくなります。
制御文字
テキストの記録、処理、転送、解釈に影響を与える表示可能文字以外の文字。 ASCII 文字
セットでは、 制御文字は0∼31 と127 です。制御文字は、CTRL, CONTROL, または CNTL な
どのキー (ターミナルのコントロールキーのラベルに対応) を押さえながら文字キー (場合に
よりSHIFTを使用) を押して生成します。このような2つのキーによる操作を、 Control-D, CtrlD, または ˆD などと表します。ここで ˆ はコントロールキーを表します。
セッション
各プロセスグループは、セッションの要素です。プロセスは、そのプロセスのプロセスグルー
プが属しているセッションの要素とみなされます。新規作成されたプロセスは、それを作成し
たプロセスと同じセッションに加わります。プロセスは、属するセッションを変更できます (
setsid(2) 参照 ) 。 1 つのセッションに複数のプロセスグループがあってもかまいません (
setpgid(2) 参照)。
セッションの寿命
セッションが作成されてから、そのセッションの要素として残っているすべてのプロセスグ
ループの寿命が終了するまでの期間
セッションリーダー
セッションを作成したプロセス ( setsid(2) 参照)
絶対パス名
スラッシュ (/) で始まるパス名です。ファイルの位置を 「ルートディレクトリ」 (/) との相対
位置で示し、そこから検索を始めることを表します。
Section 9-16
Hewlett-Packard Company
− 15 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
セマフォ識別子 (semid)
semget(2) システムコールで作成されるユニークな正の整数です。各 semid には、セマフォの
集合と、それに対応するデータ構造体があります。データ構造体を semid_ds といい、次の要
素が含まれます。
struct ipc_perm sem_perm; /* operation permission */
ushort sem_nsems;
/* number of sems in set */
time_t sem_otime;
/* last operation time */
time_t sem_ctime;
/* last change time */
/* Times measured in secs since */
/* 00:00:00 GMT, Jan. 1, 1970 */
セマフォ識別子は、 stdipc(3C) を使って作成します。
sem_perm は、セマフォ操作パーミッションを指定するipc_perm構造体です (下記参照)。この
構造体には、次の要素が含まれます。
ushort cuid; /* creator user id */
ushort cgid; /* creator group id */
ushort uid;
/* user id */
ushort gid;
/* group id */
ushort mode; /* r/a permission */
sem_nsems は、集合にあるセマフォの数です。集合の中の各セマフォは、 sem_num という正
の整数で参照されます。 sem_num は、0 からsem_nsems より1 小さい値までの連続した値で
す。 sem_otime は、上記の構造体の要素を変更した最後の semop(2) 操作の時間、 sem_ctime
は、同様に、最後の semctl(2) 操作の時間です。
セマフォは、次の要素を含むデータ構造体です。
ushort semval;
/* semaphore value */
short sempid;
/* pid of last operation */
ushort semncnt;
/* # awaiting semval > cval */
ushort semzcnt;
/* # awaiting semval = 0 */
semval は負でない整数です。 sempid は、このセマフォのセマフォ操作を行う最終プロセスの
プロセスIDです。 semncnt は、現在停止中で、このセマフォの semval が現在の値より大きく
なるのを待っているプロセスの数です。 semzcnt は、現在停止中で、このセマフォの semval
が0になるのを待っているプロセスの数です。
セマフォ操作パーミッション
semop(2)、 semctl(2) システムコールの説明では、操作に必要なパーミッションは操作ごとに
示されています。あるオブジェクトについて、特定のプロセスに、これらのパーミッションが
あるかどうかは、以下のように、そのオブジェクトのパーミッションモードビットによって判
HP-UX 11i Version 2: September 2004
− 16 −
Hewlett-Packard Company
Section 9-17
glossary(9)
glossary(9)
断します。
00400
ユーザーによる読み取り
00200
ユーザーによる変更
00060
グループによる読み取りと変更
00006
その他による読み取りと変更
次の条件のうち1つ以上に該当すれば、 semid についての読み取り/変更パーミッションは与
えられます。
•
•
プロセスの実効ユーザーIDが、スーパーユーザーであること
プロセスの実効ユーザーID が、 semid に対応するデータ構造体の sem_perm.[c]uid と
一致し、 sem_perm.mode の"user"の部分 (0600) に適切なビットが設定されていること
•
プ ロ セ ス の 実 効 ユー ザー ID が、 sem_perm.[c]uid と 一 致 せ ず、 sem_perm.mode
の"group"の部分 (060) に適切なビットが設定されていること
•
プロセスの実効ユーザーIDが、 sem_perm.[c]uid と一致せず、プロセスの実効グループ
IDが sem_perm.[c]gid と一致せず、 sem_perm.[c]gid がいずれもプロセスのグループア
クセスリストになく、 sem_perm.mode の"other"の部分 (06) に適切なビットが設定され
ていること
上記以外の場合、対応するパーミッションは拒否されます。
選択コード
シリーズ700システムでは、デバイスに使用する アドレスの一部です。複数の周辺装置が同じ
インタフェースカードに接続されている場合、それらは同じ選択コードを共有します。シリー
ズ 700システムでは、 選択コードはデバイスのバス番号とスロット番号で構成されており、
いずれも I/O カードが挿入されている各 I/O スロットによって決定されます。マルチファンク
ションカードでは、すべての機能が同じ選択コードを共有します。
ソースコード
特定のコンピュータ言語の構文で書かれた基本的な高水準情報 (プログラム)。ソースコード
からオブジェクト (マシン語) コードを得ます。 HP-UX シェルコマンド言語を扱う際には、
ソースコードはコマンド言語インタプリタへの入力となります。 シェルスクリプトという用
語は、この意味と同義です。 C言語を扱う際には、 ソースコードは cc(1) コマンドへの入力と
なります。 ソースコードは、上記の条件を満たすソース全体を表すこともあります。
ソースコード制御システム (SCCS)
SCCSファイルの変更内容を個別の「ユニット」 ( デルタ ) として保存できるようにする HPUX コマンドのセットです。これらのユニットには、ファイルに対するテキスト上の変更内容
が1つ以上含まれ、これを SCCS ファイルに追加または削除することで、別バージョンのファ
イルを得られます。 SCCS を補助するコマンドは、 admin(1), cdc(1), delta(1), get(1), prs(1),
rmdel(1), sact(1), sccsdiff (1), unget(1), val(1), および what(1) です。
相対パス名
スラッシュ (/) で始まらない パス名 。ファイルの位置が現在の ワークディレクトリからの相
対位置であり、 ルートディレクトリではなくワークディレクトリからサーチを開始すること
Section 9-18
Hewlett-Packard Company
− 17 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
を示します。例えば、 dir1/file2 とした場合、現在のワークディレクトリの中で dir1 ディレク
トリをサーチします。次に、 dir1 の中で file2 ファイルをサーチします。
ソリダス
スラッシュを参照してください。
ゾンビプロセス 何らかの理由で終了したのに、親プロセスが wait(2) によってまだ終了待ちの状態 になってい
ないプロセス。終了したプロセスは、親プロセスが終了待ちの状態になるまで、引き続きプロ
セスのスロットを占有します。しかし、終了はしているため、ユーザー領域とカーネル領域の
どちらも、新たにそのプロセスに割り当てられることはありません。したがって、親プロセス
が終了待ち状態になったときに自動的に修正される比較的無害な現象です。 ps(1) コマンドを
使うと、ゾンビプロセスは defunct と表示されます。
ターミナル
termio(7) の指定に従う キャラクタ型スペシャルファイル
ターミナルアフィリエーション
プロセスグループ リーダーがターミナルとの関係を設定するプロセス。プロセスグループ
リーダーが open(2) または creat(2) システムコールを直接的または間接的に実行し、ターミナ
ルをオープンするたびに、ターミナルとプロセスグループ リーダー、およびプロセスグルー
プ リーダーが作成する全プロセス ( ターミナルグループを参照) の関係が設定されます。
open(2) または creat(2) を実行するプロセスがプロセスグループ リーダーである場合、かつ、
そのプロセスグループ リーダーがまだターミナルと関係付けられておらず、オープンされた
ターミナルがまだプロセスグループと関係付けられていない場合には、この関係が設定されま
す (ただし、 open(2) の O_NOCTTY の open(2) の説明を参照)。
関係付けられたターミナルは、プロセスグループのプロセスグループIDを内部構造体に格納
することで、プロセスグループの関係付けをトラックします。
ターミナルの関係付けによるメリットは2つあります。第一に、ターミナルから送信されたす
べてのシグナルが、そのターミナルグループのすべてのプロセスに送られます。第二に、ター
ミナルグループのすべてのターミナルが関係づけられたターミナルを、自動的に選択する汎用
ターミナルドライバ /dev/tty との I/O を行うことができます。
プロセスグループ リーダーが終了するとターミナルのターミナルグループとの関係は中断
し、プロセスグループに残っているすべてのプロセスにハングアップ シグナルが送信されま
す。また、ターミナルグループの中で、プロセスグループ リーダーではないプロセスが、
setpgrp(2) システムコールによってプロセスグループ リーダーになった場合、そのターミナル
の関係は中断されます。
プロセスグループ 、 プロセスグループ リーダー 、 ターミナルグループ 、 setpgrp(2) を参照
してください。
ターミナル装置 ターミナルを参照してください。
HP-UX 11i Version 2: September 2004
− 18 −
Hewlett-Packard Company
Section 9-19
glossary(9)
glossary(9)
ダイナミックローダ
プロセス開始時に実行され、共有ライブラリをプロセスのアドレス空間にロードするルーチ
ン。ダイナミックローダには、参照する符号をプログラムと共有ライブラリに分解し、共有ラ
イブラリのリンクテーブルを初期化する役割もあります。詳しくは dld.sl(5) (PA-RISC システ
ムの場合) または dld.so(5) (Itanium(R)ベース システムの場合) を参照してください。
ダウンシフト
多言語化対応
大文字から小文字への変換
ユーザーの 母国語 、 地域習慣 、 コード文字セットをサポートできるソフトウェアを提供す
るという概念
地域習慣
日付、時間、通貨の形式などの事項に関する地域や領域ごとの規約
通常ファイル
ファイルの1種で、ランダムにアクセス可能なバイトの連続で、システムによって特に構造を
決められていません。サイズは拡張できます。 一般ファイルともいいます。
データ暗号化
重要または機密データを保護するために情報を暗号化する方法。例えば、 HP-UX は全ユー
ザーのパスワードを自動的に暗号化します。 HP-UX で使っている暗号化の方法は、ASCII形
式のテキストを、アルファベットの ., /, 0-9, A-Z, a-z を使って64進表現に変換します。このア
ルファベットに対応する数値については、 passwd(4) を参照してください。
デーモン
バックグランドで動作し、通常はターミナルからのターミネーション命令に影響されないプロ
セス。これは、各種のスケジューリング、クリーンアップ、保守作業を行うためのものです。
lpsched(1M) が デーモンの例です。これは、 lp(1) によって印刷待ち状態になっているライン
プリンタのジョブについて、こうした機能を行うものです。恒久的な デーモン (絶対に終了し
ないもの) の例は cron(1M) です。
ディレクトリ
ファイル名とその内容を対応付け、オペレーティングシステムのみによって操作されるファイ
ル。ディレクトリには、そのディレクトリに含まれるすべてのファイル名について、ファイル
の iノードに対するポインタがあります。このポインタを リンクといいます。ファイルには、
同じファイルシステムのどこにでも現われるいくつかのリンクがあります。各ユーザーは、新
規ディレクトリの 親ディレクトリについてディレクトリ作成のパーミッションがあれば、必
要に応じていくつでもディレクトリを作成できます ( mkdir(1) を使用)。ディレクトリを作成
したら、その中に通常ファイルや他のディレクトリを格納できます。HP-UX のディレクトリ
は、1 つの点を除いて、名称も動作も通常ファイルとまったく同じです。ユーザーは、スー
パーユーザーも含めて、ディレクトリ自体にはデータを書き込むことができません。この特権
は、 HP-UX オペレーティングシステムのみに与えられています。
慣例として、ディレクトリには少なくとも、 .( ドット ) と ..( ドットドット ) の2つのリンク
があります。 ドットはそのディレクトリ自体を、 ドットドットはその 親ディレクトリを指し
ます。 . と .. しかないディレクトリは、空とみなされます。
Section 9-20
Hewlett-Packard Company
− 19 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
テキストファイル
単数または複数の行に組織された文字からなるファイル。行は、 NULL 文字を含んでいては
ならず、行末のニューライン文字を含めて、長さが LINE_MAX バイトを超えてはなりませ
ん。カーネルとC 言語のインプリメンテーションは、どちらもテキストファイルとバイナリ
ファイルを区別しませんが ( ANSI C 基準X3-159-19xx を参照)、多くのユーティリティは、テ
キストファイルを処理するときのみ、正常に動作します。
適切な特権
各インプリメンテーションには、特別な特権を必要とする関数呼び出しや関数呼び出しオプ
ションについて、特権をプロセスと関連付ける手段があります。 HP-UX では、 適切な特権と
は、スーパーユーザーのステータスか、特権グループに対応する特権をいいます ( setprivgrp(1M) 参照)。
デバイス
コンピュータの周辺装置、またはアプリケーションに対して周辺装置として表されるオブジェ
クト
デバイスアドレス
バスアドレスを参照してください。
デバイスファイル
スペシャルファイルを参照してください。
デフォルトの捜索パス
sh(1), time(1) などの HP-UX コマンドが、相対パス名 ( スラッシュ (/)) で始まらないパス名) の
わかっているファイルを探すときに用いる一連のディレクトリプリフィックス。これは、環境
変数 PATH で定義されます ( environ(5) 参照)。 login(1) では、 PATH を :/usr/bin に設定する
ため、最初にワークディレクトリを、次に /usr/bin を検索します。捜索パスは、 PATH の値
を変更することで再定義できます。これは通常、 /etc/profile ファイルまたはホームディレク
トリの .profile ファイル、あるいはその両方で行います。
現存しないプロセス
ゾンビプロセスを参照。
デルタ
Source Code Control System (SCCS) で、 SCCSファイルに対するテキストの変更内容を表す用
語。 SCCS ファイルを編集するたびに、ファイルに対する変更内容は デルタとして別に記憶
されます。次に、 get(1) コマンドを使って、 SCCS ファイルに適用するデルタと、しないデ
ルタを指定して、特定バージョンのファイルを作成できます。この点は、変更をただちにファ
イルに組み込むため、そのファイルの旧バージョンを得ることができない vi や ed エディタと
は違います。これに似た機能は、RCSファイル ( rcsintro(5) 参照) でも提供されます。
時計単位時間
システム内部でスケジューリングとアカウンティングに使われる値。 clock_t 型の値を表すた
めに使われる CLK_TCK で定義された、秒あたりのインターバル数。 CLK_TCK は、以前は
定義済み定数 HZ でした。
HP-UX 11i Version 2: September 2004
− 20 −
Hewlett-Packard Company
Section 9-21
glossary(9)
glossary(9)
特権グループ
特権グループは、通常はスーパーユーザーのみが使用できる一部のシステムコールにアクセス
する権利を与える setprivgrp 処理を受けたグループです ( getprivgrp(2) 参照)。 適切な特権を
参照してください。
ドット
. (ドット) を参照してください。
ドットオー
.o (ドットオー) を参照してください。
ドットオー ファイル
.o (ドットオー) を参照してください。
ドットオー フォーマット
.o (ドットオー) を参照してください。
ドットドット
.. (ドットドット) を参照してください。
内蔵ターミナルエミュレータ (ITE)
コンピュータに組込みのキーボードやディスプレイ、あるいはコンピュータに接続されている
特定のキーボードやディスプレイ ( システムプロセッサのシリーズやモデルによって異なる)
に対応する HP-UX カーネルに組み込まれた「デバイスドライバ」コード。詳しくは、 システ
ムコンソールと、システムに付属して提供されるシステム管理者マニュアルを参照してくださ
い。
ニューライン文字
文字を行に分けるために使われる ASCII コード10 (LF) を表す文字。 C 言語などの各種ユー
ティリティでは、 \n で表されます。ターミナルドライバは、通常ターミナルから送られる
CR/LFを1つのニューライン文字として解釈します (詳細は tty(7) 参照)。
ノード名
ローカルエリアネットワーク (LAN) のノードをユニークに示す、制御文字やスペースを含ま
ない最大31文字の文字列。各システムの ノード名は、 npowerup コマンドで設定されます。
これは、オプションのLAN/9000製品に付属して提供されるコマンドの1つです。ノード名と
ホスト名を混同しないように注意してください。ホスト名は、 uucpネットワークで HP-UX シ
ステムをユニークに識別する文字列です。ノード名とホスト名が同じ場合もありますが、まっ
たく別のソフトウェアで設定、使用されるものです。 ホスト名、 LAN/9000 User’s Guide , お
よび LAN/9000 Node Manager’s Guide を参照してください。
ノンスペーシング文字
分音符号やアクセントなど、他の文字と併用して、英語以外の言語によく見られる複合グラ
フィック記号を作る文字
パーミッションビット
ファイルの モードの下位9 ビットを、ファイル パーミッションビットといいます。これらの
ビットは、ファイルの 所有者 、ファイルの グループ 、その他の読み取り、書き込み、実行
パーミッションを決定します。このビットは、所有者、グループ、その他の3つにわけられま
す。それぞれ、プロセスのファイルクラスに対応して使われます。このビットは、 stat(5) で
Section 9-22
Hewlett-Packard Company
− 21 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
説明するとおり、ファイルモードに格納されています。アクセス決定の際のファイル パー
ミッションビットの詳しい使用法については、 ファイル アクセスパーミッションを参照して
ください。
パイプ
2つのプロセスの間でデータを渡すために使われるプロセス間 I/Oチャネル。 シェルが、ある
プロセスの標準出力から別のプロセスの標準入力にデータを転送するために使います。コマン
ド行では、パイプは縦線 (|) によって表されます。この縦線の左に記述されるコマンドからの
出力が、右側のコマンドの標準入力に直接渡されます。
バスアドレス
アドレスの中で、 HP-UXが特定の装置を探すために使う部分を構成する番号。 バスアドレス
は、同じインタフェースに接続されている装置をコンピュータが区別できるようにする周辺装
置のスイッチの設定によって決定されます。 バスアドレスを「デバイスアドレス」と呼ぶ場
合もあります。
パス名
ディレクトリ名をスラッシュで区切って続け、最後にファイル名を記述したもの。最後のファ
イル名以外は、すべて ディレクトリでなければなりません。パス名が スラッシュ (/) で始ま
る場合は、絶対パス名です ( 絶対パス名参照)。それ以外の場合は、 相対パス名になります。
パス名は、特定のファイルを見つけるため、階層ファイルシステム全体の中で追尾すべきパス
を定義します。
さらに厳密にいうと、パス名は、以下のように構築され、nullで終了する文字列です。
<path-name>::=<file-name> <path-prefix><file-name> /
<path-prefix>::=<rtprefix> /<rtprefix>
<rtprefix>::=<dirname>/ <rtprefix><dirname>/
<file-name> は、 ASCII のスラッシュと null を含まない 1 文字以上の文字列、 <dirname> は、
ASCII のスラッシュとnullを含まない1文字以上のディレクトリ名を表す文字列です。ファイ
ル名とディレクトリ名の長さは、ショートファイル名型式をサポートしているシステムでは最
大14文字、ロングファイル名型式をサポートしているシステムでは最大255文字です。
スラッシュ (/) は、それ自体が ルートディレクトリの名称です。スラッシュを2つ以上続けて
も (////...) 、1つのスラッシュとして扱われます。
特に注記しない限り、nullまたは長さ0のパス名は、存在しないファイルのファイル名を表し
ているものとして扱われます。
パス名決定
ファイル階層構造における特定のファイルに対するパス名を決定するプロセスです。決定を絶
対、相対のいずれで行うかによって (下記参照)、複数のパス名が同じファイルに決定される
場合があります。パス名の中の各ファイル名は、ファイル名の前で指定されるディレクトリに
あります。例えば、パス名の中に a/b という部分がある場合、 b ファイルは a ディレクトリ
にあります。これができなかった場合、 パス名決定は失敗となります。
パス名がスラッシュで始まる場合、パス名の最初のファイル名の上位にあるのは、そのプロセ
スの ルートディレクトリとみなされ、そのパス名を 絶対パス名といいます。パス名がスラッ
HP-UX 11i Version 2: September 2004
− 22 −
Hewlett-Packard Company
Section 9-23
glossary(9)
glossary(9)
シュで始まらない場合、パス名の最初のファイル名の上位にあるのは、そのプロセスの現在の
ワークディレクトリとみなされ、そのパス名を 相対パス名といいます。 1つのスラッシュだ
けで構成されるパス名は、そのプロセスのルートディレクトリに決定されます。
パスプリフィックス
オプションで ディレクトリを参照する スラッシュを末尾に付けた パス名です。
パスワード
ユーザーの同一性を確認するために使われる ASCII 文字列。パスワードは、ユーザーとグ
ループについて指定できます。ユーザーにパスワードがある場合、パスワードは自動的に暗号
化され、 /etc/passwd ファイル中の該当ユーザーの行の第2 フィールドに入力されます。ユー
ザーは、 passwd(1) コマンドを使ってパスワードを作成、変更できます。
バックアップ
システムクラッシュ (通常は電源障害、ハードウェアエラーなどが原因) に備えてファイルシ
ステムを保護するため、その全体または一部のコピーを作成する作業。この作業は必ず行うこ
とをお勧めします。.
バックグラウンド プロセスグループ
制御ターミナルと接続されているセッションで、フォアグラウンド プロセスグループにない
プロセスグループ
表示可能文字
手書き、印刷、または表示した場合に可視表示される制御文字以外の文字。
標準エラー
診断メッセージ用としてプログラムから出力されるエラーメッセージや特殊なメッセージの出
力先。標準エラー出力は、 stderr とも呼ばれ、コマンドが実行されるたびに、ファイル記述
子2の書き込み用として、自動的にオープンされます。デフォルトでは、 stderr に書き込まれ
る全データの出力先はユーザーのターミナルですが、その他に入出力先を変更できます。逆方
向へのデータ転送に使われることのない標準入力や標準出力とは違い、標準エラーは読み取ら
れる場合があります。 I/O リダイレクションが、このような作業を行うプログラムを停止させ
る可能性があるため、これはお勧めできません。
標準出力
プログラムの出力データの宛先。標準出力ファイルは stdout とも呼ばれ、コマンドが実行さ
れるたびに、ファイル記述子1に書き込み用として、自動的にオープンされます。デフォルト
では、 stdout に書き込まれる全データの出力先はユーザーのターミナルですが、その他の宛
先に入出力先を変更できます。
標準入力
プログラムの入力データのソース。標準入力ファイルは stdin とも呼ばれ、コマンドが実行さ
れるたびに、ファイル記述子ゼロに読み取り用として、自動的にオープンされます。デフォル
トでは、 stdin から読み取られる全データのソースはユーザーのターミナルですが、その他の
ソースに入出力先を変更できます。
開いているファイル
ファイル記述子に現在対応するファイル
Section 9-24
Hewlett-Packard Company
− 23 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
開いているファイルの記述
プロセスまたはプロセスのグループがファイルにアクセスする方法を記録します。各 ファイ
ル記述子は1つの 開いているファイルの記述を参照しますが、 開いているファイルの記述は
複数のファイル記述子で参照できます。 ファイルオフセット 、 ファイル状態フラグ 、および
ファイル アクセスモードは、 開いているファイルの記述の属性です。
ブートROM
ROM (リードオンリーメモリ) 内にあってコンピュータの電源を入れるたびに実行され、自動
的にコンピュータを希望どおりの状態にするためのプログラム。ブートストラップ プログラ
ムの最初の数個の命令だけで、プログラムの残りの部分を入力装置からコンピュータに読み込
み、計算に必要な機能を開始することができます。ブートROM の機能は、コンピュータの
ハードウェアのテストを実行し、コンピュータを通じてアクセス可能なデバイスをすべて認識
し、指定されたオペレーティングシステムか、特定の検索アルゴリズムに従って最初に発見さ
れるオペレーティングシステムをロードすることです。
ブート または ブートアップ
オペレーティングシステムをロード、初期化、実行するプロセス
ブート領域
大容量記憶媒体の中で、ボリュームヘッダと、オペレーティングシステムのブートに使われる
「ブートストラップ」プログラムがある領域。 ブート領域は、 HP-UX専用に確保されていま
す。
ファイル
書き込み/読み取り可能なバイトの連続。 ファイルには、パーミッションや種類などの属性が
あります。ファイルの種類には、 通常のファイル 、 キャラクタ型スペシャルファイル 、 ブ
ロック型スペシャルファイル 、 FIFOスペシャルファイル 、ネットワーク スペシャルファイ
ル、 ディレクトリ、および シンボリックリンクがあります。すべてのファイルには、ユー
ザーや多くの HP-UX コマンドがファイル内容を参照するための ファイル名が必要です。シス
テムは、ファイル内容について特定の構造を必要としませんが、一部のプログラムはこれを必
要とします。ファイルは、シリアルにもランダムにもアクセスできます
(バイトオフセットによりインデックスが付けられています)。ファイル内容とファイル構造
体の解釈は、そのファイルにアクセスするプログラムが行います。
ファイル アクセスパーミッション
ファイル階層構造内のすべてのファイルには、アクセスパーミッションがあります。これらの
パーミッションは、プロセスがファイルに対して要求された操作 ( 書き込み用にファイルを
オープンするなど) を実行できるかどうかを判断するために使われます。アクセスパーミッ
ションは、 open(2) または creat(2) システムコールによってファイルを作成する際に設定さ
れ、後で chmod(2) コールによって変更できます。これらのパーミッションは、 stat(2) または
fstat(2) によって読み取ることができます。
ファイルアクセスは、ファイルの読み取り、書き込み、または実行の可否を制御します。ディ
レクトリファイルは、実行パーミッションを使って、ディレクトリ検索の可否を制御します。
HP-UX 11i Version 2: September 2004
− 24 −
Hewlett-Packard Company
Section 9-25
glossary(9)
glossary(9)
ファイル アクセスパーミッションを、ファイルの 所有者 、そのファイルの グループのユー
ザー、その他 ("other") の3クラスのユーザーに適用します。各ファイルには、これらの各クラ
スに対して別々のアクセスパーミッションがあります。アクセスのチェックが行われると、シ
ステムは、ファイルを呼び出したユーザーに適用されるアクセス情報をチェックし、パーミッ
ションを与えるべきかどうかを判断します。
次の条件のどれかが満たされた場合、プロセスに対してファイルの読み取り、書き込み、実行
/検索パーミッションが与えられます。
•
プロセスの 実効ユーザーID が、スーパーユーザーであること
•
プロセスの 実効ユーザーID が、ファイル所有者のユーザー ID と一致し、ファイル
モードの owner の部分 (0700) に適切なアクセスビットが設定されていること
•
プロセスの 実効ユーザーID が、ファイル所有者のユーザー ID と一致せず、プロセス
の 実効グループID がファイルのグループ ID と一致するか、ファイルのグループ ID
がプロセスのグループアクセスリストにあり、ファイルモードの group の部分 (070) に
適切なアクセスビットが設定されていること
•
プロセスの 実効ユーザーID が、ファイル所有者のユーザー ID と一致せず、プロセス
の 実効グループID がファイルのグループ ID と一致せず、ファイルのグループ ID が
プロセスのグループアクセスリストになく、ファイルモードの "other" の部分 (07) に適
切なアクセスビットが設定されていること
上記以外の場合、対応するパーミッションは拒否されます。
ファイル アクセスモード
開いているファイル記述の特性が読み取り、書き込み、あるいはその両方が可能なように開い
ているかどうかを決定します( open(2) 参照)。
ファイルオフセット
ファイルオフセットは、ファイル中で次のI/O処理を開始する位置を指定します。通常のファ
イルまたはスペシャルファイルに対応する各 開いているファイル記述には、 ファイルオフ
セットがあります。 パイプや FIFO については、ファイルオフセットは指定されません。
ファイル階層構造
システムで使用可能な1つ以上の ファイルシステム 。これらの ファイルシステムにおけるす
べての ファイルは、1つの階層構造に組織化され、その中ではすべての非ターミナルノードが
ディレクトリとなります。複数の リンクで同一の ファイルを参照できるため、ディレクトリ
は指示された図のように適切に記述されます。
ファイル記述子 読み取りまたは書き込み、あるいはその両方のために開かれたファイルを参照するために用い
る、プロセスごとのユニークな、負でない小さい整数の識別子。各 ファイル記述子は、1つの
開いているファイル記述を参照します。
Section 9-26
Hewlett-Packard Company
− 25 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
ファイル記述子は、 creat(2), fcntl(2), open(2), pipe(2), または rdup(2) などのシステムコールに
よって得られます。 ファイル記述子は、 read(2), write(2), ioctl(2), close(2) などのコールで、引
き数として使われます。
ファイル記述子の値の範囲は、0 からシステムで定義された最大値より1 小さい数値までで
す。システムで定義された最大値は、 <sys/param.h>. の中の NOFILE の値です。
ファイルグループクラス
プロセスが、 ファイル所有者クラスではなく、プロセスの 実効グループID または 補助グ
ループID の1つがそのファイルに対応するグループIDと一致する場合、そのプロセスは、そ
のファイルの ファイルグループクラスにあたります。
ファイル時間値のアップデート
各ファイルには、ファイルデータにアクセスまたは変更を行った時、ファイル状態が変更され
た時にアップデートされる3種類の時間値があります。これらの値は、 <sys/stat.h> に記述さ
れるファイル特性構造体に返されます。ファイルデータの読み取りまたは書き込み、ファイル
状態の変更を行う HP-UX の各機能に関して、各機能に対応した時間値を持つファイルを
「マークフォーアップデート」といいます。アップデートポイントがくると、マークされた
フィールドは現在の時間に設定され、アップデートマークはクリアされます。このようなアッ
プデートポイントの1 つは、あるプロセスにおいてファイルを閉じる時です。 読み取り専用
ファイルシステムのファイルに対しては、アップデートは行われません。
ファイルシステム
大容量記憶装置ボリュームにある ファイルと、それをサポートするデータ構造体の集合。
ファイルシステムには、これらのファイルを参照する ファイル シリアルナンバーのための
ネームスペースがあります。ファイルシステムのインプリメンテーションと保守については、
システムに提供されているシステム管理者マニュアルを参照して下さい。
ファイル状態フラグ
開いているファイル記述の特性。これらのフラグは、 開いているファイル記述で記述される
ファイルにアクセスするシステムコールの動作を変更するために使うことができます。
ファイル所有者クラス
プロセスの 実効ユーザー ID がファイルのユーザー ID と一致する場合、そのプロセスは、
ファイル所有者クラスにあたります。
ファイル シリアルナンバー
特定のファイルに対するユニークな識別子で、ファイルの i ノード番号とも呼ばれます。各
ファイル シリアルナンバーは、1つの iノードのみを識別します。 ファイル シリアルナンバー
は、 ファイル階層構造内の ファイルシステム全体でユニークなものであるとは限りません。
ファイルのその他のクラス
プロセスが、 ファイル所有者クラスや ファイルグループ クラスではない場合、そのプロセス
は、そのファイルの ファイルのその他のクラスにあたります。
HP-UX 11i Version 2: September 2004
− 26 −
Hewlett-Packard Company
Section 9-27
glossary(9)
glossary(9)
ファイル パーミッションビット
パーミッションビットを参照してください。
ファイルポインタ
読み取りまたは書き込み、あるいはその両方のために開かれたファイルを「指す」 ( 参照す
る) fopen(3S) 標準 I/O ライブラリルーチンによって得られるデータ要素。ファイル内で、次の
I/O 操作が行われる位置を、ファイル先頭からのバイトオフセットの形式でトラックします。
ファイルポインタを得た後は、標準 I/O ライブラリルーチンを使う場合、このポインタを使っ
て開いているファイルを参照する必要があります ( これらのルーチンのリストについては、
stdio(3S) を参照してください)。
ファイル名
通常ファイル、スペシャルファイル、ディレクトリを参照するために使われる最大14バイト (
ロングファイル名型式をサポートするよう設定されたファイルシステムでは255バイト) の文
字列。 NULL (null) とスラッシュ (/) のバイト値はファイル名の文字としては使えません。な
お *, ?, ,, [, または ] の各文字は、シェルにおいて特別な意味をもっているため、一般的にファ
イル名の一部に使わないほうがよいでしょう ( sh(1), csh(1), または ksh(1) 参照)。また、 -, +,
または =, の各文字は、一部のプログラムでは後にコマンドの引き数が続くことを表すために
使われるため、ファイル名の先頭に使わないでください。ファイル名をパス名構成要素と呼ぶ
場合もあります。通常使用しているハードウェアで出力できないグラフィックを含む文字や、
ターミナルに混乱を生じさせるおそれのある文字は、使うことはできますが、なるべく使わな
いことをお勧めします。
ファイル名の移植性
ファイル名は、 移植可能なファイル名文字セットで構成する必要があります。その他の文字
を使用すると、コンテクストによっては混乱が生じたり、あいまいになる可能性があるためで
す。
フィルタ
標準入力からデータを読み取り、そのデータを変換し、標準出力に書き込むコマンド
フォアグラウンド プロセスグループ
制御ターミナルとの連結を設定する各セッションには、その制御ターミナルのフォアグラウン
ド プロセスグループとなるセッションのプロセスグループが1つあります。フォアグラウンド
プロセスグループには、制御ターミナルにアクセスするときに、バックグラウンド プロセス
グループには与えられない特定の特権があります。 read(2) と write(2) を参照してください。
フォアグラウンド プロセスグループID
フォアグラウンド プロセスグループのプロセスグループID
複合グラフィック記号
分音符号と基本文字など、複数の異なるグラフィック記号を1つの文字位置に合わせてできた
グラフィック記号
プログラム
(プログラムソースをアセンブルまたはコンパイルすることで得られる)バイナリコードのコン
ピュータへの一連の命令
Section 9-28
Hewlett-Packard Company
− 27 −
HP-UX 11i Version 2: September 2004
glossary(9)
プロセス
glossary(9)
プログラムやイメージの実行 ( イメージ参照)。コマンドやユーティリティは、すべてプロセ
スの中で実行されますが、すべてのコマンドやユーティリティが1対1でプロセスに対応する
わけではありません。 cd などのように、プロセス内で実行されても、新しいプロセスを作成
しないコマンドもあります。 ls | wc -l) などのように、複数のプロセスを作成する場合もあり
ます。同じプログラムの中で複数のプロセスが実行される場合もありますが、それぞれが異な
るデータを持ち、実行中の別々の段階にある必要があります。プロセスは、 アドレス空間
と、そのアドレス空間と必要なシステムリソースの範囲内で実行されるシングルスレッドの制
御であるとも考えられます。 プロセスは、 fork(2) 関数を発行する別のプロセスによって作成
されます。 fork(2) を発行するプロセスを 親プロセスといい、 fork(2) によって作成される新
規プロセスを 子プロセスといいます。
プロセス1
init を参照してください。
プロセスID
システム内の各アクティブプロセスは、存続する間、 プロセスID という PID_MAX 以下の正
の整数によってユニークに識別されます。システムは、プロセスの寿命が終了するまで、同じ
プロセスIDを再使用できません。さらに、プロセスIDと同じプロセスグループIDを持つプロ
セスグループがある場合、プロセスグループの寿命が終了するまで、システムはそのプロセス
IDを再使用できません。システムプロセス以外のプロセスに、1というプロセスIDを使うこと
はできません。
プロセスグループ
システムの各処理は、 プロセスグループの一部です。こうしたグループ化によって、関連す
るプロセスを表すことができます。新規作成されたプロセスは、それを作成したプロセスのプ
ロセスグループに加わります。
プロセスグループID
システムの各プロセスグループは、存続する間、 PIC_MAX 以下の正の整数で表される プロ
セスグループID によって、ユニークに識別されます。プロセスグループが終了するまで、同
じ プロセスグループID をシステムで再使用することはできません。
プロセスグループの寿命
プロセスグループが作成されてから、グループ中で最後まで残っていたプロセスがプロセスの
終了、 setsid(2) または setpgid(2) 関数の呼び出しによってグループを離脱するまでの期間
プロセスグループ リーダー
プロセスグループ リーダーは、プロセスグループIDと同じプロセスIDを持つプロセスです。
プロセスの寿命 fork(2) 関数によってプロセスが作成されると、そのプロセスはアクティブとみなされます。
その制御スレッドと アドレス空間は、プロセスが終了するまで存続します。終了するとプロ
セスは休止した状態に入り、リソースの一部はシステムに戻りますが、 プロセスID など一部
のリソースは引き続き使われています。別のプロセスが、休止したプロセスについて wait(),
wait3(), または waitpid() 関数のいずれかを実行した場合、残っているリソースもシステムに
戻されます ( wait(2) 参照)。最後にシステムに戻されるリソースはプロセスIDです。この時点
HP-UX 11i Version 2: September 2004
− 28 −
Hewlett-Packard Company
Section 9-29
glossary(9)
glossary(9)
で、プロセスの寿命は終了します。
ブロック
(1) HP-UX が大容量記憶媒体へのアクセスや記憶領域割当てに使う情報の基本単位。ブロック
のサイズはインプリメンテーションによって、またファイルシステムによって違います。ユー
ザーに一貫したインタフェースを提供するため、ほとんどのシステムコールやユーティリティ
は、記憶媒体の実際のブロックサイズに関係なく、512 バイト単位の ブロックを使っていま
す。特に指定のないかぎり、 ブロックとはこの意味で使います。
(2) 9トラックテープなど、可変長ストリングのデータを書き込む媒体で、そのストリングのサ
イズ。 レコードと区別するために ブロックという用語が使われる場合もあります。ブロック
にはいくつかのレコードが含まれ、レコード数がブロック化係数を表します。
ブロック型スペシャルファイル
個々のバイトの連続ではなく、複数バイトのブロックごとにデータを転送する大容量記憶装置
(ハードディスク、テープカートリッジ ドライブなど) に対応するスペシャルファイル ( キャ
ラクタ型スペシャルファイル参照)。 ブロック型スペシャルファイルはマウント可能です。 ブ
ロック型スペシャルファイルによって、装置のハードウェア特性が不可視の装置にアクセスで
きます。
プロンプト
システムがコマンド入力可能な状態であることを示すため、 シェルがディスプレイに表示す
る文字。通常のユーザーに対するプロンプトにはドル符号 ($) スーパーユーザーに対するプロ
ンプトにはシャープ (#) が通常使われますが、独自のシェル変数 ( sh(1) および関連するエン
トリーを参照) を設定することにより、自由に再定義できます。 2次プロンプトを参照してく
ださい。
ホームディレクトリ
シェル変数 HOME の値によって与えられるディレクトリ名。最初にログインすると、
login(1) が自動的に、 HOME を ログインディレクトリに設定します。この値はいつでも変更
できます。変更は、通常、 ログインディレクトリにある .profile ファイルで行います。
HOME を設定しても ログインディレクトリには何ら影響はありませんが、特によく使うディ
レクトリを参照する際に便利です。
母国語
中国語、オランダ語、英語、フランス語、ドイツ語、ギリシャ語、イタリア語、片仮名、韓国
語、スペイン語、スウェーデン語、トルコ語などコンピュータユーザーが話したり書いたりす
る言語
母国語サポート (NLS)
ユーザーに、国際化されたソフトウェアを、アプリケーションプログラマに、このようなソフ
トウェアを開発するツールを提供する HP-UXの機能
補助グループID
1つのプロセスには、実効グループIDに加え、最大 NGROUPS_MAX 個の補助グループIDが
あり、ファイル アクセスパーミッションの決定に使われます。プロセスの補助グループID
は、プロセスの作成時に親プロセスの補助グループIDに設定されます。
Section 9-30
Hewlett-Packard Company
− 29 −
HP-UX 11i Version 2: September 2004
glossary(9)
ホスト名
glossary(9)
uucp(1) ネットワークで HP-UX を一意に識別する最大8文字の ASCII 文字列 (各種メーカーの
UNIX ライクなオペレーティングシステムのすべてでサポートされているのは6文字のみ)。シ
ステムの ホスト名は、 hostname(1) コマンドで表示/設定できます。ホスト名が未定義のシス
テムは、 uucp(1) ネットワークでは『unknown』と記述されます。ホスト名を ノード名と混同
しないように注意してください。ノード名は、ローカルエリアネットワーク (LAN) 上で HPUX システムを一意に識別する文字列です。ホスト名とノード名が同じ場合もありますが、
まったく別のソフトウェアで設定、使用されるものです。 ノード名を参照してください。
保存グループID
すべてのプロセスには、最後に正常に終了した exec(2)または setresgid(2)、もしくはスーパー
ユーザーによる最後の setgid(2) または setresuid(2) 呼び出しから、そのプロセスの 実効グルー
プID を保持している保存グループIDがあります。 setgid() は、プロセスで、実効グループID
をこの記憶値に設定できるようにするものです。このため、グループID設定ビットを設定す
るプログラムを実行するプロセスで、グループIDが例えば5であるプロセスは、プログラムが
終了するまでのどの時点でも、実効グループID を5 に設定できます。 exec(2), setuid(2), 保存
ユーザーID, 実効グループID, および グループID設定ビットを参照してください。保存グルー
プIDは、 保存グループID設定ともいいます。
保存グループID設定
保存グループID を参照してください。
保存プロセスグループID
すべてのプロセスには、最後に正常に終了した exec(2) から、そのプロセスのグループIDを保
持している保存プロセスグループIDがあります。 setpgrp(2), termio(7), および プロセスグルー
プID を参照してください。
保存ユーザーID
すべてのプロセスには、最後に正常に終了した exec(2) または setresuid(2)、もしくはスーパー
ユーザーによる最後の setuid(2) 呼び出しから、そのプロセスの 実効ユーザーID を保持してい
る 保存ユーザーID があります。 setuid は、プロセスで、実効ユーザーIDをこの記憶値に設定
できるようにするものです。このため、ユーザーID設定ビットを設定するプログラムを実行
するプロセスで、ユーザーIDが例えば5であるプロセスは、プログラムが終了するまでのどの
時点でも、実効ユーザーIDを5に設定できます。 exec(2), setuid(2), 保存グループID, 実効ユー
ザーID, および ユーザーID 設定ビットを参照してください。保存ユーザーID は、 保存ユー
ザーID設定ともいいます。
保存ユーザーID設定
保存ユーザーID を参照してください。
ボリューム番号 デバイスに使われるアドレスの一部。数値の意味はソフトウェアやデバイスによって違います
が、マルチボリューム ディスクドライブで特定のボリュームを指定するためによく使われま
す。詳しくは、システムに付属のシステム管理者マニュアルを参照してください。
HP-UX 11i Version 2: September 2004
− 30 −
Hewlett-Packard Company
Section 9-31
glossary(9)
glossary(9)
マイナー番号
スペシャルファイルを作成するときに指定され、スペシャルファイルにアクセスするときに使
われ、特定のデバイスとの入出力を可能にするスペシャルファイルの属性値。この数値はデバ
イスドライバに渡され、任意のデバイスの系列の中でどのデバイスを使うか、またいくつかの
処理モードを選択するために使います。 マイナー番号の正式な書式と意味は、システムやド
ライバに依存します。詳しくは、システムに付属して提供されるシステム管理者マニュアルを
参照してください。
システム700では、 マイナー番号は、デバイスアドレス、機能番号、ドライバー依存ビットを
示します。シリーズ 800 システムでは、 マイナー番号は、 カーネル内のテーブルへのイン
デックスです。
マウント可能なファイルシステム
一部の大容量記憶媒体に格納されている、独自のルートディレクトリと独立したディレクトリ
とファイルの階層構造をもつ着脱可能ブロック型ファイルシステム。 ブロック型スペシャル
ファイルおよび mount(1M) を参照してください。
マジックナンバー
a.out 形式ファイルまたはアーカイブファイルの最初のワード。このワードには、ファイルが
動作するマシン (ハードウェア) を識別するシステムIDと、ファイルタイプ (実行可能ファイ
ル、共有実行可能ファイル、アーカイブファイルなど) が含まれます。
マルチユーザー状態
HP-UX オペレーティングシステムで、システムコンソールの他にターミナルによってもシス
テムとユーザーの間で通信できる状態。慣例的に、マルチユーザー実行レベルは状態2に設定
され、これは通常、マルチユーザー環境に必要なすべてのターミナル処理と デーモンを含む
よう定義されています。実行レベルは、テーブルドリブンで、 /etc/inittab ファイルを調べて
実行レベルを設定する init(1M) によって指定されます。マルチユーザーシステムとマルチ
ユーザー状態を混同しないよう注意してください。マルチユーザーシステムは、システムがマ
ルチユーザー状態のときに、複数のユーザーがアクティブにシステムと通信できるシステムで
す。マルチユーザー状態で、シングルユーザー状態で課されるシングルユーザーの制限条項が
なくなります ( シングルユーザー状態 、 inittab(4) 参照)。
メジャー番号
指定されたデバイスとの入出力を可能にするスペシャルファイルを作成するためにのみ使われ
る番号。この番号は、そのデバイスに対して、どのデバイスドライバを使うかを指示します。
詳しくは、 mknod(2) とシステムに付属して提供されるシステム管理者マニュアルを参照して
ください。
メタキャラクタ HP-UXシェルに対して、また ed, find, および grep ( ed(1), find(1), および grep(1) 参照) などの
コマンドに対しても、特別な意味をもつ文字。メタキャラクタには、 !, ", &, ’, *, ;, <, >, ?, [, ],
‘, および | があります。それぞれに対応する意味については、 sh(1) および関連するシェルの
マニュアルを参照してください。また、 正規表現も参照してください。
Section 9-32
Hewlett-Packard Company
− 31 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
メッセージカタログ
プログラムメッセージやプロンプトなどのプログラム文字列は、特定の地域に対応する メッ
セージカタログに格納されています。 メッセージカタログからの文字列検索は、ユーザーの
LANG 環境変数の値にもとづいています (「 LANG 」参照)。
メッセージ操作パーミッション
msgop(2) 、および msgctl(2) システムコールの説明では、操作に必要なパーミッションは、操
作ごとに示されています。あるオブジェクトについて、特定のプロセスにこれらのパーミッ
ションがあるかどうかは、以下のように、そのオブジェクトのパーミッションモードビットに
よって判断します。
00400
ユーザーによる読み取り
00200
ユーザーによる書き込み
00060
グループによる読み取りと書き込み
00006
その他による読み取りと書き込み
次の条件のうち1つ以上に該当すれば、 msqid についての読み取り/書き込みパーミッション
は与えられます。
•
•
プロセスの実効ユーザーIDがスーパーユーザーであること
プロセスの実効ユーザーIDが、 msqid に対応するデータ構造体の msg_perm.[c]uid と
一致し、 msg_perm.mode の"user"の部分 (0600) に適切なビットが設定されていること
•
プロセスの実効ユーザーID が、 msg_perm.[c]uid と一致せず、プロセスの実効グルー
プIDが msg_perm.[c]gid と一致するか、 msg_perm.[c]gid の1つがプロセスのグループ
アクセスリストにあり、 msg_perm.mode の"group"の部分 (060) に適切なビットが設定
されていること
•
プロセスの実効ユーザーID が、 msg_perm.[c]uid と一致せず、プロセスの実効グルー
プIDが msg_perm.[c]gid と一致せず、 msg_perm.[c]gid がいずれもプロセスのグループ
アクセスリストになく、 msg_perm.mode の"other"の部分 (06) に適切なビットが設定さ
れていること
上記以外の場合、対応するパーミッションは拒否されます。
メッセージ待ち行列識別子 (msqid)
msgget(2) システムコールで作成されるユニークな正の整数です。各 msqid には、対応する
メッセージ待ち行列とデータ構造体があります。データ構造体を msqid_ds といい、次の要素
が含まれます。
struct
ipc_perm msg_perm; /* operation permission */
ulong msg_qnum; /* number of msgs on q */
ulong msg_qbytes; /* max number of bytes on q */
HP-UX 11i Version 2: September 2004
− 32 −
Hewlett-Packard Company
Section 9-33
glossary(9)
glossary(9)
ulong msg_cbytes; /* current number of bytes on q */
ushort msg_lspid; /* pid of last msgsnd operation */
ushort msg_lrpid; /* pid of last msgrcv operation */
time_t msg_stime; /* last msgsnd time */
time_t msg_rtime; /* last msgrcv time */
time_t msg_ctime; /* last change time */
/* Times measured in secs since */
/* 00:00:00 GMT, Jan. 1, 1970 */
メッセージ待ち行列識別子は、 stdipc(3C) を使って作成します。
msg_perm は、メッセージ操作パーミッションを指定する ipc_perm 構造体です (下記参照)。
この構造体には、次の要素が含まれます。
ushort cuid;
/* creator user id */
ushort cgid;
/* creator group id */
ushort uid;
/* user id */
ushort gid;
/* group id */
ushort mode;
/* r/w permission */
msg_qnum は、現在キューにあるメッセージ数です。 msg_qbytes は、キューに入る最大バイ
ト数です。 msg_lspid は、 msgsnd 操作を行う最終プロセスのプロセスID です。 msg_lrpid
は、 msgrcv 操作を行う最終プロセスのプロセスIDです。 msg_stime は上記の構造体の要素を
変更した最後の msgsnd 操作の時間、 msg_rtime は同様に最後の msgrcv 操作の時間、
msg_ctime は同様に最後の msgctl(2) 操作の時間です。
モード
iノードに格納され、ファイルシステムの全ファイルに対応している16ビットワード。 モード
のうち下位 12 ビットは、ファイル所有者、ファイルグループ、その他の読み取り、書き込
み、実行パーミッションを決定し、ユーザー ID 設定ビット、グループ ID 設定ビット、「ス
ティッキービット」 ( 実行後にテキストイメージを保存) を格納しています。下位12 ビット
は、ファイルの所有者かスーパーユーザーであれば、 chmod(1) コマンドで設定できます。通
常のファイルのスティッキービットは、スーパーユーザーしか設定できません。下位12 ビッ
トを パーミッションビットという場合もあります。上位4ビットは、対応するファイルのファ
イルタイプを指定し、 open(2)、または mknod(2) システムコールで設定されます。
文字
テキストの編成、制御、表示のために使われる要素。文字には、 表示可能文字と 制御文字が
あります。
文字セット
文字セットを使って、自然言語またはコンピュータ言語で人またはコンピュータと通信を行い
ます。
ユーザーID
システムの各ユーザーは、 ユーザーID という整数によって識別されます。数値の範囲は0以
上 UID_MAX 以下です。プロセスでユーザーをどのように識別するかによって、 ユーザーID
の値を、 実ユーザーID 、 実効ユーザーID 、 保存ユーザーID という場合があります。
Section 9-34
Hewlett-Packard Company
− 33 −
HP-UX 11i Version 2: September 2004
glossary(9)
glossary(9)
ユーザーID設定ビット
ファイルシステムのすべてのファイルのモードにあるシングルビット。 ユーザーID設定ビッ
トが設定されているファイルが実行されると、ファイルを実行したプロセスの 実効ユーザー
ID は、ファイル所有者の 実ユーザーID と同じに設定されます。
ユーティリティ 実行可能ファイルのオブジェクトコード ( プログラム )、または特定の順序で実行すべき コマ
ンド ( シェルスクリプト ) を格納した実行可能ファイル。実行可能ファイルまたはシェルスク
リプト (シェルプログラミング言語で作成) として、独自のユーティリティを作成できます。
読み取り専用ファイルシステム
ファイルシステムの変更を防止する ファイルシステムの特性
ライブラリ
ユーザープログラムからアクセスできるいくつかのサブルーチンと変数を含むファイル。ライ
ブラリは、アーカイブの場合も、共有ライブラリの場合もあります。例えば、 /usr/lib/libc.a
と /usr/lib/libc.sl は、 『HP-UXリファレンス』の第2章のすべての関数と、第3章で (3C)、(3S)
と 記 さ れ て い る す べ て の 関 数 を 含 む ラ イ ブ ラ リ で す。 同 様 に、 /usr/lib/libm.a と
/usr/lib/libm.sl は、 『HP-UXリファレンス』の第3 章で (3M) と記されているすべての関数を
含むライブラリです。 intro(2) および intro(3C) を参照してください。
リンカ
1 つ以上のオブジェクトプログラムを1 つのプログラムに結合し、ライブラリをサーチして
ユーザープログラムの参照を決定し、 a.out 形式で実行可能ファイルを構築するプログラムで
す。この実行可能ファイルは、プログラムローダー exec(2) によってすぐに実行できます。リ
ンカは、 ld(1) コマンドによって実行されます。リンカを リンクエディタと呼ぶ場合もありま
す。
リンク
リンクは、 ディレクトリエントリーの同義語です。これは、ファイル名をファイルの種類と
対応させるオブジェクトです。 リンクを構成する情報には、ファイル名、大容量記憶媒体で
そのファイルの内容がある場所などが含まれます。 1つの物理ファイルにいくつかのリンクが
あってもかまいません。いくつかのディレクトリエントリーで、1つのファイルに数個の名前
を対応させることができます。異なるディレクトリにリンクがある場合、それぞれの中でファ
イル名は同じであっても、違っていてもかまいません。ただし、任意のディレクトリにリンク
がある場合、各リンクにはそのディレクトリ内でユニークな名称が必要です。適切な特権を持
つユーザーが作成する場合を除き、ディレクトリに対して複数のリンクがあってはなりませ
ん。 ln(1), link(2), unlink(2), および シンボリックリンクを参照してください。
また、プログラムの実行準備については、 リンカを参照してください。
リンク数
特定のファイルを参照するディレクトリエントリーの数です。
ルートディレクトリ
(1) 階層ファイルシステムの最上位ディレクトリで、他のすべてのファイルはここから分岐し
ます。 HP-UX の場合、 スラッシュ (/) 文字が ルートディレクトリを表します。ルートディレ
クトリは、ファイルシステムの中で唯一、自らの 親ディレクトリであるディレクトリです。
HP-UX 11i Version 2: September 2004
− 34 −
Hewlett-Packard Company
Section 9-35
glossary(9)
glossary(9)
(2) 各プロセスは、 スラッシュ (/) で始まるパスのパス名決定のため、ルートディレクトリの
概念をプロセスと結び付けています。プロセスのルートディレクトリは、ルートファイルシス
テムのルートディレクトリである必要はなく、 chroot(1) コマンドか chroot(2) システムコール
によって変更できます。このようなディレクトリは、関連するプロセスには、独自の親を指し
ているように扱われます。
ルートボリューム
大容量記憶装置の中で、ブート領域 ( HP-UX カーネルを格納) と HP-UX ファイルシステムの
ルートディレクトリを格納しているボリューム
ローカライズ
既存のソフトウェアを、特定の地域における言語、習慣、文字セットなどの要件に合わせて調
整するプロセス
ログイン
HP-UXにアクセスするプロセス。これは、 login(1) で定義されている ログインシーケンスの
正常実行によるもので、その内容は設定によって違います。 ログイン名と、場合により1つ以
上のパスワードを入力するなどの操作があります。
ログインディレクトリ
ログインの直後に入っているディレクトリ。このディレクトリは、 /etc/passwd で各ユーザー
について定義されています。ログインの直後に、 login(1) が自動的に、シェル変数 HOME に
ログインディレクトリを設定します。 ホームディレクトリを参照してください。
論理交換形式 (LIF)
媒体の移植性を高めるため、多くのHPのコンピュータで実現されている大容量記憶装置の標
準フォーマット。詳細は、 lif (4) を参照してください。 LIF を使って各種の機能を実行するた
めのコマンドです。
ワークディレクトリ
各プロセスには、対応する現在のワークディレクトリという概念があります。シェルの場合、
これは現在いるディレクトリを表します。これは、相対パス名 ( / で始まらないパス名) の
サーチが開始されるディレクトリです。 現在のディレクトリ 、 現在のワークディレクトリと
いう場合もあります。
割込み信号
SIGINT が送信するシグナル ( signal(2) 参照)。このシグナルは、通常、実行中のすべてのプ
ログラムを終了させます。このシグナルを送信するキーは、 ioctl(2) か stty(1) で再定義できま
す ( termio(7) 参照)。 ASCII のDEL (削除) 文字 (DELキー) かBreakキーがよく使われます。
Ctrl-C が使われる場合もあります。
参照
introduction(9)
Section 9-36
Hewlett-Packard Company
− 35 −
HP-UX 11i Version 2: September 2004
introduction(9)
introduction(9)
名称
introduction − HP-UX オペレーティングシステムおよび HP-UX リファレンスの概要説明
概要
HP-UX は、さまざまな業界標準との互換性があるオペレーティングシステムを、HP 社が実現したものです。
UNIX® System V Release 4 オペレーティングシステムを基本とし、Berkeley Software Distribution 第 4 版の重要
な機能を取り入れています。
改善内容には、拡張機能や、HP が HP-UX を非常に強力で便利で信頼性の高いオペレーティングシステムにす
るために開発したその他の機能があります。この機能により、単純なテキスト処理からグラフィックスおよび
設計の精巧なエンジニアリングにわたる、広範囲なアプリケーションのサポートが可能になります。HP-UX
は、装置やその他の周辺機器の制御に直ちに使用できます。リアルタイム機能により、設計、製造、ビジネ
ス、および応答性やパフォーマンスが重要となるその他の分野における困難な問題を解決する、強力なツール
としての HP-UX の柔軟性が更に増しています。
拡張国際言語サポートにより、HP-UX は多くの国の言語のどれを使用してもユーザーと対話できます。HPUX は、LAN (ローカルエリアネットワーク) や資源共有機能と簡単にインタフェースをとることができます。
業界標準のプロトコルを使用することにより、HP-UX は、他のコンピュータやオペレーティングシステムとの
柔軟な対話を提供します。オプションのソフトウェア製品により、HP-UX 機能は広範囲の特殊化したニーズに
まで拡張されます。
『HP-UX リファレンス』は、初心者用の学習ツールではありません。主に、UNIX や UNIX に類似したシステ
ムの熟練したユーザにとって最も役に立つリファレンスツールです。まだ UNIX や HP-UX に慣れていない場
合、一連の 『Beginner’s Guides』、指導マニュアル、その他の学習用文書を参照してください。これらの文書
はシステムと共に提供されるか、または個別に入手できます。システムの実現と保守についての詳細は、『シ
ステム/ワークグループの管理』マニュアルで説明されています。
その他のマンページ
この概要と各セクションの intro マンページでは、オペレーティングシステムと共に配布される「コア」マン
ページについて説明しています。その他のマンページは、オプションの HP-UX やサードパーティソフトウェ
アに付属して別途配布されることがあります。また、それらはコアマンページと同じディレクトリに置かれる
かもしれませんし、別のディレクトリに置かれるかもしれません。
マンページの編成
『HP-UX リファレンス』およびそのオンライン上の対応するものの内容は、 マンページと呼ぶいくつかの独
立したエントリーです。これは、 「マニュアルエントリー」または 「リファレンスページ」とも呼ばれます。
参照しやすいように、マンページは 8つの特殊化したセクションに分かれています。プリントされたマニュア
ルには、それぞれのボリュームのための目次や合成インデックスもあります。
それぞれのマンページは、プリントされた 1 または複数のページで構成され、そのマンページの名前とセク
ション番号が上部の隅にプリントされています。マンページは、リファレンスの各セクション内で、先頭に
intro ページがあることを除いてアルファベット順に並んでいます。マンページは、 pagename(section) という形
式の名前とセクション番号で参照されます。
HP-UX 11i Version 2: September 2004
−1−
Hewlett-Packard Company
Section 9-37
introduction(9)
introduction(9)
マンページは、そのマンページがシステム上にある場合、 man コマンドによりオンラインで使用可能です。詳
細は、セクション 1 の man(1) マンページを参照してください。
プリントされたマニュアルのそれぞれのページには、2つのページ番号がページの下部にプリントされていま
す。中央のページ番号はそれぞれの新しいマンページの先頭でページ 1 から始まります。これは通常の書体で
2つのダッシュに挟まれています。それぞれのページの外側の隅にプリントされている番号は、セクション内
でプリントされるページの連番になります。ユーザーがマンページを探すときは、通常、辞書を読むときのよ
うにページの上部のアルファベット順の見出しを使用します。
マンページの中には、2 つ以上のコマンドまたはルーチンを説明しているものがあります。この場合、マン
ページには、通常「名称」の項に示される最初のコマンドまたは関数の名前が付けられます。場合によって
は、マンページの名前は「名称」の項に対する記述子として示されます。このような場合、その名前はコマン
ドまたは関数をより一般的な用語で表します。例えば、 acct(1M) マンページは acctdisk 、 acctdusg 、 accton
、 acctwtmp といったコマンドを記述しており、 string(3C) マンページは多くの文字列関数を記述していま
す。
以下のような、さまざまなセクションが記述されています。
ボリューム目次 (プリントされたマニュアル)
すべてのマンページの、各セクションで記述されている順序での完全なリストです。コマンド、関
数、機能の名前で、それ自体が記述されているマンページとは異なるような名前をすべてアルファ
ベット順に混在させたリストも含まれます。
セクション 1: ユーザーコマンド
通常、ユーザーが直接呼び出すか、またはコマンド言語手続き (スクリプト) から呼び出されるプログ
ラムです。
セクション 1M: システム管理コマンド
システムのインストールや保守のために使用するコマンドです。ブートプロセス、クラッシュの回
復、システムの完全性の検査、およびその他の必要な処理が含まれます。このセクションのほとんど
のコマンドがスーパーユーザー特権を必要とします。
セクション 2: システムコール
HP-UX カーネルへの入り口であり、C 言語インタフェースが含まれます。ここのトピックは主にプロ
グラマにとって関心があるものです。
セクション 3: ライブラリ関数
さまざまなシステムライブラリに (バイナリ形式で) 存在する、使用可能なサブルーチンです。ここの
トピックは主にプログラマにとって関心があるものです。
Section 9-38
Hewlett-Packard Company
−2−
HP-UX 11i Version 2: September 2004
introduction(9)
introduction(9)
セクション 4: ファイルフォーマット
さまざまなタイプのファイルの構造であり、主に管理者とプログラマにとって関心があるものです。
例えば、リンクエディタの出力ファイルフォーマットは、 a.out(4) で記述されています。単一のコマン
ドだけで使用されるファイル (アセンブラが使用する中間ファイルなど) は記述されません。セクショ
ン 4 のフォーマットに対応した C 言語の宣言は、ディレクトリ /usr/include と /usr/include/sys にあり
ます。
セクション 5: 各種情報
ヘッダファイル、キャラクタセット、マクロパッケージ、その他のトピックの説明などのさまざま情
報です。
セクション 7: デバイス特殊ファイル
HP-UX と システム I/O デバイス間のリンクを提供する特殊 (デバイス) ファイルの特性です。それぞ
れのトピックの名前は、通常、個々の特殊ファイルの名前ではなく I/O デバイスのタイプを参照しま
す。
セクション 9: 概要説明および用語集
一般的な概要説明 (本項) および HP-UX 環境で使用する用語の定義です。
合成インデックス (プリントされたマニュアル)
それぞれのマンページの先頭あたりにある「名称」の項に基づいたキーワードやトピック、およびそ
の他の情報のアルファベット順のリストです。マンページの名前とセクションに対して相互参照され
ます。インデックスには、さまざまなコマンドインタプリタ (「シェル」) の組み込み機能への参照も
含まれます。
マンページの形式
すべてのマンページは、設定されているセクション見出しの形式に従いますが、すべてのセクション見出しが
それぞれのマンページに含まれるわけではありません。いくつかのマンページは自明の特殊な見出しを持ちま
す。
名称
コマンド、関数、または機能の名前を提供し、その目的を簡潔に述べます。
構文
コマンドやプログラムの実体の構文を要約します。以下のようないくつかの規約が使用されます。
一定幅の文字は、この表示通りに入力しなければならないリテラル文字を示します。これらの文字
は、オンラインマンページではボールド体で表示されます。
イタリック体の文字列は、適切な値で置き換えなければならない変数要素を表します。
ローマン体の角かっこ ([ ]) は、その内容の指定が任意であることを示します。
ローマン体の中かっこ ({ }) は、必須の要素を示します。通常は選択を示します。
HP-UX 11i Version 2: September 2004
−3−
Hewlett-Packard Company
Section 9-39
introduction(9)
introduction(9)
ローマン体の、かっこ内の区切り棒 ( | ) は、選択を示します。
省略符号 (...) は、直前の要素を繰り返せることを示します。
注意: ダッシュ (−) 、プラス符号 (+) 、等号 (=) で始まる引き数は、これがファイル名を指定する位
置にある場合であっても、多くの場合コマンドオプションとして定義されます。従って、ファ
イル名の先頭を − 、 + 、 = にするのはよくありません。
説明
それぞれのエントリーの機能と動作を説明します。
多言語化対応
この見出しの下の情報は、さまざまな国の言語のためのプログラミングに関係します。一般的なエン
トリーは、1バイト文字または複数バイト文字のサポート、システムの動作への言語関連の環境変数の
効果、その他の関連情報を示します。
ネットワーク機能
この見出しの下の情報は、そこに記述されているネットワーク機能 (NFS など) を使用している場合の
み適用できます。
戻り値 関数呼び出しで戻される値、またはコマンドの戻りコードの値を説明します。
診断
作成される可能性がある診断情報を説明します。自明のメッセージはリストしません。
エラー 関数のエラー条件 ( errno に設定されます) と、これに対応するエラーメッセージをリストします。
例
一般的な使用例を示します。
警告
問題や欠陥となり得る状況を説明します。
制約
特定のハードウェア、またはハードウェアの組み合わせの使用に関連した、HP-UX 操作におけるバリ
エーションを記述します。
著者
このマンページで説明するソフトウェアの出所を示します。特に記述がない場合、エントリーのソー
スは System V です。
ファイル
プログラムまたはコマンドが使用するファイルや影響を与えるファイルの名前をリストします。
参照
関連するマンページおよび他のマニュアルの参照箇所を示します。
標準準拠
この項では、以下の業界標準の 1 つまたは複数により対象とされるそれぞれのコマンドまたはサブ
ルーチンのエントリーポイントについて、該当する HP-UX 構成要素が準拠する標準仕様をリストしま
す。
以下のさまざまな標準があります。
AES
Section 9-40
OSF Application Environment Specification
Hewlett-Packard Company
−4−
HP-UX 11i Version 2: September 2004
introduction(9)
introduction(9)
ANSI C
POSIX.1
ANSI X3.159-1989
IEEE Standard 1003.1-1988 (IEEE Computer Society) (Portable Operating System Interface for
Computer Environments)
POSIX.2
IEEE Standard 1003.2-1990 (IEEE Computer Society) (Portable Operating System Interface for
Computer Environments)
POSIX.4
IEEE Standard 1003.1b-1993 (IEEE Computer Society) (Portable Operating System Interface
for Computer Environments)
FIPS 151-1
Federal Information Processing Standard 151-1 (National Institute of Standards and Technology)
FIPS 151-2
Federal Information Processing Standard 151-2 (National Institute of Standards and Technology)
SVID2
System V Interface Definition Issue 2
SVID3
System V Interface Definition Issue 3
XPG2
X/Open Portability Guide Issue 2 (X/Open, Ltd.)
XPG3
X/Open Portability Guide Issue 3 (X/Open, Ltd.)
XPG4
X/Open Portability Guide Issue 4 (X/Open, Ltd.)
XPG4.2
X/Open Portability Guide Issue 4 (X/Open, Ltd.) Version 2
HP-UX 入門
これは、HP-UX システムの使用法の非常に簡潔な概要説明です。ログインおよびログアウトの方法、マシンに
よる通信方法、プログラムの実行方法を説明します。
HP-UX は、 制御文字を使用して一定の機能を実行します。制御文字は、Control-D を ˆD と表すように、一般
的に ˆx という形式で示されます。文字キーを押す間、 Control (Ctrl ) キーを押し下げたままにします。
ログイン
ログインするには、ユーザーは有効なユーザー名とパスワードを持っていなければなりません。これはシステ
ム管理者から取得できます。
接続が確立されたとき、システムは端末に login: と表示します。ユーザー名を入力して Return キーを押しま
す。パスワードを入力して (システムのエコーはありません) Return を押します。
最初のプロンプトの前に、著作権に関する注意と本日のメッセージが表示されます。
小文字を入力できる場合は、ログイン名を小文字で入力することが重要です。大文字で入力すると、HP-UX は
ユーザーの端末が小文字を生成できないものと見なし、以降の大文字の入力を小文字として扱います。
ログインが成功すると、システムはユーザーのログインシェルを起動します。デフォルトは POSIX シェル、
/usr/bin/sh です。POSIX シェル (およびその元となる Korn シェルと Bourne シェル) はデフォルトのプロンプ
HP-UX 11i Version 2: September 2004
−5−
Hewlett-Packard Company
Section 9-41
introduction(9)
introduction(9)
トとして $ を使用します。C シェルは % を使用します。またどのシェルも、スーパーユーザーのデフォルト
のプロンプトとして # を使用します。
ログインについての詳細は login(1) を、パスワードの変更については passwd(1) を、ログインシェルの変更に
ついては chsh(1) を参照してください。
ログアウト
シェルからのログアウトは、 exit コマンドまたは eof (ファイル終了) 文字 (後述の「特殊対話文字」のサブセ
クションを参照 ) を入力して行えます。シェルは終了し、もう一度 login: プロンプトが表示されます (
ignoreeof 特殊コマンドについての詳細は、使用しているシェルが C, Korn, POSIX である場合、それぞれ csh(1)
、 ksh(1) 、 sh-posix(1) を参照してください。)
端末を介した通信方法
HP-UX はキーボード入力文字を集めてバッファに保存します。累積された文字は、ユーザーが Return を入力
するまでシェルや他のプログラムには渡されません。
HP-UX 端末入出力は全二重であり、完全な先読みを行います。つまり、プログラムがディスプレイや端末に表
示を行っている間でも、任意の時点で入力できます。もちろん、出力中に入力する場合は、出力ディスプレイ
の中に入力文字が混在します。ただし、何を入力しても正しい並びで保存され、解釈されます。先読みの量に
は限界がありますが、これには余裕があり、システムの負荷が非常に過多になったりシステムの操作が異常に
ならない限り、超過することはほとんどありません。先読みの限界を超えた場合、システムは すべての保存し
た文字を捨てます。
stty(1) は、ユーザーの端末の特性をシステムに対して説明する方法を説明しています。 profile(4) は、ユーザー
がログインするたびに自動的にこの作業を行う方法を説明しています。
特殊対話文字
端末の入力と出力を制御するために、いくつかの特殊文字が使用されます。これらの文字にはデフォルトがあ
りますが、 stty コマンド ( stty(1) を参照) で再定義できます。
stty
ログイン時のデフォルト
名
文字 (ASCII 名 ; キー名)
eof
ˆD (EOT)
kill
@
intr
quit
ˆ? (DEL; Delete, Rub, Rubout)
ˆ\ (FS)
start
stop
ˆQ (DC1; X-ON)
ˆS (DC3; X-OFF)
erase
#
共通
再定義
ˆH (BS; Backspace)
ˆU (NAK), ˆX (CAN)
ˆC (ETX)
eof 文字は、プログラムやスクリプトによって読み取られたときに端末からの「ファイル」入力を終了しま
Section 9-42
Hewlett-Packard Company
−6−
HP-UX 11i Version 2: September 2004
introduction(9)
introduction(9)
す。拡張機能により、 eof はシェルも終了できます (前述の「ログアウト」のサブセクションを参照)。
kill 文字は、端末の入力行上のその前に入力されたすべての文字を削除します。 erase 文字は最後に入力され
た文字を消去します。 erase を連続して使用すると、入力行の先頭方向へと文字を消去していきます (先頭は
越えません)。
intr 文字は、入力バッファを迂回する割り込みシグナルを生成します。このシグナルにより、一般的に実行中
のどのようなプログラムも終了します。このシグナルを使用して、必要のない長いプリントアウトを中止でき
ます。ただし、プログラムがこのシグナルを全く無視するように、またはシグナルが発生したときにプログラ
ムが (終了する代わりに) 通知を受けるように、取り決めることができます。例えば、 vi エディタは割り込み
を捉えると、終了する代わりに実行中の処理を中止するので、割り込みを使用することで、編集中のファイル
を失わずに編集操作を停止できます。
quit 文字は、入力バッファを迂回する中止シグナルを生成します。ほとんどのプログラムはトラップし、実行
中のプログラムを終了させます。現在のディレクトリにコアダンプを作成できます。
stop 文字を使用すると、端末への出力を休止できます。一般的に、ビデオ端末で既に表示されている内容を
ユーザーが読み取るときに、ディスプレイへの出力を一時停止するために使用されます。 start 文字を入力す
ると、出力を再開できます。出力の一時停止または再開に stop と start が使用されるとき、これらの文字は
キーボードのコマンド行バッファを迂回し、プログラムには渡されません。ただし、キーボードで入力された
他のすべての文字は保存され、入力されたものとして後でプログラムで使用されます。
eof 、 erase 、 kill といった文字は、 \ˆD のように、前に \ を付けてエスケープすると、通常のテキスト文字と
して使用できます。従って、 \ を消去するには、2つの erase が必要です。
intr 、 quit 、 start 、 stop といった文字は、入力行上でエスケープできません。
行末文字とタブ文字
HP-UX は、端末の速度に適応するほかに、ユーザーが 改行 (行送り ) キーを備えた端末を使用しているかどう
か、または 復帰 / 改行文字のペアを使用してシミュレートしなければいけないかどうかについて、自己処理し
ようとします。後者の場合、受信したすべての復帰文字は改行文字 (標準の行区切り記号) に変換され、復帰 /
改行のペアが端末にエコーされます。不正なモードに入った場合、 stty コマンドでこれを修正します ( stty(1)
を参照)。
タブ文字は、HP-UX ソースプログラム内で自由に使用できます。端末にタブ機能がない場合、タブ文字を、出
力中は複数のスペースに変換させ、入力中は複数のスペースとしてエコーさせるようにできます。 stty コマン
ドは、このモードの設定や設定解除を行います。デフォルトでは、システムはタブが 8 文字ごとの位置に設定
されているものと見なします。 tabs コマンド ( tabs(1) を参照) は、端末がタブをサポートする場合、端末にタ
ブストップを設定できます。
プログラムの実行方法
HP-UX へのログインが成功すると、シェルはユーザーの端末からの入力をモニターします。シェルは端末から
入力された行を受け付け、これをコマンド名と引き数に分離し、そのコマンドを実行します。コマンドとし
て、組み込まれたシェルの名前や、コマンドの実行可能スクリプト、実行可能プログラムを指定できます。シ
HP-UX 11i Version 2: September 2004
−7−
Hewlett-Packard Company
Section 9-43
introduction(9)
introduction(9)
ステム提供コマンドについては、シェルが見つけることができるディレクトリにこれらのコマンドが入れてあ
ること以外は、特筆すべきことはありません。コマンドをユーザー固有のディレクトリに入れておき、シェル
がここでコマンドを見つけるようにすることもできます。
コマンド名はシェルに対する入力行の最初の語です。コマンドとその引き数は、互いに空白 (1つ以上のスペー
スかタブ文字、またはその両方) で区切ります。
プログラムが終了すると、通常、シェルは制御を取り戻し、ユーザーにプロンプトを表示して、次のコマンド
を受け付けられる状態であることを示します。シェルには他に多くの機能があります。詳細は、該当するマン
ページで記述されています。POSIX シェルについては sh-posix(1) 、Korn シェルは ksh(1) 、C シェルは csh(1)
です。
現在のディレクトリ
HP-UX には、ディレクトリの階層に編成されたファイルシステムがあります。システム管理者がユーザーに
ユーザー名を与えるとき、ユーザーのためのディレクトリも作成します ( 通常はユーザー名と同じ名前であ
り、 ログインディレクトリまたは ホームディレクトリと呼ばれます)。ユーザーがログインすると、そのディ
レクトリはユーザーの 現在のディレクトリ、または ワークディレクトリとなり、ユーザーが入力するファイル
名はすべてデフォルトでそのディレクトリにあるものと見なされます。ユーザーはこのディレクトリの所有者
なので、その内容に対する読み取り、書き込み、変更、削除を行う完全なパーミッションを持ちます。他の
ディレクトリやファイルに対するユーザーのパーミッションは、そのそれぞれの所有者またはシステム管理者
により、許可されるかまたは拒否されます。現在のワークディレクトリを変更するには、 cd(1) を使用しま
す。
パス名
現在のディレクトリにないファイルを参照するには、パス名を使用しなければなりません。絶対パス名は / で
始まります。これは、ファイルシステム全体の ルートディレクトリの名前です。スラッシュの後には、最後に
ファイル名に到達するまで、次のサブディレクトリがあるそれぞれのディレクトリの名前 (後に / が付きます)
が続きます (例えば /usr/ae/filex はディレクトリ ae のファイル filex を参照し、 ae 自体は usr のサブディレク
トリであり、 usr はルートディレクトリのサブディレクトリです)。 パス名の正式な定義については、 glossary(9) を参照してください。
現在のディレクトリにサブディレクトリがある場合、そこにあるファイルのパス名は対応するサブディレクト
リの名前で始まります (先頭に / を付けません)。一般的に、パス名はファイル名が必要な場所ではどこでも使
用できます。
ディレクトリの内容を変更する重要なコマンドは、 cp、 mv、 rm です。それぞれ、ファイルのコピー、移動
(名前変更、再配置、またはその両方)、削除を行います。ファイルのステータスやディレクトリの内容を判別
するには、 ls コマンドを使用します。 mkdir を使用してディレクトリを作成し、 rmdir を使用してディレク
トリを削除し、 mv を使用してディレクトリの名前を変更します ( cp(1) 、 ls(1) 、 mkdir(1) 、 mv(1) 、 rm(1)
、 rmdir(1) を参照)。
Section 9-44
Hewlett-Packard Company
−8−
HP-UX 11i Version 2: September 2004
introduction(9)
introduction(9)
プログラムの記述
ソースプログラムのテキストを HP-UX ファイルに入力するには、 vi 、 ex 、 ed などのテキスト編集プログラ
ムを使用します ( vi(1) 、 ex(1) 、 ed(1) を参照)。HP-UX で使用可能な 3つの主要な言語は、C ( cc_bundled(1)
、 cc(1) を参照)、FORTRAN ( f77(1) を参照)、Pascal ( pc(1) を参照) です。プログラムテキストをエディタで入
力してファイル (ファイル名には適切な接尾辞が付きます) に書き込んだら、そのファイルの名前を、該当する
言語プロセッサに対して引き数として指定できます。通常、言語プロセッサの出力は現在のディレクトリの
a.out という名前のファイルに入れられます。その後のコンパイルの結果も a.out に入れられるため、現在の出
力が上書きされる可能性があるので、 mv を使用してこの出力に固有の名前を与えることができます。プログ
ラムがアセンブリ言語で記述されている場合、おそらくライブラリサブルーチンをリンクする必要があります
( ld(1) を参照)。FORTRAN, C, および Pascal はリンカを自動的に呼び出します。
これまでの過程全体を何の診断も表示されずに通過した場合、プロンプトに応答してシェルにそのプログラム
の名前を指定すれば、結果のプログラムを実行できます。
ユーザーのプログラムは、システムプログラムが argc と argv のパラメータを使用して行っているのと同様
に、コマンド行から引き数を受け取れます。詳細は、付属の C の指導書を参照してください。
テキスト処理
ほとんどすべてのテキストがテキストエディタで入力されます。HP-UX に付属のエディタで特に好まれるの
は、 vi エディタです。テキストファイルのバッチ処理には、 sed エディタがとても能率的です。他のエディタ
はあまり使用されません。 ex エディタは vi の使用中の一定の状況を取り扱うのに役に立ちますが、他のほと
んどのエディタはさまざまなスクリプトで使用される以外はほとんど使用されません。
vi 、 view 、および vedit ( vi(1) を参照) や、 ex および edit ( ex(1) を参照) といったエディタは、さまざまな名
前で呼ばれますが、同一のプログラムです。 sed ストリームエディタについての詳細は、 sed(1) を参照してく
ださい。 ed ラインエディタは ed(1) で説明されています。
端末にテキストを表示するのに最もよく使用されるコマンドは、 cat 、 more 、 pr です ( cat(1) 、 more(1) 、
pr(1) を参照)。 cat コマンドは、何の処理も行わず単純に ASCII テキストを端末にコピーします。 more コマ
ンドは、一度に一画面分、端末にテキストを表示します。続きの表示を行う前に、ユーザーの承認を得るため
に休止します。 pr コマンドは、テキストにページ番号を付け、見出しを与え、複数列出力の機能を持ちま
す。 pr の最も一般的な使用法は、 lp コマンド ( lp(1) を参照) と連係して、形式化したテキストをラインプリ
ンタにパイプします。
ユーザー間通信
ユーザー間通信は一定のコマンドにより提供されます。これらのコマンドを使用する予定がない場合でも、別
のユーザーが皆さんに対して実行するかもしれないので、これらについて知っておくと役に立ちます。現在ロ
グインしている別のユーザーと通信するには、 write を使用して、そのユーザーの端末ディスプレイにテキス
トを直接送信できます (そのためのパーミッションがその他のユーザーにより許可されている場合)。それ以外
の場合、 elm 、 mailx 、 mail (使いやすさの順) で別のユーザーのメールボックスにメッセージを送信できま
す。送信すると、そのユーザーはメールが届いたこと (現在ログインしている場合)、またはメールが存在する
こと ( ユーザーが次にログインしたとき) を、HP-UX により知らされます。これらのコマンドの使用法は、
elm(1) 、 mail(1) 、 mailx(1) 、 write(1) を参照してください。
HP-UX 11i Version 2: September 2004
−9−
Hewlett-Packard Company
Section 9-45
introduction(9)
introduction(9)
許諾
UNIX® は、米国およびその他の国における登録商標であり、X/Open Company Limited を通じてのみ使用権が
得られます。
参照
cat(1), cc_bundled(1), cd(1), chsh(1), cp(1), csh(1), ed(1), ex(1), ksh(1), ld(1), login(1), lp(1), ls(1), mail(1), mailx(1),
man(1), mkdir(1), more(1), mv(1), passwd(1), pr(1), rm(1), rmdir(1), sed(1), sh(1), sh-posix(1), stty(1), tabs(1), vi(1),
write(1), a.out(4), profile(4), glossary(9)
次 の Web サ イ ト に HP-UX の ド キュ メ ン ト が 用 意 さ れ て い ま す。 http://docs.hp.com ( 英 語 ) 、
http://docs.hp.com/ja (日本語)
Section 9-46
Hewlett-Packard Company
− 10 −
HP-UX 11i Version 2: September 2004
Fly UP