HP-UX リファレンス セクション 5 : その他の機能 セクション 7 : デバイス特殊ファイル セクション 9 : 用語集 HP-UX 11i バージョン 2 Vol. 9 / 9 Manufacturing Part Number : B2355-90823 Printed In USA 2003 年 8 月 Printed in USA © Copyright 1983-2003 Hewlett-Packard Development Company, LP. ご注意 本書の内容は予告なく変更されることがあります。 Hewlett-Packard 社は、特定の目的に対する市場性および適合性に関する暗黙的保証などを含 め、本書について一切の保証を行いません。また、本書に誤謬が発見されても、あるいは本書の 提供、運用、および利用に関連して直接的、間接的、特定、故意または偶発的な損害が発生して も、当社は責任を負いません。 提供した本書、サポートソフトウェアメディアは本製品用だけにお使いください。プログラムを コピーする場合はバックアップ用だけにしてください。プログラムをそのままの形で、あるいは 変更を加えて第三者に販売することは固く禁じられています。 保証 Hewlett-Packard 製品および交換部品に適用される具体的な保証条項の写しは、最寄の営業所で 入手できます。 U.S. Government License Proprietary 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 © 1983-2003 Hewlett-Packard Development Company, LP. 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. 商標 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-60104 2003 年 8 月、HP-UX release 11i version 2, HTML 1vol., docs.hp.com B2355-90815-23 2003 年 8 月、HP-UX release 11i version 2, PDF 9vol., docs.hp.com と印刷物 B2355-97183-91 2000 年 12 月、HP-UX release 11i, PDF 9vol., docs.hp.com と印刷物 重要 本書の発行後も、新しい情報が発生する可能性があります。最新の情報について は、HP ドキュメント Web サイト(以下のURL)で確認してください。 英語版 http://docs.hp.com/ 日本語版 http://docs.hp.com/ja 原典 iv 本書は 『HP-UX Reference Section 5 : Miscellaneous Topics, Section 7: Device (Special) Files, Section 9: General Information HP-UX 11i Version 2, Volume 9 of 9』(HP Part No. B2355-90787) を翻訳したものです。 表記規約 本書では、次の表記規約を使用します。 audit (5) HP-UX マンページ。audit はマンページ名で、5 は HP-UX リファレンスのセ クション番号です。Web や Instant Information CD では、そのマンページへ のリンクになっていることがあります。HP-UX コマンド行からマンページを 表示するには、“man audit”か、“man 5 audit”と入力します。man (1)をご 参照ください。 『マニュアル名』 マニュアルの名前です。web や Instant Information CD では、そのマニュア ルへのリンクになっていることがあります。 キーキャップ キーボードのキーの名前です。なお、Return キーと Enter キーは同じキーであ ることに注意してください。 強調 強調したいテキスト文字列を示します。 強調 特に強く強調したいテキスト文字列です。 ENVIRONVAR 環境変数の名前を表します。 [ERRORNAME] エラー番号の名前を表します。通常、errno 環境変数を求めます。 用語 重要語句を明示します。 ComputerOutput コンピュータが表示するテキスト文字列です。 UserInput 入力するコマンドなどのテキスト文字列を示します。 Command コマンド名か修飾子付きコマンド名を示します。 Variable コマンドや関数、情報内で、とりうる値の 1 つに置き換えられることを示す変 数の名前です。 [ ] 形式やコマンドの説明でオプションの内容を示します。内容が"|" で区切られ ているときにはその項目の 1 つを選ぶ必要があります。 { } 形式やコマンドの説明で必須の内容を示します。内容が"|" で区切られている ときにはその項目の 1 つを選ぶ必要があります。 ... 前にある要素を任意の回数だけ繰り返すことを示します。 | 選択リスト内の項目の区切りを示します。 v vi 序文 HP-UX は、さまざまな業界標準との互換性があるオペレーティングシステムを、HP 社が実現 したものです。UNIX® システム V リリース 4 オペレーティングシステムを基本とし、Fourth Berkeley Software Distribution の重要な機能を取り入れています。 この説明書には、マンページというシステム参照文書が含まれています。なお、個別項目は、マ ニュアルページまたは参照ページと言います。 一般情報 HP-UX の一般的な紹介及びマンページの形式については、introduction (9) マンページをご参照 ください。 セクション紹介 マンページは、introduction または 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. 9) intro (9) セクション 9 : 用語集 (vol. 9) vii viii Vol. 9 目次 セクション 5 セクション 7 セクション 9 Vol. 9 目次 セクション 5 セクション 7 セクション 9 目次 Vol.9 セクション 5: その他の機能 エントリ 名(セクション): 名称 説明 intro(5): intro…………………………………………………………………………………………………その他の機能の概要 acctresume: 空きディスクスペースがしきい値に達した場合のアカウンティングの一時停止と再開…………………… ………………………………………………………………………………………………………acctsuspend(5)参照 acctsuspend(5): acctsuspend, acctresume……………………………………………………………………………………… …………………………空きディスクスペースがしきい値に達した場合のアカウンティングの一時停止と再開 acl(5): acl……………………………………………………………………………………………アクセス制御リストの使い方 aclv(5): aclv………………………………………………………………………………JFSアクセス制御リスト(ACL)の使い方 aio(5): aio…………………………………………………………………………………………………POSIX 非同期 I/O 機能 aio_listio_max(5): aio_listio_max………………………listio() コールで指定できる POSIX 非同期 I/O 動作の最大数 aio_max_ops(5): aio_max_ops………………………………………キューに格納できる POSIX 非同期 I/O 動作の最大数 aio_monitor_run_sec(5): aio_monitor_run_sec………………………AIOスレッドプールのモニター実行頻度 (秒単位) aio_physmem_pct(5): aio_physmem_pct……………………………………………………………………要求/コールバック 機 構 を 使 用 す る P O S IX 非 同 期 I/ O 動 作 の た め に ロ ッ ク で き る 物 理 メ モ リ ー の パ ー セ ン テ ー ジ aio_prio_delta_max(5): aio_prio_delta_max……POSIX非同期 I/O要求の優先順位の最大値差分 (スローダウン係数) aio_proc_threads(5): aio_proc_threads……………………………AIOプールで許容されるプロセススレッドの最大数 aio_proc_thread_pct(5): aio_proc_thread_pct………………………………………………………………………………… …………………AIOプールで許容されるプロセススレッドの、全プロセススレッドに対するパーセンテージ aio_req_per_thread(5): aio_req_per_thread……………………保留中の AIO要求数と処理対象のスレッド数の比率 aliases(5): aliases……………………………………………………………………………………sendmail用の別名ファイル allocate_fs_swapmap(5): allocate_fs_swapmap……………………………………………………………………………… ………………ファイルシステム スワップにスワップマップデータ構造体を割り当てるタイミングの決定定 alwaysdump(5): alwaysdump…………カーネルパニックの発生時にダンプするカーネルメモリーページのクラスの定義 aries(5): Aries…………Itanium ベースのプロセッサファミリーでの PA-RISC アプリケーションのエミュレーション ascii(5): ascii…………………………………………………………………………………………ASCII 文字セットのマップ audio(5): Audio……………………………………………………………………………HP VUE で使用可能な音声ツール群 audit(5): audit……………………………………………………………………………………HP-UX 監査システムの使い方 chanq_hash_locks(5): chanq_hash_locks………………………………………………………………………………………… ……………チャネルキューのハッシュテーブルを保護するスピンロックの、ハッシュされたプールのサイズ complex(5): complex……………………………………………………………………………………複素数型の関数とマクロ core_addshmem_read(5): core_addshmem_read………………………………………………………………………………… ………………………………………読み取り可能共有メモリーをプロセスコアダンプに含めるかどうかの決定 core_addshmem_write(5): core_addshmem_write……………………………………………………………………………… ………………………………読み取り/書き込み共有メモリーをプロセスコアダンプに含めるかどうかの決定 create_fastlinks(5): create_fastlinks…………………………………高速シンボリックリンクを使用するシステム構成 curses(5): curses.h…………………………………………………………………………画面操作および最適化の関数定義 dbc_max_pct(5): dbc_max_pct……………………………………………………………………………………………………… ………………ファイル I/Oデータやメタデータのキャッシングに使用されるメモリーの最大パーセンテージ dbc_min_pct(5): dbc_min_pct……………………………………………………………………………………………………… ……………ファイル I/O データやメタデータのキャッシングに使用されるメモリーの最小パーセンテージ default_disk_ir(5): default_disk_ir…………………………………………………………………………………………… ……………………………SCSI サブシステムにおけるデバイスの書き込みキャッシュの使用の有効化/無効化 dirent(5): dirent.h………………………………………………ディレクトリストリームとディレクトリエントリーの書式 dld.so(5): dld.so……………………………………………………………………………………………ダイナミックローダー HP-UX 11i Version 2: August 2003 Hewlett-Packard Company ix 目次 Vol.9 エントリ 名(セクション): 名称 説明 dma32_pool_size(5): dma32_pool_size……………………………32ビット DMAプール用に予約するメモリーのサイズ dnlc_hash_locks(5): dnlc_hash_locks………………………………ディレクトリ名検索キャッシュ (DNLC)のロック数 dontdump(5): dontdump…………カーネルパニックの発生時にダンプしないカーネルメモリーページのクラスの定義 dst: 万国標準時 (グリニッジ標準時) と地域時間の差………………………………………………………timezone(5)参照 dump_compress_on(5): dump_compress_on……………………………………………………………………………………… …………カーネルパニックの発生時にメモリーページを圧縮してダンプするか非圧縮でダンプするかを選択 enable_idds(5): enable_idds…………………………………………………………………侵入検出データソースの有効化 environ(5): environ…………………………………………………………………………………………………ユーザー環境 eqmemsize(5): eqmemsize……………………………………………等価マップ予約プールの最小サイズ (ページ) の決定 executable_stack(5): executable_stack…………プログラムスタックをデフォルトで実行可能にするかどうかの制御 fcntl(5): fcntl……………………………………………………………………………………………ファイル制御オプション fenv(5): fenv………………………………………………………………………………………浮動小数点環境のマクロと関数 fs_async(5): fs_async……………………書き込み操作が完了する前の戻り値に対する書き込みを有効化 (ブール代数) fs_symlinks(5): fs_symlinks………………………………………パス名解決に使用されるシンボリックリンクの最大数 fs_wrapper(5): fs_wrapper………………ファイルシステム管理コマンドが使用する設定ファイルとバイナリファイル gssapi(5): gssapi……………………………………………………Generic Security Service Application Programming Interface hdlpreg_hash_locks(5): hdlpreg_hash_locks………………………………pregion スピンロックプールのサイズの指定 hfs_revra_per_disk(5): hfs_revra_per_disk…………………………………………………………………………………… ………逆方向順次読み取り時に1回の先読み動作で読み取られる HFS ファイルシステムブロックの最大数 hier(5): hier……………………………………………………………………………………………ファイルシステムの階層 hostname(5): hostname……………………………………………………………………………………………ホスト名の解決 hosts_access(5): hosts_access………………………………………………ホストアクセス制御ファイルのフォーマット hosts_options(5): hosts_options………………………………………………………ホストアクセス制御言語の拡張機能 inttypes(5): inttypes………………………………………………………………………………………基本的な整数データ型 ioctl(5): ioctl…………………………………………………………………………………………汎用デバイス制御コマンド kconfig(5): kconfig…………………………………………………………………………………カーネル構成コマンドの概要 kerberos(5): kerberos…………………………………………………………………………………Kerberos システムの概要 krs(5): krs…………………………………………………………………………………………カーネル レジストリ サービス ksi_alloc_max(5): ksi_alloc_max……………………システム全体で割り当てることができる待ち行列シグナルの上限 ksi_send_max(5): ksi_send_max……………………………………………1プロセスあたりの待ち行列シグナル数の上限 lang(5): lang………………………………………………………………………………………サポートされている言語の説明 langinfo(5): langinfo…………………………………………………………………………………………………言語情報定数 libcrash(5): libcrash………………………………………………………………クラッシュダンプへのアクセスライブラリ libcres.a(5): libcres.a………………………………………………………………………………libc.a の関数のサブセット limits(5): limits…………………………………………………………………………インプリメンテーションに特有の定数 man(5): man……………………………………………………………………………………マンページ書式化のためのマクロ manuals(5): manuals……………………………………………………………………HP-UX ドキュメンテーションのリスト math(5): math……………………………………………………………………………………………数学関数と定数および型 maxdsiz(5): maxdsiz, maxdsiz_64bit……すべてのユーザープロセスのデータセグメントの最大サイズ (バイト数) maxdsiz_64bit: すべてのユーザープロセスのデータセグメントの最大サイズ (バイト数)……………maxdsiz(5)参照 maxdsiz_64bit: すべてのユーザープロセスのデータセグメントの最大サイズ (バイト数)……………maxdsiz(5)参照 maxfiles(5): maxfiles………………………………………………プロセスごとのファイル記述子の論理的最大数の初期値 maxfiles_lim(5): maxfiles_lim……………………………………………プロセスごとのファイル記述子の物理的最大数 maxrsessiz(5): maxrsessiz, maxrsessiz_64bit……………………………………………………………………………… x Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol.9 エントリ 名(セクション): 名称 説明 …………Itaniumベース プラットフォーム上のユーザープロセスのRSE スタックの最大サイズ (バイト数) maxrsessiz_64bit: Itaniumベース システムのユーザープロセスの RSE スタックの最大サイズ (バイト数)………… ………………………………………………………………………………………………………………maxrsessiz(5) maxssiz(5): maxssiz, maxssiz_64bit………………すべてのユーザープロセスのスタックの最大サイズ (バイト数) maxssiz_64bit: すべてのユーザープロセスのスタックの最大サイズ (バイト数)………………………maxssiz(5)参照 maxssiz_64bit: すべてのユーザープロセスのスタックの最大サイズ (バイト数)………………………maxssiz(5)参照 maxtsiz(5): maxtsiz, maxtsiz_64bit…すべてのユーザープロセスのテキストセグメントの最大サイズ (バイト数) maxtsiz_64bit: すべてのユーザープロセスのテキストセグメントの最大サイズ (バイト数)…………maxtsiz(5)参照 maxtsiz_64bit: すべてのユーザープロセスのテキストセグメントの最大サイズ (バイト数)…………maxtsiz(5)参照 maxuprc(5): maxuprc……………………………………1ユーザーが同時に実行できるユーザープロセスの最大数の制限 maxusers(5): maxusers………………………………………………………………………………………………………(廃止) maxvgs(5): maxvgs……………………………システム上に作成/アクティブ化できる LVM ボリュームグループの最大数 max_acct_file_size(5): max_acct_file_size……………………………アカウンティングファイルの最大サイズの定義 max_async_ports(5): max_async_ports………………………同時に開くことができる非同期ディスクポートの最大数 max_mem_window(5): max_mem_window……が構成可能なグループ専用 32 ビット共有メモリーウィンドウの最大数 max_thread_proc(5): max_thread_proc…………………………1つのプロセスで可能な並行スレッドの最大数の定義 mesg(5): mesg……………………………………………………System V IPC メッセージのブート時における有効化/無効化 mknod(5): mknod.h…………………………………………………………デバイス番号を操作するマクロのヘッダファイル mm(5): mm…………………………………………………………………ドキュメントの整形に用いるMMマクロパッケージ mman(5): mman……………………………………………………………………………………メモリマッピングに関する定義 msgmap(5): msgmap…………………………………………System V IPC メッセージ空間リソースマップ内のエントリの数 msgmax(5): msgmax……………………………………………………System V IPC メッセージの最大サイズ (バイト単位) msgmnb(5): msgmnb………………………………1つの System V IPC メッセージ待ち行列内に格納できる最大バイト数 msgmni(5): msgmni……………………………………System V IPC メッセージ待ち行列 (ID) のシステム全体での最大数 msgseg(5): msgseg……………………………………………………システム内の Sytem V IPC メッセージセグメントの数 msgssz(5): msgssz……………………………………………………………System V IPC メッセージセグメントのバイト数 msgtql(5): msgtql………………………………………システム上に同時に存在可能な System V IPC メッセージの最大数 mtab: ………………………………………………………………………………………………………………pfs_fstab(5)参照 ncdnode(5): ncdnode……………………………………………オープンされた CDFSファイルの最大数 (システムワイド) nclist(5): nclist……………………………………………………………pty および tty データ転送に使用する cblock の数 ncsize(5): ncsize………………………………………………………ディレクトリ名検索キャッシュ (DNLC)のエントリ数 ndir(5): ndir.h…………………………………………………………………………HP-UXディレクトリストリームの形式 nfile(5): nfile……………………………………………………………………オープンファイルの最大数 (システムワイド) nflocks(5): nflocks………………………………………………………………………………………ファイルロックの最大値 ninode(5): ninode…………………………メモリー内で存在可能な、HFSファイルシステムのオープン iノードの最大数 nkthread(5): nkthread…………………………………………………………………同時に実行できるスレッドの数の制限 nproc(5): nproc…………………………………………………………………………同時に存在できるプロセスの数の制限 npty(5): npty………………………………………………………………………………………疑似テレタイプ (pty) の最大数 NSTREVENT(5): NSTREVENT……………………………………………………………未処理の STREAMS bufcallの最大数 nstrpty(5): nstrpty………………………………………………………ストリームベースの疑似テレタイプ (pty) の最大数 NSTRPUSH(5): NSTRPUSH……………………………………………単一ストリーム内の STREAMS モジュールの最大数 NSTRSCHED(5): NSTRSCHED………………………………………………実行する STREAMS スケジューラデーモンの数 nstrtel(5): nstrtel…………………………………………………………………………………………………………………… ………受信時の telnet セッションに対してカーネルがサポートできる telnet デバイスファイルの数の指定 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xi 目次 Vol.9 エントリ 名(セクション): 名称 説明 nswapdev(5): nswapdev………………………………………………………………スワップに使用できるデバイスの最大数 nswapfs(5): nswapfs………………………………………………………スワップに使用できるファイルシステムの最大数 nsysmap(5): nsysmap, nsysmap64………………………カーネル動的メモリーアロケーションマップ内のエントリの数 nsysmap64: カーネル動的メモリーアロケーションマップ内のエントリの数……………………………nsysmap(5)参照 orientation(5): orientation…………………………………………………………………………………ストリームの指向性 pam_unix(5): pam_unix…………UNIX 用認証、アカウント、セッション、およびパスワードの PAM 管理モジュール pam_updbe(5): pam_updbe………………………………………………………ユーザーポリシー定義サービスモジュール partition(5): partition…………………………………………………………………Partition コマンドに関する情報の表示 pa_maxssiz(5): pa_maxssiz_32bit, pa_maxssiz_64bit…………………………………………Itaniumースシステム上 PA-RISCエミュレータで実行されているユーザープロセスで使用されるスタックの最大サイズ (バイト) pa_maxssiz_64bit: Itaniumベース システム上の任意の PA-RISC ユーザープロセスで使用されるスタックの最大サ イズ (バイト) ………………………………………………………………………………………pa_maxssiz(5)参照 pfdat_hash_locks(5): pfdat_hash_locks………………………………………pfdat スピンロックプールのサイズの指定 pfs_exports(5): pfs_exports, pfs_xtab……………………………PFSクライアントへのディレクトリのエクスポート pfs_fstab(5): pfs_fstab, mtab…………………………………………………………………………………………………… …………………スタティックファイルシステムマウントテーブル、マウント済みファイルシステムテーブル pfs_xtab(5): PFSクライアントへのディレクトリのエクスポート………………………………………fps_exports(5)参照 physical_io_buffers(5): physical_io_buffers…………………………………………物理 I/O 動作用バッファーの総数 portal(5): portal………………………………………………………………アプリケーション用の「将来のウィンドウ」 pthread_stubs(5): pthread_stubs…………………C ライブラリにスタブが用意されている pthread 呼び出しのリスト quota(5): quota…………………………………………………………………………………………………ディスク割り当て rcsintro(5): rcsintro………………………………………………………………………………………RCS コマンドの説明 regexp(5): regexp……………………………………………………………正規表現およびパターンマッチング表記の定義 region_hash_locks(5): region_hash_locks………………………………………領域スピンロックプールのサイズの指定 remote_nfs_swap(5): remote_nfs_swap………………………………………………NFS 全体にわたるスワップの有効化 rtsched_numpri(5): rtsched_numpri…………………………………………………………………………………………… …………………………POSIX.1b リアルタイムアプリケーションに対してサポートされる優先順位の値の数 scroll_lines(5): scroll_lines……………………………Internal Terminal Emulator で使用されるスクロール可能な行数 scsi_maxphys(5): scsi_maxphys………………………………………………すべての SCSIデバイスの I/Oの最大許容長 scsi_max_qdepth(5): scsi_max_qdepth………………………ターゲットが実行のためにキューに入れる I/O の最大数 secure_sid_scripts(5): secure_sid_script……………………………………………………………………………………… …………………………………スクリプトの setuid ビットおよび setgid ビットを有効にするかどうかの制御 sema(5): sema……………………………………………………………ブート時の System V IPC セマフォの有効化/無効化 semaem(5): semaem…………………………………………………………………………………………終了時の修正の最大値 semmni(5): semmni………………………………………………………System V IPC システム全体のセマフォ識別子の数 semmns(5): semmns………………………………………………………………System V IPC システム全体のセマフォの数 semmnu(5): semmnu………………………………………………………System V IPC プロセスの取り消し構造体の最大数 semmsl(5): semmsl……………………………………………………………識別子ごとの System V IPC セマフォの最大数 semume(5): semume……………………………………………System V IPC のプロセスごとの取り消しエントリの最大数 semvmx(5): semvmx……………………………………………………………任意の単一 System V IPC セマフォの最大値 sendfile_max(5): sendfile_max……………………………sendfile で使用されるバッファーキャッシュページの最大数 shmem(5): shmem………………………………………………………………………System V 共有メモリーの有効化/無効化 shmmax(5): shmmax………………………………………………System V 共有メモリーセグメントの最大サイズ (バイト) shmmni(5): shmmni…………………………………………システム内の System V 共有メモリーセグメント識別子の数 xii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol.9 エントリ 名(セクション): 名称 説明 shmseg(5): shmseg……………………………………………プロセスごとの System V 共有メモリーセグメントの最大数 signal(5): signal.h…………………………………………………………………………………………………シグナルの説明 signal.h: シグナルの説明…………………………………………………………………………………………signal(5)参照 sis(5): sis………………………………………………Kerberos 方式の認証と認可によるインターネットの安全性サービス stat(5): stat.h………………………………………………………………………………………stat() 関数で返されるデータ stdarg(5): stdarg.h…………………………………………………………………可変個の引き数リストを操作するマクロ stdsyms(5): stdsyms………………………………………………………………………………………………………………… "名前付き定義" および HP-UX ヘッダファイルに基づいた名前空間のためのその他の詳細についての説明 STRCTLSZ(5): STRCTLSZ………………………………………………ストリームメッセージ制御の最大サイズ (バイト) streampipes(5): streampipes……………………………………………すべてのパイプの強制的な STREAMS ベース化 STRMSGSZ(5): STRMSGSZ……………………………………………ストリームメッセージデータの最大サイズ (バイト) st_ats_enabled(5): st_ats_enabled……………………………テープデバイスをオープン時に確保するかどうかの指定 st_fail_overruns(5): st_fail_overruns………………………………………………………………………………………… …………………物理レコードサイズより小さい可変ブロックモード読み取り要求が失敗するかどうかの判別 st_large_recs(5): st_large_recs…………………………stape ドライバで許可される論理レコードの最大サイズの指定 suffix(5): suffix……………………………………………………………………………………………ファイル名拡張子規約 swapmem_on(5): swapmem_on……………物理メモリーサイズを使用可能スワップスペースより大きくすることの許可 swchunk(5): swchunk……………………………………………………………スワップチャンクサイズ (1KB ブロック数) sysv_hash_locks(5): sysv_hash_locks…………………System V IPC のハッシュされたスピンロックプールのサイズ tcphashsz(5): tcphashsz……………………………………………………ネットワーク ハッシュテーブルのサイズの決定 term(5): term………………………………………………………………………………………………………ターミナル機能 thread_safety(5): thread_safety………………………………………………………………………………………………… ………libc、libpthread、および libgen インタフェースのうち、非スレッドセーフ、キャンセルポイント、キ ャンセルセーフ、非同期シグナルセーフ、非同期キャンセルセーフであるもののリスト timeslice(5): timeslice………………………………………………1秒あたりの時計単位時間でのスケジューリング間隔 timezone(5): timezone, dst………………………………………………万国標準時 (グリニッジ標準時) と地域時間の差 types(5): types………………………………………………………………………………………基本的なシステムデータ型 unctrl(5): unctrl………………………………………………………………………………………………………unctrl の定義 unistd(5): unitsd: unistd.h…………………………………………………………………………標準構造体と記号定数 unistd.h: 標準構造体と記号定数…………………………………………………………………………………unistd(5)参照 unlockable_mem(5): unlockable_mem……………………………ユーザープロセスがロックできない物理メモリーの量 unwind(5): unwind………………………………スタックアンワインド ライブラリのエントリー点と便利なマクロの概要 values(5): values………………………………………………………………………………………………機種に依存した 値 varargs(5): varargs…………………………………………………………………………可変個の引き数リストの取り扱い vps_ceiling(5): vps_ceiling………………………………………システムが選択できる最大ページサイズ (キロバイト) vps_chatr_ceiling(5): vps_chatr_ceiling………………………ユーザーが選択できる最大ページサイズ (キロバイト) vps_pagesize(5): vps_pagesize………………………システムによって選択されるページサイズの最小値 (キロバイト) vxfs_bc_bufhwm(5): vxfs_bc_bufhwm……VxFSバッファーキャッシュの上限値 (VxFSバッファーキャッシュサイズ vxfs_ifree_timelag(5): vxfs_ifree_timelag…………………………………………………………………………………… …………VxFSの iノードが開放されるまでのタイムラグ (freelistに iノードが残存する時間の下限値を指定) vxfs_max_ra_kbytes(5): vxfs_max_ra_kbytes………………………………………………………………………………… …単一 VxFSファイルシステムにおいてカーネルが未処理のままにしておける先読みデータの最大量 (KB) vxfs_ra_per_disk(5): vxfs_ra_per_disk………………………VxFSファイルシステムのディスクごとの先読み量 (KB) vx_maxlink(5): vx_maxlink…………………………………………………………………………ファイルのリンク数を設定 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xiii 目次 Vol.9 エントリ 名(セクション): 名称 説明 vx_ncsize(5): vx_ncsize…………………………………………………………………………………………………………… ……………VxFSファイルシステムが使用するディレクトリパス名キャッシュのために確保されるバイト数 vx_ninode(5): vx_ninode…………………………………………………………………内部ノードのテーブルサイズの指定 xferlog(5): xferlog……………………………………………………………………………………FTP サーバのログファイル セクション 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ファイル xiv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol.9 エントリ 名(セクション): 名称 説明 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 デバイスドライバ 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 リファレンスの概要説明 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xv ノート xvi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 セクション 5 その他の機能 セクション 5 その他の機能 intro(5) intro(5) 名称 intro − その他の機能の概要 説明 本セクションでは、マクロパッケージ、キャラクターセット テーブル、ファイルシステムの階層構造、オペ レーティングシステムの調整可能なカーネルパラメータなど、さまざまな機能について説明します。 参照 introduction(9) その他のドキュメント • 調整可能なカーネルパラメータ • 次の Web サイトに HP-UX のドキュメントが用意されています。 http://docs.hp.com (英文)、http://docs.hp.com/ja (和文) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-1 acctsuspend(5) acctsuspend(5) 名称 acctsuspend、acctresume − 空きディスクスペースがしきい値に達した場合のアカウンティングの一時停止と再 開 値 フェールセーフ デフォルト デフォルト acctsuspend: 2 acctresume: 4 可能な値 acctresume: -100 ∼ 101 acctsuspend: -100 ∼ acctresume-1 推奨値 acctsuspend: 2 ∼ 6 acctresume: 4 ∼ 10 (ただし、acctsuspend より大きい値) 説明 調整パラメータ acctsuspend および acctresume は、ディスクスペースの制約に基づいて、アカウンティングを 停止および再開するタイミングを制御します。アカウンティングに使用しているファイルシステムの空きディ スクスペースが一時停止のしきい値 (acctsuspend パーセント、スーパーユーザーのみが使用できるディスクス ペースのパーセンテージに対する相対的な値) に達すると、空きディスクスペースが再開のしきい値 (acctresume パーセント、スーパーユーザーのみが使用できるディスクスペースのパーセンテージに対する相対的な 値) に達するまでアカウンティングが一時停止します。 注記: acctsuspend および acctresume の値はスーパーユーザーのみが使用できるディスクスペースの パーセンテージに対して相対的に指定するため、これらのパラメータに負の値を指定することもでき ます。たとえば、スーパーユーザーがファイルシステムの作成時にそのファイルシステム上の 10 パー セントのディスクスペースを予約している場合、 acctsuspend が -5 で acctresume が0であれば、一時 停止のしきい値は総ディスクスペースの5パーセント、再開のしきい値は総ディスクスペースの 10 パーセントになります。 この調整パラメータの変更を行う対象ユーザー アカウンティングを使用しているすべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 Section 5-2 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 acctsuspend(5) acctsuspend(5) この調整パラメータの値を大きくする場合 アカウンティングを使用しているファイルシステム上の空きスペースのパーセンテージを高くする必要がある 場合に、これらの変数の値を大きくすることを検討してください。 この調整パラメータの値を大きくした場合の影響 これらの値が高いほど、収集されるアカウンティングデータの量が少なくなります。両値の幅が大きいほど、 多くのアカウンティングデータが失われる可能性があります。 この調整パラメータの値を小さくする場合 アカウンティングデータ用のディスクスペースを増やす必要があり、ファイルシステムからファイルを移動し ても必要なスペースを確保できない場合に、 acctsuspend の値を小さくします。 この調整パラメータの値を小さくした場合の影響 ファイルシステムの空きが少なくなると、ファイルシステムのパフォーマンス (アカウンティングレコードの 書き込みパフォーマンス) が低下します。それに伴って、アカウンティングプロセス全体のパフォーマンスも 低下します。 同時に変更する必要がある他の調整パラメータ これらの調整パラメータのどちらかを変更する場合は、両パラメータについて検討してください。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 acctsuspend および acctresume は、HP で開発されました。 参照 accton(1M) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-3 acl(5) acl(5) 名称 acl − アクセス制御リストの使い方 説明 アクセス制御リスト(「定義」参照)は、任意のアクセスコントロールのキー強制機構で、従来の HP-UX の機 構よりもよりきめ細かくユーザーとグループによるファイルのアクセス指定が可能です。 従来から HP-UX ではファイルの所有者などのような特権のないユーザーやプロセスがファイルや他のオブ ジェクトへの他のユーザーのアクセスを許可したり拒否したりできます。これはユーザーおよびグループ識別 子で決まる「知らなければ使えない」ということに基づいた方法です( passwd(4) および group(4) を参照)。こ のレベルの制御は、ファイルのパーミッションビットをセットし、操作して、所有者、グループ、およびその 他の者によるアクセスを承諾したり制限したりすることで実現されます( chmod(2) を参照)。 ACL はパーミッションビットよりもずっと多くの選択肢を提供します。 ACL によって、ファイルの所有者や スーパーユーザーは、ユーザー、グループまたはその組合せを列挙したリストに対してアクセスの許可拒否が 可能になります。 ACL はファイルに対する UNIX オペレーティングシステムの任意のアクセスコントロール (DAC) 機構のスー パーセットとしてサポートされているものであり、プロセス間通信 (IPC) などのその他のオブジェクトに対す るものではありません。 定義 データへのアクセス制御はコンピュータセキュリティの重要事項であるので、『Department of Defense Trusted Computer System Evaluation Criteria』に基づいた以降の定義を提示してから、アクセス制御と HP-UX 機密保護 機能の関連について説明します。 アクセス 「主体と客体(オブジェクト)との間のある種の相互作用で一方から他方への情報の流れを起こ すもの」主体には「人物、プロセス、物の間に情報の流れを起こすかシステム状態を変えるよ うなデバイス」があります。客体にはファイル(通常のファイル、ディレクトリ、スペシャル ファイル、 FIFO など)とプロセス間通信 (IPC) 機能(共有メモリ、メッセージ待ち行列、セマ フォ、ソケット)があります。 アクセス制御リスト (ACL) アクセス制御リストは、 (ユーザー.グループ, モード)というエントリーの集合で、すべての 可能なユーザーID/グループIDの組合せを指定するファイルに対応しています。 アクセス制御リスト(ACL)エントリー ACL の中のエントリーであり、ひとつのユーザーおよびグループIDの組合せについてのアク セス権を指定します。 変更パーミッション DAC の情報( パーミッションビットまたは ACL エントリー) を変更する権利です。変更パー ミッションはオブジェクト(ファイル)の所有者と特権ユーザーに対して承諾されています。 Section 5-4 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 acl(5) acl(5) 任意のアクセスコントロール(DAC) 「主体および主体が属するグループの識別子に基づいた客体へのアクセスの制限手段。あるア クセスパーミッションをもった主体はそのパーミッションを(おそらく間接的に)他のどの主体 にも渡すことができるという意味で、この制御は任意性を持つ」 モード 各ACL エントリー中の読取り、書込み、実行/ 検索パーミッションを表す3 ビットです。この ビットは、ファイルシステムの各ファイルに対応する16 のモードビットにさらにつけ加えて 存在できます( glossary(9) を参照)。 特権 アクセス制限条項を無視したり変更したりすることができる能力で、保護の方針のために課せ られたものであり、アクセス制御機構の中で実現されています。 HP-UX では、スーパーユー ザーとあるグループのメンバー( privgrp(4) を参照)のみが特権ユーザーです。 制限的と許可的 各ACLエントリーは、状況に応じて制限的とみなされたり、許可的とみなされたりします。 制限的エントリーは、このエントリーがなければ、より特定的でない基準やオプションの ACL エントリーによって承諾されるようなユーザーやグループアクセスを拒否します。許可 的エントリーは、このエントリーがなければ、より特定的でない基準やオプションのACL エ ントリーによって拒否されるようなユーザーやグループアクセスを許可します。 アクセス制御リストエントリー アクセス制御リスト(ACL)はパーミッションを指定するファイルに対応する(ユーザー.グループ, モード)とい うエントリーの集合です。各エントリーは1つのユーザーおよびグループIDの組合せについて、読取り、書込 み、実行/検索パーミッションからなるアクセスパーミッションを指定します。 アクセス制御リストと従来のファイルパーミッションとの関係を理解するために、以降のファイルとそのパー ミッションを考えてみてください。 -rwxr-xr-- james admin datafile ファイルの所有者はユーザー james です。 ファイルのグループは admin です。 ファイルの名前は datafile です。 ファイルの所有者パーミッションは rwx です。 ファイルのグループパーミッションは r-x です。 ファイルの他人に対するパーミッションは r-- です。 ACLでは、ユーザーIDとグループIDは /etc/passwd にある名前か番号で表現できます。以降の特別な記号が使 えます。 % 不特定のユーザーやグループを表現する記号 @ 現在のファイルの所有者かグループを表現する記号 ベースACLエントリー ファイルが生成されたとき、3 つのベースとなるアクセス制御リストエントリーがそのファイルのアクセス パーミッション ビットからマッピングされてファイルの所有者およびグループとその従来型のパーミッション HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-5 acl(5) acl(5) ビットとを照合します。ベースACLエントリーは chmod(2) および setacl(2) システムコールで変更できます。 (uid.%,mode) ファイルの所有者のためのベースACLエントリー (%.gid,mode) ファイルのグループのためのベースACLエントリー (%.%,mode) 他のユーザのためのベースエントリー (ここに記述した以外に短い形式の表記で表現される例があります。以下の「ACLの表記」を参照してくださ い。) オプションのACLエントリー オプションのアクセス制御リストエントリーには付加的な制御情報が指定されています。ユーザーは setacl(2) システムコールでこれをセットし、ファイルアクセスをさらに許可したり拒否したりすることができます。 13 個までのユーザー/グループの組合せを追加指定できます。 例えば、以降のオプションのアクセス制御リストエントリーをファイルに対して指定できます。 (mary.admin, rwx) グループadminのユーザーmaryに対して読取り、書込み、実行パーミッションを承諾す る。 不特定のグループのユーザーgeorgeに対してすべてのアクセスを拒否する。 (george.%, ---) ACLの表記 ACL を管理するためにサポートされたライブラリコールとコマンドは3つの異なる記号表現を認識します。 演算子形式 ACL 全体の入力と既存の ACL を変更するための形式で、 chmod(1) で使われるのと類似した 構文によります。 短い形式 可読性が高く、おもに出力のためのもの。 chacl(1) は lsacl(1) の出力を解釈できるように、こ の形式を入力として受け付けます。 長い形式 明確に表示するのに適した複数行にわたる書式で、出力のみにサポートされています。 前述の例ファイルの場合は、ベースACLエントリーはこの3つの表記で次のように表現できます。 演算子形式 james.% = rwx, %.admin = rx, %.% = r 短い形式 (james.%,rwx) (%.admin,r-x) (%.%,r--) 長い形式 rwx james.% r-x %.admin r-- %.% 基本的な ACL の使用法に加えて、いくつかのライブラリコールとコマンドが演算子形式と短い形式のバリ エーションを理解し、使用することができます。以下の「ACLのパターン」を参照してください。 ACLにおけるユニーク性 エントリーは各 ACL でユニークです。各ファイルについて、どの u と g の値の組についても(u.g, mode)という エントリーは 1 つのみ、 1 つの u の値には(u.%, mode) というエントリーは1 つのみ、1 つの g の値には(%.g, Section 5-6 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 acl(5) acl(5) mode)というエントリーは1つのみ、各ファイルには (%.%, mode)エントリーは1つのみしか存在できません。例 えば、 ACL は1つの(23.14, mode)というエントリーと1つの(23.%, mode)というエントリーを持つことはできま すが、2つの(23.14, mode)や2つの (23.%, mode)を持つことはできません。 アクセスチェックのアルゴリズム ACL のエントリーは指定の厳密さのレベルで4つに分類されます。アクセスのチェックで、 ACL は次の順番で 実効ユーザーおよびグループと比較されます。 (u.g, rwx) 特定のユーザー、特定のグループ (u.%, rwx) 特定のユーザー、不特定のグループ (%.g, rwx) 不特定のユーザー、特定のグループ (%.%, rwx) 不特定のユーザー、不特定のグループ プロセスの実効ユーザーIDと実効グループID (または何らかの補助グループID)の組合せについての 1つのエン トリーが適合すると、それ以降の(つまり、より特定的でない) エントリーはチェックされません。適合するも ののうちでは特定的でないエントリーよりもより特定的なエントリーの方が優先されます。 プロセスが1つまたは複数のグループIDを持っている場合(つまり、補助グループリストが空でない場合)、 1つ または複数の(u.g, mode)または (%.g, mode)エントリーが適合するかもしれません。このような場合は、(同じレ ベルの特定度、 u.gまたは %.gの)すべての適合するエントリーのアクセスモードが互いに OR になります。そ の結果として得られるモードビットが許可すれば、アクセスが承諾されます。エントリーはユニークなので、 各エントリー型のエントリーの並ぶ順番は重要ではありません。 従来のUNIXのパーミッションビットはベースACLエントリーにマップされているので、アクセスチェックの 中に含まれています。 読取りと書込みの両方を行うようにファイルをオープンするときのように、 1つのリクエストが1つまたは複数 のタイプのアクセスでできている場合、リクエストされたすべてのタイプのアクセスについてプロセスが許可 を受けていなければそのアクセスは承諾されません。プロセスがグループリストに2つのグループを持ってい て、その一方が読取りアクセスの許可のみを持ち、他方が書込みアクセスの許可のみを持っている場合でもそ のアクセスが承諾されることに注意してください。つまり、リクエストされたアクセスがどの1 つのエント リーについても承諾されていなくても、プロセスがいくつかのグループに属しているためにエントリーの組合 せによってそのアクセスが承諾されることがあります。 ACL の演算子形式(入力のみ) user . group operator mode [ operator mode ]... , ... 複数のエントリーは chmod(1) にあるようにカンマで区切られます。各エントリーの内容は、ユーザー識別子お よびグループ識別子、その後に続く chmod(1) が受け付けるモードシンタックスで記述された1つまたは複数の 演算子とモードキャラクタによって構成されます。 ACL 全体は1つの引き数でなければならないので、その中に空白や特殊文字がある場合はシェルに渡すときに 引用符で囲まなければなりません。空白は名前の中でなければ無視されます。 null ACL は正当なものであり、 状況によって「アクセスなし」または「変化なし」を意味します。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-7 acl(5) acl(5) 各ユーザーIDとグループIDは以下のもので表現できます。 適正なユーザー名かグループ名 name number 適正な数字ID値 % 「不特定なユーザーまたはグループ」を適合する。 @ 「現在のファイルの所有者またはグループ」を適合する。ファイルのu.% および %.g という ベースACLエントリーを参照するのに有用です。 演算子は各エントリーについて常に必要です。演算子は以下のものがあります。 = エントリーの全ビットに与えられたモードの値を設定する。 + エントリーの中の指定されたモードビットを設定する。 − エントリーの中の指定されたモードビットをクリアする。 モードは 0 ∼ 7 の8進数値で表現されます。もしくは r, w, および x の任意の組合せを任意の順番で与えること ができます(以下の例を参照)。 nullモードは演算子が = であればアクセスを拒否し、演算子が + または − であ れば「変化なし」を表します。 複数のエントリーや、エントリー中の複数の演算子モード部分は指定された順番に適用されます。競合があっ てもエラーにはならず、最後に指定されたエントリー、または演算子が有効になります。エントリーは何らか の特別な順番で並んでいなくても構いません。 chmod(1) は、ファイルの所有者、グループ、他人、全ユーザーを記号的に参照するのに、それぞれ u, g, o, a の みが使えることに注意してください。 ACL は任意のユーザーおよびグループ識別子について働くので、@が 簡便さのために用意されています。 正確な構文は次のとおりです。 acl ::= [entry[,entry]...] entry ::= id . id op mode [op mode]... id ::= name | number | % | @ op ::= = | + | − mode char ::= 0..7 | [char[char]...] ::= r | w | x ACLの短い形式(入力および出力) (user . group, mode) ... 短い形式は演算子形式と比べていくつかの面で異なっています。 • エントリーはカンマで区切られるのではなくかっこで囲まれます。 • 各エントリーはすべてのモードビットを含んだ形でモードを指定します。モードの値を + および − 演算子で変更することはできません。しかし、カンマの機能は演算子形式における = 演算子と 同様です。 Section 5-8 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 acl(5) acl(5) • 簡潔さのため、モードフィールドの出力中の設定しないパーミッションビットはハイフンで表さ れ、入力でもこの表現が許されます。これは ls(1) が用いる出力形式と同様です。 複数のエントリーは結合されます。演算子形式との整合性をとるため、ユーザーIDとグループIDを区切るのに ドット (.) が用いられます。 出力では、空白は名前の中(もし存在すれば)以外では印字されません。適合する名前がわからない時はID番号 が印字されます。「不特定のユーザーやグループ」については、どちらのIDでも % を印字することができま す。モードは <r|−><w|−><x|−> として表現されます。つまりモードは常に3文字で表現され、設定しないモー ドビットはハイフンで埋められます。 ACL がシステムから読み込まれたとき、エントリーは特定度で順序付 けされ、次に ID部分の数値で順序付けされます。 入力では、 ACL 全体が1つの引き数でなければならないので、その中に空白や特殊文字がある場合はシェルに 渡すときに引用符で囲まなければなりません。空白は名前の中でなければ無視されます。 null ACL は正当なも のであり、状況によって「アクセスなし」または「変化なし」を意味します。 ユーザーIDとグループIDは、演算子形式の場合と同様に表現されます。 モードは 0 ∼ 7 の8進数値で表現されます。もしくは r, w, x, および − (無視される) の任意の組合せを任意の 順番で与えることができます(以下の「例」を参照)。 nullモードはアクセスを拒否します。 冗長な指定はエラーにはならず、どのユーザーID/グループIDの組合せでも最後のものが有効になります。エ ントリーは何らかの特別な順番で並んでいなくてもかまいません。 正確な構文は次のとおりです。 acl entry id ::= [entry[entry]...] ::= (id.id,mode) ::= name | number | % | @ mode char ::= 0..7 | [char[char]...] ::= r | w | x | − ACLの長い形式(出力のみ) mode user . group 各エントリーは出力の1行を占めます。モードは、縦方向の検索を容易にするために (設定しないモードビット に)ハイフンを使って固定幅のフィールドで行の最初に表示されます。各ユーザーIDとグループIDは、名前が 知られていればそれを表示し、知られていなければ番号を表示し、「不特定のユーザーやグループ」について は、 % を表示します。エントリーはもっとも特定的なものからもっとも特定的でないものへと順序付けら れ、次にID部分の数値で順序付けられます。 表示されるすべての ACL が最低でも3つのエントリーであるベースACLエントリー (つまりuid.%, %.gid, %.%) をもっていることに注意してください。 正確な構文は次のとおりです。 acl ::= entry[<newline>entry]... HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-9 acl(5) acl(5) entry mode id ::= mode<space>id.id ::= <r|− ><w|−><x|−> ::= name | number | % ACLのパターン いくつかのライブラリコールとコマンドはパターンに適合するすべてのエントリーに対する処理を可能にする ため、正確には ACL でない ACL パターンを認識し、使用することができます。 ACL 構文は以降のように拡 張されます。 ワイルドカードユーザーとグループID ∗ ( ワイルドカード) というユーザー名またはグループ名は、 % ( 不特定のユーザーまたはグ ループ)を含めたどのエントリーのユーザーIDやグループIDにも適合します。 オンオフまたは無視されるモードビット 演算子形式の入力では、演算子 =, +, − は次のように適用されます。 = エントリーのモードの値がこのモードと正確に一致する。 + エントリーのモードの値でこのビットがオンになる。 − エントリーのモードの値でこのビットがオフになる。 + および − 演算子のみが用いられたとき、コマンドは指定していないモードビットの値は無 視します。 短い形式のパターンは演算子形式の = 演算子と同様にモードを扱います。 ワイルドカードモード値 演算子形式や短い形式の入力中の ∗ (ワイルドカード)というモード(たとえば、"ajs.%=∗" また は "(ajs.%,∗)" )は、演算子形式のエントリーの中に別のモード値がなければ、すべてのモード 値と適合します。また、同じ効果を得るために、エントリーのモード部分をすべて省略するこ ともできます。 エントリーは結合されない ユーザーIDとグループIDの値に適合するエントリーは結合されません。指定された各エント リーはパターンを受け付けるコマンドによって別個に適用されます。 サポートされたACLオペレーション setacl(2) および getacl(2) システムコールによって、あるファイルの ACL 全体を acl_entry 構造体の配列として 設定したり取り出したりすることができます。ファイルへのアクセス権を調べるには、 access(2) および getaccess(2) を参照してください。 ACL を管理するために、いろいろなライブラリコールが用意されています。 acltostr(3C) acl_entry 配列を表示可能な文字列に変換します。 strtoacl(3C) ACL 文字列を解析して acl_entry 配列に変換します。 Section 5-10 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 acl(5) acl(5) strtoaclpatt(3C) ACL パターン文字列を解析して acl_entry_patt 配列に変換します。 setaclentry(3C) fsetaclentry 1つのファイルの ACL 中の1つの ACL エントリーを追加、変更、削除します。 cpacl(3C) 1 つのファイルから別のファイルへ、 ACL とファイルの様々なモードビット( chmod(2) を参 fcpacl 照)をコピーし、所有権を必要ならば(以下を参照)転送し、リモートファイルを正しく扱いま す。 chownacl(3C) ACL に表現されるファイルの所有者やグループを変更します。つまり、所有権を転送します( 以下を参照)。 以降のコマンドが ACL とパーミッションを管理するのに使用可能です。 1つまたは複数のファイルの ACL の各エントリーまたはすべてのオプションのエントリーを chacl(1) 追加、変更、削除したり、ファイルへのすべてのアクセスを削除したり、 ACL をパーミッ ションビットに組み込んだりします。 lsacl(1) ファイルの ACL をリストします。 chmod(1) パーミッションビットおよびその他のファイルの様々なモードビットを変更します。 ls(1) 長い形式では、パーミッションビットとその他のファイル属性をリストします。 find(1) ファイルをその ACL も含めた属性に応じて検索します。 getaccess(1) ファイルへのアクセス権をリストします。 stat(2), chmod(2), chown(2)によるACLのインタラクション stat st_mode フィールドはファイルへの呼出し側のアクセス権を要約します。これは、呼出し側に 適応できる 1つまたは複数のオプションのエントリーをファイルがもっている場合にのみファ イルのパーミッションビットと異なります。 st_basemode フィールドはファイルの実際のパー ミッションビットを提供します。 st_acl フィールドはオプションのACL エントリーがファイ ルの ACL の中に存在することを示します。 st_mode フィールドはユーザー依存の要約で、 ACL のことを知らないで stat(2) および chmod(2) を使うプログラムが、より期待した結果を出すように、また、 stat(2) が NFS を通 したリモートファイルについて正当な情報を提供するようにします。 st_basemode および st_acl フィールドはローカルファイルにのみ有用です。 chmod IEEE 標準 POSIX 1003.1-1988 に準拠するために、 chmod(2) はファイルの ACL の中のオプ ションのエントリーをすべて削除します。残念ながら、 chmod(2) はパーミッションビットだ けでなくファイルの様々なモードビットの設定にも使われるので、ファイルの ACL を保護す るために特別な労力を要することがあります。 chown 新しいファイルの所有者やグループがオプションの (u.%, mode) または (%.g, mode)エントリー をファイルの ACL の中にすでに持っていない場合、古い所有者やグループのファイルアクセ HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 5-11 acl(5) acl(5) ス パーミッションビットとベースACLエントリーが受け継がれます。 (id1,mode1) −> (id2,mode1) これは従来型の動作です。しかし、新しいファイルの所有者やグループがオプションの (u.%, mode) または (%.g, mode) エントリーをファイルの ACL の中にすでに持っている場合、 ACL は変化しません。 (id1, mode1) −> (id1, mode1) (id2, mode2) −> (id2, mode2) ACL に関する現存する情報は保持されます。しかし、古いオプションのACLエントリーは新 しいベースACL エントリーまたはその逆になるので、ファイルのアクセス パーミッション ビットは変化します。 chown(2) によって ACL の所有権を転送することは、ファイルが異なったユーザーやグループ に転送されたり、所有者とは異なるユーザーやグループによって ( cpacl(3C) または chownacl(3C) を用いて)コピーされ、その後 ACL の内容の変更なしに元の所有者またはグループに 返されることを許します。この特別な複雑さは次の理由により必要とされます。 • ACL は (ファイルの所有者およびグループIDに結びつけられた) パーミッションビット にとって後方互換性を持ったスーパーセットであり、それに置き換わるものではありま せん。 • これによって、ユーザーやプログラムがパーミッションビットと ACL エントリーの組 合せを取り扱うよりも簡単にACLを扱うことができます。また、アクセス検査アルゴリ ズムも簡潔で対称性を持ったものになります。パーミッションビットは ACL エント リーを「侵食」したり「隠蔽」したりはしません。 例 演算子形式 以下は、 %.% エントリーを"other"ユーザーに対してそのファイルについて読取りのみを制限します。 chacl ’%.% = r’ myfile 以下は、任意のグループのユーザー"bill"に対して、 bill.% エントリーよりも特定的な制限的エントリー(例え ば bill.adm エントリーが書込みを拒否している場合)がなければそのファイルに対して書込みを許可します。 chacl ’bill.% +w’ myfile 以降の ACL の指定には2つのエントリーがあります。最初の1つはユーザーが12、グループが4のものに対して 書込み機能を削除し、読取り機能を追加しています。2番目のエントリーは不特定のグループの不特定のユー ザーに対してアクセスを拒否しています。 chacl ’12.4−w+r, %.% =’ myfile 以降のエントリーの組は、 u.%エントリーをファイルの所有者に対して読取りと実行の両方を許可して、書込 Section 5-12 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 acl(5) acl(5) みおよび実行機能を"other"ユーザー("%.%"エントリー) に対して追加します。モードキャラクタが実例のため にわざと繰り返されていることに注意してください。 chacl´@.% = 5, %.% + xwx’ myfile 短い形式 典型的な ACL の印字例を挙げます。これは、ユーザー jpc がグループ adm に所属する場合にそのファイルの 読取りと実行を許可し、ユーザー ajs がグループ trux に所属する場合にアクセスを拒否し、ユーザー jpc が任 意の( adm 以外の)グループに所属する場合にファイルの読取りのみを許可します。グループ bin に属するそれ 以外のユーザーはそのファイルの読取りと実行が可能で、それ以外のユーザーはファイルの読取りだけができ ます。 (jpc.adm,r−x)(ajs.trux,−−−)(jpc.%,r−−)(%.bin,r−x)(%.%,r−−) 以下は"other"ユーザーにファイルの読取りだけを許可します。 chacl ’(%.%,r)’ myfile 以下は、任意のグループに属するユーザー bill に対して書込みのみのアクセス許可を設定します。 chacl ’(bill.%,−w−)’ myfile 以下は、グループ4に属するユーザー12のためのエントリーを読取りと書込みを許可するように設定します。 chacl ’(12.4,wr)’ myfile 以下は、ファイルの所有者に読取りと実行の両方を許可するためのベース ACL エントリーを設定し、"other" ユーザー ("%.%"エントリー)に書込みと実行機能を設定します。 chacl ’(@.%, 5) (%.%, xwx)’ myfile 長い形式 先の例と同じ ACL を長い形式でプリントしたものを挙げます。 r−x jpc.adm −−− ajs.trux r−− jpc.% r−x %.bin r−− %.% ACLのパターン 以降のコマンドは、何らかのユーザー/グループの組合せに対して読取りアクセスを許可し書込みアクセスを拒 否するようなエントリーを含む ACL をもつファイルの場所を探します。 find / −acl ’∗.∗+r−w’ −print 以下は、グループ bin の任意のユーザーについてのエントリーと、任意のグループのユーザー tammy につい てのエントリーに、そのエントリーのモードの値に関わらず適合します。適合するオプションのACL エント リーは削除され、適合するベースACLエントリーのモードの値はゼロに設定されます。 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 5-13 acl(5) acl(5) chacl −d ’%.bin, tammy.∗=∗’ myfile 以下はすべてのエントリーに適合し、オプションのエントリーを削除してベースACLエントリーのモードの値 をゼロにセットします。 chacl −d ’(∗.∗,∗)’ myfile ヘッダ ヘッダ<sys/acl.h> <sys/acl.h> ヘッダファイルはACLあたりのエントリーの数をつかさどる以降の定数を定義します。 ベースエントリーを含むACLのエントリー数の最大値 NACLENTRIES NBASEENTRIES ベースエントリーの数 NOPTENTRIES オプションのエントリーの数 ACLエントリー構造体 struct acl_entry もまた定義され、以下のメンバーを含みます。 aclid_t uid; /* user ID */ aclid_t gid; /* group ID */ aclmode_t mode; /* see <unistd.h> */ <sys/acl.h> ヘッダは aclid_t および aclmode_t の型も定義します 不特定なユーザーIDとグループIDの値は次のように定義されています。 ACL_NSUSER 不特定なユーザーID ACL_NSGROUP 不特定なグループID 特別な nentries の値 ACL_DELOPT は setacl(2) がオプションのエントリーを削除するときに用いま す。 ヘッダ<sys/getaccess.h> <sys/getaccess.h> ヘッダは getaccess(2) が用いる定数を定義します。 uid のための特別なパラメータ値: UID_EUID 実効ユーザーID を利用 UID_RUID 実ユーザーID を利用 UID_SUID セーブされたユーザーID を利用 ngroupsのための特別なパラメータ値: Section 5-14 NGROUPS_EGID プロセスの実効 gid NGROUPS_RGID プロセスの実 gid NGROUPS_SGID プロセスのセーブされた gid NGROUPS_SUPP プロセスの補助グループのみ Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 acl(5) acl(5) NGROUPS_EGID_SUPP プロセスの実効 gid + 補助グループ NGROUPS_RGID_SUPP プロセスの実 gid + 補助グループ NGROUPS_SGID_SUPP プロセスのセーブされた gid + 補助グループ ヘッダ <acllib.h> <acllib.h> ヘッダファイルは ACL がサポートするライブラリコールが使ういくつかの定数を定義しています。 acltostr() のための ACLの記号形式: FORM_SHORT FORM_LONG さまざまなコールのマジックナンバー: ACL_FILEOWNER ファイルの所有者ID ACL_FILEGROUP ファイルのグループID ワイルドカードユーザーID ACL_ANYUSER ACL_ANYGROUP MODE_DEL ワイルドカードグループID 1つのACLエントリーの削除 ACLエントリーの有効なモードビットのためのマスク: MODEMASK (R_OK | W_OK | X_OK) <acllib.h> ヘッダは ACL パターンエントリー構造体 struct acl_entry_patt も定義しています。これは次のメン バーを含んでいます。 aclid_t uid; /* user ID */ aclid_t gid; /* group ID */ aclmode_t onmode; aclmode_t offmode; /* mode bits that must be off */ /* mode bits that must be on */ 警告 ACL は通常のファイルやディレクトリに対して使うためのものです。オプションのACLエントリーは、ターミ ナル スペシャルファイルや LP スケジューラ コントロールファイルなどの、あるシステムユーティリティが操 作するファイルへの使用は奨められません。これらのユーティリティは chmod(2) の呼出しの結果オプションの エントリーを意図していた制限とともに削除してしまい、予期しないアクセス権限の増加が起きるかもしれま せん。 ほとんどのサポートされたユーティリティはACLを正しく取り扱いますが、すべてではありません。ただし、 fbackup(1M) と frecover(1M) ファイルアーカイブ ユーティリティだけはアクセス制御リストを正しく扱いま す。オプションのACL エントリーを持ったファイルのACL を扱えない( アーカイブプログラム ar(1), cpio(1), ftio(1), tar(1), dump(1M) のような)プログラムを使うときは、データが失われないようにそれぞれの参照ページ に含まれたACL情報に注意してください。 ユーザー名が /etc/passwd ファイルにまたはグループ名が /etc/group ファイルに % または@として、あるいは HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 5-15 acl(5) acl(5) パターンに∗ として定義されている場合、 ACL 構文は、それらの記号が別の意味を持っているのでその名前を それ自身として参照することはできません。しかし、そのようなユーザーまたはグループでもID番号を用いて 参照することはできます。ユーザー名やグループ名は以下の文字を含むことはできません。 . ユーザー名の中で使わないでください。 + グループ名の中で使わないでください。 − グループ名の中で使わないでください。 = 演算子形式の入力中のグループ名に使わないでください。 , 短い形式または演算子形式のパターンに使わないでください。 ) 短い形式のパターンに使わないでください。 @(ファイルの所有者またはグループ)や * (ワイルドカード)という記号を用いた ACL のパターンを、一方が特 定的な値をもち、他方が@または ∗ を用いてファイルは等しいがモードの値が異なるという 2つのエントリー を与えることで、特定のファイルには適合できず、その所有権に依存するように指定できます。例えば、 find / −acl ’(ajs.%,r)(@.%,rw)’ −print は ajs が所有するファイルには適合できません。 制約 NFS NFS はリモートファイルの ACL をサポートしていません。各マニュアルのエントリーはそのような環境 下においてさまざまなシステムコール、ライブラリコール、およびコマンドの振舞いを指定しています。 オプションのエントリーを持ったファイルをネットワークを通して転送するときや、リモートファイルを 操作するときには、オプションのエントリーが何の警告もなしに削除されることがありますので注意して ください。 著者 ここに記述されたアクセス制御リストの設計は HP で開発されました。 ファイル <sys/acl.h> setacl(2) と getacl(2) をサポートするヘッダファイル <sys/getaccess.h> getaccess(2) をサポートするヘッダファイル <acllib.h> ACL ライブラリコールをサポートするヘッダファイル /etc/passwd ユーザー名およびユーザーIDとグループIDの値を定義するファイル /etc/group グループ名を定義するファイル 参照 chacl(1), chmod(1), cp(1), find(1), getaccess(1), ln(1), ls(1), lsacl(1), mv(1), rm(1), fbackup(1M), frecover(1M), fsck(1M), fsdb(1M) access(2), chmod(2), chown(2), creat(2), getaccess(2), getacl(2), mknod(2), open(2), setacl(2), stat(2), acltostr(3C), chownacl(3C), cpacl(3C), setaclentry(3C), strtoacl(3C), group(4), passwd(4), privgrp(4), aclv(5) Section 5-16 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 aclv(5) aclv(5) 名称 aclv − JFSアクセス制御リスト(ACL)の使い方 説明 アクセス制御リスト(ACL)は、任意のアクセス制御を行うための主要な機構であり(以下の「定義」を参照)、 従来の HP-UX による機構よりもきめ細かくユーザーやグループによるファイルアクセスを制御できます。 従来からHP-UX では、特権のないユーザーやプロセス( ファイルの所有者など) が、「必要最小限の情報の開 示」原則に従って、他のユーザーによるファイルやその他オブジェクトへのアクセスを、ユーザー識別子やグ ループ識別子に基づいて許可または拒否することができます( passwd(4) および group(4) を参照)。このレベル のアクセス制御は、ファイルのパーミッションビットを設定または操作して、所有者、グループ、およびその 他ユーザーによるアクセスを許可または制限することにより実現されています( chmod(2) を参照)。 ACLでは、パーミッションビットよりもさらにきめ細かい設定が可能です。ファイルの所有者やスーパーユー ザーはACLを使って、ファイルの所有者や所有グループ以外のユーザーまたはグループを列挙したリストに対 して、アクセスを許可または拒否することができます。 ACL は、UNIX オペレーティングシステムのファイルに対する任意のアクセスコントロール(DAC) 機構のスー パーセットとしてサポートされています。プロセス間通信(IPC)などのその他オブジェクトをサポートするもの ではありません。 このマニュアルページは、JFSファイルシステム上で実装されるACLについてのみ説明しています。 HFSファ イルシステムにおけるACLについては、 acl(5) を参照してください。 定義 データへのアクセス制御はコンピュータセキュリティの重要事項であるため、ここでは最初に『Department of Defense Trusted Computer System Evaluation Criteria』に基づく以下の定義を説明してから、アクセス制御の概念 と、アクセス制御とHP-UXセキュリティ機能の関連について詳しく説明していきます。 アクセス 「主体と客体(オブジェクト)との間のある種の相互作用で、一方から他方への情報の流れを起 こすもの」主体とは「客体間に情報の流れを起こしたり、システム状態を変えたりするよう な、人物、プロセス、デバイスなど」を指します。また客体とは、ファイル ( 通常のファイ ル、ディレクトリ、スペシャルファイル、FIFOなど)や、プロセス間通信(IPC)機能(共有メモ リ、メッセージ待ち行列、セマフォ、ソケット)などを指します。 アクセス制御リスト(ACL) アクセス制御リストは、(ユーザー|グループ, モード)形式のエントリーの集合であり、アクセ ス可能なすべてのユーザーID やグループID に対するパーミッションを指定する必要がある ファイルに付随して定義されています。 アクセス制御リスト(ACL)エントリー ACL 内のエントリーであり、ファイルの所有者、所有グループ、グループクラス、追加ユー ザー、追加グループ、およびその他ユーザーのアクセス権を指定します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-17 aclv(5) aclv(5) 変更パーミッション DAC情報( パーミッションビットまたはACL エントリー) を変更する権利です。変更パーミッ ションはオブジェクト(ファイル)の所有者および特権ユーザーに与えられます。 任意のアクセスコントロール(DAC) 「主体および主体が属するグループの識別子に基づいた客体へのアクセス制限手段。あるアク セスパーミッションを持つ主体は、そのパーミッションを(おそらくは間接的に)他のどの主体 にも渡すことができるという意味で、この制御は任意性を持つ」 モード 各ACL エントリーに含まれる、読取り、書込み、および実行/ 検索のパーミッションを表す3 つのビットです。これらのビットは、ファイルシステム内の各ファイルに対応する16 モード ビットに追加する形式で存在できます( glossary(9) を参照)。 特権 セキュリティ方針に基づくアクセス制限条項を無視または変更できる能力であり、アクセス制 御機構の中で実現されています。 HP-UXでは、スーパーユーザーと特定グループのメンバー( privgrp(4) を参照)のみが特権ユーザーになります。 制限的と許可的 各ACLエントリーは、状況に応じて制限的とみなされる場合と許可的とみなされる場合があ ります。制限的エントリーとは、より一般的なベースまたはオプションのACL エントリーで 許可されるユーザー/グループアクセスを、拒否する働きをします(以下を参照)。許可的エン トリーとは、より一般的なベースまたはオプションのACLエントリーで拒否されるユーザー/ グループアクセスを、許可する働きをします。 アクセス制御リストエントリー アクセス制御リスト(ACL)は1行エントリーの集合であり、パーミッションを指定する必要があるファイルに関 連付けられます。各エントリーには、1つのユーザーIDまたはグループIDに対する、読取り、書込み、および 実行/検索をはじめとする一連のアクセスパーミッションを指定します。 アクセス制御リストと従来のファイルパーミッションとの関係を理解するために、以下に示すファイルとその パーミッションについて考えてみることにします。 -rwxr-xr-- james admin datafile このファイルの所有者はユーザーjamesです。 このファイルのグループはadminです。 このファイルの名前はdatafileです。 このファイルの所有者パーミッションはrwxです。 このファイルのグループパーミッションはr-xです。 このファイルのその他パーミッションはr--です。 ACLではユーザーIDとグループIDは、 /etc/passwd に指定されている名前または番号で表現できます。 ACL表記 JFS ACL管理用のコマンドは、以下の記号表現を認識します。 Section 5-18 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 aclv(5) aclv(5) [d[efault]:]u[ser]:[uid]: perm [d[efault]:]g[roup]:[gid]: perm [d[efault]:]c[lass]: perm [d[efault]:]o[ther]: perm プリフィックスが d: または default: となっているACLエントリーは、ディレクトリ用のACLにのみ指定でき ます。このエントリーの内容はそのディレクトリへのアクセス権の決定には使用されず、ディレクトリ内に作 成されるファイルやサブディレクトリに適用されます (以下の「ACL継承」を参照)。 uid フィールドおよび gid フィールドにはユーザーまたはグループの数値ID、あるいは /etc/passwd または /etc/group に指定されているこれらのIDに対応する文字列を指定します。 perm フィールドには記号形式( r、 w、 x、および - の組み合わせ)、または数値形式でアクセスパーミッションを指定します。数値形式は0∼7の 8進数値で、読取りパーミッションを4、書込みパーミッションを2、実行パーミッションを1として、その総和 で表します。 ベースACLエントリー 任意のファイルが作成される際には、アクセス制御リストの4つのベースエントリーがファイル用のアクセス パーミッションビットからマッピングされて、ファイルの所有者とグループ、および従来型のパーミッション ビットの内容が正しく設定されます。これを「最小ACL」と呼びます。ベースACLエントリーは chmod(2) お よび acl(2) システムコールで変更できます。 u:: perm ファイルの所有者に対するベースACLエントリー g:: perm ファイルのグループに対するベースACLエントリー c:: perm ファイルのグループクラスに対するベースACLエントリー o:: perm その他ユーザーに対するベースACLエントリー ACL が最小の状態、つまりオプションのACL エントリーがない場合は( 以下を参照)、 group と class のパー ミッションは完全に同一になります。 オプションのACLエントリー アクセス制御リストのオプションのエントリーには、追加のアクセス制御情報を指定します。 acl(2) システム コールを使ってオプションのエントリーを設定すると、ファイルアクセスをさらに詳細に許可または拒否する ことができます。オプションのACLエントリーは最大13個まで指定できます。 例えばあるファイルに対して、以下に示すオプションのアクセス制御リストエントリーを追加できます。 u:mary:rwx ユーザーmaryに対して、読取り、書込み、および実行のアクセス権を与えます。 user:george:--- ユーザーgeorgeによる一切のアクセスを拒否します。 g:writers:rw- グループwriters のメンバーに対して、読取りおよび書込みのアクセス権を与えま す。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-19 aclv(5) aclv(5) クラスエントリー ACL内に複数の user エントリーまたは複数の group エントリーがある場合は、 class エントリーに、追加の user エントリーおよび group エントリーで与えられる最大のパーミッションを指定します。あるパーミッショ ンに関して、それが class エントリーで許可されていなければ、他のACLエントリーでもそのパーミッション を許可できません ( ただし最初の user ( 所有者) エントリーと other エントリーは除く)。そのため特定のユー ザーまたはグループに対するパーミッションが拒否されることがあります。このように class エントリーは、 ファイルパーミッションの上限として機能します。 ACL内に複数の user エントリーまたは group エントリーがある場合は、追加の user および group エントリー の集合は groupclass エントリーとして参照されます。これは、これらの追加エントリーによって与えられる実 効パーミッションが、 class エントリーによって制限されるためです。 ACL内に追加のエントリーがある場合は、 class エントリーの値が ls -l でレポートされる所有グループのパー ミッションと異なっていてもかまいません。これは有益な点であり、つまり chmod(1) コマンドを使って、追加 のACLエントリーが設定されているファイルのパーミッションを適宜変更できることを意味します。 ACLにおけるユニーク性 各エントリーは、それぞれのACL内でユニークです。各種のベースエントリーは1つずつしか存在できず、ま た各ユーザーIDまたはグループIDに対しては、それぞれ1つのエントリーしか指定できません。同様に、各種 のデフォルトのベースエントリーも1 つずつしか存在できず、また各ユーザーID またはグループID に対して は、それぞれ1つのデフォルトエントリーしか指定できません。 ACL継承 ディレクトリ用のACLにデフォルトエントリーが含まれている場合、これらのエントリーはディレクトリ自体 に対するアクセス権の決定には使用されません。その代わりに、そのディレクトリ内にファイルが作成される 都度、ディレクトリのデフォルトACLエントリーが、新しいファイルに対する非デフォルトのACLエントリー として追加されます。 例えばディレクトリ /a が、 getacl(1) によって以下のようにレポートされるACLを持っているとします。 # file: /a # owner: alpha # group: uno user::rwx group::rwx class:rwx other:rwx default:user:beta:r-default:user:gamma:r-default:group:dos:--default:group:tres:--この場合、ディレクトリ /a 内に作成される新しいファイルのACL は、作成者のumask (022 など) と、 /a のデ Section 5-20 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 aclv(5) aclv(5) フォルトACLエントリーの組み合わせを使って、以下のように初期化されます。 # file: /a/file # owner: creator_uid # group: creator_gid user::rwuser:beta:r-user:gamma:r-group::r-group:dos:--group:tres:--class:r-other:r-新しいサブディレクトリの作成時には、親ディレクトリのデフォルトACLエントリーが新しいサブディレクト リのACLに2回追加されます。 1回目はサブディレクトリの非デフォルトのACLエントリーとして、2回目はサ ブディレクトリのデフォルトACLエントリーとしてです。このようにしてデフォルトACLエントリーは、ディ レクトリのツリーが作成される都度、順番に継承されていきます。前出の例でファイルではなくディレクトリ を作成した場合は、そのACLは以下のようになります。 # file: /a/dir # owner: creator_uid # group: creator_gid user::rwx user:beta:r-user:gamma:r-group::r-x group:dos:--group:tres:--class:r-x other:r-x default:user:beta:r-default:user:gamma:r-default:group:dos:--default:group:tres:--- アクセスチェックのアルゴリズム アクセス側プロセスの実効ユーザーID (EGID)と実効グループID (EGID)に与えるパーミッションをそれぞれ決 定するには、以下のチェックが次に示す順番どおりに実行されます。 プロセスのEUID がファイルの所有者と同一である場合は、 user:: エントリーに指定されたパーミッ ションが与えられます。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-21 aclv(5) aclv(5) EUIDがいずれかの追加 user:uid: エントリーに指定されているUIDと一致する場合は、そのエントリー に指定されたパーミッションと class エントリーに指定されたパーミッションとのビットごとの論理積 が与えられます。 プロセスのEGID がファイルの所有グループと同一である場合は、 group:: エントリーに指定された パーミッションが与えられます。 EGID がいずれかの追加 group:gid: エントリーに指定されているUID と一致する場合は、そのエント リーに指定されたパーミッションと class エントリーに指定されたパーミッションとのビットの論理積 が与えられます。 それ以外の場合は、 other エントリーに指定されたパーミッションが与えられます。 上位にあるチェックでアクセス権が決定された場合は、それ以降のチェックは行われません。 サポートされたACLオペレーション ACLの設定、取り出し、またはカウントには、 acl(2) システムコールを使用します。 ACLの設定または変更に は、 setacl(1) コマンドを、ACLの取得には getacl(1) コマンドを使用します。特定のユーザーIDまたはグルー プIDに与えられるパーミッションは、 getaccess(1) コマンドと getaccess(2) システムコールによって決定できま す。特定のACLプロパティを持つファイルは、 find(1) の −aclv オプションを使って検索できます。 stat(2)、chmod(2)、chown(2)とACLの対話 stat st_mode フィールドには、ファイルに対する呼出し側のアクセス権が要約されます。このフィールド の値は、呼出し側に適用される1つまたは複数のオプションのエントリーがある場合にのみ、ファイ ルのパーミッションビットと異なります。 st_basemode フィールドは、ファイルの実際のパーミッ ションビットを示します。 st_aclv フィールドは、ファイルのACL 内にオプションのACL エントリー が存在することを示します。 st_mode フィールドはユーザー依存の要約であり、ACL を認識せずに stat(2) および chmod(2) を使用 するプログラムが期待どおりの結果を生成したり、 stat(2) がNFSを介したリモートファイルについて 適切な情報を提供できるようにします。 st_basemode フィールドおよび st_aclv フィールドは、ローカ ルファイルの場合にのみ役立ちます。 chmod chmod(2) システムコールを使ってグループのパーミッションビットを設定すると、ファイルの class エントリーに影響を与え、さらにこのエントリーが追加の user:uid: エントリーおよび group:gid: エ ントリーによって与えられるパーミッションに影響を与えます。特に、 chmod(2) を使ってファイルの パーミッションビットをすべて0に設定すると、追加の user:uid: エントリーまたは group:gid: エント リーによって与えられているパーミッションに関わらずに、そのファイルに対するすべてのアクセス 権が削除されます。 chown chown(2) を使ってファイルの所有者または所有グループを、既存の user:uid: エントリーまたは group:gid: エントリーに指定されている UID またはGID に変更した場合は、これらのエントリーは ACLからは削除されませんが、 user:: エントリーまたは group:: エントリーの方が優先されるため、 いずれにせよ使用されることはありません。 Section 5-22 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 aclv(5) aclv(5) ヘッダ ヘッダ<sys/acl.h> <sys/aclv.h> ヘッダファイルには、 ACL ごとにエントリー数を管理するための以下の定数が定義されていま す。 NACLVENTRIES ベースエントリーを含めた、各ACL内のエントリー数の最大値 NACLBASE ベースエントリーの数 以下のメンバーを含むACLエントリー構造体 struct acl も定義されています。 int a_type; /* type of entry */ uid_t a_id; /* group ID */ ushort a_perm; /* see <unistd.h> */ <sys/aclv.h> ヘッダには、 a_type フィールド用の有効な値のセット、および acl(2) システムコールの cmd 引き 数用の有効な値も定義されています。 ヘッダ <sys/getaccess.h> <sys/getaccess.h> ヘッダには、 getaccess(2) で使用する定数が定義されています。 uid のための特別なパラメータ値: UID_EUID 実効ユーザーIDに使用 UID_RUID 実ユーザーIDに使用 UID_SUID セーブされたユーザーIDに使用 ngroupsのための特別なパラメータ値: NGROUPS_EGID プロセスの実効gid NGROUPS_RGID プロセスの実gid NGROUPS_SGID プロセスのセーブされたgid NGROUPS_SUPP プロセスの補助グループのみ NGROUPS_EGID_SUPP プロセスの実効gid+補助グループ NGROUPS_RGID_SUPP プロセスの実gid+補助グループ NGROUPS_SGID_SUPP プロセスのセーブされたgid+補助グループ 警告 ACLでは、スーパーユーザーのアクセス権は制限できません。 サポートされている大部分の(すべてではない)ユーティリティは、ACLを正しく処理できます。ただし、ファ イルアーカイブ ユーティリティについては fbackup(1M) および frecover(1M) のみがアクセス制御リストを適切 に処理できます。オプションのACLエントリーを含んだファイルのACLを扱えないプログラム(アーカイブプ ログラムの ar(1)、 cpio(1)、 ftio(1)、 tar(1)、 dump(1M) など)を使用する場合は、それぞれの参照ページに記 載されているACL情報を確認して、データを失うことがないように注意してください。 HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 5-23 aclv(5) aclv(5) 制約 NFS NFSはリモートファイルのACLをサポートしていません。個々のマニュアルエントリーは、それぞれの環 境下におけるさまざまなシステムコール、ライブラリコール、およびコマンドの動作を説明するもので す。オプションのエントリーを持ったファイルをネットワークを介して転送したり、リモートファイルを 操作したりするときには、オプションのエントリーが警告なしに削除されることがあるため注意してくだ さい。 著者 ここで説明したアクセス制御リストは、AT&Tで開発されました。 ファイル <sys/aclv.h> acl(2) をサポートするヘッダファイル。 /etc/passwd ユーザー名、およびユーザーIDとグループIDを定義。 /etc/group グループ名を定義。 参照 chmod(1), cp(1), find(1), getaccess(1), getacl(1), ln(1), ls(1), mv(1), rm(1), setacl(1), fbackup(1M), frecover(1M), fsck(1M), fsdb(1M) access(2), acl(2), chmod(2), chown(2), creat(2), getaccess(2), mknod(2), open(2), stat(2), aclsort(3), cpacl(3), group(4), passwd(4), privgrp(4), acl(5) Section 5-24 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 aio(5) aio(5) 名称 aio − POSIX 非同期 I/O 機能 構文 #include <aio.h> 説明 POSIX 非同期 I/O 機能は、 IEEE Standard 1003.1b-1993 の Section 6.7 、 Standard for Information Technology 、 Portable Operating System Interface (POSIX) 、 Part 1: System Application Program Interface (API) 、 Amendment 1: Realtime Extensions (C Language) を実現します。この機能によって、プロセスあるいはスレッドは、同時に実行 する複数の読み込み/書き込み操作を複数のファイルに対して開始したり、要求した操作の完了通知を待ったり 取得したり、完了した操作の状態を検索したりすることができます。 POSIX 非同期 I/O 機能の目的は、計算お よび I/O 処理による情報処理の複数の要素をオーバーラップさせることをプロセスあるいはスレッドに許可す ることです。 インタフェース関数 POSIX 非同期 I/O 機能には、次のインタフェース関数が含まれています。 aio_read() 非同期読み込み操作を開始します。 aio_write() 非同期書き込み操作を開始します。 lio_listio() 非同期 I/O 操作のリストを開始します。 aio_suspend() 1 つまたは複数の非同期 I/O 操作の完了を待ちます。 aio_error() 非同期 I/O 操作のエラーステータスを検索します。 aio_return() 非同期 I/O 操作の戻りステータスを検索し、関連するシステム資源をすべて解放します。 aio_cancel() 保留中の非同期 I/O 操作の取り消しを要求します。 aio_fsync() 非同期操作が指定されているファイルの媒体イメージの同期を要求します。 これらの関数を使用するには、コンパイラまたはリンカーのコマンド行上で -lrt を指定することによって、リ アルタイムライブラリ内にリンクします。 非同期 I/O 制御ブロック 非同期 I/O 制御ブロック (aiocb) は、すべての非同期 I/O 関数へのパラメータとして使用されます。 aiocb は、 aio_read()、 aio_write()、または lio_listio() への呼び出しの中で非同期 I/O 操作のパラメータを指定すると、そ の後、 aio_cancel()、 aio_suspend()、 aio_fsync()、 aio_error()、または aio_return() が呼び出されたときに、 待ち行列に入っている非同期 I/O 操作の「ハンドル」として使用されます。 aiocb 構造体には、以下のメンバーが含まれています。 int aio_fildes; /* file descriptor */ off_t aio_offset; /* file offset */ void *aio_buf; /* location of buffer */ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-25 aio(5) aio(5) size_t aio_nbytes; /* length of transfer */ int /* request priority offset */ aio_reqprio; struct sigevent aio_sigevent; /* signal number and value */ int aio_lio_opcode; /* operation to be performed */ aio_read()、 aio_write()、または lio_listio() に指定する aiocb には、通常の同期式 read() または write() 関数呼 び出しで指定するパラメータが含まれていなければなりません。この中で、 aio_fildes は fildes に該当し、 aio_nbytes は、 nbytes に該当し、 aio_offset は、暗黙のファイルオフセットに該当します。 aiocb は、固有の リアルタイムおよび非同期 I/O 要件を満たすために、要求優先順位のデルタ値 (aio_reqprio) と、シグナル方式 情報を指定することもできます。 lio_listio() 関数の場合、 aio_lio_opcode フィールドは、操作が読み込みまた は書き込みのどちらであるかを指定します。 特定の aiocb に対する非同期 I/O 操作が待ち行列に入ると、そのアドレスは、他の非同期 I/O 操作 のハンドル として使用され、待ち行列に入っている 1 つの操作を参照するためにだけ使用することができます。 aiocb 構造体に定義されたその他のフィールドは、将来の用途と拡張のために予約されています。これらの フィールドは、非同期 I/O 機能では、すべて無視されます。 明白な定数 POSIX 標準によって定義される値は、 aio.h 内に宣言されています。 aio_cancel() 関数によって、次の値が戻されます。 AIO_CANCELED 指定したすべての非同期 I/O 操作の取り消しに成功しました。 AIO_NOTCANCELED 指定した非同期 I/O 操作の中の少なくとも 1 つの取り消しができませんでした。 AIO_ALLDONE この要求を処理する前に、指定したすべての非同期 I/O 操作が完了しました。 次の値は、 lio_listio() 関数からの復帰を制御する flags フィールドの有効な値です。 LIO_WAIT 指定したすべての操作が完了するのを待ちます。 LIO_NOWAIT 操作が完了するのを待たないで戻ります。 次の値は、 lio_listio() により開始される操作の種類を示す aio_lio_opcode フィールド内に指定される操作コー ドです。 LIO_READ aiocb は、非同期読み込み操作を指定します。 LIO_WRITE aiocb は、非同期書き込み操作を指定します。 LIO_NOP aiocb による操作が何も行わないように指定します。 操作の待ち行列への配置 操作の開始を妨げるエラー状態が検出されると、 aio_read() および aio_write() は、要求を待ち行列に入れるこ とはありません。代わりに、これらの関数は、ただちに -1 を戻し、異常終了の原因を示す、 errno を設定しま す。操作が正常に待ち行列に入った後は、その操作のステータスおよびエラー状態を判断するために、 Section 5-26 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 aio(5) aio(5) aio_error() および aio_return() を呼び出さなければなりません。このステータスには通常 read() および write() により報告されるものも含まれます。 aio_return() が呼び出されるまで、要求は待ち行列内に残ったままなの で、プロセスおよびシステムの資源が浪費されます。 lio_listio() によって待ち行列に入っている操作のエラー報告は、 aio_read() および aio_write() によって待ち行 列に入っている操作のエラー報告よりも遅くなります。資源の不足の場合は例外ですが、 aio_read() および aio_write() がただちに -1 および errno 値を戻すエラーによって、 lio_listio() がそのリスト内の現在または後続 の要求を待ち行列に入れるのを中止することはありません。その代わり、一部の操作だけが待ち行列に入りま す。この場合、アプリケーションは aio_error() を使用して、リスト内のどの操作が待ち行列に入っているか、 およびどの操作がエラーを引き起こしたかを調べなければなりません。 非同期 I/O 操作は、以下のいずれかが true の場合に完了したと見なされます。 • I/O 転送の実行に成功した場合 • 操作の 1 つまたは複数のパラメータ内でエラーが検出された場合 • 操作が取り消された場合。 有効な sigevent が操作を開始するために使われた aiocb で指定されると、そのシグナルは、操作が完了した時 点で送信されます。 非同期の読み込みおよび書き込み 非同期の読み込みおよび書き込み操作は、 aio_read()、 aio_write()、および lio_listio() インタフェースを使用 して開始されます。それぞれの操作のためのパラメータは、操作を開始するために使用される aiocb 内に入っ ています。 aiocb ポインタのリストを、 lio_listio() 関数呼び出しに指定することができます。この場合、操作 の種類 (読み込みまたは書き込み) は、 aiocb の aio_lio_opcode フィールドから決まります。この I/O 操作は、 開始した後、その操作を開始したプロセスあるいはスレッドの実行と同時に進行することができます。 HP-UX カーネルスレッドの実装では、アプリケーションは、プロセス内の独立スレッドから同期の read() お よび write() 関数を使って非同期 I/O 動作を実行します。ただし、このアプリケーションは、POSIX 非同期 I/O 機能に備わっている多数のステータス管理機能を実行しなければならないことがあります。 完了待ち POSIX 非同期 I/O 機能は、ポーリングおよび通知モデルの両方をサポートしています。 ポーリングモデルは、 aio_error() を繰り返し呼び出して操作のステータスを調べることによって実行されます。 通知モデルは、操作 を開始するために使用される aiocb 内に sigevent を指定することによって実行されます。指定された通知があ る場合には、操作の完了時にその通知が行われます。 aio_suspend() 関数によって、アプリケーションは、1 つまたは複数の非同期 I/O 操作の完了を待つことができ ます。操作が予想通りに完了しない場合に、プロセスは再度実行したり適切な回復処理操作をとることができ るように、 timeout を設定することができます。 aio_suspend() が複数の操作を参照している場合は、その操作 の中のどれか 1 つが完了した時点で戻ります。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-27 aio(5) aio(5) エラーの取り出し 非同期 I/O 操作が開始した後、そのステータスは、 aio_error() および aio_return() 関数によって調べることが できます。これらの関数は、参照されている aiocb の現在のステータスを戻します。 ポーリングを実行してい る場合、 aio_error() 関数を使用して完了ステータスが分かるまでステータスを調べ、その後、 aio_return() を 使用して再利用のために aiocb を解放します。 通知を実行している場合、 aio_return() を 1 度呼び出すことにより、完了した I/O のステータスを判断して aiocb を解放することができます。 aio_error() および aio_return() により報告されるエラーの中には、 read() および write() によって通常報告され るすべてのエラーの他に非同期 I/O 処理に固有のエラーが含まれます。非同期 I/O 操作が開始した後、エラー が検出されたり、操作が正常に完了するまでは、 aio_error() は EINPROGRESS を戻します。 取り消し aio_cancel() 関数によって、アプリケーションは非同期 I/O 操作の取り消しを要求することができます。操作を 開始するために使用された aiocb を取り消しのためにその操作を指定するためのハンドルとして使用すること ができます。あるファイルに対するすべての保留中の操作の取り消しを要求することもできます。非同期 I/O 操作のすべてを取り消すことができるわけではありません。 永久記憶装置の同期 aio_fsync() 関数は、ファイルまたは装置を対象とする複数の非同期 I/O が未処理の時点で、永久記憶装置の内 容の同期をサポートします。この関数を呼び出した時点で指定したファイルを対象とする要求が、既に待ち行 列に入っている場合のみ、この同期操作の中に含まれます。 ファイルオフセット 非同期 I/O 操作は、本来連続して起こるものではありません。それぞれの操作でオフセットを指定する必要が あり、このファイルオフセットは非同期 I/O 操作の結果として更新されることは一切ありません。 ファ イ ル に O_APPEND フ ラ グ を 立 て る と、 そ の ファ イ ル に 対 す る 非 同 期 I/O の 値 が 制 限 さ れ ま す。 O_APPEND が設定されると、ファイル内の操作が、ファイルの終わりまで順次に処理され、1 つの要求が実行 されると、次の処理の開始オフセットが設定されます。システムが要求を待ち行列に入れる機能には利点があ りますが、順次に処理しなければならない要求を大量に待ち行列に入れてシステムリソースやプロセスリソー スが消耗されることのないように、注意してください。 システムの制限事項 POSIX 非同期 I/O インタフェースの操作は、いくつかのシステムの制限事項に従います。 待ち行列に入っている非同期 I/O 操作がそれぞれその内部制御構造のためにシステムメモリの割り当てを要求 するので、システムが保留しておくことができる、同時に待ち行列に入れる非同期 I/O 操作の数は制限されま す。システムのすべてのアクティブなプロセスが同時に待ち行列に入れる非同期 I/O 操作の最大数は変更可能 です。現在の最大数の値は、sysconf() 関数呼び出しで引き数 _SC_AIO_MAX を指定して調べることができま す。デフォルトの最大値は 2048 です。このシステム全体にわたる制限値の他に、プロセス単位の制限値があ ります。これは、 getrlimit() および setrlimit() システムコールで引き数 RLIMIT_AIO_OPS を使用して制御さ Section 5-28 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 aio(5) aio(5) れます。非同期 I/O 操作は、完了した場合でも、その操作に対して aio_return() を呼び出すまでは待ち行列に 入ったまま残っています。 I/O 用のスレッド機構ではなく、要求およびコールバック機構を使用する非同期 I/O 操作は、非同期 I/O 転送中 にロック可能な物理メモリ容量に関して、システム全体で適用される制限を受けます。システム全体に適用さ れ、非同期 I/O 転送中にロックできる最大メモリ容量 (バイト数) は、変更可能です。この値は、システムで使 用可能な物理メモリの量をパーセンテージで指定し、デフォルトで 10% に設定されています。さらに、システ ム全体に適用される制限の他に、各プロセスに対する制限があります。この設定は、getrlimit() および setrlimit() システムコールで引き数 RLIMIT_AIO_MEM を使用して変更できます。さらに、 lockable_mem を使 用して、非同期 I/O 操作以外の理由でロックできるメモリの量を制限し、この制限をシステム全体に対して適 用することができます。 plock() および mlock() インタフェースの両方またはどちらかによる明示的なメモリ ロックを含めて、他のシステム動作によって、その時点で、ロック可能なメモリの量が影響されることがあり ます。 aio_reqprio で指定できる最高優先順位の値には、制限があります。また、最高優先順位の値は、変更可能で す。現在の最高優先順位の値は、sysconf() 関数呼び出しで引き数 _SC_AIO_PRIO_DELTA_MAX を指定して 調べることができます。デフォルト値は 20 です。 1 つの lio_listio() 関数呼び出しで指定できる非同期 I/O 操作の数には制限があります。現在の最大値は、 sysconf() 関数呼び出しで引き数 _SC_AIO_LISTIO_MAX を指定して調べることができます。デフォルトの最 大値は 256 です。 一部の非同期 I/O 操作では、同時にアクティブにできるスレッド数について、システム全体と各プロセスに対 して適用される制限がある場合もあります。 pthread(3T) を参照してください。 プログラム上の制限事項 ある非同期読み込み操作が未解決である間、つまり、 aio_return() が aiocb に対して呼び出されていない間 に、 aiocbp によって参照される aiocb に関連付けられたメモリまたは aiocbp->aio_buf によって参照される バッファに対してその内容を変更したり、割り当てを解除したりすると、予測できない結果が発生する可能性 があります。 例 次のコードシーケンスは、非同期読み込み操作および完了のためのポーリングを示します。 #include <fcntl.h> #include <errno.h> #include <aio.h> char buf[4096]; int retval; struct aiocb myaiocb; bzero( &myaiocb, sizeof (struct aiocb)); myaiocb.aio_fildes = open( "/dev/null", O_RDONLY); myaiocb.aio_offset = 0; HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-29 aio(5) aio(5) myaiocb.aio_buf = (void *) buf; myaiocb.aio_nbytes = sizeof (buf); myaiocb.aio_sigevent.sigev_notify = SIGEV_NONE; retval = aio_read( &myaiocb ); if (retval) perror("aio:"); /* continue processing */ ... /* wait for completion */ while ( (retval = aio_error( &myaiocb) ) == EINPROGRESS) ; /* free the aiocb */ retval = aio_return( &myaiocb); 参照 aio_cancel(2), aio_error(2), aio_fsync(2), aio_read(2), aio_return(2), aio_suspend(2), aio_write(2), fsync(2), getrlimit(2), lio_listio(2), read(2), write(2), pthread(3T) 標準準拠 aio: POSIX Realtime Extensions, IEEE Std 1003.1b Section 5-30 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 aio_listio_max(5) aio_listio_max(5) 名称 aio_listio_max − listio() コールで指定できる POSIX 非同期 I/O 動作の最大数 値 フェールセーフ 256 デフォルト 256 許容値 最小値は 2 、最大値は 0x100000 。この値は aio_max_ops の値より大きくならないように指定します。 正の整数値を指定します。 説明 このパラメータは、単一の listio() コールで多数の POSIX 非同期 I/O 動作が要求された場合に使用できるシス テムリソースの制限を設定します。この値は、プロセスの誤動作によって過剰な非同期 I/O 動作が起動されな いようにシステムを保護しながら、システムのプログラミング要件に対応できるよう十分大きく設定する必要 があります。 この調整パラメータの変更を行う対象ユーザー ファイルシステムへの POSIX 非同期 I/O を多用するアプリケーションを実行するシステム管理者。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。 同時に変更する必要がある他の調整パラメータ aio_listio_max の値は aio_max_ops の値より大きくならないように指定しなければなりません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_listio_max は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(2)、settune(2)、aio(5)、aio_max_ops(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-31 aio_max_ops(5) aio_max_ops(5) 名称 aio_max_ops − キューに格納できる POSIX 非同期 I/O 動作の最大数 値 フェールセーフ 2048 デフォルト 2048 許容値 最小値は 2 、最大値は 0x100000 。この値は aio_listio_max の値より小さくならないように指定します。 正の整数値を指定します。 説明 このパラメータは、システムのキューに同時に多数の POSIX 非同期 I/O 動作が格納されている場合に使用でき るシステムリソースの制限を設定します。このパラメータにより、多数の非同期 I/O 動作とそれに必要なメモ リーによってシステムが処理不能に陥るような、プロセスの競合の可能性が抑えられます。 キュー内の各非同期動作にはその内部制御データ構造体のためのシステムメモリーが割り当てられる必要があ るため、こうした制限が必要になります。システム全体の制限のほかに、プロセスごとの制限もあります。こ の制限は、 getrlimit() および setrlimit() コールに引き数 RLIMIT_AIO_OPS を使用して制御します。 aio_listio_max は、特定のプロセスからの単一の listio() コールに含めることのできる動作の数を制限するもの で、 aio_max_ops の値は、システム全体のバランスを損なわない範囲で、 listio() コールを同時またはほぼ同時 に実行しているすべてのプロセスの需要に十分対応できるものでなければなりません。 この調整パラメータの変更を行う対象ユーザー ファイルシステムへの POSIX 非同期 I/O を多用するアプリケーションを実行するシステム管理者。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。 同時に変更する必要がある他の調整パラメータ aio_max_ops の値は aio_listio_max の値より小さくならないように指定しなければなりません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_max_ops は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(2)、settune(2)、getrlimit(2)、setrlimit(2)、aio(5)、aio_listio_max(5) Section 5-32 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 aio_monitor_run_sec(5) aio_monitor_run_sec(5) 名称 aio_monitor_run_sec − AIO スレッドプールのモニター実行頻度 (秒単位) 値 フェールセーフ 2 デフォルト 30 可能な値 1∼60 推奨値 1∼60 説明 HP-UX における POSIX AIO の実装では、完全な非同期 I/O を直接サポートしないファイルシステムに対する I/O 実行にカーネルスレッドを使用します (この識別はユーザーには透過的です)。このカーネルスレッドは、 プロセスごとに作成されるワーカースレッドプール (AIO スレッドプールと呼びます) に編成されます。 I/O の ためのスレッドプール機構では CPU 時間と I/O リソースの利用に関するさまざまなトレードオフが生じるた め、このスレッドプールの動作をカスタマイズする目的で aio_proc_threads(5) 、 aio_proc_thread_pct(5) 、 aio_req_per_thread(5)、および aio_monitor_run_sec(5) の4つの動的調整パラメータが用意されています。これ らの各調整パラメータの詳細は、それぞれのマンページを参照してください。 調整パラメータ aio_monitor_run_sec は、プロセスの AIO スレッドプールをモニターする頻度を指定します。 モニター作業には、AIO スレッドプールの拡張または縮小 (aio_proc_threads、 aio_proc_thread_pct、および aio_req_per_thread で指定された制約に基づく) を決定する作業が含まれます。 AIO スレッドプールは、自身で拡張する場合 (新しい I/O の実行時) とモニター機構の結果として拡張する場合 がありますが、モニター機構はスレッドプールを縮小するための主要手段です。したがって、この調整パラ メータによって、AIO スレッドプールをいかに早く I/O 負荷に適応させられるかが決まります。 この調整パラメータの変更を行う対象ユーザー ファイルシステムに対して大量の POSIX AIO の使用を必要とするアプリケーションを実行するシステム管理 者。 変更に関する制限事項 この調整パラメータは動的です。この調整パラメータの変更は、変更後に開始される新しいプロセスではただ ちに有効になります。既存のプロセスにも影響しますが、実行中のプロセスに変更内容が伝達される速度は、 調整パラメータ aio_monitor_run_sec の変更前の値によって決まります。 この調整パラメータの値を大きくする場合 aio_monitor_run_sec の値を大きくする必要があるのは、アプリケーションの I/O 負荷が安定していて、POSIX AIO を負荷に合わせる必要がほとんどない場合です。もう1つのケースとしては、突発的または定期的な I/O HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-33 aio_monitor_run_sec(5) aio_monitor_run_sec(5) 負荷が発生するアプリケーションで、I/O 動作が減少している間も POSIX AIO のスレッドプールを大きくして おきたい場合 (I/O 動作が増加するときに備えるため) が考えられます。これは、この調整パラメータの値を大 きくして AIO モニター更新の頻度を下げることで可能になります。 この調整パラメータの値を大きくした場合の影響 この調整パラメータの値を大きくすると、POSIX AIO スレッドプール機構が I/O 負荷の変化に適応する速度が 下がります。このため、アプリケーションが最初に POSIX AIO の発行を開始するときのパフォーマンスが若 干低下することがあります。 この調整パラメータの値を小さくする場合 aio_monitor_run_sec の値を小さくする必要があるのは、アプリケーションで POSIX AIO スレッドプールを I/O 負荷に適応させる速度を上げたい場合です。値を小さくすると通常はパフォーマンスが最大限に発揮され ますが、突発的な I/O 負荷が発生する場合や I/O 負荷に定期的なピークがある場合は例外です。このような場 合は、適応速度が遅い方が望ましいことがあります。 この調整パラメータの値を小さくした場合の影響 POSIX AIO スレッドプールが I/O 負荷の変化に適応する速度が上がるため、新しい I/O に対して新しいスレッ ドがすばやく生成され、I/O 負荷が減少した場合にはスレッドがただちに抹消されるようになります。した がって、パフォーマンスが最大限に発揮されます (突発的または定期的な I/O 負荷がある場合を除く)。 同時に変更する必要がある他の調整パラメータ aio_proc_threads は、POSIX AIO に使用できるスレッド数の厳密な制限を設定することにより、この調整パラ メータと連携して機能します。 aio_proc_thread_pct は、POSIX_AIO に使用できるスレッド数の制限を設定することによりこの調整パラメー タと連携して機能しますが、この制限は許容されるプロセススレッドの最大数に対するパーセンテージに基づ くものです。このため、AIO スレッドプールは max_thread_proc の変更に動的に対応することができます。 aio_req_per_thread は、POSIX AIO カーネルスレッド数と処理される I/O 数との関係を定義します。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_monitor_run_sec は HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), aio_proc_threads(5), aio_proc_thread_pct(5), aio_req_per_thread(5) Section 5-34 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 aio_physmem_pct(5) aio_physmem_pct(5) 名称 aio_physmem_pct − 要求/ コールバック機構を使用する POSIX 非同期 I/O 動作のためにロックできる物理メモ リーのパーセンテージ 値 フェールセーフ 10 デフォルト 10 許容値 最小値は 5 、最大値は 50 。 正の整数値を指定します。 説明 このパラメータは、任意の時点で進行中のすべての POSIX 非同期 I/O 動作によってロックできるシステムメモ リーのサイズに制限を設定します。動作が完了しても、その動作に対する aio_return() コールによって動作が 正常に終了するまでの間は、動作がアクティブキューに残ったままで、メモリーは解放されないということを 認識しておくことも重要です。 I/O に要求/コールバック機構を使用する非同期 I/O 動作では、使用中のメモリーをロックできなければなりま せん。要求/コールバック機構は、関連デバイスドライバでサポートされている場合にのみ使用されます。メモ リーは、I/O 転送が進行している間だけロックされます。 aio_physmem_pct は、システム全体におけるロック可能な物理メモリーの制限を設定します。さらに、プロセ スごとのロック可能メモリーの制限を設定することもできます。その場合は、アプリケーションプログラム内 で setrlimit() システムコールを使用します (setrlimit(2) を参照)。 この調整パラメータの変更を行う対象ユーザー ファイルシステムへの POSIX 非同期 I/O を多用するアプリケーションを実行するシステム管理者。 変更に関する制限事項 これは静的なパラメータなので、変更した値を有効にするためにはリブートを行う必要があります。 aio_physmem_pct によって設定された制限に基づくロック可能メモリーサイズは、 unlockable_mem によって 設定されたシステム全体でのロック可能メモリーの合計サイズの制限を超えることはできません。 この調整パラメータの値を大きくする場合 大規模なサーバーでは、 aio_physmem_pct を大きい値(最大 50)に設定することをお勧めします。 同時に変更する必要がある他の調整パラメータ 非同期 I/O に限らず、何らかの理由によって任意の時点でロックできるメモリーの合計サイズは、システム全 体の制限である lockable_mem で制御されます。また、その他のシステムアクティビティ (plock() または mlock() インタフェースによる明示的なメモリーロックなど) が任意の時点のロック可能メモリーのサイズに影 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-35 aio_physmem_pct(5) aio_physmem_pct(5) 響する場合もあります。 lockable_mem というカーネルパラメータはありませんが、 unlockable_mem というパラメータがロック可能メ モリーのサイズに影響します。 lockable_mem の値は、システムの起動後に使用可能なシステムメモリーの合 計サイズから unlockable_mem の値を引くことによって求められます。起動中に、そのシステムのロック可能 メモリーの合計サイズが、使用可能メモリーと物理メモリーのサイズとともに、システムコンソールに表示さ れます。これらの値は、システムの稼働中に /sbin/dmesg コマンドを使用して取得できます。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_physmem_pct は、HP で開発されました。 参照 kctune(1M) 、 sam(1M) 、 gettune(2) 、 settune(2) 、 aio(5) 、 aio_return(2) 、 dmesg(1M) 、 mlock(2) 、 plock(2) 、 getrlimit(2)、setrlimit(2)、unlockable_mem(5) Section 5-36 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 aio_prio_delta_max(5) aio_prio_delta_max(5) 名称 aio_prio_delta_max − POSIX 非同期 I/O 要求の優先順位の最大値差分 (スローダウン係数) 値 フェールセーフ 20 デフォルト 20 許容値 最小値は 0 、最大値は 20 。 正の整数値を指定します。 説明 このパラメータは、POSIX 非同期 I/O 動作の優先順位を下げて動作をスローダウンさせる場合の下げ幅の制限 を設定します。これは、非同期 I/O 制御ブロックデータ構造体 aiocb の aio_reqprio に指定する優先順位オフ セットの最大値です。 この調整可能パラメータの変更を行う対象ユーザー ファイルシステムへの POSIX 非同期 I/O を多用するアプリケーションを実行するシステムの管理者。 変更に関する制限事項 この調整パラメータは動的です。 (この調整可能パラメータの変更はただちに有効になります。) 同時に変更する必要がある他の調整可能パラメータ なし。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_prio_delta_max は、HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), aio(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-37 aio_proc_threads(5) aio_proc_threads(5) 名称 aio_proc_threads − AIO プールで許容されるプロセススレッドの最大数 値 フェールセーフ 256 デフォルト 1024 可能な値 4∼2048 推奨値 32∼2048 説明 HP-UX における POSIX AIO の実装では、完全な非同期 I/O を直接サポートしないファイルシステムに対する I/O 実行にカーネルスレッドを使用します (この識別はユーザーには透過的です)。このカーネルスレッドは、 プロセスごとに作成されるワーカースレッドプール (AIO スレッドプールと呼びます) に編成されます。 I/O の ためのスレッドプール機構では CPU 時間と I/O リソースの利用に関するさまざまなトレードオフが生じるた め、このスレッドプールの動作をカスタマイズする目的で aio_proc_threads(5) 、 aio_proc_thread_pct(5) 、 aio_req_per_thread(5)、および aio_monitor_run_sec(5) の4つの動的調整パラメータが用意されています。これ らの各調整パラメータの詳細は、それぞれのマンページを参照してください。 調整パラメータ aio_proc_threads は、POSIX AIO システムが I/O 実行時のカーネルスレッドとして使用できる プロセススレッドの最大数 (プロセス単位) を指定します。 この調整パラメータは aio_proc_thread_pct と連携して機能します。AIO に使用するスレッドの最大数は、次 に示すように、2つの調整パラメータで定義される2つの値のうちの小さい方になります。 MIN (aio_proc_threads, aio_proc_thread_pct * max_thread_proc) このため、AIO スレッド数は、 max_thread_proc によって動的に変化しますが、常に aio_proc_threads の絶対 的な制限により拘束することができます。 この調整パラメータの変更を行う対象ユーザー ファイルシステムに対して大量の POSIX AIO の使用を必要とするアプリケーションを実行するシステム管理 者。 変更に関する制限事項 この調整パラメータは動的です。この調整パラメータの変更は、変更後に開始される新しいプロセスではただ ちに有効になります。既存のプロセスにも影響しますが、実行中のプロセスに変更内容が伝達される速度は、 調整パラメータ aio_monitor_run_sec によって決まります。 Section 5-38 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 aio_proc_threads(5) aio_proc_threads(5) この調整パラメータの値を大きくする場合 aio_proc_threads の値を大きくする必要があるのは、アプリケーション自身の作業にはそれほど多くのスレッ ドを使用しない反面、POSIX AIO サブシステムに高いパフォーマンスが要求される場合です。 この調整パラメータの値を大きくした場合の影響 POSIX AIO を使用する一方で大量のスレッドも必要とする一部のアプリケーションで、新規スレッドを作成で きなくなることがあります (これは、POSIX AIO スレッドプールが1プロセスに許容されるスレッドを使い過 ぎてしまった場合に起こります)。 また、多数のカーネルスレッドを使用すると、CPU 利用率が増加する可能性があります。 この調整パラメータの値を小さくする場合 aio_proc_threads の値を小さくする必要があるのは、 POSIX AIO のパフォーマンスには問題がないのに、 POSIX AIO を使用するアプリケーションが他の作業のための新規スレッドを作成しようとしたときにエラーが 発生する場合です。 この調整パラメータの値を小さくした場合の影響 POSIX AIO 要求の処理に使用できるスレッド数を極端に小さくすると、POSIX AIO サブシステムの全体的な I/O スループットが低下する可能性があります。 同時に変更する必要がある他の調整パラメータ aio_proc_thread_pct は、許容されるプロセススレッドの最大数に対するパーセンテージに基づいて AIO ス レッド数の制限を設定することにより、この調整パラメータと連携して機能します。このため、AIO スレッド プールは max_thread_proc の変更に動的に対応することができます。 aio_req_per_thread は、POSIX AIO カーネルスレッド数と処理される I/O 数との関係を定義します。 aio_monitor_run_sec は、AIO スレッド機構が上記の調整パラメータで定義される制限に準拠するために自身を モニターする頻度 (秒単位) を定義します。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_proc_threads は HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), aio_proc_thread_pct(5), aio_req_per_thread(5), aio_monitor_run_sec(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-39 aio_proc_thread_pct(5) aio_proc_thread_pct(5) 名称 aio_proc_thread_pct − AIO プールで許容されるプロセススレッドの、全プロセススレッドに対するパーセンテー ジ 値 フェールセーフ 50 デフォルト 70 可能な値 10∼100 推奨値 10∼90 説明 HP-UX における POSIX AIO の実装では、完全な非同期 I/O を直接サポートしないファイルシステムに対する I/O 実行にカーネルスレッドを使用します (この識別はユーザーには透過的です)。このカーネルスレッドは、 プロセスごとに作成されるワーカースレッドプール (AIO スレッドプールと呼びます) に編成されます。 I/O の ためのスレッドプール機構では CPU 時間と I/O リソースの利用に関するさまざまなトレードオフが生じるた め、このスレッドプールの動作をカスタマイズする目的で aio_proc_threads(5) 、 aio_proc_thread_pct(5) 、 aio_req_per_thread(5)、および aio_monitor_run_sec(5) の4つの動的調整パラメータが用意されています。これ らの各調整パラメータの詳細は、それぞれのマンページを参照してください。 調整パラメータ aio_proc_thread_pct は、POSIX AIO システムが I/O 実行時のカーネルスレッドとして使用で きるスレッドのパーセンテージ (プロセス単位) を指定します。これは max_thread_proc (1プロセスが使用で きるスレッド数の上限) に対するパーセンテージです。 この調整パラメータは aio_proc_threads と連携して機能します。AIO に使用するスレッドの最大数は、次に示 すように、2つの調整パラメータで定義される2つの値のうちの小さい方になります。 MIN (aio_proc_threads, aio_proc_thread_pct * max_thread_proc) このため、AIO スレッド数は、 max_thread_proc によって動的に変化しますが、常に aio_proc_threads の絶対 的な制限により拘束することができます。 この調整パラメータの変更を行う対象ユーザー ファイルシステムに対して大量の POSIX AIO の使用を必要とするアプリケーションを実行するシステム管理 者。 変更に関する制限事項 この調整パラメータは動的です。この調整パラメータの変更は、変更後に開始される新しいプロセスではただ ちに有効になります。既存のプロセスにも影響しますが、実行中のプロセスに変更内容が伝達される速度は、 調整パラメータ aio_monitor_run_sec によって決まります。 Section 5-40 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 aio_proc_thread_pct(5) aio_proc_thread_pct(5) この調整パラメータの値を大きくする場合 aio_proc_thread_pct の値を大きくする必要があるのは、アプリケーション自身の作業にはそれほど多くのス レッドを使用しない反面、POSIX AIO サブシステムに高いパフォーマンスが要求される場合です。 この調整パラメータの値を大きくした場合の影響 POSIX AIO スレッドプールが1プロセスに許容されるスレッドを使い過ぎてしまうと、POSIX AIO を使用する 一方で大量のスレッドも必要とする一部のアプリケーションで、新規スレッドを作成できなくなることがあり ます。 また、多数のカーネルスレッドを使用すると、CPU 利用率が増加する可能性があります。 この調整パラメータの値を小さくする場合 aio_proc_thread_pct の値を小さくする必要があるのは、POSIX AIO のパフォーマンスには問題がないのに、 POSIX AIO を使用するアプリケーションが他の作業のための新規スレッドを作成しようとしたときにエラーが 発生する場合です。 この調整パラメータの値を小さくした場合の影響 POSIX AIO 要求の処理に使用できるスレッド数を極端に小さくすると、POSIX AIO サブシステムの全体的な I/O スループットが低下する可能性があります。 同時に変更する必要がある他の調整パラメータ aio_proc_threads は、POSIX AIO に使用できるスレッド数の厳密な制限を設定することにより、この調整パラ メータと連携して機能します。このため、 max_thread_proc に設定されている値に関係なく、物理制限を適用 することができます。 aio_req_per_thread は、POSIX AIO カーネルスレッド数と処理される I/O 数との関係を定義します。 aio_monitor_run_sec は、AIO スレッド機構が上記の調整パラメータで定義される制限に準拠するために自身を モニターする頻度 (秒単位) を定義します。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_proc_thread_pct は HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), aio_proc_threads(5), aio_req_per_thread(5), aio_monitor_run_sec(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-41 aio_req_per_thread(5) aio_req_per_thread(5) 名称 aio_req_per_thread − 保留中の AIO 要求数と処理対象のスレッド数の比率 値 フェールセーフ 4 デフォルト 1 可能な値 1∼100 推奨値 1∼100 説明 HP-UX における POSIX AIO の実装では、完全な非同期 I/O を直接サポートしないファイルシステムに対する I/O 実行にカーネルスレッドを使用します (この識別はユーザーには透過的です)。このカーネルスレッドは、 プロセスごとに作成されるワーカースレッドプール (AIO スレッドプールと呼びます) に編成されます。 I/O の ためのスレッドプール機構では CPU 時間と I/O リソースの利用に関するさまざまなトレードオフが生じるた め、このスレッドプールの動作をカスタマイズする目的で aio_proc_threads(5) 、 aio_proc_thread_pct(5) 、 aio_req_per_thread(5)、および aio_monitor_run_sec(5) の4つの動的調整パラメータが用意されています。これ らの各調整パラメータの詳細は、それぞれのマンページを参照してください。 調整パラメータ aio_req_per_thread は、保留中の POSIX AIO 要求数と AIO スレッドプール内のスレッド数の 希望の比率 (プロセス単位) を指定します。 AIO スレッドプール内のスレッド数は調整パラメータ aio_proc_thread_pct および aio_proc_threads で制限さ れますが、その制限内での AIO スレッドプールの動作が調整パラメータ aio_req_per_thread によって決まりま す。 aio_req_per_thread は、各スレッドに割り当てる I/O の量を定義することで、未処理の AIO 要求数が増加 した場合に AIO スレッドプールをどのくらい拡張するかを決定します。 この調整パラメータの変更を行う対象ユーザー ファイルシステムに対して大量の POSIX AIO の使用を必要とするアプリケーションを実行するシステム管理 者。 変更に関する制限事項 この調整パラメータは動的です。この調整パラメータの変更は、変更後に開始される新しいプロセスではただ ちに有効になります。既存のプロセスにも影響しますが、実行中のプロセスに変更内容が伝達される速度は、 調整パラメータ aio_monitor_run_sec によって決まります。 この調整パラメータの値を大きくする場合 aio_req_per_thread の値を大きくする必要があるのは、アプリケーションで、POSIX AIO サブシステムが使用 するスレッド数を制限する必要がある場合です。これは通常、他の作業のためにより多くのプロセススレッド Section 5-42 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 aio_req_per_thread(5) aio_req_per_thread(5) を解放したり、POSIX AIO 内の並行処理のレベルを制限したり、物理的に制限のある I/O デバイス上の負荷を 減らしたりすることが目的です。 この調整パラメータの値を大きくした場合の影響 POSIX AIO 要求に使用できるスレッド数を減らすことにより、並行処理が減少し、AIO I/O 要求の処理待ちの 時間が長くなります。このため、本来ならより大きな負荷を処理できるはずの I/O スタックを持つシステムで は、レイテンシが増加し、POSIX AIO のパフォーマンスが低下する可能性があります。一方では、要求に対す るスレッド数を減らすと、コンテキストスイッチの発生回数が減少し、POSIX AIO の CPU 利用率を低減させ ることができます。 この調整パラメータの値を小さくする場合 aio_req_per_thread の値を小さくする必要があるのは、並行処理と POSIX AIO 要求のパフォーマンスを最大化 したい場合です。これは、アプリケーションが他の作業に関して多くのスレッドを必要としない場合に行いま す。 この調整パラメータの値を小さくした場合の影響 この調整パラメータの値を小さくすると、POSIX AIO が I/O 要求を処理するために使用するスレッドが増加し ます。これにより、CPU の使用率が増加し、アプリケーションが他の作業のために必要となる可能性があるス レッドを使い果たす場合があります。一方、POSIX AIO のパフォーマンスは向上します。 同時に変更する必要がある他の調整パラメータ aio_proc_threads は、POSIX AIO に使用できるスレッド数の厳密な制限を設定することにより、この調整パラ メータと連携して機能します。 aio_proc_thread_pct は、POSIX_AIO に使用できるスレッド数の制限を設定することによりこの調整パラメー タと連携して機能しますが、この制限は許容されるプロセススレッドの最大数に対するパーセンテージに基づ くものです。このため、AIO スレッドプールは max_thread_proc の変更に動的に対応することができます。 aio_monitor_run_sec は、AIO スレッド機構が上記の調整パラメータで定義される制限に準拠するために自身を モニターする頻度 (秒単位) を定義します。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 aio_req_per_thread は HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), aio_proc_threads(5), aio_proc_thread_pct(5), aio_monitor_run_sec(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-43 aliases(5) aliases(5) 名称 aliases − sendmail用の別名ファイル 構文 /etc/mail/aliases 説明 newaliases コマンド (sendmail −bi と同じ。 sendmail(1M) を参照)は、テキストファイルからsendmail別名デー タベースを構築します。デフォルトのテキストファイルは /etc/mail/aliases です。ユーザー名の前にバックス ラッシュ (\) が付いていない限り、ローカルアドレス(ローカルユーザー名)は別名データベースで検索され、必 要に応じて展開されます。指定された別名に対し、別名ファイル中に複数のエントリーが存在する場合は、最 後のエントリーだけが使用されます。処理オプションの m (自分自身にも送信するオプション)が sendmail コ マンドまたは構成ファイル /etc/mail/sendmail.cf に設定されていなければ、送信者は別名展開からは除かれま す。例えば、 joe がメッセージを group に送信し、 group の展開結果に joe が含まれていても、メッセージは joe には配信されません。 別名テキストファイルの各行の形式は、次のとおりです。 alias : mailing−list メーリングリストは、複数行にまたがることもできます。継続行は、空白文字で始めます。 #で始まる行は、 コメントです。 mailing−list は、次の1つ以上の項目をカンマで区切ったリストです。 user−name 別名展開で得られるローカルユーザー名は、バックスラッシュ (\) が前に 付いていない限り、別名データベースで検索されます。 remote−address sendmail が認識するリモートアドレスの構文は、 sendmail 構成ファイル で構成されます。一般的には、 RFC-822 スタイルの user@domain と、 UUCPスタイルの host!user が含まれます。 filename ファイルの絶対パス名です。 sendmail は、このファイルが存在するディ レクトリが全員から読み取りおよび検索可能で、このファイルがすでに存 在し、実行可能ではなく、全員から書き込み可能な場合だけ、メッセージ をこのファイルに追加します。 | command−line sendmail は、指定されたコマンドへの標準入力としてメッセージをパイプ します。 command−line に空白が含まれている場合は、コマンド行を二重 引用符(")で囲む必要があります。例えば、次のようにします。 msgs: "|/usr/bin/msgs -s" :include: filename sendmail は受信者のアドレスリストを filename から読み取り、メッセージ を各受信者に転送します。例えば、次のような別名があったとします。 Section 5-44 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 aliases(5) aliases(5) poets: ":include:/usr/local/lib/poets.list" この別名は、 /usr/local/lib/poets.list からアドレスリストを読み取り、グ ループとします。 .forward という名前のファイルがユーザーのホームディレクトリにあり、所有者がそのユーザーである場合、 sendmail はそのユーザー宛てのメールを、 .forward ファイル内にリストされているアドレスにリダイレクトし ます。 .forward または :include: ファイル内のアドレスは、別名テキストファイル中の mailing−list として使用可能な アドレスであれば何でもかまいません。 sendmail では、 .forward を用いてプログラムの実行やファイルへの書き込みを行うことができます。これは、 /etc/shells ファイルによって制御されます。 .forward ファイルの所有者が /etc/shells ファイルに有効なシェルを 設定していない場合、このようなプログラムの実行は許されません。この場合、 /etc/shells ファイルに特別な 文字列 /SENDMAIL/ANY/SHELL/ を入れると、ユーザーはこのようなプログラムを実行できます。 別名データベースは、受信者の .forward ファイルが調べられる前に調べられます。 .forward ファイルがホー ムディレクトリにある、有効なローカル受信者へのメッセージは、別名処理が終了してから、このファイルで 定義されているユーザーのリストに転送されます。 別名処理は、ローカル名に対してのみ行われます。メッセージが同じ人に対して複数回送信されることはない ため、ループは発生しません。 /etc/mail/aliases に定義されている別名は mailx のヘッダでは展開されませんが (mailx(1) を参照)、ネットワー ク上や、 rmail のヘッダでは見えます (mail(1) を参照)。 /etc/mail/aliases は、生のデータファイルにすぎません。実際の別名指定情報は、 newaliases (newaliases(1M) を 参照)によってファイル /etc/mail/aliases.db 内にバイナリ形式で置かれます。 aliases ファイルが変更された場合、この変更を有効にするには、毎回 newaliases コマンドを実行する必要があ ります。 NIS別名マップは makemap を使用して ypmake によって生成され、 aliases.pag および aliases.dir が /etc/mail ディレクトリ内に置かれます。 著者 aliases はカリフォルニア大学バークレー校で開発され、4.0BSDで初めて提供されました。 ファイル $HOME/.forward ユーザーのメール転送ファイル /etc/mail/aliases 別名の生データファイル /etc/mail/aliases.db 別名のデータベース 参照 mail(1)、 mailx(1)、 makemap(1M)、 newaliases(1M)、 sendmail(1M) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-45 allocate_fs_swapmap(5) allocate_fs_swapmap(5) 名称 allocate_fs_swapmap − ファイルシステム スワップにスワップマップデータ構造体を割り当てるタイミングの決 定 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 可能な値 1 (オン) または 0 (オフ) 説明 allocate_fs_swapmap 調整パラメータは、ファイルシステム スワップデバイスの初期化中に必要なすべての ファイルシステムスワップデータ構造体を割り当てるのか、あるいはそれらが必要になるまで待つのかを指定 するために使用します。初期化後、ただちにすべてのファイルシステム スワップデータ構造体を割り当ててし まえば、後でファイルシステム スワップを使用する際に時間を節約できるうえに、物理メモリーの競合によっ て割り当てに失敗するという事態を避けることができます。 動的割り当てを行うと、ファイルシステム スワップシステムのメモリーフットプリントを小さくすることがで きます。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 メモリー負荷の大きいシステムでは、ファイルシステム スワップの追加に使用するスワップマッピングデータ 構造体を保持するだけのメモリーを取得できない場合があります。この場合、スワップを追加するコールは、 エラー [ENOMEM] で失敗します (おそらく、再試行しても失敗します)。ファイルシステム スワップの追加が 頻繁に [ENOMEM] で失敗する場合は、この調整パラメータをオンにする必要があります。 この値を大きくした場合の影響 各ファイルシステム スワップデバイスのすべてのスワップマップデータ構造体が、カーネルブート時のスワッ プ初期化中に事前に割り当てられるため、カーネルのメモリーフットプリントが大きくなります。どれだけ大 きくなるかは、ファイルシステム スワップデバイスの数とサイズによります。 この調整パラメータの値を小さくする場合 カーネルで使用できるメモリーが限られているシステムにおいて、使用可能なファイルシステム スワップデバ イスも限られている場合は、この調整パラメータをオフにして、カーネルのメモリー使用量を減らす必要があ ります。 Section 5-46 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 allocate_fs_swapmap(5) allocate_fs_swapmap(5) この値を小さくした場合の影響 メモリーの競合が増えると、ファイルシステム スワップの追加が [ENOMEM] で失敗する可能性があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 allocate_fs_swapmap は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-47 alwaysdump(5) alwaysdump(5) 名称 alwaysdump − カーネルパニックの発生時にダンプするカーネルメモリーページのクラスの定義 値 フェールセーフ 0 デフォルト 0 (ダンプするクラスはカーネルが選択) 可能な値 0 ∼ 255 の整数値 この整数値は、ダンプに含める各クラス (以下を参照) を表す整数値の合計となります。 UNUSED 1 : 未使用ページ USERPG 2 : ユーザーページ BCACHE 4 : バッファーキャッシュ KCODE 8 : カーネルテキストページ USTACK 16 : プロセススタック FSDATA 32 : ファイルシステム メタデータ KDDATA 64 : カーネル動的データ KSDATA 128 : カーネル静的データ 推奨値 0 (ダンプするクラスはカーネルが選択) 通常、カーネルが選択する値は 240 (KSDATA + KDDATA + FSDATA + USTACK) です。 KSDATA と KDDATA は、カーネル障害のデバッグに使用します。 FSDATA は、ファイルシステム障害のデ バッグに必要です。 USTACK は、ユーザースペースのアプリケーションに関連する問題のデバッグに使用し ます。 UNUSED、 USERPG、 BCACHE、または KCODE がデバッグに使用されるケースは通常はありませ ん。 説明 大規模なシステムでは、システムに搭載されている物理メモリーのサイズによっては、カーネルパニックの発 生時にシステムメモリーのダンプにかかる時間が極端に長くなる場合があります。 dontdump および alwaysdump パラメータで制御される高速ダンプ機能を使用すると、カーネルダンプを以下の特定タイプの情報だけ に限定することができます。 Section 5-48 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 alwaysdump(5) alwaysdump(5) . 未使用物理メモリー . ユーザープロセス . バッファーキャッシュ . カーネルコード . プロセススタック . ファイルシステム メタデータ . カーネル動的データ . カーネル静的データ crashconf コマンドと、このコマンドに関連付けられた構成ファイル /etc/rc.config.d/crashconf は、カーネルパ ニックに起因するメモリーダンプに、これらのメモリークラスのうちどのクラスを含めるかを制御します。ご く稀に、ブート処理中に crashconf (1M) が実行される前にシステムがパニックに陥る場合があります。そのよ うな場合は、調整パラメータの alwaysdump と dontdump を使用して構成を設定できます。 alwaysdump に保存されているビットマップ値は、カーネルパニックに起因するメモリーダンプに、これらの メモリークラスのうちどのクラスを含めるかを指定します。 このパラメータのデフォルト値は 0 です。この場合、システムは、クラスのメモリーをダンプするかどうか を、発生したクラッシュのタイプに基づいて判断します。 システムクラッシュの内容によってはフルクラッシュダンプが必要な場合もあります。また、ダンプされた時 点でシステムオペレータがフルクラッシュダンプを要求する場合も考えられます。いずれの場合も、 alwaysdump を使用して選択されているクラスに関係なく、フルダンプが実行されます。 この調整パラメータの変更を行う対象ユーザー この調整パラメータの値を変更するのは当社のフィールドエンジニアだけです。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。ただし、 crashconf を使用してページの選 択を変更すると、変更内容はただちに有効になります。 この調整パラメータをオンにする場合 システムクラッシュ発生時のダンプに特定のクラスのページを含める場合に、この調整パラメータをオンにし ます。 この調整パラメータをオンにした場合の影響 ダンプの解析に不要なページが含まれると、ダンプに時間がかかります。 この調整パラメータをオフにする場合 この調整パラメータは、デフォルトでオフになっています。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-49 alwaysdump(5) alwaysdump(5) この調整パラメータをオフにした場合の影響 システムは、ダンプするページクラスを、クラッシュのタイプに基づいて判断します。 同時に変更する必要がある他の調整パラメータ dontdump 調整パラメータに alwaysdump と同じページクラスを含めないでください。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 alwaysdump は、HP で開発されました。 参照 crashconf(1M)、dontdump(5) Section 5-50 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 Aries(5) Aries(5) 名称 Aries − Itanium ベースのプロセッサファミリーでの PA-RISC アプリケーションのエミュレーション 説明 Aries は、HP-UX PA-RISC アプリケーションの 32 ビット版と 64 ビット版を、Itanium ベースの HP-UX マシン 上で透過的にエミュレートするバイナリエミュレータです。 Aries は、以下の意味で透過的です。 • HP-UX PA-RISC アプリケーションは再コンパイルされません。 • ユーザーは Aries を明示的に実行しません。 HP-UX Itanium ベースのカーネルは、HP-UX PA-RISC の実行可能プログラムを認識し、Aries を実行してアプ リケーションをエミュレートします。 Aries は、以下の4つの共有ライブラリで構成されます。 /usr/lib/hpux32/aries32.so /usr/lib/hpux32/pa_boot32.so /usr/lib/hpux64/aries64.so /usr/lib/hpux64/pa_boot64.so aries32.so は、 32 ビットアプリケーション用 Aries エミュレータが格納されている共有ライブラリです。 pa_boot32.so には、 aries32.so をロードするコードが格納されています。同様に、 aries64.so には 64 ビットア プリケーション用エミュレータが格納されています。 pa_boot64.so には、 aries64.so をロードするコードが格 納されています。 HP-UX Itanium ベースのカーネルは、32 ビット版の HP-UX PA-RISC 実行可能プログラムを 検出すると、ただちに pa_boot32.so を実行します。これにより、 aries32.so がメモリーにロードされ、HP-UX PA-RISC 実行可能プログラムをエミュレートするようにセットアップされます。同様に、 aries64.so は、64 ビット版の HP-UX PA-RISC 実行可能プログラムに対してロードされます。 PA GDB サポート Aries は、PA gdb による、HP-UX Itanium ベースシステム上での PA アプリケーションのデバッグをサポートし ています。 HP-UX Itanium ベースシステム上では、 /usr/ccs/bin に PA gdb32 および gdb64 のバイナリが格納されていま す。 /usr/ccs/bin/gdbpa というシンボリックリンクが /usr/ccs/bin/gdb32 をポイントします。 HP-UX Itanium ベースシステムの gdb は、デバッグ中のバイナリを PA バイナリとして認識し、 /usr/ccs/bin/gdbpa を Aries の 下で起動します。 Itanium ベースシステム上での PA アプリケーションのデバッグ PA gdb を使用して HP-UX Itaniumベースシステム上で PA アプリケーションをデバッグするには、以下の手順 を実行します。 1. 環境変数 PA_DEBUG を1に設定します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-51 Aries(5) 2. Aries(5) 環境変数 SHELL を、PA シェルをポイントするように設定します。PA シェルは、デバッグを実行して いる Itanium ベースのマシン上になければなりません。PA シェルは、HP-UX PA-RISC マシンの /usr/bin から取得できます。 3. /usr/ccs/bin を PATH 環境変数に追加します。 4. 下記のように gdb を実行します。 $ gdb PA_binary このデバッグプロセスの続きは、HP-UX PA-RISC プラットフォーム上での手順とまったく同じです。 gdb の すべてのコマンドは、 「PA GDB サポートの制限」にリストされている制限に従ってサポートされています。 デバッグが終了したら、以下の手順を実行します。 1. 環境変数 PA_DEBUG の設定を解除します。 2. SHELL 環境変数を元の値に戻します。 PA GDB サポートの制限 現時点の PA gdb サポートの制限は以下のとおりです。 1. Itanium ベースシステム上で、エミュレートされる PA プログラムをデバッグする場合には、 HP-UX PARISC gdb 以外のデバッガはサポートされていません。 2. デバッガと、Itanium ベースシステムで実行中のエミュレートされた PA プログラムとのアタッチはサ ポートされていません。 3. システムコールエントリと終了イベントの条件付きレポートはサポートされていません。 4. 古いバージョンの gdb (HP-UX 10.20 およびそれ以前) は、サポートされていません。ただし、 HP-UX 10.20 用のアプリケーションを HP-UX 11.0 PA gdb を使用してデバッグすることは可能です。 5. fork() で作成された子プログラムに対する PA gdb の動作は、 vfork() で作成された子プログラムに対す る動作と異なります。 Aries では、アプリケーションからの vfork() コールが fork() コールで置き換えら れるため、PA-RISC/HP-UX プラットフォーム上での PA gdb の動作と、HP-UX Itanium ベースのプラッ トフォーム上の Aries 下で実行される PA gdb の動作は、まったく同じではありません。 6. デバッグしたプログラムがブロッキングシステムコールでハングしている場合は、ˆC を押して gdb コ マンドプロンプトを表示する方法は使用できません。そのプロセスを外部から抹消する必要がありま す。 PA コアファイルの生成 Aries では、エミュレートされた PA アプリケーションがコアをダンプする際の、Itanium ベースシステム上で の PA コアファイルの作成がサポートされています。 コアファイルのサイズは、 ulimit() または setrlimit() の値によって制限されます。 ulimit(2) および setrlimit(2) を参照してください。 Aries によって生成される PA アプリケーションのコアファイルの名前は、 core.PA_application_name です。 Section 5-52 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 Aries(5) Aries(5) Aries によって生成された PA アプリケーションのコアファイルを解析するには、HP-UX PA-RISC のデバッガ が必要です。たとえば、Aries によって生成された PA アプリケーションのコアファイルは、Itanium ベースシ ステム上では /usr/ccs/bin/gdbpa を使用してデバッグできます。あるいは、このアプリケーションのコアファイ ルを PA マシンに移動し、PA デバッガを使用してデバッグすることもできます。ただし、このプロセスは非常 に冗長なうえに、エラーが発生しがちです。 PA アプリケーションのコアファイルが Aries によって正常に書き込まれると、 stderr に以下のメッセージが出 力されます。 ARIES32/64: Core file for PA32/64 application saved to path/core.PA_application_name エミュレートされた PA アプリケーションのコアファイルの名前が単に core または core. pid の場合は、それは Aries のコアダンプであって、エミュレートされた PA アプリケーションのコアダンプではありません。 Aries によって生成された PA コアファイルを別のマシンでデバッグする Aries によって生成された PA コアファイルを別のマシン (PA または IPF) でデバッグすることは、 PA wdb-3.0.01 以降でのみサポートされています。 Aries によって生成された PA コアファイルを、そのコアファイルが生成されたマシンとは別のマシンでデバッ グするには、以下の手順に従います。 1. コアファイルと、PA アプリケーションが使用するすべての共有ライブラリを、コアダンプファイルの生 成元の Itanium ベースのマシンからターゲットマシンに転送します。 2. GDB_SHLIB_PATH 環境変数を、転送した共有ライブラリが存在するディレクトリパス名のリスト (コロ ン区切り) に設定します。 3. 下記のように、 gdb を実行します。 $ gdb PA_application PA_core_file 高性能ダイナミックトランスレータ ベータ版 1. はじめに HP-UX 11i バージョン 2.0 に付属の Aries (32ビット - /usr/lib/hpux32/aries32.so) には、高性能ダイナミックトラ ンスレータのベータ版が含まれています。ただし、このベータ版トランスレータは、デフォルトでは「無効」 になっています。つまり、Aries を通常の使用法で使用している限りはまったく影響はありません。 64 ビット の Aries (/usr/lib/hpux64/aries64.so) には、このベータ版トランスレータは含まれていません。 2. 使用法 ベータ版トランスレータを有効にするには、以下のオプション文字列を .ariesrc ファイル内で使用する必要が あります。 -fast_trans Aries はデフォルトのオプションを使用して実行されることが前提とされています。ただし、リソースファイル HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-53 Aries(5) Aries(5) によって Aries に特別なオプションを追加することもできます。 PA アプリケーションの起動時に、Aries は現 在のディレクトリ、ユーザーのホームディレクトリ、ルート (/) ディレクトリの順に .aries[64]rc ファイルを検 索します。この3箇所のいずれにもこのファイルが見つからなければ、Aries はデフォルトのオプションを使 用して実行されます。ベータ版トランスレータのコンテキストでは、 -fast_trans は、Aries が指定された PA アプリケーションをエミュレートしながらベータ版トランスレータを起動するための特殊なオプションであ り、 .ariesrc ファイル内で指定する必要があります。 .ariesrc ファイルが見つからない場合、または .ariesrc が 見つかってもファイル内に -fast_trans が記述されていない場合は、Aries はデフォルトで旧版のトランスレー タを使用します。 3. 警告 このトランスレータはベータ版であるため、ミッションクリティカルなアプリケーションにこのベータ版トラ ンスレータを使用する場合は、リスクの一要素となりうることに注意する必要があります。ただし、この新し いトランスレータは使用を重ねるほどより堅固なものとなり、より早く既存のトランスレータと同じレベルの 信頼を寄せられるものとなるため、積極的に使用されることをお勧めします。 4. ベータ版トランスレータのパフォーマンス 本リリースまでに行われた計測の結果では、ベータ版トランスレータは既存のトランスレータと比較して、変 換時間が平均で 20% 向上しています。しかし、このような変換時間の向上がエミュレートされたアプリケー ション全体のパフォーマンスに反映される割合は一定ではありません。実験では、計算処理が中心のアクショ ンとユーザー処理が中心のアクションが平均的に混在するアプリケーションの場合、全体的なパフォーマンス が平均で 20% 向上することが見込まれると確認されています。ベータ版トランスレータのより詳細なパフォー マンスの計測は、現在も継続して行われています。 Aries がサポートするアプリケーション Aries は、すべての HP-UX PA-RISC アプリケーションのエミュレーションをサポートしています。つまり、セ マフォ、共有メモリ、ソケットといったすべての HP-UX プロセス間通信機構がサポートされています。ま た、Aries では、PA-RISC/HP-UX プログラムのシグナル/例外動作がサポートされています。エミュレートされ た PA プログラムとネイティブで実行されている Itanium ベースプログラムの間でのプロセス間通信もサポート されています。Aries でサポートされていない PA-RISC アプリケーションドメインのサブセットはごくわずか です。特定のアプリケーションが Aries で正常に動作するかどうかを確認するには、そのアプリケーションが 次の 「Aries の制限」の項にリストされている制限に該当するかどうかを確認してください。 Aries の制限 Aries は、すべての HP-UX PA-RISC アプリケーションのエミュレーションをサポートしていますが、以下の制 限があります。 • Aries は、Itanium ベースの共有ライブラリをロードする PA プログラムをサポートしていません。言い換え ると、PA バイナリと Itanium ベースの共有ライブラリとの混在はサポートされていません。Aries は、ピュ ア PA バイナリ専用です (ピュア PA バイナリとは、PA ライブラリとだけ静的または動的にリンクされてい るバイナリです)。ただし、ネイティブの Itanium ベースプログラムと、エミュレートされた PA プログラム Section 5-54 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 Aries(5) Aries(5) の間でのプロセス間通信は、あらゆる種類がサポートされています。 • HP-UX 11i バージョン 2.0 に付属のバージョンの Aries は、 HP-UX 11i V1.6 以下で動作する HP-UX PARISC アプリケーションをサポートしています。 Aries は、HP-UX のバージョン 8.x 以前でコンパイルされ たアプリケーションはサポートしていません。ただし、そのようなアプリケーションでも、HP-UX の現行 バージョン (つまり、11i V1.6 以前) で実行した場合は正常に動作します。 • Aries は、PA-RISC の特権命令をサポートしていません。したがって、デバイスドライバとロード可能カー ネルモジュールはサポートされません。 • Aries では、「アプリケーションコードおよび ( または) システムコールの特定の一部分の実行にかかる時 間」に関して仮定されている PA アプリケーションについては、正確にエミュレートできない場合がありま す。そのようなプログラムは理論上、非同期プログラムであり、そのため、相互実行関数やセマフォなどを 使用した適切な同期手法を使用して調整する必要があります。実際には、このような非同期アプリケーショ ンはほとんど存在しません。 • Aries は、 ptrace() または profil() システムコールを使用するアプリケーションをサポートしていません。 ただし、PA の gdb による、エミュレートされたアプリケーションのデバッグがサポートされています。詳 細は、 「PA GDB サポート」の項を参照してください。この制限事項は、デバッガプログラム (通常は移植 不可能) に影響する可能性があります。 • Aries は、アプリケーションの仮想メモリーアドレス空間を少量使用します。そのため、Aries では、仮想ア ドレス空間の使用率がいっぱいに近い ( または完全にいっぱいの) アプリケーションはサポートされませ ん。実際には、そのようなアプリケーションはほとんど存在しません。 • Aries は、システムコール fork() および vfork() の両方をサポートしています。ただし、 fork() と vfork() の 間の違いに依存するアプリケーションはサポートされません。しかし、 vfork() システムコールを使用する アプリケーションのほとんどは、プログラマにそれとよくわかる目的で vfork() システムコールを使用しま す。一般的なアプリケーションが fork() と vfork() コールの相違点に依存するという状況は、非常にまれで す。詳細は、 vfork(2) および fork(2) を参照してください。 • エミュレートされたプログラムがプロセッサに関連する情報を戻すようなシステムコールを実行した場合、 エミュレートされたアプリケーションが Itanium ベースのマシン上で実行されるものであっても、エミュ レート中の Aries は PA-RISC 2.0 プロセッサに関連する情報を戻します。たとえば、 _SC_CPU_VERSION を使用した sysconf (2) に対するコールでは、 CPU_PA_RISC2_0 が戻されます。これは、エミュレートされ たプログラムは Itanium ベースシステム上の完全な PA 環境を想定するという Aries の性質によるもので す。アプリケーションが Itanium ベースのマシン上で実行されていることを確認する必要がある場合は、 system(3S) コールを使用して Itanium ベースのネイティブコマンド getconf (1) を利用し、必要なフィールド を取得します。詳細は、 system(3S) 、 getconf (1) 、および sysconf (2) を参照してください。 参照 ulimit(2)、setrlimit(2)、signal(2)、gdb(1)、core(4) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-55 ascii(5) ascii(5) 名称 ascii − ASCII 文字セットのマップ 構文 cat /usr/share/lib/pub/ascii 説明 /usr/share/lib/pub/ascii ファイルは、 ASCII 文字セットのマップを、各文字に等しい 8 進数および 16 進数を与 えることで提供します。このファイルの内容は以降のテキストです。 Section 5-56 |000 nul |010 bs |020 dle |030 can |040 sp |050 ( |060 0 |070 8 |100 @ |110 H |120 P |130 X |140 ‘ |150 h |160 p |170 x |001 soh |011 ht |021 dc1 |031 em |041 ! |051 ) |061 1 |071 9 |101 A |111 I |121 Q |131 Y |141 a |151 i |161 q |171 y |002 stx |012 nl |022 dc2 |032 sub |042 " |052 * |062 2 |072 : |102 B |112 J |122 R |132 Z |142 b |152 j |162 r |172 z |003 etx |013 vt |023 dc3 |033 esc |043 # |053 + |063 3 |073 ; |103 C |113 K |123 S |133 [ |143 c |153 k |163 s |173 { |004 eot |014 np |024 dc4 |034 fs |044 $ |054 , |064 4 |074 < |104 D |114 L |124 T |134 \ |144 d |154 l |164 t |174 | |005 enq |015 cr |025 nak |035 gs |045 % |055 − |065 5 |075 = |105 E |115 M |125 U |135 ] |145 e |155 m |165 u |175 } |006 ack |016 so |026 syn |036 rs |046 & |056 . |066 6 |076 > |106 F |116 N |126 V |136 ˆ |146 f |156 n |166 v |176 ˜ |007 bel |017 si |027 etb |037 us |047 ’ |057 / |067 7 |077 ? |107 G |117 O |127 W |137 _ |147 g |157 o |167 w |177 del | | | | | | | | | | | | | | | | | 00 nul | 08 bs | 10 dle | 18 can | 20 sp | 28 ( | 30 0 | 38 8 | 40 @ | 48 H | 50 P | 58 X | 60 ‘ | 68 h | 01 soh | 09 ht | 11 dc1 | 19 em | 21 ! | 29 ) | 31 1 | 39 9 | 41 A | 49 I | 51 Q | 59 Y | 61 a | 69 i | 02 stx | 0a nl | 12 dc2 | 1a sub | 22 " | 2a * | 32 2 | 3a : | 42 B | 4a J | 52 R | 5a Z | 62 b | 6a j | 03 etx | 0b vt | 13 dc3 | 1b esc | 23 # | 2b + | 33 3 | 3b ; | 43 C | 4b K | 53 S | 5b [ | 63 c | 6b k | 04 eot | 0c np | 14 dc4 | 1c fs | 24 $ | 2c , | 34 4 | 3c < | 44 D | 4c L | 54 T | 5c \ | 64 d | 6c l | 05 enq | 0d cr | 15 nak | 1d gs | 25 % | 2d − | 35 5 | 3d = | 45 E | 4d M | 55 U | 5d ] | 65 e | 6d m | 06 ack | 0e so | 16 syn | 1e rs | 26 & | 2e . | 36 6 | 3e > | 46 F | 4e N | 56 V | 5e ˆ | 66 f | 6e n | 07 bel | 0f si | 17 etb | 1f us | 27 ’ | 2f / | 37 7 | 3f ? | 47 G | 4f O | 57 W | 5f _ | 67 g | 6f o | | | | | | | | | | | | | | Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ascii(5) ascii(5) | 70 p | 78 x | 71 q | 79 y | 72 r | 7a z | 73 s | 7b { | 74 t | 7c | | 75 u | 7d } | 76 v | 7e ˜ | 77 w | 7f del | | 制御文字 次の表は、8進数、10進数、16進数の値を含む一連の ASCII 制御文字を示したものです。キーボードからそれ ぞれ対応する文字を入力するには、表に示すキーを組み合わせて押します。 vi または ex のエディタを使用して、ファイルに制御文字を入力するには、 Ctrl-v を押してから、必要な文字 を入力します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-57 ascii(5) ascii(5) 8進数 10進数 16進数 表示 記号 キャラクタ名 000 000 00 none NUL Null 001 001 01 ˆA SOH Start of Header 002 002 02 ˆB STX Start of Text Ctrl-B 003 003 03 ˆC ETX End of Text Ctrl-C 004 004 04 ˆD EOT End of Transmission Ctrl-D 005 005 05 ˆE ENQ Enquire Ctrl-E 006 006 06 ˆF ACK Acknowledge Ctrl-F 007 007 07 ˆG BEL Bell Ctrl-G 010 008 08 ˆH BS Back Space Ctrl-H 011 009 09 ˆI HT Horizontal Tab Ctrl-I 012 010 0A ˆJ LF Line Feed Ctrl-J 013 011 0B ˆK VT Vertical Tab Ctrl-K 014 012 0C ˆL FF Form Feed Ctrl-L 015 013 0D ˆM CR Carriage Return Ctrl-M 016 014 0E ˆN SO Shift Out Ctrl-N 017 015 0F ˆO SI Shift In Ctrl-O 020 016 10 ˆP DLE Data Link Escape Ctrl-P 021 017 11 ˆQ DC1 Device Control 1 Ctrl-Q 022 018 12 ˆR DC2 Device Control 2 Ctrl-R 023 019 13 ˆS DC3 Device Control 3 Ctrl-S 024 020 14 ˆT DC4 Device Control 4 Ctrl-T 025 021 15 ˆU NAK Negative Acknowledge Ctrl-U 026 022 16 ˆV SYN Synchronize Ctrl-V 027 023 17 ˆW ETB End Transmission Block Ctrl-W 030 024 18 ˆX CAN Cancel Ctrl-X 031 025 19 ˆY EM End of Medium Ctrl-Y 032 026 1A ˆZ SUB Substitute Ctrl-Z 033 027 1B ˆ[ ESC Escape Ctrl-[ 034 028 1C ˆ\ FS File Separator Ctrl-\ 035 029 1D ˆ] GS Group Separator Ctrl-] 036 030 1E ˆˆ RS Record Separator Ctrl-Shift-ˆ 037 031 1F ˆ_ US Unit Separator Ctrl-Shift-_ 177 127 7F ˆ? DEL Delete キー入力 Ctrl-Shift-@ Ctrl-A DEL 警告 キーボードインタフェース、ウィンドウシステム、その他のシステムソフトウェアなどの HP-UX サブシステ ムでは、特定の目的のためにキーボード制御文字を選択することにより、予想外の結果をもたらすことがあり ます。 Section 5-58 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 ascii(5) ascii(5) ファイル /usr/share/lib/pub/ascii HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-59 Audio(5) Audio(5) 名称 Audio − HP VUE で使用可能な音声ツール群 説明 このマンページは、 HP VUE で使用可能な音の再生、記録、および編集のための音声ツール (音声機構のセッ トアップ、オーディオ機密保護、音声エディタ、音声制御パネル、音声ファイルとデータフォーマット、およ び音声ライブラリ) についての説明です。 Audio(5) では、HP-UX のコマンド行から実行できるその他の音声 ツールの使用法についても説明しています。 Audio のセットアップ要件 音声ツールを使用するためには、音声クライアントおよび音声サーバーの両方のソフトウェアにアクセスする 必要があります。このソフトウェアは、HP-UX の一部です。このサーバーは、音声ハードウェアを備えたワー クステーションまたは Xステーション上でなければ動作できません。 音声ハードウェアは、720、730、750 以外のすべてのシリーズ 700 コンピュータに内蔵されています。720、 730、または 750 を、音声ハードウェア内蔵の 725、735、または 755 にそれぞれアップグレードできます。旧 式の 705 (つまり、8MB の HP-UX の 705) には、音声ソフトウェアが組み込まれていないので注意してくださ い。 X ステーション上で音声を使用するには、オーディオアクセサリーキットが備わった HP ENVIZEX または ENTRIAX ステーションが必要です。 音声クライアントおよび音声サーバーの両方のソフトウェアを 1つのシステム上で使用する場合がほとんどで す。しかし、音声サーバーをリモートワークステーションまたは Xステーション上で実行する必要がある場合 には、 aserver(1M) を参照してください。音声データファイルは、音声クライアントを実行するシステム、音 声サーバーを実行するシステム、および第3のシステムのうち、どのシステム上に存在していてもかまいませ ん。 オーディオ機密保護 音声は、保護されているので、ローカルワークステーション上のユーザーからしかアクセスできません。リ モートシステムからも音声にアクセスできるようにする必要がある場合には、 asecure(1M) を参照してくださ い。 音声エディタ 音声エディタは、音声を再生、記録、および編集する機能を持つ OSF/Motif ベースのツールです。音声エディ タは波形を表示するので、音声セグメントの編集および再生が容易に行えます。 ユーザーは音声ファイルをオープンして再生し、その波形を表示でき、さらに波形コントロールを使用して音 声ファイルを編集できます。出力デバイスを設定するには、音声制御パネルを使用してください。 音声を記録するには、システムがサポートするマイクまたはその他の音声機器 (通常は CD またはテーププレ イヤー) を最初に接続してください。この接続を行うには、音声エディタのオンラインヘルプ (「Audio Editor Tasks」の項) またはシステムのオーナーズマニュアルを参照してください。 音声エディタを使用して、音声ファイルを作成したり記録できます。 Section 5-60 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 Audio(5) Audio(5) 一般道具箱から音声エディタを起動するには、メディア道具箱をオープンして音声ファイルを音声エディタコ ントロール上にドロップするか、音声エディタコントロールをダブルクリックしてください。 ターミナルウィンドウ内で音声エディタを起動するには、次のように入力してください。 /opt/audio/bin/audio_editor [ pathname] オンラインヘルプは、音声エディタの右上隅にある Help メニューを使用して表示できます。 音声制御パネル 音声制御パネルは、音量を設定し、再生用の音声装置を選択するために使用する OSF/Motif ベースのツールで す。 音声制御パネルで音量調節を行うと、このワークステーションまたは Xステーションのすべてのクライアント システムの再生音量に影響を与えます。音声制御パネルには、現在の再生動作を停止するための停止ボタンも あります。 また、音声制御パネルを使用して、再生用の装置 (ヘッドホン、内蔵スピーカー、または外部スピーカーなど のように Line Out に接続されている装置) の選択もできます。この選択により、音声ファイルをダブルクリッ クしたときや音声エディタを使用してファイルを再生するときに音声が再生される場所が決まります。デフォ ルトの出力装置は、内部 (内蔵) スピーカーです。 HP VUE から音声制御パネルを起動するには、HP VUE 前面パネル上の音声コントロールをクリックしてくだ さい。 ターミナルウィンドウ内で音声制御パネルを起動するには、次のように入力してください。 /opt/audio/bin/AudioCP 従来のバージョンの音声ソフトウェアを使用して開発した音声アプリケーションがある場合、そのアプリケー ションでは SPEAKER 環境変数を使用して出力装置が規定されている可能性があります。 $HOME/.vueprofile ファイルの内容を修正することにより、HP VUE によって起動されるすべてのアプリケーションを対象にして SPEAKER 変数を設定できます。 SPEAKER 変数に設定できる値は、external (ヘッドホン、Line Out) か internal (内蔵スピーカー) のどちらかです。 POSIXシェルまたは Kシェルの場合、 SPEAKER 変数を設定するには次のように入力してください。 SPEAKER=internal export speaker Cシェルの場合、 SPEAKER 変数を設定するには次のように入力してください。 setenv SPEAKER internal HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-61 Audio(5) Audio(5) 音声ファイルとデータフォーマット サポートされる音声ファイルには、generic、RIFF/Waveform、raw の 3種類のうちのいずれかのファイルフォー マットで、圧縮されていない音声データが設定されています。それぞれのファイル名には、データフォーマッ トに適したファイル名拡張子が必要です。音声エディタのオンラインヘルプには、この 3 種類のファイル フォーマットのデータフォーマットとファイル名拡張子の対応の一覧があります。 この拡張子に基づいて、適切なアイコンがファイルマネージャに表示されます。音声ファイルを再生するに は、再生したいファイルのアイコンをドラッグして音声エディタ上にドロップするか、または再生したいファ イルのアイコンをダブルクリックします。 ファイル名に拡張子を付ける必要がある場合 (またはファイルフォーマットを変換する必要がある場合) には、 /opt/audio/bin/convert コマンドの使用をお勧めします。 convert(1) を参照してください。このコマンドを使用 する代わりに、ファイル名を変更して再生可能にすることもできます。次の形式のファイル名を使用してくだ さい。 filename.rate.data_type 上の rate および data_type 変数は、 convert の -drate および -ddata オプション用に定義された値を受け付け ます。必要に応じて、 rate 変数を省略できます。その場合には、次の形式のファイル名を使用してください。 filename.data_type 音声ライブラリ HP-UX には、音声ツールを作成するために使用する音声ライブラリが組み込まれています。 User Environment Developer’s Kit を注文してインストールすると、音声ライブラリを使用して他の音声アプリケーションを作成で きます。 HP-UX の音声ライブラリには、Cプログラムが音声を処理するために使用できる関数が含まれています。これ らの関数は音声サーバーと対話形式で、アプリケーションが音声データファイルの記録、再生、およびフォー マット変換を行えるようにします。 音声プログラミングについての詳細は、マニュアル『Using the Audio Developer’s Kit』を参照してください。 著者 音声ライブラリ、音声エディタ、および音声制御パネルは、 HP で開発されました。 参照 asecure(1M)、 aserver(1M)、 attributes(1)、 convert(1)、 send_sound(1) 『Using the Audio Developer’s Kit』 Section 5-62 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 audit(5) audit(5) 名称 audit − HP-UX 監査システムの使い方 構文 #include <sys/audit.h> 説明 監査システムの目的は、オブジェクトへのアクセスの事例を記録し、プロテクション機構を通過しようとする (何度も繰り返される) 試みと特権の誤使用の検出を可能にし、これによってシステムの悪用の抑止力として働 きシステムのセキュリティの隠れた弱点を明らかにするものです。 ユーザーとイベントの選択 監査システムは監査すべきユーザーおよび動作の選択機構を管理責任者に提供します。ユーザーには管理責任 者によって audit id というユニークな識別子が割り当てられます。これはユーザーの履歴を通してずっと変わ りません。 audusr(1M) コマンドはこのような監査されるユーザーを指定するのに使います。 audevent(1M) コ マンドは監査されるシステムの動作 (監査イベント) を指定します。監査イベントはいくつかのカテゴリに分類 されます。イベントのカテゴリはシステムの特別な面に影響を与える命令の集合で構成されています。イベン トカテゴリ リストは、 audevent(1M) を参照してください。 自己監査プログラム いくつかの典型的なシステム命令のログデータの量を減らして高レベルの記録を提供するために、一連の特権 プログラムには自己監査を行う機能が与えられています。これは、プログラムが自分自身において現在指定さ れている監査を停止して、それらが行う命令の高レベルな記述を提供します。自己監査プログラムには次のも のがあります。 at(1), chfn(1), chsh(1), crontab(1), login(1), newgrp(1), passwd(1), audevent(1M), audisp(1M), audsys(1M), audusr(1M), cron(1M), groupadd(1M), groupdel(1M), groupmod(1M), init(1M), lpsched(1M), sam(1M), userdel(1M), usermod(1M) 注記: 特権プログラムのみが自己監査することを許されます。それらが行う監査の停止は自分自身のプ ログラムにのみ影響を与え、システム上のそれ以外のプロセスには影響を与えません。 これらのコマンドの大部分が、単一のイベントカテゴリに属する監査データを生成します。たとえば、 sam(1M) は、イベント admin の監査データを生成します。複数のイベントカテゴリに属するデータを生成する コマンドもあります。たとえば、 init(1M) は、イベント login および admin の監査データを生成します。 監査データの表示 audisp(1M) コマンドはログファイルに記録された監査データを表示するのに使います。 audisp(1M) は (1つま たは複数の) ログファイルを時間順の監査ログ 1つにまとめます。管理責任者は audisp(1M) が提供する表示方 法を選択することで、管理責任者が観察したい特定の種類のイベントのみに検索を限定することができます。 監査システムのモニタリング 監査システムが正常に働いて異常な動作が検出されることを保証するため、特権プログラムである daemon の audomon(1M) がバックグラウンドで動作し、さまざまな監査システムのパラメータをモニタします。これらの パラメータが異常な (危険な) 値になったとき、また、監査システムの構成要素が事故でなくなったとき、 audomon(1M) は警告メッセージを表示し、可能ならばその問題を解決しようとします。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-63 audit(5) audit(5) 監査システムの起動と停止 管理責任者は audsys(1M) コマンドを使って監査システムの起動と中断する、停止または監査システムの状態の 簡単な要約を得ることができます。監査システムを起動する前に、 audsys(1M) は指定されたパラメータを検証 し、監査システムが安全で一貫性のある状態であることを保証します。 監査ログファイル 監査システムが使用可能になるときはいつも最低でも 1つの監査ログファイルが存在していなければなりませ ん。また、ログファイルのバックアップも強くお勧めします。これらのファイルはどちらも (ファイルのさま ざまな属性とともに) audsys(1M) を使って指定できます。現在のログファイルが最初に指定したサイズを超え るとき、または、監査ファイルシステムがいっぱいになってしまう危険があるとき、システムは可能であれば 自動的にバックアップファイルに切り替えます。ログファイルが使用可能な状態でないとき、警告メッセージ が管理責任者に適切な行動を求めるために送られます。 著者 上記の監査システムは、HP で開発されました。 参照 audsys(1M)、 audusr(1M)、 audevent(1M)、 audisp(1M)、 audctl(2)、 audswitch(2)、 audwrite(2)、 getaudid(2)、 getevent(2)、 setaudid(2)、 setevent(2)、 audit(4) Section 5-64 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 chanq_hash_locks(5) chanq_hash_locks(5) 名称 chanq_hash_locks − チャネルキューのハッシュテーブルを保護するスピンロックの、ハッシュされたプールのサ イズ 値 フェールセーフ 256 デフォルト 256 可能な値 16 ∼ 16777216 の、2 のべき乗の値 推奨値 デフォルト値のみ この調整パラメータをデフォルト値から変更することはお勧めしません。変更する場合は、当社のフィールド サービスエンジニアにご相談ください。 説明 この調整パラメータは変更しないでください。デフォルト値は、システムのパフォーマンスが最適になるよう に選択されています。 この調整パラメータは、チャネルキューの保護も兼ねるスピンロック (同期に使用されるカーネルデータ構造 体) のプールのサイズを制御します。非常に小さな値でも、チャネルキューのハッシュテーブルにおける衝突 の確率が高くなり、パフォーマンスが低下します。したがって、大きな値を設定する必要はありません。 この調整パラメータの変更を行う対象ユーザー この調整パラメータをデフォルト値から変更することはお勧めしません。変更する場合は、当社のフィールド サービスエンジニアにご相談ください。 変更に関する制限事項 この調整パラメータは、2のべき乗でなければなりません。それ以外の値を指定した場合は、その値より小さ い 2のべき乗の最大値が使用されます。 この値を増減した場合の影響 システムのパフォーマンスが劣化する可能性があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-65 chanq_hash_locks(5) chanq_hash_locks(5) 著者 chanq_hash_locks は、HP で開発されました。 Section 5-66 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 complex(5) complex(5) 名称 complex − 複素数型の関数とマクロ 構文 #include <complex.h> 説明 このファイルには、複素数ライブラリ (intro(3) のセクション 3M を参照) 内のすべての関数の宣言が記述され ています。 以下の型が定義されています。 extended quad Itaniumベース システムの 80 ビット拡張倍精度型。 IEEE 754 準拠 128 ビット浮動小数点型。 HP-UX では、 quad は long double と同義で す。 以下のマクロが定義されています。 complex _Complex に展開します。これは複素数型を指定するキーワードです。 imaginary _Imaginary に展開します。これは虚数型を指定するキーワードです。 これらのマクロと実数型名を組み合わせて、以下の複素数型と虚数型を指定します。 float complex double complex long double complex extended complex quad complex float imaginary double imaginary long double imaginary extended imaginary quad imaginary このファイルは以下のマクロも定義します。 _Imaginary_I 虚数単位 (2 乗すると −1 になる数) の値を持つ const float imaginary 型の定数式に 展開します。 _Complex_I I 虚数単位の値を持つ const float complex 型の定数式に展開します。 _Imaginary_I に展開します。これにより、複素数式を x + y*I の形式で効率的に構 成できます (x と y は実数)。 このヘッダーは、Itaniumベース システム専用です。このヘッダーを使用する場合は、デフォルトの −Ae オプ ションでコンパイルします。 extended complex、 quad complex、 extended imaginary、または quad imaginary HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-67 complex(5) complex(5) 型を使用する場合は、 −fpwidetypes オプションでコンパイルします。 ファイル /usr/include/complex.h 参照 intro(3)、fenv(5)、math(5) 標準準拠 <complex.h> : ISO/IEC C99 (Annex G、‘‘IEC 60559-compatible complex arithmetic’’ を含む) Section 5-68 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 core_addshmem_read(5) core_addshmem_read(5) 名称 core_addshmem_read − 読み取り可能共有メモリーをプロセスコアダンプに含めるかどうかの決定 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 可能な値 1 (オン) または 0 (オフ) 説明 core_addshmem_read 調整パラメータは、共有メモリーセグメントがコアファイルの一部として書き込まれて いなかったことが原因で、ユーザーによるユーザーレベルのプロセスクラッシュのデバッグが制限されていた 問題への対応として追加されました。 この調整パラメータを 1 (オン) に設定すると、コアダンプの実行後に、shared read-only というラベルの付いた ユーザーメモリーのセクションが (通常のデータセクションとともに) 書き込まれます。この調整パラメータを 0 (オフ) に設定した場合は書き込まれません。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は即時に有効になります。 この調整パラメータの値を大きくする場合 システムの開発者または保守管理者によるデバッグが必要なため、読み取り専用共有メモリーセグメントを ユーザーコアファイルに含める場合。 この値を大きくした場合の影響 ほとんどの場合、ユーザープロセスのコアファイルが増大します (アプリケーションの多くは共有メモリーを 使用します)。これは、ディスクスペースが希少なシステムでは問題になる可能性があります。 この調整パラメータの値を小さくする場合 コアファイルで、共有メモリーの破壊またはそのデータ値を対象としたデバッグが必要ない場合。 この値を小さくした場合の影響 コアファイルが小さくなる傾向があります。 同時に変更する必要がある他の調整パラメータ 必ず core_addshmem_write についても検討してください。このパラメータは、読み取り/書き込み共有メモ リーセグメントに対して同じ処理を行います。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-69 core_addshmem_read(5) core_addshmem_read(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 core_addshmem_read は、HP で開発されました。 Section 5-70 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 core_addshmem_write(5) core_addshmem_write(5) 名称 core_addshmem_write − 読み取り/書き込み共有メモリーをプロセスコアダンプに含めるかどうかの決定 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 可能な値 1 (オン) または 0 (オフ) 説明 core_addshmem_write 調整パラメータは、共有メモリーセグメントがコアファイルの一部として書き込まれて いなかったことが原因で、ユーザーによるユーザーレベルのプロセスクラッシュのデバッグが制限されていた 問題への対応として追加されました。 この調整パラメータを 1 (オン) に設定すると、コアダンプの実行後に、shared read-write というラベルの付いた ユーザーメモリーのセクションが (通常のデータセクションとともに) 書き込まれます。この調整パラメータを 0 (オフ) に設定した場合は書き込まれません。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は即時に有効になります。 この調整パラメータの値を大きくする場合 システムの開発者または保守管理者によるデバッグが必要なため、読み取り/書き込み共有メモリーセグメント をユーザーコアファイルに含める場合。 この値を大きくした場合の影響 ほとんどの場合、ユーザープロセスのコアファイルが増大します (アプリケーションの多くは共有メモリーを 使用します)。これは、ディスクスペースが希少なシステムでは問題になる可能性があります。 この調整パラメータの値を小さくする場合 コアファイルで、共有メモリーの破壊またはそのデータ値を対象としたデバッグが必要ない場合。 この値を小さくした場合の影響 コアファイルが小さくなる傾向があります。 同時に変更する必要がある他の調整パラメータ 必ず core_addsmem_read についても検討してください。このパラメータは、読み取り専用共有メモリーセグメ ントに対して同じ処理を行います。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-71 core_addshmem_write(5) core_addshmem_write(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 core_addshmem_write は、HP で開発されました。 Section 5-72 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 create_fastlinks(5) create_fastlinks(5) 名称 create_fastlinks − 高速シンボリックリンクを使用するシステム構成 値 最小値 0 最大値 1 デフォルト 0 整数値を指定します。 説明 create_fastlinks がゼロでない場合、システムは、パス名検索でシンボリックリンクごとにディスクブロックア クセスの数を1つずつ減らす方法で、HFS シンボリックリンクを作成します。これに伴い、HFS ディスク フォーマットが若干変更されます。それにより、高速シンボリックリンク用にフォーマットされたディスク は、HP-UX リリース 9.0 より前のシリーズ 700 システムと、HP-UX リリース 10.0 より前のシリーズ 800 シス テムでは使用できなくなります (この構成可能なパラメータは、シリーズ 700 リリース 9.0 システムにはあり ますが、シリーズ 800 HP-UX 9.0 システムにはありません)。 以前のバージョンとの互換性を保つために、 create_fastlinks のデフォルトの設定はゼロになっています。この 場合、新しい高速フォーマットは作成されません。ただし、すべての HP-UX 10.0 カーネル (および、すべての シリーズ 700 HP-UX 9.0 カーネル) は、"create_fastlinks" がゼロかゼロでないかに関係なく、両方のディスク フォーマットを認識します。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 create_fastlinks は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-73 curses(5) curses(5) 名称 curses.h — 画面操作および最適化の関数定義 構文 #include <curses.h> 説明 目的 <curses.h> ヘッダーは、 COLOR_PAIRS 、 COLORS 、 COLS 、 curscr 、 LINES 、および stdscr の定義を行いま す。 定数 以下の定数が定義されます。 EOF ファイル終了に対する関数戻り値 ERR 障害に対する関数戻り値 FALSE false 論理値 OK 正常終了に対する関数戻り値 TRUE true 論理値 WEOF <wchar.h> に定義された通りの、ファイル終了に対するワイドキャラクタ関数戻り値 データ型 typedef によって以下のデータ型が定義されます。 attr_t 属性の論理和 bool 論理データ型 chtype 文字、属性、カラーペア SCREEN 不透明な端末表現 wchar_t <stddef.h> に記述された通りに定義されます。 wint_t <wchar.h> に記述された通りに定義されます。 cchar_t ワイドキャラクタの文字列を示します。 WINDOW 不透明なウィンドウ表現 これらのデータ型については、curses_intro のデータ型で詳しく説明します。 <curses.h> を含めると、ヘッダー <stdio.h>、 <term.h>、 <termios.h> および <wchar.h> からのすべての記号が 表示可能になります。 Section 5-74 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 curses(5) curses(5) 属性ビット 以下の記号定数は、 attr_t データ型のオブジェクトを操作するために使用されます。 WA_ALTCHARSET 代替文字セット WA_BLINK 点滅表示 WA_BOLD 特別な輝度表示つまりボールド WA_DIM 半輝度表示 WA_HORIZONTAL 水平高輝度表示 WA_INVIS 非表示 WA_LEFT 左高輝度表示 WA_LOW 下高輝度表示 WA_PROTECT 保護表示 WA_REVERSE 反転表示 WA_RIGHT 右高輝度表示 WA_STANDOUT 端末の最適高輝度表示モード WA_TOP 上高輝度表示 WA_UNDERLINE アンダースコア WA_VERTICAL 垂直高輝度表示 これらの属性フラグは、区別する必要があります。 以下の記号定数は、 chtype データ型のオブジェクト内の属性ビットを操作するために使用されます。 A_ALTCHARSET 代替文字セット A_BLINK 点滅表示 A_BOLD 特別な輝度表示つまりボールド A_DIM 半輝度表示 A_INVIS 非表示 A_PROTECT 保護表示 A_REVERSE 反転表示 A_STANDOUT 端末の最適高輝度表示モード A_UNDERLINE アンダースコア _XOPEN_CURSES が定義されていて、アプリケーションが _XOPEN_SOURCE_EXTENDED を 1 に設定してい る場合以外は、 これらの属性フラグを区別する必要はありません。 以下の記号定数は、 chtype の構成要素を抽出するために、ビットマスクとして使用することができます。 A_ATTRIBUTES 属性を抽出するためのビットマスク A_CHARTEXT 文字を抽出するためのビットマスク A_COLOR カラーペア情報を抽出するためのビットマスク 以下の記号定数は、 chtype の構成要素を抽出するために、ビットマスクとして使用することができます。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-75 curses(5) curses(5) A_ATTRIBUTES 属性を抽出するためのビットマスク A_CHARTEXT 文字を抽出するためのビットマスク A_COLOR カラーペア情報を抽出するためのビットマスク 線描用定数 <curses.h> ヘッダーは、線描で使用するために以下の表の左側の 2つの列に示す記号定数を定義します。 ACS_ で始まる記号定数は、 char 定数です。 WACS_ で始まる記号定数は、 cchar_t へのポインタを持つワイドキャ ラクタインタフェースで使用するための cchar_t 定数です。 以下の POSIX ロケールの POSIX ロケールのデフォルトという列に示す文字は、ターミナルデータベースが、 terminfo(4) の「ライングラフィックス」の項で説明するように、 acsc 機能を使用して値を指定していない場合 に使用されます。 POSIX ロケール Section 5-76 char 定数 cchar_t 定数 のデフォルト 浮き彫りの説明 ACS_ULCORNER WACS_ULCORNER + 左上隅 ACS_LLCORNER WACS_LLCORNER + 左下隅 ACS_URCORNER WACS_URCORNER + 右上隅 ACS_LRCORNER WACS_LRCORNER + 右下隅 ACS_RTEE WACS_RTEE + 右ティー ACS_LTEE WACS_LTEE + 左ティー ACS_BTEE WACS_BTEE + 下ティー ACS_TTEE WACS_TTEE + 上ティー ACS_HLINE WACS_HLINE − 横線 ACS_VLINE WACS_VLINE | 縦線 ACS_PLUS WACS_PLUS + プラス ACS_S1 WACS_S1 - スキャンライン 1 スキャンライン 9 ACS_S9 WACS_S9 ACS_DIAMOND WACS_DIAMOND + ダイヤモンド ACS_CKBOARD WACS_CKBOARD : チェッカーボード (縦縞) ACS_DEGREE WACS_DEGREE ’ 度記号 ACS_PLMINUS WACS_PLMINUS # プラス/マイナス ACS_BULLET WACS_BULLET o 黒丸 ACS_LARROW WACS_LARROW < 左向き矢印 ACS_RARROW WACS_RARROW > 右向き矢印 ACS_DARROW WACS_DARROW v 下向き矢印 ACS_UARROW WACS_UARROW ˆ 上向き矢印 ACS_BOARD WACS_BOARD # 矩形のボード ACS_LANTERN WACS_LANTERN # ランタン記号 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 curses(5) curses(5) ACS_BLOCK WACS_BLOCK # 正方形ボックス カラー関連マクロ 以下のカラー関連マクロが定義されます。 COLOR_BLACK COLOR_BLUE COLOR_GREEN COLOR_CYAN COLOR_RED COLOR_MAGENTA COLOR_YELLOW COLOR_WHITE 座標関連マクロ 以下の座標関連マクロが定義されます。 void getbegyx(WINDOW *win, int y, int x); void getmaxyx(WINDOW *win, int y, int x); void getparyx(WINDOW *win, int y, int x); void getyx(WINDOW *win, int y, int x); HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-77 curses(5) curses(5) キーコード ファンクションキー値を表す以下の記号定数が定義されます。 キーコード 説明 KEY_CODE_YES wchar_t 変数にキーコードが入っていることを示す KEY_BREAK ブレークキー KEY_DOWN 下向き矢印キー KEY_UP 上向き矢印キー KEY_LEFT 左向き矢印キー KEY_RIGHT 右向き矢印キー KEY_HOME ホームキー KEY_BACKSPACE バックスペース KEY_F0 ファンクションキー ;64 個のキー用スペースが予約される KEY_F(n) nは、0 ≤ n ≤ 63 KEY_DL 行を削除 KEY_IL 行を挿入 KEY_DC 文字を削除 KEY_IC 文字を挿入または挿入モードに入る KEY_EIC 文字挿入モードを終了 KEY_CLEAR 画面をクリア KEY_EOS 画面の最後までクリア KEY_EOL 行の最後までクリア KEY_SF 順方向に 1行スクロール KEY_SR 逆方向に 1行スクロール KEY_NPAGE 次のページ KEY_PPAGE 前のページ KEY_STAB タブを設定 KEY_CTAB タブをクリア KEY_CATAB すべてのタブをクリア KEY_ENTER 入力または送信 KEY_SRESET ソフト (部分的な) リセット KEY_RESET リセットまたはハードリセット KEY_PRINT プリントまたはコピー KEY_LL ホームダウンまたはボトム KEY_A1 キーパッドの左上 KEY_A3 キーパッドの右上 KEY_B2 キーパッドの中央 KEY_C1 キーパッドの左下 Section 5-78 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 curses(5) curses(5) キーパッドの右下 KEY_C3 仮想キーパッドは、次のように配置された 3 × 3 のキーパッドです。 A1 UP A3 LEFT B2 RIGHT C1 DOWN C3 A1 などのそれぞれの記号は、KEY_A1 などの上記の表のキーコードに対する記号定数に対応しています。 ファンクションキー値を表す以下の記号定数も定義されます。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-79 curses(5) curses(5) キーコード Section 5-80 説明 KEY_BTAB バックタブキー KEY_BEG 開始キー KEY_CANCEL 取り消しキー KEY_CLOSE クローズキー KEY_COMMAND Cmd (コマンド) キー KEY_COPY コピーキー KEY_CREATE 作成キー KEY_END エンドキー KEY_EXIT 終了キー KEY_FIND 検索キー KEY_HELP ヘルプキー KEY_MARK マークキー KEY_MESSAGE メッセージキー KEY_MOVE 移動キー KEY_NEXT 次のオブジェクトキー KEY_OPEN オープンキー KEY_OPTIONS オプションキー KEY_PREVIOUS 前のオブジェクトキー KEY_REDO 再実行キー KEY_REFERENCE 参照キー KEY_REFRESH リフレッシュキー KEY_REPLACE 置き換えキー KEY_RESTART 再起動キー KEY_RESUME 再開キー KEY_SAVE 保存キー KEY_SBEG シフトされた開始キー KEY_SCANCEL シフトされた取り消しキー KEY_SCOMMAND シフトされたコマンドキー KEY_SCOPY シフトされたコピーキー KEY_SCREATE シフトされた作成キー KEY_SDC シフトされた文字削除キー KEY_SDL シフトされた行削除キー KEY_SELECT 選択キー KEY_SEND シフトされた終了キー KEY_SEOL シフトされたクリアキー KEY_SEXIT シフトされた終了キー KEY_SFIND シフトされた検索キー Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 curses(5) curses(5) シフトされたヘルプキー KEY_SHELP KEY_SHOME シフトされたホームキー KEY_SIC シフトされた入力キー KEY_SLEFT シフトされた左矢印キー KEY_SMESSAGE シフトされたメッセージキー KEY_SMOVE シフトされた移動キー KEY_SNEXT シフトされた次のオブジェクトキー KEY_SOPTIONS シフトされたオプションキー KEY_SPREVIOUS シフトされた前のオブジェクトキー KEY_SPRINT シフトされた印刷キー KEY_SREDO シフトされた再実行キー KEY_SREPLACE シフトされた置き換えキー KEY_SRIGHT シフトされた右矢印キー KEY_SRSUME シフトされた再開キー KEY_SSAVE シフトされた保存キー KEY_SSUSPEND シフトされた保留キー KEY_SUNDO シフトされた取り消しキー KEY_SUSPEND 保留キー KEY_UNDO 取り消しキー 関数のプロトタイプ 以下のものは関数として宣言されますが、マクロとして定義される可能性もあります。 int addch(const chtype ch); int addchstr(const chtype *chstr); int addchnstr(const chtype *chstr, int n); int addnstr(const char *str, int n); int addstr(const char *str); int addnwstr(const wchar_t *wstr, int n); int addwstr(const wchar_t *wstr); int add_wch(const cchar_t *wch); int add_wchnstr(const cchar_t *wchstr, int n); int add_wchstr(const cchar_t *wchstr); int attroff(int attrs); int attron(int attrs); int attrset(int attrs); int attr_get(attr_t *attrs, short *color_pair, void *opts); int attr_off(attr_t attrs, void *opts); int attr_on(attr_t attrs, void *opts); int attr_set(attr_t attrs, short color_pair, void *opts); HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 5-81 curses(5) curses(5) int baudrate(void); int beep(void); int bkgd(chtype ch); void bkgdset(chtype ch); void bkgrndset(const cchar_t *wch); int bkgrnd(const cchar_t *wch); int border(chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br); int border_set(const cchar_t *ls, const cchar_t *rs, const cchar_t *ts, const cchar_t *bs, const cchar_t *tl, const cchar_t *tr, const cchar_t *bl, const cchar_t *br); int box(WINDOW *win, chtype verch, chtype horch); int box_set(WINDOW *win, const cchar_t *verch, const cchar_t *horch); bool can_change_color(void); int cbreak(void); int chgat(int n, attr_t attr, short color, const void *opts); int clear(void); int clearok(WINDOW *win, bool bf); int clrtobot(void); int clrtoeol(void); int color_content(short color, short *red, short *green, short *blue); int COLOR_PAIR(int n); int copywin(const WINDOW *srcwin, WINDOW *dstwin, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int overlay); int curs_set(int visibility); int def_prog_mode(void); int def_shell_mode(void); int delay_output(int ms); int delch(void); void delscreen(SCREEN *sp); int delwin(WINDOW *win); int deleteln(void); WINDOW *derwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x); int Section 5-82 doupdate(void); Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 curses(5) curses(5) WINDOW *dupwin(WINDOW *win); int echo(void); int echochar(const chtype ch); int echo_wchar(const cchar_t *wch); int endwin(void); int erase(void); char erasechar(void); int erasewchar(wchar_t *ch); void filter(void); int flash(void); int flushinp(void); chtype getbkgd(WINDOW *win); int getbkgrnd(cchar_t *wch); int getcchar(const cchar_t *wcval, wchar_t *wch, attr_t *attrs, int getch(void); int getnstr(char *str, int n); short *color_pair, void *opts); int getn_wstr(wint_t *wstr, int n); int getstr(char *str); int get_wch(wint_t *ch); WINDOW *getwin(FILE *filep); int get_wstr(wint_t *wstr); int halfdelay(int tenths); bool has_colors(void); bool has_ic(void); bool has_il(void); int hline(chtype ch, int n); int hline_set(const cchar_t *wch, int n); void idcok(WINDOW *win, bool bf); int idlok(WINDOW *win, bool bf); void immedok(WINDOW *win, bool bf); chtype inch(void); int inchnstr(chtype *chstr, int n); int inchstr(chtype *chstr); WINDOW *initscr(void); int init_color(short color, short red, short green, short blue); int init_pair(short pair, short f, short b); int innstr(char *str, int n); int innwstr(wchar_t *wstr, int n); HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 5-83 curses(5) curses(5) int insch(chtype ch); int insdelln(int n); int insertln(void); int insnstr(const char *str, int n); int insstr(const char *str); int instr(char *str); int ins_nwstr(const wchar_t *wstr, int n); int ins_wch(const cchar_t *wch); int ins_wstr(const wchar_t *wstr); int intrflush(WINDOW *win, bool bf); int in_wch(cchar_t *wcval); int in_wchstr(cchar_t *wchstr); int in_wchnstr(cchar_t *wchstr, int n); int inwstr(wchar_t *wstr); bool isendwin(void); bool is_linetouched(WINDOW *win, int line); bool is_wintouched(WINDOW *win); char *keyname(int c); char *key_name(wchar_t c); int keypad(WINDOW *win, bool bf); char killchar(void); int killwchar(wchar_t *ch); int leaveok(WINDOW *win, bool bf); char *longname(void); int meta(WINDOW *win, bool bf); int move(int y, int x); int mvaddch(int y, int x, const chtype ch); int mvaddchnstr(int y, int x, const chtype *chstr, int n); int mvaddchstr(int y, int x, const chtype *chstr); int mvaddnstr(int y, int x, const char *str, int n); int mvaddnwstr(int y, int x, const wchar_t *wstr, int n); int mvaddstr(int y, int x, const char *str); int mvaddwstr(int y, int x, const wchar_t *wstr); int mvadd_wch(int y, int x, const cchar_t *wch); int mvadd_wchnstr(int y, int x, const cchar_t *wchstr, int n); int mvadd_wchstr(int y, int x, const cchar_t *wchstr); int mvchgat(int y, int x, int n, attr_t attr, short color, const void *opts); int Section 5-84 mvcur(int oldrow, int oldcol, int newrow, int newcol); Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 curses(5) curses(5) int mvdelch(int y, int x); int mvderwin(WINDOW *win, int par_y, int par_x); int mvgetch(int y, int x); int mvgetnstr(int y, int x, char *str, int n); int mvgetn_wstr(int y, int x, wint_t *wstr, int n); int mvgetstr(int y, int x, char *str); int mvget_wch(int y, int x, wint_t *ch); int mvget_wstr(int y, int x, wint_t *wstr); int mvhline(int y, int x, chtype ch, int n); int mvhline_set(int y, int x, const cchar_t *wch, int n); chtype mvinch(int y, int x); int mvinchnstr(int y, int x, chtype *chstr, int n); int mvinchstr(int y, int x, chtype *chstr); int mvinnstr(int y, int x, char *str, int n); int mvinnwstr(int y, int x, wchar_t *wstr, int n); int mvinsch(int y, int x, chtype ch); int mvinsnstr(int y, int x, const char *str, int n); int mvinsstr(int y, int x, const char *str); int mvinstr(int y, int x, char *str); int mvins_nwstr(int y, int x, const wchar_t *wstr, int n); int mvins_wch(int y, int x, const cchar_t *wch); int mvins_wstr(int y, int x, const wchar_t *wstr); int mvinwstr(int y, int x, wchar_t *wstr); int mvin_wch(int y, int x, cchar_t *wcval); int mvin_wchnstr(int y, int x, cchar_t *wchstr, int n); int mvin_wchstr(int y, int x, cchar_t *wchstr); int mvprintw(int y, int x, char *fmt, ...); int mvscanw(int y, int x, char *fmt, ...); int mvvline(int y, int x, chtype ch, int n); int mvvline_set(int y, int x, const cchar_t *wch, int n); int mvwaddch(WINDOW *win, int y, int x, const chtype ch); int mvwaddchnstr(WINDOW *win, int y, int x, const chtype *chstr, int mvwaddchstr(WINDOW *win, int y, int x, const chtype *chstr); int mvwaddnstr(WINDOW *win, int y, int x, const char *str, int n); int mvwaddnwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int mvwaddstr(WINDOW *win, int y, int x, const char *str); int mvwaddwstr(WINDOW *win, int y, int x, const wchar_t *wstr); int n); int n); HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 5-85 curses(5) curses(5) int mvwadd_wch(WINDOW *win, int y, int x, const cchar_t *wch); int mvwadd_wchnstr(WINDOW *win, int y, int x, const cchar_t *wchstr, int mvwadd_wchstr(WINDOW *win, int y, int x, const cchar_t *wchstr); int mvwchgat(WINDOW *win, int y, int x, int n, attr_t attr, int mvwdelch(WINDOW *win, int y, int x); int mvwgetch(WINDOW *win, int y, int x); int mvwgetnstr(WINDOW *win, int y, int x, char *str, int n); int mvwgetn_wstr(WINDOW *win, int y, int x, wint_t *wstr, int n); int n); short color, const void *opts); int mvwgetstr(WINDOW *win, int y, int x, char *str); int mvwget_wch(WINDOW *win, int y, int x, wint_t *ch); int mvwget_wstr(WINDOW *win, int y, int x, wint_t *wstr); int mvwhline(WINDOW *win, int y, int x, chtype ch, int n); int mvwhline_set(WINDOW *win, int y, int x, const cchar_t *wch, int n); int mvwin(WINDOW *win, int y, int x); chtype mvwinch(WINDOW *win, int y, int x); int mvwinchnstr(WINDOW *win, int y, int x, chtype *chstr, int n); int mvwinchstr(WINDOW *win, int y, int x, chtype *chstr); int mvwinnstr(WINDOW *win, int y, int x, char *str, int n); int mvwinnwstr(WINDOW *win, int y, int x, wchar_t *wstr, int n); int mvwinsch(WINDOW *win, int y, int x, chtype ch); int mvwinsnstr(WINDOW *win, int y, int x, const char *str, int n); int mvwinsstr(WINDOW *win, int y, int x, const char *str); int mvwinstr(WINDOW *win, int y, int x, char *str); int mvwins_nwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int mvwins_wch(WINDOW *win, int y, int x, const cchar_t *wch); int mvwins_wstr(WINDOW *win, int y, int x, const wchar_t *wstr); int mvwinwstr(WINDOW *win, int y, int x, wchar_t *wstr); int mvwin_wch(WINDOW *win, int y, int x, cchar_t *wcval); int mvwin_wchnstr(WINDOW *win, int y, int x, cchar_t *wchstr, int mvwin_wchstr(WINDOW *win, int y, int x, cchar_t *wchstr); int mvwprintw(WINDOW *win, int y, int x, char *fmt, ...); int mvwscanw(WINDOW *win, int y, int x, char *fmt, ...); int mvwvline(WINDOW *win, int y, int x, chtype ch, int n); int mvwvline_set(WINDOW *win, int y, int x, const cchar_t *wch, int n); int n); Section 5-86 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 curses(5) curses(5) int n); int napms(int ms); WINDOW *newpad(int nlines, int ncols); SCREEN *newterm(char *type, FILE *outfile, FILE *infile); WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x); int nl(void); int nonl(void); int nocbreak(void); int nodelay(WINDOW *win, bool bf); int noecho(void); void noqiflush(void); int noraw(void); int notimeout(WINDOW *win, bool bf); int overlay(const WINDOW *srcwin, WINDOW *dstwin); int overwrite(const WINDOW *srcwin, WINDOW *dstwin); int pair_content(short pair, short *f, short *b); int PAIR_NUMBER(int value); int pechochar(WINDOW *pad, chtype *ch); int pecho_wchar(WINDOW *pad, const cchar_t *wch); int pnoutrefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, int prefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, int printw(char *fmt, ...); int putp(const char *str); int putwin(WINDOW *win, FILE *filep); int smincol, int smaxrow, int smaxcol); int smincol, int smaxrow, int smaxcol); void qiflush(void); int raw(void); int redrawwin(WINDOW *win); int refresh(void); int resetty(void); int reset_prog_mode(void); int reset_shell_mode(void); int ripoffline(int line, int (*init)(WINDOW *win, int columns)); HP-UX 11i Version 2: August 2003 − 14 − Hewlett-Packard Company Section 5-87 curses(5) curses(5) int savetty(void); int scanw(char *fmt, ...); int scr_dump(const char *filename); int scr_init(const char *filename); int scrl(int n); int scroll(WINDOW *win); int scrollok(WINDOW *win, bool bf); int scr_restore(const char *filename); int scr_set(const char *filename); int setcchar(cchar_t *wcval, const wchar_t *wch, const attr_t attrs, short color_pair, const void *opts); int setscrreg(int top, int bot); SCREEN *set_term(SCREEN *new); int slk_attroff(const chtype attrs); int slk_attr_off(const attr_t attrs, void *opts); int slk_attron(const chtype attrs); int slk_attr_on(const attr_t attrs, void *opts); int slk_attrset(const chtype attrs); int slk_attr_set(const attr_t attrs, short color_pair, int slk_clear(void); int slk_init(int fmt); void *opts); char *slk_label(int labnum); int slk_noutrefresh(void); int slk_refresh(void); int slk_restore(void); int slk_set(int labnum, const char *label, int justify); int slk_touch(void); int slk_wset(int labnum, const wchar_t *label, int justify); int standend(void); int standout(void); int start_color(void); WINDOW *subpad(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x); WINDOW *subwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x); int syncok(WINDOW *win, bool bf); chtype termattrs(void); Section 5-88 Hewlett-Packard Company − 15 − HP-UX 11i Version 2: August 2003 curses(5) curses(5) attr_t term_attrs(void); char *termname(void); int tigetflag(char *capname); int tigetnum(char *capname); char *tigetstr(char *capname); void timeout(int delay); int touchline(WINDOW *win, int start, int count); int touchwin(WINDOW *win); char *tparm(char *cap, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9); int typeahead(int fildes); int ungetch(int ch); int unget_wch(const wchar_t wch); int untouchwin(WINDOW *win); void use_env(bool boolvalue); int vidattr(chtype attr); int vid_attr(attr_t attr, short color_pair, void *opts); int vidputs(chtype attr, int (*putfunc)(int)); int vid_puts(attr_t attr, short color_pair, void *opt, int vline(chtype ch, int n); int vline_set(const cchar_t *wch, int n); int vwprintw(WINDOW *win, char *fmt, void *varglist); int vw_printw(WINDOW *win, char *fmt, void *varglist); int vwscanw(WINDOW *win, char *fmt, void *varglist); int vw_scanw(WINDOW *win, char *fmt, void *varglist); int waddch(WINDOW *win, const chtype ch); int (*putwfunc)(int)); int waddchnstr(WINDOW *win, const chtype *chstr, int n); int waddchstr(WINDOW *win, const chtype *chstr); int waddnstr(WINDOW *win, const char *str, int n); int waddnwstr(WINDOW *win, const wchar_t *wstr, int n); int waddstr(WINDOW *win, const char *str); int waddwstr(WINDOW *win, const wchar_t *wstr); int wadd_wch(WINDOW *win, const cchar_t *wch); int wadd_wchnstr(WINDOW *win, const cchar_t *wchstr, int n); int wadd_wchstr(WINDOW *win, const cchar_t *wchstr); int wattroff(WINDOW *win, int attrs); int wattron(WINDOW *win, int attrs); int wattrset(WINDOW *win, int attrs); HP-UX 11i Version 2: August 2003 − 16 − Hewlett-Packard Company Section 5-89 curses(5) curses(5) int wattr_get(WINDOW *win, attr_t *attrs, short *color_pair, void *opts); int wattr_off(WINDOW *win, attr_t attrs, void *opts); int wattr_on(WINDOW *win, attr_t attrs, void *opts); int wattr_set(WINDOW *win, attr_t attrs, void *opts); int wbkgd(WINDOW *win, chtype ch); void wbkgdset(WINDOW *win, chtype ch); int wbkgrnd(WINDOW *win, const cchar_t *wch); void wbkgrndset(WINDOW *win, const cchar_t *wch); int wborder(WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, int wborder_set(WINDOW *win, const cchar_t *ls, const cchar_t *rs, chtype tl, chtype tr, chtype bl, chtype br); const cchar_t *ts, const cchar_t *bs, const cchar_t *tl, const cchar_t *tr, const cchar_t *bl, const cchar_t *br); int wchgat(WINDOW *win, int n, attr_t attr, short color, const void *opts); int wclear(WINDOW *win); int wclrtobot(WINDOW *win); int wclrtoeol(WINDOW *win); void wcursyncup(WINDOW *win); int wdelch(WINDOW *win); int wdeleteln(WINDOW *win); int wechochar(WINDOW *win, const chtype ch); int wecho_wchar(WINDOW *win, const cchar_t *wch); int werase(WINDOW *win); int wgetbkgrnd(WINDOW *win, cchar_t *wch); int wgetch(WINDOW *win); int wgetnstr(WINDOW *win, char *str, int n); int wgetn_wstr(WINDOW *win, wint_t *wstr, int n); int wgetstr(WINDOW *win, char *str); int wget_wch(WINDOW *win, wint_t *ch); int wget_wstr(WINDOW *win, wint_t *wstr); int whline(WINDOW *win, chtype ch, int n); int whline_set(WINDOW *win, const cchar_t *wch, int n); chtype winch(WINDOW *win); int winchnstr(WINDOW *win, chtype *chstr, int n); int winchstr(WINDOW *win, chtype *chstr); int winnstr(WINDOW *win, char *str, int n); int winnwstr(WINDOW *win, wchar_t *wstr, int n); Section 5-90 Hewlett-Packard Company − 17 − HP-UX 11i Version 2: August 2003 curses(5) curses(5) int winsch(WINDOW *win, chtype ch); int winsdelln(WINDOW *win, int n); int winsertln(WINDOW *win); int winsnstr(WINDOW *win, const char *str, int n); int winsstr(WINDOW *win, const char *str); int winstr(WINDOW *win, char *str); int wins_nwstr(WINDOW *win, const wchar_t *wstr, int n); int wins_wch(WINDOW *win, const cchar_t *wch); int wins_wstr(WINDOW *win, const wchar_t *wstr); int winwstr(WINDOW *win, wchar_t *wstr); int win_wch(WINDOW *win, cchar_t *wcval); int win_wchnstr(WINDOW *win, cchar_t *wchstr, int n); int win_wchstr(WINDOW *win, cchar_t *wchstr); int wmove(WINDOW *win, int y, int x); int wnoutrefresh(WINDOW *win); int wprintw(WINDOW *win, char *fmt, ...); int wredrawln(WINDOW *win, int beg_line, int num_lines); int wrefresh(WINDOW *win); int wscanw(WINDOW *win, char *fmt, ...); int wscrl(WINDOW *win, int n); int wsetscrreg(WINDOW *win, int top, int bot); int wstandend(WINDOW *win); int wstandout(WINDOW *win); void wsyncdown(WINDOW *win); void wsyncup(WINDOW *win); void wtimeout(WINDOW *win, int delay); int wtouchln(WINDOW *win, int y, int n, int changed); wchar_t *wunctrl(cchar_t *wc); int wvline(WINDOW *win, chtype ch, int n); int wvline_set(WINDOW *win, const cchar_t *wch, int n); アプリケーション使用法 <curses.h> を含み <varargs.h> を使用する履歴アプリケーションをサポートするために、va_list を使用する vw_printw(), vw_scanw(), vwprintw(), vwscanw() インタフェースが (void *) データ型の 3番目の引き数を持つように宣言されます。 参照 curses_intro(3X), <stdio.h> (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <term.h>, <termios.h> (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <unctrl.h>, <wchar.h> (X/Open System Interfaces and Headers, Issue 4, Version 2 specification) HP-UX 11i Version 2: August 2003 − 18 − Hewlett-Packard Company Section 5-91 curses(5) curses(5) 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 新しい定数、データ型、および関数のプロトタイプを記載するために、このエントリーの内容は完全に変更さ れました。 Section 5-92 Hewlett-Packard Company − 19 − HP-UX 11i Version 2: August 2003 dbc_max_pct(5) dbc_max_pct(5) 名称 dbc_max_pct − ファイル I/O データやメタデータのキャッシングに使用されるメモリーの最大パーセンテージ 値 フェールセーフ 5 デフォルト 50 許容値 最小値は 1 (物理メモリーの 1%) 、最大値は 90 (物理メモリーの 90%) 。この値は dbc_min_pct の値より小さ くならないように指定します。 正の整数値を指定します。 説明 ファイルシステム I/O 動作中はデータがバッファーキャッシュに保存されますが、バッファーキャッシュのサ イズは、固定にすることも、動的に割り当てることも出来ます。 dbc_min_pct と dbc_max_pct の値が異なる と、システムメモリーに対する要求の競合の度合いに応じて、バッファーキャッシュのサイズが動的に拡大/縮 小します。 dbc_max_pct の値は、動的バッファーキャッシュに使用される物理メモリーの最大パーセンテージを設定しま す。関連する調整パラメータ dbc_min_pct の値は、動的バッファーキャッシュに使用される物理メモリーの最 小パーセンテージを設定します。十分な物理メモリーが確保されている場合、動的バッファーキャッシュは必 要に応じて、 dbc_max_pct で表される最大値までメモリー使用量を増やすことができます。ただし、これは物 理メモリーに対する要求の競合状況に依存します。 dbc_min_pct と dbc_max_pct の両方を同じ値に設定することで、正確にそのパーセンテージの物理メモリーを 使用し続ける固定サイズのバッファーキャッシュをカーネルが作成することが可能です。 この調整パラメータの変更を行う対象ユーザー dbc_max_pct で指定されるキャッシュサイズの最大値をデフォルト値から変更する必要はほとんどありませ ん。しかし、例外的に大きな、あるいは、小さな物理メモリーを搭載したシステムや、ファイルデータのため にディスク I/O を使用するシステムプロセスが例外的に多い、あるいは、少ないシステムでは、このパラメー タを変更する必要が生じる場合があります。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。 この調整パラメータの値を大きくする場合 システムでファイルデータを扱う多数のプロセスが起動している場合。 この調整パラメータの値を大きくした場合の影響 システムがより多くの物理ページを要求し、バッファーキャッシュを増やそうとすると、メモリー使用量が増 加します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-93 dbc_max_pct(5) dbc_max_pct(5) この調整パラメータの値を小さくする場合 要求の競合状況によりますが、大量のメモリーがファイルシステムの I/O キャッシング以外に使用されている 場合。 この調整パラメータの値を小さくした場合の影響 現在バッファーキャッシュが使用しているメモリよりも小さい値を指定すると、バッファーキャッシュはただ ちに上回った分の物理ページをシステムに開放し、他の目的に利用できるようにします。 ファイルデータを扱う多数のプロセスが起動しているシステムで dbc_max_pct を低すぎる値に設定すると、 バッファーキャッシュへの要求が膨れ上がり、その結果、システムのパフォーマンスが低下することがありま す。こうした現象は、 dbc_min_pct と dbc_max_pct が同じ値に設定された固定サイズのバッファーサイズを使 用しているときにも起こりえます。 同時に変更する必要がある他の調整パラメータ dbc_min_pct の値は dbc_max_pct の値より大きくならないように指定しなければならず、パラメータの設定時 にはカーネルによってチェックされます。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 前の HP-UX リリースに含まれていた静的なバッファーキャッシュに関連する調整パラメータは削除されまし た。固定サイズのバッファーキャッシュを使用する際は、 dbc_min_pct と dbc_max_pct に同じ値を設定する方 法を推奨します。 著者 dbc_max_pct は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(2)、settune(2)、dbc_min_pct(5) Section 5-94 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 dbc_min_pct(5) dbc_min_pct(5) 名称 dbc_min_pct − ファイル I/O データやメタデータのキャッシングに使用されるメモリーの最小パーセンテージ 値 フェールセーフ 5 デフォルト 5 許容値 最小値は 1 (物理メモリーの 1%) 、最大値は 70 (物理メモリーの 70%) 。この値は dbc_max_pct の値より大き くならないように設定します。 正の整数値を指定します。 推奨値 dbc_min_pct で指定されるキャッシュサイズの最小値をデフォルト値から変更する必要はほとんどありませ ん。しかし、例外的に大きな、あるいは、小さな物理メモリーを搭載したシステムや、ファイルデータのため にディスク I/O を使用するシステムプロセスが例外的に多い、あるいは、少ないシステムでは、このパラメー タを変更する必要が生じる場合があります。 最小キャッシュサイズの妥当 (かつ無難) な値を MB 単位で求めるには、以下の式を使用します。 (number-of-system-processes)*(largest-file-system-block-size)/1024 dbc_min_pct の値を求めるには、この式の結果を、コンピュータに搭載されている物理メモリーのサイズの数 値 (MB 単位) で割り、その値に 100 を掛けます。これによって、正しい値がパーセント単位で得られます。 この計算には、ディスク I/O をアクティブに使用しているプロセスのみを含めます。それ以外はすべて除外で きます。どのプロセスを計算に含め、どのプロセスを計算から除外するかについて、例をいくつか示します。 計算に含める: NFS デーモン、テキストフォーマッタ (nroff など)、データベース管理アプリケーション、テキストエ ディタ、コンパイラなど。これらは、システムにマウントされた1つまたは複数のファイルシステム に保存されているソースファイルや出力ファイルにアクセスしたり、それらのファイルを使用したり します。 計算から除外する: X ディスプレイアプリケーション、 hpterm 、 rlogin 、ログインシェル、システムデーモン、 telnet および uucp 接続など。これらのプロセスは、ファイルデータのためのディスク I/O をほとんど使用し ません。 説明 ファイルシステム I/O 動作中はデータがバッファーキャッシュに保存されますが、バッファーキャッシュのサ イズは、固定にすることも、動的に割り当てることもできます。 dbc_min_pct と dbc_max_pct の値が異なる HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-95 dbc_min_pct(5) dbc_min_pct(5) と、システムメモリーに対する要求の競合の度合いに応じて、バッファーキャッシュのサイズが動的に拡張/縮 小します。 dbc_min_pct の値は、動的バッファーキャッシュで使用するために確保される物理メモリーの最小パーセン テージを指定します。 dbc_min_pct と dbc_max_pct の両方を同じ値に設定することで、正確にそのパーセンテージの物理メモリーを バッファーキャッシュとして使用し続ける固定サイズのバッファーキャッシュをカーネルが作成することが可 能です。 この調整パラメータの変更を行う対象ユーザー dbc_min_pct で指定されるキャッシュサイズの最小値をデフォルト値から変更する必要はほとんどありませ ん。しかし、例外的に大きな、あるいは、小さな物理メモリーを搭載したシステムや、ファイルデータのため にディスク I/O を使用するシステムプロセスが例外的に多い、あるいは、少ないシステムでは、このパラメー タを変更する必要が生じる場合があります。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。十分な物理メモ リーが搭載されておらず、新たに指定された最小値までファイルシステムのバッファーキャッシュを増やすこ とができない場合、パラメータの調節は失敗します。 この調整パラメータの値を大きくする場合 この最小値を増やす必要はほとんどありません。I/O 処理中心のプロセスが起動しているシステムのパフォー マンスが低い場合 (特に初期設定時) 、それは dbc_min_pct の値が小さすぎる兆候である可能性があります。 しかし、このような時も、 dbc_min_pct ではなく、最大値の dbc_max_pct の値を増やすことをお勧めします。 この調整パラメータの値を大きくした場合の影響 dbc_min_pct で指定される動的バッファーキャッシュの最低限の固定分として確保されたメモリーは、システ ム上で他の目的に使用されることはありません。この値を増やすと、指定したパーセンテージのメモリーがた だちに使用されるようになります。値を増やしすぎると結果的にメモリーを圧迫する可能性があるのでご注意 ください。 この調整パラメータの値を小さくする場合 この最小値を減らす必要はほとんどありません。要求の競合状況によりますが、ファイルシステムの I/O キャッシング以外の目的でより多くのメモリーを使用したい場合はこのパラメータの値を小さくします。 この調整パラメータの値を小さくした場合の影響 物理メモリーへの要求が過度に競合しているときに dbc_min_pct を低すぎる値に設定すると、バッファー キャッシュへの要求が膨れ上がり、その結果、システムのパフォーマンスが低下することがあります。 同時に変更する必要がある他の調整パラメータ dbc_min_pct の値は dbc_max_pct の値より大きくならないように設定しなければならず、パラメータの設定時 にはカーネルによってチェックされます。 Section 5-96 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 dbc_min_pct(5) dbc_min_pct(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 前の HP-UX リリースに含まれていた静的なバッファーキャッシュに関連する調整パラメータは削除されまし た。固定サイズのバッファーキャッシュを使用する際は、 dbc_min_pct と dbc_max_pct に同じ値を設定する方 法を推奨します。 著者 dbc_min_pct は、HP で開発されました。 参照 kctune(1M)、sam(1M)、hpterm(1)、nroff(1)、rlogin(1)、telnet(1)、uucp(1)、gettune(2)、settune(2)、 dbc_max_pct(5) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-97 default_disk_ir(5) default_disk_ir(5) 名称 default_disk_ir − SCSI サブシステムにおけるデバイスの書き込みキャッシュの使用の有効化/無効化 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 可能な値 0 (オフ) または 0 以外 (オン) 推奨値 0 (オフ) 説明 この調整パラメータは、SCSI サブシステムの Immediate Reporting 動作 (Write Cache Enable (WCE) とも呼びま す) を有効 (1) または無効 (0) にします。 Immediate Reporting を有効にすると、データキャッシュを持つディス クドライブへの生の (raw) 書き込みを含む write() システムコールは、データが実際に媒体に書き込まれた後で はなくデータがキャッシュされた時点で、復帰します。これにより、特に順次転送において書き込みのパ フォーマンスが向上する場合があります。 デバイスがキャッシュしたデータを媒体に書き込む前にデバイスで電源異常やリセットが発生すると、キャッ シュしたデータが消失する場合があります。そのようなリスクがあることから、サーバーについては Immediate Reporting を無効 (0) にすることをお勧めします。 この調整パラメータは、mount コマンドのオプションではありませんが、ファイルシステムと raw ディスクパ フォーマンスに、例えばシステムリセット発生時におけるデータの保全性に重大な影響を及ぼします。また、 遅延書き込み動作とライトスルー ファイルシステム動作の関係にも影響します。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、デバイスを最初に開いた時点で有効になります。 この調整パラメータをオンにする場合 サードパーティのアプリケーションベンダーによって推奨されている場合。通常の使用では、この調整パラ メータは有効にしないことをお勧めします。 この調整パラメータをオンにした場合の影響 この調整パラメータを有効にすると LVM や RAID による保護の対象からはずれるため、デバイスで電源異常 やリセットが発生したときにファイルシステムが破損したりデータが消失したりする危険性が強くなります。 Section 5-98 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 default_disk_ir(5) default_disk_ir(5) この調整パラメータをオフにする場合 この調整パラメータは常に無効にすることをお勧めします。これは特に、デバイスで電源異常やリセットが発 生したときにファイルシステムが破損したりデータが消失したりするリスクを負わないために必要です。 この調整パラメータをオフにした場合の影響 デバイスで電源異常やリセットが発生した場合にファイルシステムが破損したりデータが消失したりするとい うリスクは取り除かれますが、ディスク書き込みアクセス (読み取りではない) のパフォーマンスが低下する可 能性があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 default_disk_ir は、HP で開発されました。 参照 write(2)、scsi(7) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-99 dirent(5) dirent(5) 名称 dirent.h − ディレクトリストリームとディレクトリエントリーの書式 構文 #include <sys/types.h> #include <dirent.h> 説明 このヘッダファイルは directory(3C) に記述されたディレクトリ ストリームルーチンで使うデータ型を定義して います。 以降のデータ型が定義されています。 DIR オープンされたディレクトリストリームに関する情報を格納する構造体 struct dirent readdir 関数で返されるエントリーの書式を定義する構造体 ( directory(3C) を参照) struct dirent 構造体には以下の要素があります。 char d_name[MAXNAMLEN+1]; /* name of directory entry */ ino_t d_ino; short d_namlen; short d_reclen; /* file serial number */ /* length of string in d_name */ /* length of this record */ MAXNAMLEN は <dirent.h> で定義されています。 d_reclen エントリーは、現在のエントリーから次の正しいエントリーまでのオフセットを表現するのに内部的 に使用しています。そのため、 d_reclen は現在のエントリーの長さではなく、エントリーに現在のエントリー と次の正しいエントリーとの間でまだ使われていないスペースを合わせたレコードの長さです。正しい dirent の間の使用されていないスペースは、ファイルや別のディレクトリの削除などの、ディレクトリの内容の変化 によってできたものです。 このファイルには、 directory(3C) パッケージの中の関数のための外部宣言もあります。 著者 dirent.h はAT&TとHPで開発されました。 参照 directory(3C)、 ndir(5) 標準準拠 <dirent.h>: AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 Section 5-100 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 dld.so(5) dld.so(5) 名称 dld.so − ダイナミックローダー マルチスレッドでの使用法 ダイナミックローダーはスレッドセーフです。 説明 /usr/lib/hpux64/dld.so 共有ライブラリは、64 ビット ダイナミックローダーです。 /usr/lib/hpux32/dld.so 共有ラ イブラリは、32 ビット ダイナミックローダーです。共有ライブラリを使用するプログラムでは、 dld.so は起 動時に自動的に実行されます。 /usr/ccs/lib/hpux64/crt0.o は、64 ビット 実行時起動ファイルです。 /usr/ccs/lib/hpux32/crt0.o は、32 ビット 実行時起動ファイルです。 /usr/lib/hpux32/uld.so 共有ライブラリと /usr/lib/hpux64/uld.so 共有ライブラリは、それぞれ 32 ビットと 64 ビットのマイクロローダーです。共有ライ ブラリを使用するプログラムでは、マイクロローダーは exec(2) によって起動時に自動的に実行されます。マ イクロローダーの唯一の役割は、プログラムの実行のためにダイナミックローダー dld.so をメモリーにロード することです。マイクロローダー (uld.so) とダイナミックローダー (dld.so) は、それ自身が共有ライブラリで すが、ユーザープログラムで使用するためのシンボルを定義しません。 共有ライブラリ 共有ライブラリは、 ld の -b オプションで作成された実行可能ファイルです (ld(1) を参照)。これらのファイル には、位置独立コード (PIC) を含める必要があります。このコードは、プロセスのアドレス空間の任意の場所 にマップすることが可能で、最小限の再配置で実行できます。 PIC は、 PC 相対アドレッシングモードとリン クテーブルを使用できます。HP コンパイラは、デフォルトで PIC を生成します。 不完全な実行可能ファイル 1つ以上の共有ライブラリにリンクしている実行可能プログラムを 不完全な実行可能ファイルと呼びます。 オブジェクトファイルやライブラリから実行可能 (a.out) ファイルを作成する際、リンカーは、テキスト (コー ド) やデータを共有ライブラリから出力ファイルにコピーしません。その代わりに、ダイナミックローダーが 実行時にライブラリをプロセスのアドレス空間にマップします。リンカーは、すべてのプログラム参照を共有 ライブラリルーチンにバインドし、データをリンクテーブルのエントリにバインドします。さらに、ライブラ リがマップされた後にダイナミックローダーを使用してリンクテーブルのエントリを埋めます。このリンク テーブルは、関数呼び出し用のジャンプテーブルとして動作します。 スレッドローカルストレージ 静的と動的の2つのスレッドローカルストレージ モデルがサポートされています。静的/動的は、コンパイラ オプション +tls=static/dynamic によって制御されます。デフォルトは +tls=dynamic です。動的モデルによって 構築された共有ライブラリは、 dlopen(3C) API と shl_load(3X) API を使用してロードできます。静的モデルに よって構築された共有ライブラリを dlopen(3C) API または shl_load(3X) API を使用してロードしようとする と、以下のエラーになります。 /usr/lib/hpux[32|64]/dld.so: Can’t shl_load() a library containing Thread Local Storage: /usr/lib/hpux[32|64]/libcps.so.1 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-101 dld.so(5) dld.so(5) ダイナミックローダーは、プログラムのスレッドローカルストレージのサイズを算出するほか、各共有ライブ ラリのスレッドローカルストレージのサイズも算出します。すべてのライブラリがロードされると、ダイナ ミックローダーは、システムライブラリ libc のイニシャライザを実行します。これにより、スレッドの初期 化、初期スレッドの割り当て、およびスレッドポインタの設定が行われます。 ローディング 不完全な実行可能ファイルには、リンク時に検出された共有ライブラリのパス名のリストが含まれます。ダイ ナミックローダーは、実行時に、プログラムとリンクしているすべての共有ライブラリをプロセスにアタッチ します。ダイナミックローダーは、リンク時に各ライブラリが検出されたディレクトリから各ライブラリを ロードしようとします。動的パスリストを指定して、共有ライブラリの実行時検索パスを変更することができ ます (PA32 互換モードについては、 「動的パスリスト」を参照してください)。 ライブラリのテキストセグメントは、そのセグメントを使用するすべてのプロセスで共有されています。デー タセグメントと bss (初期化されていないデータ) セグメントは、ページごとにロードされます。プロセスが データページまたは bss ページに初めてアクセス (読み取りまたは書き込み)した時点で、そのページのコピー がそのプロセス用に作成されます。 動的パスリスト デフォルトモードのライブラリについては、ダイナミックローダーは、動的パス検索を使用して、プログラム のライブラリリストに名前がある共有ライブラリか、 / 文字が含まれていないロード済み共有ライブラリを検 出します。動的パス検索は、これらのライブラリや実行可能ファイルに対しては、デフォルトで有効になって います。 ld +noenvvar が指定された場合は、ダイナミックローダーは、動的パス環境変数を参照せずに依存共 有ライブラリを検索します。これにより、動的パス検索は、 rpath (実行時パス、または ld +b コマンドで設定 された埋め込みパス) の値と 64 ビットライブラリ用デフォルトディレクトリ /usr/lib/hpux64 または 32 ビット ライブラリ用デフォルトディレクトリ /usr/lib/hpux32 に限定されます。 PA32 互換モードライブラリ (ld +compat で構築されたライブラリ、または ld +compat でリンクしたライブラ リ) については、ダイナミックローダーは、これらのライブラリが -l または -l: でリンクしていて、なおかつ以 下のいずれかが指定された場合にのみ、動的パス検索を実行します。 • ld +s • ld +b • chatr +s enable 動的パスリストを指定する方法は複数あります。 • ld の +b path_list オプションを使用して、 rpath 内の実行可能ファイルにディレクトリパスリストを保存し ます。 • ld +b を指定 せずにリンカーを使用して rpath の値を ld -L path_list に設定し、その後に環境変数 LPATH の値を続けて、さらにその後に 64 ビット デフォルトディレクトリ /usr/lib/hpux64 または 32 ビット デフォ ルトディレクトリ /usr/lib/hpux32 を続けます。 Section 5-102 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 dld.so(5) • dld.so(5) 環境変数 LD_LIBRARY_PATH または SHLIB_PATH にディレクトリパスリストを指定します。 LD_LIBRARY_PATH および SHLIB_PATH には、32 ビットと 64 ビットの両方のライブラリのパスを含め ることができます。この場合、dld.so は適切なライブラリのみをロードします。互換モードの共有ライブラ リと実行可能ファイルについては、 SHLIB_PATH 環境変数にのみディレクトリパスリストを指定できま す。 パスリストとは、1つまたは複数のパス名をコロン (:) で区切ったものです。動的パスリストは、 ld の -l また は -l: オプションを使用して指定されたライブラリについてのみ動作します。ただし、 chatr の -l オプション を使用してライブラリの絶対パス名を指定することによって、動的パスリストを有効にすることができます (chatr(1) を参照)。 +s と +b の両方を使用した場合は、コマンドラインでの相対順序が、どのパスリストが互 換モードで最初に検索されるかを示します。詳細は、 ld(1) の +help オプションまたは 『HP-UX Linker and Libraries User’s Guide』を参照してください。 ダイナミックローダーは、どの動的パスリストを使用するかを決定する際に、以下の規則を使用します。 • ld +noenvvar を指定し、 ld +b と ld +compat を指定 しない場合は、 rpath 内のパスリストを参照し、その 後 64 ビット デフォルトディレクトリ /usr/lib/hpux64、または 32 ビット デフォルトディレクトリ /usr/lib/hpux32 を参照する動的パス検索だけを実行できます。 • ld +compat を指定し、 ld +b と ld +s を指定 しない場合は、動的パス検索の対象となる共有ライブラリはあ りません。ライブラリのリンク時の位置 (記録されているパス) が使用されます。 • ld +compat オプションと ld +b オプションを指定 しない場合は、 LD_LIBRARY_PATH 環境変数内のパス リスト、 SHLIB_PATH 環境変数内のパスリスト、 rpath 内のパスリストの順に検索され、その後に 64 ビット デフォルトディレクトリ /usr/lib/hpux64、または 32 ビット デフォルトディレクトリ /usr/lib/hpux32 が検索されます。 • ld +compat、 ld +b、および ld +s を指定した場合は、ダイナミックローダーが、 SHLIB_PATH およびライ ブラリリストで指定されたライブラリを使用する前に rpath 内のパスリストを使用するかどうかが、 ld +b と ld +s の相対順序によって決定します。 ld +b を最初に指定した場合は、 rpath 内のパスリストを最初に 使用します。 これらの規則は、依存共有ライブラリの検索では若干異なります。 • デフォルトモードライブラリの場合は、 LD_LIBRARY_PATH 環境変数内のパスリスト、 SHLIB_PATH 環 境変数内のパスリスト、親共有ライブラリの rpath 内の値の順に検索され、その後に 64 ビット デフォルト ディレクトリ /usr/lib/hpux64、または 32 ビット デフォルトディレクトリ /usr/lib/hpux32 が検索されます。 親共有ライブラリの上位関数に rpath 内のパスリストが含まれる場合がありますが、この親の依存共有ライ ブラリを検索する際にはそのパスリストは無視され、その親の rpath のみが使用されます。 • 互換モードライブラリの場合の検索は親共有ライブラリの場合とほとんど同じですが、 rpath を親共有ライ ブラリから子依存共有ライブラリに渡すことができるほか、さらにその子の依存ライブラリに渡すことがで きる点 (さらにその先まで渡すことができます) が唯一異なります。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-103 dld.so(5) dld.so(5) バインディング さらに、ダイナミックローダーは、実行可能ファイルとライブラリの間のシンボル参照を解決します。デフォ ルトでは、関数呼び出しは、リンクテーブルを介してトラップされ、最初の参照時にバインドされます。デー タシンボルへの参照や、その他の絶対アドレス参照はトラップできません。これらは、オブジェクトを参照す る可能性のある関数呼び出しの最初の解決時にバインドされます。 ld の -B immediate オプションを使用すると、ローダーは、必要な参照をすべて起動時にバインドします。これ によってプログラムの起動時の負担は増えますが、その後のバインディング処理が不要になります。したがっ て、リアルタイム応答性が向上するうえ、未解決の外部参照が原因で実行が中断するというリスクがなくなり ます。 fastbind ツールを使用して、共有ライブラリ (不完全な実行可能ファイル) を使用するプログラムの起動時間を 短縮できます。 fastbind ツールは、シンボルのバインドに使用された共有ライブラリルーチンおよびデータに 対する解析を実行し、その情報を実行可能ファイルに保存します。ダイナミックローダーは、この情報が使用 可能であることを通知し、標準の検索メソッドの代わりにこの fastbind 情報を使用してシンボルをバインドし ます。詳細は、 fastbind(1) と、 ld(1) の +help オプション、または 『HP-UX Linker and Libraries User’s Guide』 を参照してください。 幅優先探索 ダイナミックローダーは、デフォルトでは、シンボルのバインド時に幅優先探索を実行します。不完全な実行 可能ファイルが +compat でリンクされている場合、または shl_load() が実行中の場合は、深さ優先探索が使用 されます ( 「深さ優先探索」を参照)。幅優先探索では、ダイナミックローダーは、不完全な実行可能ファイル で始まり、その後にすべてのロード済み共有ライブラリが続くシンボルを、左から右の順序でシンボルが見つ かるまで検索します。たとえば、不完全な実行可能ファイルの検索に続いて、そのライブラリ ロードリストに あるすべてのライブラリが検索されます。その後、ライブラリ ロードリストの1番目のライブラリの依存共有 ライブラリが検索され、さらにリストの2番目、3番目といった具合にライブラリの依存共有ライブラリが続 けて検索されます。 バージョン管理 共有ライブラリのコードは実行時に別の共有ライブラリファイルからマップされるため、共有ライブラリを修 正すると、既存の実行可能ファイルの動作が変わってしまう場合があります。場合によっては、プログラムが 正常に動作しなくなる可能性があります。 ライブラリレベルのバージョン化 ユーザーは、命名規則 libname.n を使用して、各自のライブラリのバージョンを管理できます。 n は、ライブ ラリの新しいリリースごとに増分される数字です。新しい命名スキームを使用する場合は、共有ライブラリの 構築時に ld の +h internal_name オプションを使用して、共有ライブラリの内部名を指定する必要があります。 この内部名は、その共有ライブラリとリンクする不完全な実行可能ファイルおよび共有ライブラリのそれぞれ に記録されます。 ダイナミックローダーは、実行時に、不完全な実行可能ファイルまたは共有ライブラリに記録されたライブラ リリストを参照します。リスト内のライブラリのうち内部名になっていないものについては、ダイナミック ローダーは、ロードするライブラリ (たとえば、 libname.0) の .0 バージョンを検索します。このバージョンが Section 5-104 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 dld.so(5) dld.so(5) 見つからなければ、ダイナミックローダーは、リストに記録されているライブラリ名を検索します。 明示的なローディングとバインディング すでに説明したように、ダイナミックローダーの機能はすべて自動的に実行されますが、 ld の適切なオプショ ンを使用することで、多少の制御は可能です。ダイナミックローダーには、プログラムからアクセスすること もできます。 shl_load(3X)、 dlclose(3C)、 dlerror(3C)、 dlget(3C)、 dlmodinfo(3C)、 dlopen(3C)、および dlsym(3C) で説明されているルーチンで提供される移植可能なインタフェースを使用すると、プログラマは、実 行時に共有ライブラリをプロセスに明示的にアタッチすること、共有ライブラリ内で定義されたシンボルのア ドレスを計算すること、およびプロセスの完了時にライブラリを切り離すことが可能です。 グローバルシンボルテーブル グローバルシンボルテーブル機構は、パフォーマンス強化オプションとして設計されています。この機構を有 効にすると、グローバルシンボルテーブルが作成されます。グローバルシンボルテーブルにより、シンボルの 検索のためにすべてのロード済みライブラリをスキャンする必要がなくなり、シンボルの検索を高速化できま す。これは特に、多数の共有ライブラリを使用するアプリケーションで効果的です。この機構は、デフォルト ではオフになっています。 グローバルシンボルテーブルは、ハッシュテーブルを使用して実装されます。グローバルシンボルテーブル機 構の下では、暗黙的に、あるいは dlopen() または shl_load() を使用してライブラリがロードされるたびに、こ の機構によってライブラリのエクスポートがハッシュされ、ハッシュテーブルに配置されます。ライブラリが アンロードされると、ハッシュテーブル内の該当するライブラリのエクスポートが検索され、削除されます。 ハッシュテーブルには、 shl_definesym() で定義されたシンボルのエントリは含まれません。したがって、ユー ザー定義のシンボルは別途処理する必要があります。 この機能を有効にすると、 dld のメモリー使用量が増え、API コールの dlopen()、 dlclose()、 shl_load()、およ び shl_unload() のパフォーマンスに影響します。 グローバルシンボルテーブルを使用すると、ダイナミックローダーは、シンボルを配置するために多数のハッ シュ処理を実行しなければならない場合があります。このハッシュ関数の実行には非常に時間がかかることが あります (特にシンボル名が極端に長い場合 (C++ プログラム))。 dld を高速化するために、ハッシュ値をリン カーに計算させることができます。 +gst オプションの +gst、 +gstsize、および +nodynhash を使用すると、グローバルシンボルテーブルのハッ シュ機構の動作を制御できます。これらのオプションについては、 ld(1) および chatr(1) コマンドを参照して ください。 これらのオプションを使用すると、 サイズを調整することにより、パフォーマンスとメモリー使用のバランス を取ることができます。パフォーマンスを最大化するには、連鎖の長さが均一になるようにテーブルサイズを 調整します。パフォーマンスを犠牲にしてメモリーの使用効率を最適化する場合は、空のエントリの数が最少 になるようにテーブルのサイズを調整します。テーブルサイズには通常は素数を使用します。 ハッシュテーブルのパフォーマンスに関する統計情報を取得するには、環境変数 _HP_DLDOPTS に -symtab_stat オプションを含めます。このオプションを使用すると、各ライブラリに関するメッセージに以下 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-105 dld.so(5) dld.so(5) の情報が含められます。 • 動作 (ロード/アンロード) • ライブラリの名前 • エクスポートの数 • シンボルが保存されていないテーブル内のエントリ数 • ゼロでないチェーンの平均長 • ハッシュテーブルのパフォーマンスの計算値 • ハッシュテーブルで使用されるメモリーの合計サイズ PA32 互換モードでのダイナミックローダーの動作 ダイナミックローダーは、PA32 の旧リリースとの互換性をサポートするために、いくつかの動作を維持して います。これらの動作は、 ld +compat コマンドと shl_load() ライブラリ管理ルーチンを使用して作成されたプ ログラムに適用されます。 動的パスリスト 動的パスリストの指定には以下の2通りの方法があります。 • ld の +b path_list オプションを使用して、ディレクトリパスリストを実行可能ファイルに保存します。 • 実行可能ファイルを ld でオプション +s を指定してリンクして、 SHLIB_PATH 環境変数で定義されたパス リストを、実行可能ファイルが実行時に使用できるようにします。 パスリストとは、1つまたは複数のパス名をコロン (:) で区切ったものです。動的パスリストは、 ld の -l また は -l: オプションを使用して指定されたライブラリに対してのみ動作します。ただし、 chatr の -l オプション を使用してライブラリの絶対パス名を指定することによって、動的パスリストを有効にすることができます (chatr(1) を参照)。 +s と +b の両方を使用した場合は、コマンドラインでの相対順序が、どのパスリストが互 換モードで最初に検索されるかを示します。詳細は、 ld(1) の +help オプションまたは 『HP-UX Linker and Libraries User’s Guide』を参照してください。 深さ優先探索 これは互換モードで使用される検索動作で、 shl_load() を実行している場合、または不完全な実行可能ファイ ルが +compat でリンクされていた場合に使用されます。ダイナミックローダーは、不完全な実行可能ファイル を検索し、次にそのライブラリロードリストにある 1 番目のライブラリを検索します。次にこのライブラリの 1番目の依存ライブラリを検索し、さらにこの依存ライブラリの1番目の依存ライブラリといった具合に検索 を続行します。そうして依存ライブラリをすべて検索し終わると、兄弟ライブラリとその依存ライブラリを検 索します。これは、最終的にプログラムのライブラリロードリストの2番目のライブラリが検索されるまで続 きます。さらにその後、このライブラリの1番目の依存ライブラリといった具合に検索を続行します。 Section 5-106 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 dld.so(5) dld.so(5) 診断と警告 互換モードですべてのメッセージを表示するには、環境変数 _HP_DLDOPTS に1つ以上のオプションを含め ます。以下のオプションがサポートされています。 -warnings 補足のダイナミックローダー警告メッセージを表示します。以下のようなものがあ ります。 • CODE と DATA のように、名前が同じでタイプが異なるシンボル。この警告につ いての詳細は、 ld(1) の「 警告」セクションを参照してください。 • shl_load(3X) で説明されている特定のフラグまたはルーチンの使用。 -fbverbose fastbind(1) を参照してください。 -nofastbind fastbind(1) を参照してください。 LD_PRELOAD 環境変数 注記: LD_PRELOAD 機能は、 passwd などの seteuid/setegid プログラムに対しては無効になっています。詳細 は、 ld(1) を参照してください。この機能は、完全バインド静的実行可能プログラムでは使用できません。 LD_PRELOAD 環境変数を使用すると、プログラムの起動時に追加の共有ライブラリをロードできます。 LD_PRELOAD は、ダイナミックローダーがインタプリト可能な共有ライブラリのリスト (コロン区切りまた はスペース区切り) を提供します。ダイナミックローダー dld.so は、プログラムが LD_PRELOAD 環境変数で 指定された共有ライブラリと明示的にリンクされていたかのように、それらの共有ライブラリを、プログラム のどの依存ライブラリよりも先にロードします。 ダイナミックローダーは、 LD_PRELOAD 環境変数で指定されたライブラリが1つまたは複数検出されると、 それらを起動時に暗黙的にロードします。ダイナミックローダーは、ライブラリが実行可能ファイルの構築時 にリンク行の 1 番目のライブラリとして明示的にリンクされている場合と同様のロード順序およびシンボル解 決順序を使用します。たとえば、実行可能ファイルが以下のリンク行で構成されているとします。 $ ld ... lib2.so lib3.so lib4.so LD_PRELOAD="/var/tmp/lib1.so" の場合、ダイナミックローダーは、 lib1.so が以下のリンク行の 1 番目のラ イブラリとして指定されていた場合と同様のロード順序およびシンボル解決順序を使用します。 $ ld ... /var/tmp/lib1.so lib2.so lib3.so lib4.so 通常のコマンドラインの使用法 (/usr/bin/sh を使用) では、 LD_PRELOAD は以下のように定義されます。 $ LD_PRELOAD=mysl.so application ダイナミックローダーは、アプリケーションの検索では $PATH に従いますが、 mysl.so の検索では SHLIB_PATH、 LD_LIBRARY_PATH、または埋め込みパス (有効な場合) に従います。 注記: すべての実行可能ファイル (seteuid/setegid プログラムは除く) の実行時に LD_PRELOAD 環境変数がダ イナミックローダーによってチェックされるため、 LD_PRELOAD をエクスポートする場合は、実行可能ファ イルの実行後にこれを設定解除するか、実行可能ファイルを、前述のコマンドの形式か、あるいはスクリプト HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 5-107 dld.so(5) dld.so(5) の形式で実行する必要があります。 LD_PRELOAD 環境変数を使用して TLS を含む静的スレッドローカル ストレージモデルで構築されている共 有ライブラリをロードすると、ライブラリを動的にロードする際に起こる以下のエラーを回避できます。 /usr/lib/hpux[32|64]/dld.so: Can’t shl_load() a library containing Thread Local Storage: /usr/lib/hpux[32|64]/libcps.so.1 +tls=dynamic コンパイラオプションを使用してライブラリを再コンパイルすると、このエラーメッセージを回 避できます。 PA32 互換モードプログラムでは、ロード順序およびシンボル解決順序が異なる場合があります。これは、ダイ ナミックローダーが、PA32 モードでは深さ優先探索を使用し、標準モードでは幅優先探索を使用するためで す。詳細は、 ld(1) の +help オプションの 「Symbol Searching and Dependent Libraries」または 『HP-UX Linker and Libraries User’s Guide』を参照してください。 リンク行で +noenvvar を使用した場合も、ダイナミックローダーでは LD_PRELOAD 環境変数が使用されま す。その結果、 +compat でリンクされた場合でも、(setuid および setgid プログラムを除いて) LD_PRELOAD の設定は常に有効です。 注記: 共有ライブラリとアーカイブライブラリの両方を使用するアプリケーションで LD_PRELOAD を使用す ると、コアダンプが発生する場合があります。特に、共有ライブラリとアプリケーションの両方が aC++ で構 築されている場合や、これらが libc を使用している場合に生じます。 LD_PRELOAD 環境変数には複数のライブラリを指定できます。複数のライブラリは、 LD_LIBRARY_PATH の場合と同様に、スペースまたはコロンで区切ります (LD_PRELOAD ライブラリリストにマルチバイト文字 は使用できません)。 LD_PRELOAD ライブラリは、絶対パスで指定することも相対パスで指定することもで きます。また、 LD_PRELOAD ライブラリはライブラリ名のみで構成することも可能です。その場合、ダイナ ミックローダーは、環境変数 LD_LIBRARY_PATH または SHLIB_PATH にあるディレクトリパスリストか、 埋め込みパスリスト (有効な場合) を使用してライブラリを検索します。 ダイナミックローダーは、 LD_PRELOAD で指定されたライブラリが検出されなかった場合も、エラーメッ セージも警告メッセージも発行しません。ただし、ダイナミックローダーが LD_PRELOAD ライブラリの依存 ライブラリを検出できない場合は、 LD_PRELOAD ライブラリがリンク行で指定された場合と同じエラーメッ セージが発行されます。 診断 ダイナミックローダーが存在しない場合、または何らかの理由でプロセスからダイナミックローダーを実行で きない場合は、エラーメッセージが標準エラーに出力され、ゼロ以外の終了コードでプロセスが終了します。 これらのエラーは、2つの基本カテゴリに分類されます。1つは、共有ライブラリをアタッチする際のエ ラー、もう1つは、シンボルをバインドする際のエラーです。前者はプロセスの起動時にのみ発生するもので すが、後者は、 ld で -B immediate オプションが使用されていなければ、プロセス実行中のどの時点でも発生 する可能性があります。共有ライブラリをアタッチする際に発生し得るエラーとしては、「ライブラリが存在 しない」、「ライブラリが実行可能でない」、「ライブラリが破損している」、「高ウォーターマークが低す Section 5-108 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 dld.so(5) dld.so(5) ぎる」、「ライブラリ用アドレス空間に十分な余裕がない」などがあります。シンボルをバインドする際に発 生し得るエラーとしては、「シンボルが見つからない (外部参照が未解決)」、「ライブラリが破損している」 などがあります。 ダイナミックローダーの明示的ロード機能を使用する場合は、これらのタイプのエラーは致命的とは見なされ ません。詳細は、 shl_load(3X)、 dlclose(3C)、 dlget(3C)、 dlgetname(3C)、 dlmodinfo(3C)、 dlopen(3C)、およ び dlsym(3C) を参照してください。エラーメッセージを表示するには、 dlerror() ルーチンを使用します。この ルーチンは、ダイナミックローダーによって記録された最後のエラーメッセージを出力します。 警告 ダイナミックローダーの起動時の負荷は、遅延バインディングを使用した場合でもかなり大きく、起動時の負 荷の影響を受けるプロセス (たとえば、単純な ‘‘hello world’’ プログラム) では、パフォーマンスが著しく低下 する可能性があります。さらに、たいていの位置独立コードは通常のコードより低速なため、共有ライブラリ 内に PIC が存在すると、プログラムのパフォーマンスが低下する場合があります。ただし、通常はこうした影 響よりも、ディスクスペースの使用量が少ないことと、実行可能ファイルに必要なメモリーが少ないことの利 点のほうが重要です。 ごく稀に、共有ライブラリを使用する場合とアーカイブライブラリを使用する場合とで、プログラムの動作が 異なることがあります。これは主に、コンパイラ、アセンブラ、またはリンカーの、マニュアルに明示されて いない機能やサポートされていない機能を使用した場合に生じます。詳細は、 ld(1) の +help オプションまた は 『HP-UX Linker and Libraries User’s Guide』を参照してください。 ライブラリ開発者は、バージョン管理の全面的な責任を負うため、互換性のない変更がライブラリインタ フェースに加えられないかどうかを徹底的に確認する必要があります。さもないと、ライブラリの新しいバー ジョンによってプログラムの予期しない誤動作が発生する可能性があります。ライブラリ開発者によってバー ジョン管理が正しく行われていなければ、アプリケーションユーザーにできることはほとんどありません。通 常、アプリケーション開発者は、新しいインタフェースを使用できるようにソースコードを修正し、再コンパ イルし、新しいライブラリに対して再リンクすることによって問題を解決できます。 デフォルトでは、ダイナミックローダーではほとんどの警告がレポートされません。エラーメッセージがすべ て表示されるようにするには、環境変数 DLD_VERBOSE_ERR を真 (true) に設定します。 著者 共有ライブラリ /usr/lib/hpux64/dld.so および /usr/lib/hpux32/dld.so は、HP で開発されました。 参照 システムツール: aCC(1) HP-UX aC++ コンパイラ as(1) アセンブリコードからマシンコードへの変換 cc(1) HP-UX C コンパイラ chatr(1) プログラム内部属性変更 f90(1) HP-UX Fortran 90 コンパイラ HP-UX 11i Version 2: August 2003 −9− Hewlett-Packard Company Section 5-109 dld.so(5) dld.so(5) fastbind(1) fastbind ツール ld(1) リンクエディタ その他 a.out(4) アセンブラ、コンパイラ、リンカ出力 dlclose(3C) dlopen() によってロードされた共有ライブラリのアンロード dlerror(3C) dld によって最後に記録されたエラーメッセージの表示 dlget(3C) ロードされたモジュールに関する情報の取得 dlgetname(3C) ロードモジュールを含むストレージ名の取得 dlmodinfo(3C) ロードされたモジュールに関する情報の取得 dlopen(3C) 共有ライブラリのロード dlsym(3C) 共有ライブラリ内のシンボルアドレスの取得 shl_load(3X) 共有ライブラリのロード/アンロード テキストとチュートリアル 『HP-UX Linker and Libraries Online User Guide』 (ld(1) の +help オプションを参照) 『HP-UX Linker and Libraries User’s Guide』 (ご注文については manuals(5) を参照) Section 5-110 Hewlett-Packard Company − 10 − HP-UX 11i Version 2: August 2003 dma32_pool_size(5) dma32_pool_size(5) 名称 dma32_pool_size − 32 ビット DMA プール用に予約するメモリーのサイズ 値 最小値 0 最大値 4GB デフォルト 256MB 整数値を指定します。 説明 この調整パラメータは、物理アドレス空間の先頭の 4GB のうち、32 ビットカードの DMA のために予約する メモリーのサイズを指定します。このメモリーはブート時に確保され、他の目的には使用できなくなります。 この調整パラメータは、Itanium プラットフォームの一部でのみ必要です。32 ビットプールが必要でないプ ラットフォームでは、この値は無視されます。 この調整パラメータの値は、システム内の 32 ビットカードの数とカードのタイプに基づいて設定します。 関連パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 dma32_pool_size は、HP で開発されました。 参照 なし HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-111 dnlc_hash_locks(5) dnlc_hash_locks(5) 名称 dnlc_hash_locks − ディレクトリ名検索キャッシュ (DNLC) のロック数 値 フェールセーフ 512 デフォルト 512 可能な値 最小値は 16、最大値は 8192 です。この値は、2のべき乗、かつ DNLC エントリ数の 1/8 以下でなければなり ません。 (ncsize >= 8 * dnlc_hash_locks) 正の整数値を指定します。 説明 カーネル内でディレクトリを高速に検索するために、 ディレクトリ名検索キャッシュ (DNLC) と呼ばれるメモ リー常駐のキャッシュが使用されます。カーネル内でファイル名を探索する際に、後でそのディレクトリや ファイル名を参照できるように DNLC に保持されます。DNLC は、Least Recently Used (LRU) 方式で管理され ます。 dnlc_hash_locks は、DNLC ハッシュチェーン内のディレクトリエントリの管理に使用されるロックグ ループの数を決定します。 この調整パラメータの変更を行う対象ユーザー HP-UX システムの管理者。 変更に関する制限事項 この調整パラメータは静的で、変更はシステムのリブート後にのみ有効になります。 この調整パラメータの値を大きくする場合 この値を大きくすると、多数のファイル名アクセスを行うアプリケーションで、ロック競合を減らし、ファイ ル名検索の性能を向上させることができます。 この値を大きくした場合の影響 DNLC のロック用の領域として、システムメモリーの使用量が増えます。 この調整パラメータの値を小さくする場合 この値を小さくすると、DNLS のロック数を制限し、メモリーの使用量を減らすことができます。 この値を小さくした場合の影響 システムのリブート時に、DNLC ロック用に使用されるシステムメモリーが減少します。ファイル名検索を行 う処理 (open(2) など) の性能が低下することがあります。 同時に変更する必要がある他の調整パラメータ ncsize の値は、 dnlc_hash_locks の値の8倍以上でなければなりません。 (ncsize >= 8 * dnlc_hash_locks) Section 5-112 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 dnlc_hash_locks(5) dnlc_hash_locks(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 dnlc_hash_locks は、HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), dnlc_hash_locks(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-113 dontdump(5) dontdump(5) 名称 dontdump − カーネルパニックの発生時にダンプしないカーネルメモリーページのクラスの定義 値 フェールセーフ 0 デフォルト 0 (ダンプするクラスはカーネルが選択) 可能な値 0 ∼ 255 の整数値 この整数値は、ダンプに含めないクラス (以下を参照) を表す整数値の合計となります。 UNUSED 1 : 未使用ページ USERPG 2 : ユーザーページ BCACHE 4 : バッファーキャッシュ KCODE 8 : カーネルテキストページ USTACK 16 : プロセススタック FSDATA 32 : ファイルシステム メタデータ KDDATA 64 : カーネル動的データ KSDATA 128 : カーネル静的データ 推奨値 0 (ダンプするクラスはカーネルが選択) 通常、カーネルが選択する値は 15 (UNUSED + USERPG + KCODE + BCACHE) です。カーネルがこれらのク ラスを選択するのは、多くの場合、これらがカーネル障害のデバッグに役立たないためです。 説明 大規模なシステムでは、システムに搭載されている物理メモリーのサイズによっては、カーネルパニックの発 生時にシステムメモリーのダンプにかかる時間が極端に長くなる場合があります。 dontdump および alwaysdump パラメータで制御される高速ダンプ機能を使用すると、カーネルダンプを以下の特定タイプの情報だけ に限定することができます。 . 未使用物理メモリー . ユーザープロセス . バッファーキャッシュ Section 5-114 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 dontdump(5) dontdump(5) . カーネルコード . プロセススタック . ファイルシステム メタデータ . カーネル動的データ . カーネル静的データ crashconf コマンドと、このコマンドに関連付けられた構成ファイル /etc/rc.config.d/crashconf は、カーネルパ ニックに起因するメモリーダンプに、これらのメモリークラスのうちどのクラスを含めるかを制御します。ご く稀に、ブート処理中に crashconf (1M) が実行される前にシステムがパニックに陥る場合があります。そのよ うな場合は、調整パラメータの alwaysdump と dontdump を使用して構成を設定できます。 alwaysdump に保存されているビットマップ値は、カーネルパニックに起因するメモリーダンプから、これら のメモリークラスのうちどのクラスを除外するかを指定します。 このパラメータのデフォルト値は 0 です。この場合、システムは、クラスのメモリーをダンプするかどうか を、発生したクラッシュのタイプに基づいて判断します。 システムクラッシュの内容によってはフルクラッシュダンプが必要な場合もあります。また、ダンプされた時 点でシステムオペレータがフルクラッシュダンプを要求する場合も考えられます。いずれの場合も、 dontdump を使用して選択されているクラスに関係なく、フルダンプが実行されます。 この調整パラメータの変更を行う対象ユーザー この調整パラメータの値を変更するのは当社のフィールドエンジニアだけです。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。ただし、 crashconf を使用してページの選 択を変更すると、変更内容はただちに有効になります。 この調整パラメータをオンにする場合 システムクラッシュ発生時のダンプから特定のクラスのページを除外する場合に、この調整パラメータをオン にします。これにより、ダンプを高速化できます。 この調整パラメータをオンにした場合の影響 ダンプの解析に必要なページが除外されると、ダンプがシステムクラッシュの原因の特定に役立たない場合が あります。 この調整パラメータをオフにする場合 この調整パラメータは、デフォルトでオフになっています。 この調整パラメータをオフにした場合の影響 システムは、ダンプしないページクラスを、クラッシュのタイプに基づいて判断します。ダンプに時間がかか る場合があります。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-115 dontdump(5) dontdump(5) 同時に変更する必要がある他の調整パラメータ alwaysdump 調整パラメータに dontdump と同じページクラスを含めないでください。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 dontdump は、HP で開発されました。 参照 crashconf(1M)、alwaysdump(5) Section 5-116 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 dump_compress_on(5) dump_compress_on(5) 名称 dump_compress_on − カーネルパニックの発生時にメモリーページを圧縮してダンプするか非圧縮でダンプする かを選択 値 フェールセーフ 0 デフォルト 1 (クラッシュ時のシステム状態に基づいて、圧縮してダンプするかどうかをカーネルが決定します) 可能な値 整数値0および1 dump_compress_on の設定は次のように使用されます。 0 非圧縮でダンプします。 1 処理速度を上げるために圧縮してダンプします (可能な場合)。 推奨値 1 (カーネルがダンプモードを選択します) カーネルが通常選択する値は1です。 説明 大規模なシステムの場合、システムに搭載されている物理メモリーの量によってはカーネルパニック発生時の システムメモリーのダンプに非常に時間がかかることもあります。圧縮ダンプの機能を使用することで、ダン プが小さく高速になり、ファイルシステムに保存する時間も短縮されます。 crashconf コマンドとその関連構成ファイル /etc/rc.config.d/crashconf は、ダンプに使用するモードを制御しま す。 このパラメータのデフォルト値は 1 です。この場合、システムは発生したクラッシュのタイプに基づいて、圧 縮してダンプするかどうかを決定します。 システムクラッシュのタイプによっては、非圧縮のクラッシュダンプが必要な場合もあります。また、ダンプ の実行時にシステムオペレータが非圧縮のクラッシュダンプを要求する場合も考えられます。どちらの場合 も、 dump_compress_on で選択されているモードに関係なく、非圧縮のクラッシュダンプが実行されます。 この調整パラメータの変更を行う対象ユーザー この調整パラメータの値を変更するのは当社のフィールドエンジニアだけです。 変更に関する制限事項 この調整パラメータの変更は即時に有効になります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-117 dump_compress_on(5) dump_compress_on(5) この調整パラメータをオンにする場合 システムクラッシュの発生時に圧縮ダンプを実行する場合は、この調整パラメータをオンにします。 この調整パラメータをオフにした場合の影響 この調整パラメータをオフにすると、常に非圧縮のダンプが実行されます。大量のメモリーを搭載したマシン では、通常、非圧縮のダンプには圧縮ダンプの3倍の時間がかかります。 この調整パラメータをオフにする場合 圧縮ダンプに問題がある場合は、この調整パラメータをオフにします。 この調整パラメータをオンにした場合の影響 システムは、クラッシュのタイプに基づいてダンプモードを決定します。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 dump_compress_on は HP で開発されました。 参照 crashconf(1M)、 alwaysdump(5)、 dontdump(5) Section 5-118 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 enable_idds(5) enable_idds(5) 名称 enable_idds − 侵入検出データソースの有効化 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 可能な値 0 (オフ) または 1 (オン) 推奨値 1 (オン) HP-UX HIDS がインストールされている場合 0 (オフ) HP-UX HIDS がインストールされていない場合 説明 enable_idds を 1 に設定すると、HP-UX Host Intrusion Detection System (HP-UX HIDS) で侵入検出のためのカー ネルデータ収集を有効にできます。カーネルによって、付随するデータもトレースされるため、パフォーマン スが多少低下し、カーネルのメモリー使用量も増加します。 HP-UX HIDS が使用されていない場合でも、この トレースは行われます。 この調整パラメータの変更を行う対象ユーザー HP-UX HIDS のすべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータをオンにする場合 この調整パラメータは、HP-UX HIDS がインストールされている場合に オンにします。 enable_idds は、イン ストール時に自動的にオンになります。 この調整パラメータをオンにした場合の影響 すべてのプロセスの現在の作業ディレクトリとルートディレクトリが追跡されるため、システムのメモリー使 用量とパフォーマンスに影響します。 この調整パラメータをオフにする場合 HP-UX HIDS が使用されていない場合は、 enable_idds を オフにします。 この調整パラメータをオフにした場合の影響 オフにすると、HP-UX HIDS では、 idskerndsp を使用するすべての検出テンプレートが使用できなくなります (idskerndsp についての詳細は、HP-UX HIDS のマニュアルを参照してください)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-119 enable_idds(5) enable_idds(5) 同時に変更する必要がある他の調整パラメータ この調整パラメータは、他の調整パラメータとは関係ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 enable_idds は、HP で開発されました。 参照 ids.cf(5), with: MANPATH: /opt/ids/share/man, 『HP-UX Host Intrusion Detection System Administrator’s Guide』 Section 5-120 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 environ(5) environ(5) 名称 environ − ユーザー環境 説明 environment と呼ばれる文字列の配列が、プロセスの開始時に exec(2) によって使用可能になります。規約によ り、これらの文字列は name=value という形式になります。以下の名称はさまざまなコマンドで使用されます ( アルファベット順に説明してあります)。 HOME ユーザーのログインディレクトリの名前で、 login(1) によって、パスワードファイル に基づいて 設定されます ( passwd(4) を参照)。 LANG LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME の各環境変数がセットされていないかヌルの場合に、母国語、地域的な習慣、および コード化キャラクターセットに関するユーザーの要件を識別します。 LANG の形式は次のとおりです。 LANG=language[_territory][.codeset] LANGの有効な値はサポートされているロケールです ( lang(5) を参照)。 NLS (Native Language Support)は、 setlocale(3C) の呼び出しによって実行時に開始されます。次に示す setlocale() の呼び 出しは、プログラムの実行をユーザーの言語要件にバインドします。 setlocale(LC_ALL,""); この setlocale() の呼び出しは、 setlocale() に関連する環境変数からプログラムロケールを初期化 します。設定されていないまたは空文字列に設定されているカテゴリー固有の環境変数がある と、 LANG が必要なデフォルト値を用意します。 LANG 環境変数の最大長は SL_NAME_SIZE バイトです (ヘッダーファイル <locale.h> を参照)。 LANGOPTS 次の形式で、モードおよびデータ順序の言語オプションを定義します。 LANGOPTS=[mode][_order] LANGOPTS の値はASCII形式として、英語で指定します。 mode はファイルのモードを指定し、 l はラテンモード、 n は非ラテンモードを表します。 l でも n でもない値は非ラテンモードにな ります。 order はファイルのデータ順序を指定し、 k はキーボード順、 s はスクリーン順を表し ます。 LC_ALL すべてのロケールカテゴリーについて、値を決定します。 LC_ALL の値は、 LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME, LANG の他のどの環 境変数よりも優先します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-121 environ(5) environ(5) LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, and LC_TIME 文字の照合順序、文字の分類と変換、出力メッセージ、通貨記号と金額の表現形式、数値データ の表現形式、時刻形式について、それぞれユーザーの言語、地域、コードセットの要件を決定し ます。環境で LC_ALL が定義されていない場合、これらのいずれかが定義されていないと LANG がデフォルトの値を用意します。 環境変数 LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME の構文を次に示します。 language[_territory][.codeset][@modifier] language フィールドは言語名の ISO 639 標準に適合し、 territory フィールドは ISO 3166 地域名に 適合します。ロケール名のリストについては、 lang(5) を参照してください。 @modifier フィールドによって、ユーザーは同じ言語の定義の中の複数のカテゴリー値から、1つ を選択することができます。 HP-UXには現在のところ、修飾子を用いたロケールはありません。 ロケールカテゴリーの値は優先順位によって決まります。次の中で最初に一致した条件に従っ て、値が決まります。 1. LC_ALL 環境変数が定義されていてヌルでない場合には、 LC_ALL の値が使用されます。 2. LC_* 環境変数 (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) が定義されていてヌルでない場合には、その環境変数の値が、そ れに対応するカテゴリーの初期化に使用されます。 3. LANG 環境変数が定義されていてヌルでない場合には、 LANG 環境変数の値が使用されま す。 4. LANG 環境変数が設定されていない、または空文字列に設定されている場合には、 POSIX/C のデフォルトのロケールが使用されます( lang(5) を参照)。 LC_COLLATE 文字照合順序のロケールカテゴリーを決定します。これはさまざまなユーティリティおよび strcoll(3C) と strxfrm(3C) での、等価クラスおよびマルチキャラクタ照合要素を含む正規表現やソー トの照合情報を決定するものです ( string(3C) を参照)。 LC_CTYPE 文字分類(アルファベット、数字、大文字など)について、ロケールカテゴリーを決定します。 isalpha(3C), isdigit(3C), isupper(3C), ctype(3C) 内の文字変換を参照。 toupper(3C), tolower(3C), およ び conv(3C) 内のシングルバイトまたはマルチバイト文字としてのテキストの解釈を参照。 LC_MESSAGES 肯定/否定応答の処理および診断メッセージや情報メッセージを書き出す際の言語的/文化的き まりについて、ロケールカテゴリーを決定します。これはオープンするメッセージカタログを決 定する場合に、 catopen(3C) の動作にも影響を与えることがあります。 Section 5-122 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 environ(5) environ(5) LC_MONETARY 通貨に関連する数値形式情報のロケールカテゴリーを決定します。 LC_NUMERIC さまざまなユーティリティ、 printf (3S) と scanf (3S) の書式付きI/O、 strtod(3C) の文字列変換機 能について、数値形式情報(桁区切り記号や小数点文字)のロケールカテゴリーを決定します。 LC_TIME 日付/時刻形式情報のロケールカテゴリーを決定します。これは strftime(3C) での時間機能の動 作に影響を与えます。 MANPATH man(1) でマニュアルのエントリーを検索するための、コロンで区切ったディレクトリ接頭辞のリ スト。ログイン時に、 /etc/profile (または /etc/csh.login) が MANPATH=/usr/share/man:/usr/contrib/man:usr/local/man を設定します。ファイル /etc/MANPATH があれば、このファイルからデ フォルトの設定が読み取られます。 MANPATH は、 PATH 環境変数と同じ構文を使用するのに加えて、 NLSPATH 環境変数で用い る指定子 %L, %l, %t, %c も認識します。これらの指定子の説明については、次の NLSPATH を 参照してください。これにより、ロケール固有のマニュアルエントリーへのパスを指定すること ができます。 MANPATH に含まれる各接頭辞には、 man*, man*.Z, cat*, cat*.Z の形式のサブディレクトリが 入っているものとみなされます( man(1), catman(1M), fixman(1M) を参照)。 NLSPATH メッセージカタログを見つけようとする場合に catopen(3C) によって用いられる、一連の疑似パ ス名が入っています。各疑似パス名には、オプションの パス接頭辞、 1つ以上の置換フィールド 記述子、ファイル名、オプションのファイル名接尾辞で構成された名前テンプレートが入ってい ます。例えば次の指定は、 NLSPATH="/system/nlslib/%N.cat" catopen(3C) がディレクトリ /system/nlslib 内のすべてのメッセージカタログを検索しなければな らないことを定義します。ここでカタログ名は、接尾辞 .cat 付きで catopen(3C) (%N) に渡される name パラメーターから構成する必要があります。 フィールド記述子は、 % とそれに続く1文字からなります。フィールド記述子とそれが置換され る値は以下のとおりです。 %N catopen(3C) に渡される name パラメーターの値 %L LC_MESSAGES の値 %l LC_MESSAGES の中の language 要素 %t LC_MESSAGES の中の territory 要素 %c LC_MESSAGES の中の codeset 要素 %% 単一の % によって置き換えられる 例えば次のように指定してあると、 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-123 environ(5) environ(5) NLSPATH="/system/nlslib/%L/%N.cat" catopen(3C) は、 /system/nlslib/$LC_MESSAGES/name.cat をメッセージカタログとしてオープン しようとします。 指定された値が定義されていなかった場合は、空文字列に置き換えられます。 %t や %c による 置換には、区切り記号は含まれません。 %L に対してはデフォルト値がないことに注意してくだ さい。 LC_MESSAGES が設定されていず、 NLSPATH が前出の例のように設定されている場合 には、 catopen(3C) は /system/nlslib/name.cat をメッセージカタログとしてオープンしようとしま す。 NLSPATH に定義するパス名はコロン (:) で区切ります。先頭のコロン、または連続した2つのコ ロン (::) は、 %N を指定するのと同じです。例えば、次のように設定すると NLSPATH=":%N.cat:/nlslib/%L/%N.cat" oflag パラメーターが NL_CAT_LOCALE に設定された catopen(3C) は、ファイル ./name, ./name.cat, /nlslib/$LC_MESSAGES/name.cat をこの順序でオープンしようとします。このうち、 最初に正常にオープンできたものがメッセージカタログとなります。 ユーザー定義疑似パス名のいずれかでメッセージカタログをオープンできない場合には、 catopen(3C) は、システム定義のデフォルトの疑似パス名を NLSPATH につなげて用います。この システム全体で用いられるデフォルトのパスは次のとおりです。 /usr/lib/nls/msg/%L/%N.cat:/usr/lib/nls/%l/%t/%c/%N.cat catopen(3C) が、所有者が root である setuid または setgid を行うアプリケーションから呼び出さ れた場合、環境変数 NLSPATH は使用されません。メッセージカタログを見つけるために、この 変数の代わりにシステムファイル /etc/default/nlspath が使用されます。詳細は、 nlspath(4) を参 照してください。 PAGER PAGER は特定のコマンドからの出力のパイプ処理に使用するページネータを示します。その値 は、必要なページネータの完全なコマンド行を指定する文字列でなければなりません。2つの例 を示します。 PAGER="more -cs" PAGER="pg -c" PAGER は、 man(1) や対話型メーラーを含むいくつかのコマンドに影響します。影響を受けるコ マンドの一部には、矛盾があった場合にはページャを選択する別の方法があります。詳細につい てはそれぞれのマンページを参照してください。 PATH PATH は、不完全なパス名だけがわかっているファイルを検索する場合に sh(1), time(1), nice(1), nohup(1) 、その他のコマンドが検索するディレクトリ接頭辞のリストです。接頭辞の間はコロン (:) で区切られています。 login(1) のコマンドが PATH=:/bin:/usr/bin を設定します。 Section 5-124 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 environ(5) TERM environ(5) TERM は、出力を準備するターミナルの種類を表します。この情報は、 vi(1) や mm(1) など、 ターミナルの特殊機能を利用できるコマンドが用います。 TZ TZ には、時間帯の情報を設定します。 TZ は次の形式で設定することができます。 [:]STDoffset[DST[offset][,rule]] ここで STDとDST 標準時間帯 (STD) とサマータイム時間帯 (DST) を指定する3バイト以上のデータ。 STD は必須です。 DST が指定されていない場合には、そのロケールにはサマータ イムは適応されません。数字、カンマ、 (,)、マイナス (−)、プラス (+)、 ASCII形式 のNULL を除くすべての文字が使えます。 offset offset は、その地域の時間に足すことによって世界標準時 (UTC) になる値です。 offset の形式は次のとおりです。 hh[:mm[:ss]] 時 (hh) は0から23までの値です。オプションの分 (mm) と秒 (ss) のフィールドは、0 から59までの値です。時のフィールドは必須です。 offset の前に − があると、その 時間帯は子午線の東側にあります。 offset の前に + があると、その時間帯は子午線 の西側にあります。何も付いていない場合には子午線の西側になります。 rule rule は、サマータイムから通常の時間に、また通常の時間からサマータイムに移行 する、日付と時刻を指定します。 rule の形式は次のとおりです。 date/time,date/time 最初の date/time は通常の時間からサマータイムに移行する日時を示し、2番目の date/time は通常の時間に戻る日時を示します。 time フィールドは、現在のローカル 時間で表します。 date の形式は、次のいずれかでなければなりません。 Jn ユリウス暦で n 番目の日(1から365まで)。うるう日は数えません。2月29 日を指定することはできません。 n 0を基数とするユリウス暦での日(0から365まで)。うるう日を数えます。 2 月29日を指定することができます。 Mm.n.d d (0から6まで)に週の何番目の日かを、 n (1から5まで)に月のうちの何番 目の週かを、 m (1から12まで)に年の何番目の月かを指定します。週5は、 m 番目の月の最後の日がある週を示します。週1は、その月の1日がある週 です。0番目の日は、日曜です。 time time は offset と同じ形式ですが、前に記号("−"または"+")を付けることはで きません。 time を指定しない場合のデフォルトは、02:00:00 です。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-125 environ(5) environ(5) STD フィールドと STD のオフセットフィールドは必ず指定しなければなりません が、 DST フィールドを指定すると、指定しない他のフィールドにはシステムがデ フォルトの値を用意します。このデフォルト値はファイル /usr/lib/tztab からとられ ( tztab(4) を参照)、このファイルにはサマータイム開始/終了のさまざまな歴史的日 時が記述されています。 sh(1) の export コマンドや name=value 引き数、または exec(2) によって、その他の名称を環境に入れることが できます。 MAIL, PS1, PS2, IFS は、 .profile がしばしばエクスポートするシェル変数なので、これらと重複す る名称は使わないようにしてください。 プロセスの環境には、 Cから次のグローバル変数を用いてアクセスすることができます。 #include <unistd.h> extern char **environ; この変数は、環境を構成する文字列へのポインタの配列を指しています。この配列の最後は、nullポインタに なっています。 注記 世界標準時 (UTC) は、グリニッジ標準時間 (GMT) と同じです。 多言語化対応 多言語コードセットのサポート 環境変数 LANG、LC_ALL、 LC_COLLATE、 LC_CTYPE、 LC_MESSAGES、 LC_MONETARY、 LC_NUMERIC、 LC_TIME、および NLSPATH は、多言語化対応アプリケーションをサポートします。標準 のユーティリティは、上記の環境変数と、個々のユーティリティのマンページの「環境変数」サブセクション に記載されている環境変数を使用します。 これらの変数が指定するロケールカテゴリの基礎となるコードセットが異なっている場合、結果は不定であ り、 regcomp、 glob、 fnmatch などの正規表現の API の動作が影響を受けることがあります。 警告 HP-UX のコマンドやライブラリルーチンの一部は、環境変数 LANG, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, LANGOPTS を参照しません。またメッセージカタログを使用しないコマン ドもあり、それらの動作は NLSPATH の影響を受けません。実装の詳細に関しては、それぞれのコマンド、ラ イブラリルーチンの 「多言語化対応」の項を参照してください。 著者 environ は、 AT&T と HP で開発されました。 参照 env(1)、 login(1)、 sh(1)、 exec(2)、 catopen(3C)、 ctime(3C)、 getenv(3C)、 setlocale(3C)、 nlspath(4)、 profile(4)、 lang(5)、 term(5)、 tztab(4) Section 5-126 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 environ(5) environ(5) 標準準拠 environ: AES, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 5-127 eqmemsize(5) eqmemsize(5) 名称 eqmemsize − 等価マップ予約プールの最小サイズ (ページ) の決定 値 デフォルト 15 ページ 可能な値 0 または任意の正の整数 ただし、このパラメータが表す物理ページは一般的なシステム用途には使用できなくなるため、大きな値を使 用する場合は注意が必要です。 説明 等価マップメモリーは、その物理アドレスと仮想アドレスが同じであるページです。これは、一部のアプリ ケーションと、I/O に役立ちます。メモリーの大部分は通常のスワッパー/仮想アドレスモデルで使用されるた め、システムとしては、ほとんどの物理メモリーが使用可能であるブート時に、このタイプのアクセスのため のページを予約できると便利です。 eqmemsize は、この予約プールのサイズの下限値を示します。実際のプールサイズは、 eqmemsize と、ブート 時に使用可能な物理メモリーのサイズによって動的に決定される値の合計となります。これにより、大規模な メモリーシステムにも自動的に対応できます。プールサイズは、256 MB ごとに1ページずつ大きくなりま す。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 以下のエラーメッセージが表示された場合に、値を大きくします。 Equivalently mapped reserve pool exhausted; Overall application performance may be improved by increasing the "eqmemsize" tunable parameter (currently set to "{X}"). この値を大きくした場合の影響 物理メモリーは、ここで説明した用途のために予約され、システムの他の用途では使用できなくなります。こ の調整パラメータを大きくすることは、同じ量の物理メモリーを削除するようなものです。 Section 5-128 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 eqmemsize(5) eqmemsize(5) この調整パラメータの値を小さくする場合 この調整パラメータが 15+(物理メモリー/256 MB) より 10 ページ以上大きい値に設定されている場合は、値が 高すぎると考えて間違いありません。特に、システムスワップの負荷が大きく、かつ上記の状況が当てはまる 場合は、この値を減らして物理メモリーをシステムに解放する必要があります。 この値を小さくした場合の影響 等価なメモリーに対する要求が拒否される可能性があります。これは致命的なエラーではありませんが、回避 する必要があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 eqmemsize は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-129 executable_stack(5) executable_stack(5) 名称 executable_stack − プログラムスタックをデフォルトで実行可能にするかどうかの制御 値 フェールセーフ 1 デフォルト 0 可能な値 0∼2 推奨値 0∼2 説明 この調整パラメータは、プログラムスタックをデフォルトで実行可能にするかどうかを制御します。これによ り、システムパフォーマンスを犠牲にすることなく、スタックバッファーオーバーフロー攻撃に対する極力な 防御を備えたシステムを構成できます。このクラスの攻撃は一般的に、特権プログラムが不正なアクションを 実行したり、不正なアクセス権を付与したりするよう仕向けるものです。このタイプの攻撃の参考情報につい ては、Web で「Smashing the Stack for Fun and Profit」を検索してください。 HP-UX 上で実行されるプログラムのほとんどは、そのスタックにあるコードを実行する必要がありません。た だし、少数のプログラム (特に一部のシミュレータ、インタプリタ、および古いバージョンの Java) には、その スタックからコードを実行する正当な理由を持つものがあります。通常、そのようなプログラムには、自己修 正コードが含まれます。この調整パラメータと chatr コマンドの +es オプションを組み合わせて使用すると、 そのような実行可能ファイルを、システムの他の部分に対する保護を犠牲にすることなく動作させることがで きます。 この調整パラメータの変更に関する情報については、 chatr(1) マンページの「スタック上の実行許可制限」の 項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、変更後に起動した新規プロセスに対して有効になります。 この調整パラメータの値を変更する場合 この調整パラメータは、データ構造体のサイズや制限ではなく動作モードを制御します。システムに最適な設 定は、セキュリティや互換性をどの程度重視するかによって異なります。 値を 1 にした場合は、HP-UX の以前のリリースとの互換性はありますが、セキュリティは最も低くなりま す。この設定では、プログラムのスタックにある、潜在的に悪意のあるコードの実行が可能です。 Section 5-130 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 executable_stack(5) executable_stack(5) 値を 2 にすると、スタックにあるコードを実行しようとするすべてのプログラムについて警告が出されます が、プログラムの動作は変更されません。不審なアクティビティは、カーネルのメッセージバッファーに記録 されます (dmesg(1M) を参照)。これは、調整パラメータの値 0 を正当なアプリケーションに作用させるかどう かを安全に判断できるようにするための「トライアルモード」設定です。 高レベルのセキュリティが重視されるシステムでは、調整パラメータの値を 0 に設定することをお勧めしま す。この設定は、基本的には、 2 に設定した場合と同じですが、さらに、スタックにあるコードを実行しよう とするすべてのプロセスを終了させます。この場合、プロセスは、潜在的に悪意のあるコードが実行される前 に終了します。 この値を変更した場合の影響 アプリケーションがスタックにある命令を実行しようとしない限り、この調整パラメータはシステムの動作に まったく影響しません。ほとんどの HP-UX アプリケーションは、スタックにある命令を実行するようにはプ ログラムされていません。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 executable_stack は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-131 fcntl(5) fcntl(5) 名称 fcntl −ファイル制御オプション 構文 #include <sys/types.h> #include <fcntl.h> 説明 fcntl() 関数は、開いているファイルを制御します。 <fcntl.h> インクルードファイルには、fcntl() と open() へ の リクエストと 引き数が書かれています。 fcntl(2) および open(2) についての説明を参照してください。 open() によってセットされ、 fcntl() でアクセスされるアクセスモード O_RDONLY O_WRONLY O_RDWR ファイル アクセスモードのマスク O_ACCMODE open() または、 fcntl() でセットされ、 fcntl() でアクセスされるファイルの状態フラグ O_NDELAY ノンブロッキングI/O O_NONBLOCK POSIX型 ノンブロッキングI/O O_APPEND アペンド (ファイルの最後に書き込むことが保証される) O_DSYNC データのライトスルー キャッシング O_SYNC データおよび属性のライトスルー キャッシング O_RSYNC|O_DSYNC データの読み込みおよび書き込み時のライトスルー キャッシング O_RSYNC|O_SYNC データおよび属性の読み込みおよび書き込み時のライトスルーキャッシン グ O_LARGEFILE ラージファイルを使用可能にしてファイルシステムをマウントし、 O_LARGEFILE オプションでファイルをオープンすると、ファイルを 2 GB を超えて増やすことができます。 フラグ O_SYNCIO は、O_SYNC と同じ働きをし、旧バージョンの <fcntl.h> との互換性を保つために設けら れました。 open() でのみ扱えるフラグ O_CREAT ファイルを作成してオープンする (3番目のopenの引き数を用いる)。 O_TRUNC 切捨てオープンする。 O_EXCL 排他的にオープンする。 O_NOCTTY 制御ターミナルを割り当てない。 fcntl() への要求 Section 5-132 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 fcntl(5) fcntl(5) ファイル記述子を複製する。 F_DUPFD F_GETFD ファイル記述子のフラグを得る。 F_SETFD ファイル記述子の フラグをセットする。 F_GETFL ファイルのフラグを得る。 F_SETFL ファイルのフラグをセットする。 F_GETLK ファイルのブロッキングロックを得る。 F_SETLK ファイルのロックをセット、または解除する。ビジーなら失敗する。 F_SETLKW ファイルのロックをセット、または解除する。ビジーなら待つ。 F_GETFD および F_SETFD のためのファイル記述子のフラグ FD_CLOEXEC 次のメンバーを含むファイルセグメントロック制御構造体 struct flock short l_type; /* F_RDLCK, F_WRLCK or F_UNLCK */ short l_whence; /* Flag - see lseek(2) */ off_t l_start; /* Relative offset in bytes */ off_t l_len; /* Size; if 0 then until EOF */ pid_t l_pid; /* By F_GETLK - process holding lock */ ファイルセグメントのロックの型 F_RDLCK 読出しロック F_WRLCK 書込みロック F_UNLCK 削除ロック 参照 fcntl(2), open(2) 標準準拠 <fcntl.h>: AES, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-133 fenv(5) fenv(5) 名称 fenv − 浮動小数点環境のマクロと関数 構文 #include <fenv.h> 説明 ヘッダ <fenv.h> は、浮動小数点環境にアクセスするための、2つの型と、いくつかのマクロや関数を宣言して います。 「浮動小数点環境」は、浮動小数点ステータスフラグと制御モードを一括して定義します。 浮動小数 点ステータスフラグは、補助情報を提供するために、例外的な浮動小数点演算の副作用として浮動小数点例外 が発生したとき、値が設定される (クリアされることはありません) システム変数です。 浮動小数点制御モー ドは、その設定以降の浮動小数点演算の動作に影響するシステム変数で、その値はユーザーが設定できます。 HP 9000 および Itanium(R)ベース システムでは、制御モードとして、丸め方法モード、アンダーフローモード (段階的または0への初期化)、トラップの有効化があります。 次の型が定義されています。 fenv_t 浮動小数点環境全体を示します。 fexcept_t 浮動小数点例外フラグを一括して示します。 次のマクロは、浮動小数点ステータスフラグを示しています。各マクロは、マクロのすべての組み合わせの ビット論理和の結果が別個の値となるような値を持つ、整数の定数式として定義されています。 FE_INEXACT 不正確例外 FE_DIVBYZERO ゼロ除算例外 FE_UNDERFLOW アンダーフロー例外 FE_OVERFLOW オーバフロー例外 FE_INVALID 不正操作例外 FE_ALL_EXCEPT すべての例外マクロのビット論理和。 次のマクロは、丸め方法モードを示しています。これらは、別個の非負の値を持つ整数の定数式として定義さ れています。 FE_TONEAREST 最近似値に丸める丸め方法モード FE_UPWARD 正の無限大方向に丸める丸め方法モード。 FE_DOWNWARD 負の無限大方向に丸める丸め方法モード。 FE_TOWARDZERO 0方向に丸める丸め方法モード。 次のマクロは、定数として使用可能な fenv_t へのポインタとして定義されています。 Section 5-134 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 fenv(5) fenv(5) FE_DFL_ENV デフォルトの浮動小数点環境 ISO/IEC C99 で規定されている機能に加え、HP の実装では次の4つの HP 固有の関数が追加されています。 fegetflushtozero() 、 fesetflushtozero() 、 fegettrapenable() 、 fesettrapenable() ファイル /usr/include/fenv.h 参照 feclearexcept(3M)、 fegetexceptflag(3M)、 feraiseexcept(3M)、 fesetexceptflag(3M)、 fetestexcept(3M)、 fegetround(3M)、 fesetround(3M)、 fegetenv(3M)、 feholdexcept(3M)、 fesetenv(3M)、 feupdateenv(3M)、 fegetflushtozero(3M)、 fesetflushtozero(3M)、 fegettrapenable(3M)、 fesettrapenable(3M)、 math(5) 標準準拠 <fenv.h> : ISO/IEC C99 (Annex F、「IEC 60559 floating-point arithmetic」を含む) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-135 fs_async(5) fs_async(5) 名称 fs_async − 書き込み操作が完了する前の戻り値に対する書き込みを有効化 (ブール代数) 値 フェールセーフ 0 デフォルト 0 許容値 0 (同期ディスク書き込みのみを使用) 1 (非同期ディスク書き込みを許可) 正の整数値 (0 または 1) を指定します。 説明 fs_async は、ファイルシステムデータ構造体の非同期ディスク書き込みを可能にするかどうかを指定します。 同期ディスク書き込みを行うと、ファイルシステムでのファイルシステムデータ構造体の更新中にシステムク ラッシュが発生した場合でも、ファイルシステムの完全性を容易に復元できます。 非同期書き込みを選択した場合は、NFS クラスタ環境用 HP-UX ファイルシステム方式が維持されます。ま た、 open() に 0_SYNC フラグ (同期書き込み) を指定して開いたファイルでは、非同期書き込み機能がカーネ ルに構成されていても、同期書き込みが行われます。 非同期ディスク書き込みを行うと、ファイルシステムのパフォーマンスが大幅に向上します。ただし、非同期 書き込みでは、システムクラッシュが発生した場合に、ファイルシステムデータ構造体が矛盾した状態のまま になる可能性があります。同期書き込みと非同期書き込みの選択方法については、以下のチュートリアルを参 照してください。 変更に関する制限事項 これは静的なパラメータなので、変更した値を有効にするためにはリブートを行う必要があります。 チュートリアル: 同期書き込みと非同期書き込みについて ファイルが書き込みのために開いていて、さらにそのファイルにデータが書き込まれている場合は、データは バッファーに蓄積され、一定の間隔をおいてディスクに書き込まれます。ファイル終了条件が発生すると、 ファイルを閉じる用意が行われます。バッファーに残っているデータがディスクに書き込まれ、ファイルサイ ズとブロックポインターの情報で iノードが更新され、さらにファイルシステムの未使用ディスクブロックの リストが更新されます。ファイルシステムの完全性を最大限に保護するために、これらの処理が行われるシー ケンスは、ディスク書き込み中にシステムクラッシュや電源異常が発生した場合でも、ディスクのファイルシ ステムが破損する危険性が最小限に抑えられています。この一連の更新プロセスを 同期書き込みと呼びます。 HP-UX ファイルシステムでは、空きスペースリスト、ブロック、iノード、およびその他のファイル構成要素 を、ディスクデバイス上にランダムに、広く分散させて保存します。この場合、特定のシーケンスでファイル Section 5-136 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 fs_async(5) fs_async(5) 情報ブロックを書き込むためには、書き込み処理を実行する前にディスク上の所定位置まで移動する時間が必 要です。このシーケンスの最中に電源異常やシステムクラッシュが発生すると、1つまたは複数のブロックが 正常に更新されない場合があり、ファイルシステムに矛盾の可能性が残ります。そのような矛盾を修復するに は、 fsck コマンドを使用します。 fs_async カーネルパラメータで指定できる非同期書き込みによって、システムは、より安全な (ただし低速の) シーケンスの代わりに、より簡便な (したがって高速の) シーケンスでディスク上のファイルシステム情報を更 新できるため、書き込みと書き込みの間の検索および移動による遅延を短縮できます。ただし、非同期書き込 み処理の実行中にシステムクラッシュが発生した場合には、矛盾したファイルシステムを fsck で自動的に修復 できない危険性は、同期書き込みの場合に比べて大幅に高くなります。 クラッシュ後の動作 同期書き込みだけが使用されている場合は、ディレクトリ、ファイル iノード、空きスペースリストなどに対 するすべての更新が、 fsck で認識されるシーケンスで実行されます。このシーケンスでディスクブロックの更 新中にクラッシュが発生すると、 fsck は、クラッシュの発生場所を即座に特定し、欠落した更新情報を修復す ることができます。通常は、システム管理者による操作は不要です。 非同期書き込みが可能であるように fs_async が設定されている場合にクラッシュが発生すると、 fsck は、ど のようなシーケンスが使用されたかを認識しないため、矛盾したファイルシステム情報の修正や、ディレクト リおよび iノードのエントリの修復などの処理で、管理者による操作 (対話形式) が必要になります。 非同期書き込みを可能にする理由 ファイルへの書き込みが終了し、ファイルが閉じている場合は、ディスクブロックの同期書き込みと更新まで に待ち時間があると、ファイルとディレクトリに対する書き込み動作と終了動作を多用するプログラムやアプ リケーションではパフォーマンスが低下します。非同期書き込みが可能であれば、それらの遅延が大幅に短縮 され、結果としてパフォーマンスが向上します。ただし、CPU を多用し、ディスク I/O の頻度が比較的低いア プリケーションでは、パフォーマンスの向上はあまり期待できません。 非同期書き込みを使用する場合 以下のような場合は、システムのパフォーマンスを向上させるために、非同期書き込みをお勧めします。 • 電源異常の可能性が低い場合 (電源の信頼性が高いか、無停電電源を使用している場合)。 • データセキュリティを強化するための対策 (高度なファイルシステムバックアップ計画または冗長 化計画) が実施されている場合、または、システムクラッシュに起因するデータ損失の可能性より システムパフォーマンスを重視する場合。 • ユーザーアプリケーションにおいて、ディスクのファイルおよびディレクトリを頻繁に開き、書き 込み、終了操作を多用する場合。 • 同期書き込み解除することで、それに伴うリスクを差し引いても十分な程度、システムパフォーマ ンスが向上する場合。 非同期書き込みを有効にするには、 fs_async カーネルパラメータを、デフォルト値 0 の代わりに 1 に設定しま す。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-137 fs_async(5) fs_async(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 fs_async は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(1M)、settune(1M)、fsck(1M)、open(2) Section 5-138 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 fs_symlinks(5) fs_symlinks(5) 名称 fs_symlinks − パス名解決に使用されるシンボリックリンクの最大数 値 フェールセーフ 20 デフォルト 20 可能な値 最小値は 20、最大値は 1024(または1K) です。 正の整数値を指定します。 説明 調整パラメータ fs_symlinks は、パス名解決の際に、カーネルが追随するシンボリックリンクの最大数です。 シンボリックリンクを作成またはパス名解決を行うアプリケーションでも、カーネルの動作との一貫性を持た せるために、この fs_symlinks による制限を行うようにします。 この調整パラメータの変更を行う対象ユーザー 多数のシンボリックリンクを作成またはパス名解決を行う可能性があるアプリケーションを実行する、すべて のユーザー。.SS 変更に関する制限事項ありません。 fs_symlinks 調整パラメータは動的です。 (変更は即時に 有効になります) この調整パラメータの値を大きくする場合 アプリケーションが、多数のシンボリックリンクを作成またはパス名解決を行う可能性がある場合に、このこ の調整パラメータの値を大きくします。 この値を大きくした場合の影響 ありません。 この調整パラメータの値を小さくする場合 展開されたパス名内のシンボリックリンク数を制限する場合を除いて、通常は、この値を小さくする必要はあ りません。 この値を小さくした場合の影響 カーネルは、 fs_symlinks の制限を越えるシンボリックリンクに追随しなくなります。 同時に変更する必要がある他の調整パラメータ? ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 注記: 従来、 <sys/param.h> で定義されていた MAXSYMLINKS は廃止されました。この定義を使用しないで HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-139 fs_symlinks(5) fs_symlinks(5) ください。アプリケーションでは、この定義に代わって、新しい調整パラメータ fs_symlinks をしようできる ようになりました。アプリケーションで、調整パラメータ fs_symlinks の値を取得するには、 gettune(2) または kctune(1M) を使用してください。 MAXSYMLINKS の定義を使用しているアプリケーションでは、カーネルの 動作と一貫性がなくなります。 MAXSYMLINKS の定義は、HP-UX 11i バージョン 2 の次のリリースで削除さ れる予定です。 著者 fs_symlinks は、HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), ulimit(2), setrlimit(2), maxfiles_lim(5), nfile(5) Section 5-140 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 fs_wrapper(5) fs_wrapper(5) 名称 fs_wrapper −ファイルシステム管理コマンドが使用する設定ファイルとバイナリファイル 構文 ff [-F FStype] ... fsck [-F FStype] ... fsdb [-F FStype] ... labelit [-F FStype] ... mkfs [-F FStype] ... mount [-F FStype] ... ncheck [-F FStype] ... newfs [-F FStype] ... quot [-F FStype] ... quotacheck [-F FStype] ... volcopy [-F FStype] ... 説明 構文に示した各コマンドは、各ファイルシステムのタイプごとに異なった動作をします。各コマンド ( mount を除き) は、コマンドの動作を制御するファイルシステム固有の設定ファイルを読み取り、ファイルシステム 固有のバイナリファイルを起動して、実際の動作を実行します。 FStype は、コマンド行にオプションで指定す るファイルシステムのタイプです。 FStype の指定を省略すると、ファイルシステムタイプは、 /etc/fstab ファ イルのエントリーと、コマンドで指定する special デバイス (詳細については、個々のコマンドを参照) を照合 して、 /etc/fstab ファイルから採用します。 管理者は、 /etc/default/fs ファイルを使用して、上記のコマンドに対するデフォルトのファイルシステムタイプ を定義することもできます。このファイルが存在し、次の行が含まれる場合、 LOCAL=FStype (e.g., LOCAL=hfs) 、上記のコマンドでは /etc/default/fs で指定された FStype を使用します (ただし、 FStype が コマンド行で、あるいは /etc/fstab で指定されている場合は除きます)。デフォルトのファイルシステム指定 は、バージョン10.0以前のコマンドとの互換性を保持する目的で用意されたものです。 使用する各ファイルのリストについては「ファイル」の項を参照してください。 警告 設定ファイル /sbin/lib/mfsconfig.d/FStype は、HP、およびその他のファイルシステムベンダーより提供されて います。このファイルは、システム管理者が編集することを前提とはしていません。これらのファイルを変 更、あるいは削除すると、ブート不能などを含め、異常な動作の原因となります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-141 fs_wrapper(5) fs_wrapper(5) 設定ファイルのフォーマットは変更される可能性があります。 ファイルシステム固有のバイナリファイルは通常、直接実行するものではありません。ただし、設定ファイル が使用不能になった場合、これらのバイナリファイルを直接実行して、システムの修復や実行を行うことがで きます。バイナリファイルには、実行時に使用するコマンドと同じ引き数を指定することができます。 mount コマンドは特殊なケースです。このコマンドでは現在、設定ファイルを読み取ることはできません。ま た、 FStype が cdfs, hfs, nfs, または lofs のいずれかになっている場合は、ファイルシステム固有のバイナリ ファイルは実行されません。これらの FStype を処理できるバイナリは、その他の FStype も処理し、また必要 に応じてファイルシステム固有のコマンドを呼び出します。 互換上の理由から、 hfs バイナリファイルは、 nfs および cdfs も処理できるので、これらのファイルシステム のための個別のバイナリファイルは用意されていません。 各コマンド ( mount を除く) は、それぞれ単一の実行可能ファイル (/sbin/fs_wrapper) にシンボリックリンクさ れているので、名前を変更すると動作しません。 ファイル FStype コマンド行にオプションで指定するファイルシステムタイプです。 command はコマンドの名前です。 /sbin/fs/FStype/command fsck, fsdb, mkfs, mount, および newfs の各コマンドに対するファ イルシステム固有のバイナリファイルです。このディレクトリに は、 fs_wrapper には対応していないその他のファイルシステム固 有のバイナリファイルもあります。 /usr/lbin/fs/FStype/command 残りのコマンドに対するファイルシステム固有のバイナリファイ ルです。このディレクトリには、 fs_wrapper には対応していない その他のファイルシステム固有のバイナリファイルもあります。 /sbin/lib/mfsconfig.d/FStype /etc/default/fs 各ファイルシステムタイプに対する設定ファイルです。 デフォルトのファイルシステムタイプを定義できるファイルで す。このファイルが存在しないと、デフォルトノードファイルシ ステムタイプはなくなります。 ファイルシステムに関する静的情報 /etc/fstab 参照 ff(1M), fsck(1M), fsdb(1M), mkfs(1M), mount(1M), ncheck(1M), newfs(1M), quot(1M), quotacheck(1M), volcopy(1M), fstab(4) Section 5-142 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 gssapi(5) gssapi(5) 名称 gssapi − Generic Security Service Application Programming Interface 説明 ここでは、"Internet RFC 2743, Generic Security Service Application Programming Interface" と "RFC 2744, Generic Security Service API: C-bindings" で定義されている Generic Security Service Application Programming Interface (GSSAPI) について大まかに説明します。また、以下を含む、エラー処理、データ型、および呼び出し規約につ いても概説します。 整数型 文字列型とその他の類似するデータ型 オブジェクト識別子 (OID) オブジェクト識別子セット (OID セット) 資格証明 コンテキスト 認証トークン 重要警戒域ステータス値 警戒域ステータス値 名前 チャネルバインディング オプションパラメータ 概説 Generic Security Service Application Programming Interface (GSSAPI) は、ピアツーピア通信を行うアプリケーショ ンにセキュリティサービスを提供します。アプリケーションは、GSSAPI ルーチンを使用することにより、以 下の動作を実行できます。 あるアプリケーションが別のアプリケーションのユーザーを認証する。 あるアプリケーションが別のアプリケーションにアクセス権を委託する。 機密性や完全性などのセキュリティサービスをメッセージごとに適用する。 GSSAPI は、通信を行う2つのアプリケーション間のセキュアな接続をサポートします。セキュアな接続を確 立するアプリケーションを、 コンテキスト起動側と呼びます。一方、セキュアな接続を受け付けるアプリケー ションを、 コンテキスト受け入れ側と呼びます。 GSSAPI の使用には、4つの段階があります。 コンテキスト起動側は、他のプロセスに対して自身の身元証明を行うことができる資格証明を取得し ます。同様に、コンテキスト受け入れ側は、セキュリティコンテキストの受け付けを可能にするため の資格証明を取得します。どちらのアプリケーションも、この資格証明の取得を省略し、その後の段 階で各自のデフォルトの資格証明を使用することができます。詳細は、このマニュアルページの「資 格証明」の項を参照してください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-143 gssapi(5) gssapi(5) アプリケーションは、資格証明を使用して、自身のグローバルな身元の証明を行います。グローバルな身元 は、そのアプリケーションを実行しているローカルユーザーの名前に関連付けることができますが、必須では ありません。資格証明には、以下を含めることができます。 ログインコンテキスト ログインコンテキストには、自身のネットワーク資格証明のほかにアカウント情報が含まれま す。 セキュリティコンテキスト 通信を行うアプリケーション同士は、認証トークンを交換することで、結合セキュリ ティコンテキストを確立します。 セキュリティコンテキストは、通信アプリケーション間で共有される情報を格納する、一対の GSSAPI データ 構造体です。この情報は、各アプリケーションの状態を表します。このセキュリティコンテキストは、メッ セージごとのセキュリティサービスに必要です。 セキュリティコンテキストを確立するために、コンテキスト起動側は、 gss_init_sec_context() ルーチンを呼び 出して トークンを取得します。このトークンは、暗号によって保護された不透明なデータです。コンテキスト 起動側は、トークンをコンテキスト受け入れ側に転送します。このトークンは gss_accept_sec_context() ルーチ ンに渡されてデコードされ、共有情報が抽出されます。 セキュリティコンテキストを確立する一環として、コンテキスト起動側は、コンテキスト受け入れ側から認証 されます。それに対し、コンテキスト起動側は、コンテキスト受け入れ側に自身を認証するよう要求できま す。 コンテキスト起動側は、コンテキスト受け入れ側がコンテキスト起動側のエージェントとして動作できるよう に権限を委託できます。委託とは、コンテキスト起動側がコンテキスト受け入れ側に、コンテキスト起動側の エージェントとして追加のセキュリティコンテキストを起動する能力を付与することを意味します。コンテキ スト起動側は、委託を行うために、委託する意向を示すフラグを gss_init_sec_context() ルーチンに設定し、返 されたトークンを通常の方法でコンテキスト受け入れ側に送信します。コンテキスト受け入れ側は、このトー クンを gss_accept_sec_context() ルーチンに渡します。これによって、委託された資格証明が生成されます。コ ンテキスト受け入れ側は、この資格証明を使用して、追加のセキュリティコンテキストを起動できます。アプ リケーション同士は、このコンテキストを使用して、保護されたメッセージやデータを交換できます。 アプリケーションは、GSSAPI ルーチンを呼び出して、メッセージを介して交換データを保護できます。アプ リケーションは、保護されたメッセージを送信するために、適切な GSSAPI ルーチンを呼び出し、以下を実行 します。 保護を適用します。 メッセージを適切なセキュリティコンテキストにバインドします。 これにより、アプリケーションは、生成された情報をピアアプリケーションに送信できます。 メッセージを受信したアプリケーションは、受信データを GSSAPI ルーチンに渡します。これにより、保護が 解除され、データの検証が行われます。 Section 5-144 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 gssapi(5) gssapi(5) GSSAPI は、アプリケーションデータを任意のオクテット文字列として処理します。GSSAPI のメッセージご とのセキュリティサービスは、以下のことを提供します。 データの作成元の完全性および認証 データの作成元の機密性、完全性、および認証 アプリケーション間の通信が終了すると、両アプリケーションが GSSAPI に対してセキュリティコンテキスト を削除するよう指示できます。 Standard GSSAPI ルーチンは、"Internet RFC 2743, Generic Security Service Application Programming Interface" およ び "RFC 2744, Generic Security Service API : C-bindings" で定義されています。これらのルーチンには、 gss_ と いう接頭辞が付きます。 以下の項では、GSSAPI のエラー処理とデータ型について概説します。 エラー処理 各 GSSAPI ルーチンは、2つのステータス値 (重要警戒域と警戒域) を返します。 重要警戒域ステータス値 重要警戒域ステータス値は、RFC 2744 で定義されている汎用 API ルーチンエラーまた は呼び出しエラーです。 警戒域ステータス値 警戒域ステータス値は、機構ごとの固有エラーを表します。 ルーチンの出力パラメータに、そのルーチンによって割り当てられた記憶領域を指すポインターが含まれてい る場合は、そのルーチンがエラーを返したとしても、出力パラメータには必ず有効なポインターが含まれま す。記憶領域が割り当てられていない場合は、ルーチンはポインターをヌルに設定し、ポインター (たとえば gss_buffer_desc データ構造体内のポインター) に関連付けられたすべての length フィールドを 0 (ゼロ) に設定 します。 警戒域ステータス値には、通常、エラーに関する詳細な情報が含まれます。ただし、それらを GSSAPI の実装 間で移植することはできません。移植可能なアプリケーションを設計する場合は、エラー処理に重要警戒域ス テータス値を使用します。警戒域ステータス値は、アプリケーションをデバッグしたり、エラー情報やエラー 回復情報をユーザーに表示したりするために使用します。 GSSAPI のデータ型 この項では、GSSAPI のデータ型とその定義について概説します。 整数型 GSSAPI では、以下の整数データ型が定義されています。 OM_uint32 32 ビット符号なし整数 この整数データ型は、GSSAPI ルーチン定義において、最少ビット数を保証するために 使用される、移植可能なデータ型です。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-145 gssapi(5) gssapi(5) 文字列型および類似するデータ型 多くの GSSAPI ルーチンで取得される引き数や返される値は、不透明なデータや文字列 のような連続した複数バイトのデータで表わされます。GSSAPI ルーチンとアプリケー ションの間でデータの受け渡しを行う場合は、 gss_buffer_t データ型を使用します。こ れは、バッファー記述子 gss_buffer_desc へのポインターです。 gss_buffer_t データ型のデータ構造体は以下のとおりです。 typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; length フィールドにはデータの総バイト数が格納され、value フィールドには実際のデー タへのポインターが格納されます。 gss_buffer_t データ型を使用した場合は、GSSAPI ルーチンからアプリケーションに渡さ れるデータのための記憶領域が GSSAPI ルーチンによって割り当てられます。呼び出し 側アプリケーションは、 gss_buffer_desc オブジェクトを割り当てる必要があります。こ のアプリケーションは、未使用の gss_buffer_desc オブジェクトを値 GSS_C_EMPTY_BUFFER で初期化できます。この記憶領域を解放する場合は、アプリ ケーションは gss_release_buffer() ルーチンを呼び出します。 オブジェクト識別子 (OID) アプリケーションは、 gss_OID データ型を使用して、セキュリティ機構 (Kerberos など) を選択し、名前の型を指定します。セキュリティ機構を選択するには、それに対応する OID を使用します。 Kerberos Version 5 の場合は、 GSS_C_OID_KRBV5_DES を指定します。 GSS_C_NULL_OID を使用することで、アプリケーションの移植性を確保できます。 gss_OID データ型は、ISO で定義されたツリーデータ構造体の値を格納します。その データ構造体は以下のとおりです。 typedef struct gss_OID_desc_struct { OM_uint32 length; void * elements; } gss_OID_desc, *gss_OID; elements フィールドは、 gss_OID データ型の値の ASN.1 BER 表現形式を格納するオク テット文字列の、最初のバイトをポイントします。length フィールドには、その値のバ イト数が格納されます。 Section 5-146 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 gssapi(5) gssapi(5) GSSAPI から返される gss_OID_desc の値は読み取り専用です。アプリケーションがそれ らの割り当てを解除しないようにする必要があります。 オブジェクト識別子セット gss_OID_set データ型は、1つまたは複数のオブジェクト識別子を表します。 gss_OID_set データ型の値は、以下の用途で使用されます。 GSSAPI でサポートされている、使用可能な機構をレポートする。 特定の機構を要求する。 資格証明でサポートされている機構を識別する。 gss_OID_set データ型のデータ構造体は以下のとおりです。 typedef struct gss_OID_set_desc_struct { int count gss_OID elements } gss_OID_set_desc, *gss_OID_set; count フィールドには、セット内の OID の数が格納されます。elements フィールドは、 gss_oid_desc オブジェクトの配列へのポインターです。各オブジェクトは、1 つの OID を表します。アプリケーションは、GSSAPI ルーチンからアプリケーションに返された gss_OID_set の値に関連付けられている記憶領域を、 gss_release_oid_set() ルーチンを呼 び出して割り当て解除します。 資格証明 資格証明は、アプリケーションなどの本人の身元を証明するものです。 gss_cred_id_t データ型は、GSSAPI 資格証明のデータ構造体を識別する、アトミックなデータ型です。 コンテキスト セキュリティコンテキストは、通信を行うアプリケーション間で共有される情報を格納する、一対の GSSAPI データ構造体です。この情報は、各アプリケーションの暗号化状態を表します。セキュリティコンテキストは メッセージごとのセキュリティサービスに必要とされるもので、認証のやり取りが正常に行われると作成され ます。 gss_ctx_id_t データ型には、GSSAPI セキュリティコンテキストの一端を識別する、アトミックな値が格納され ます。このデータ型は、呼び出し側では解読できません。 認証トークン GSSAPI では、セキュリティコンテキストを共有するアプリケーション同士の同期を、トークンによって維持 します。このトークンは、暗号で保護されたビット文字列であり、GSSAPI セキュリティコンテキストの一端 においてセキュリティ機構が生成し、GSSAPI セキュリティコンテキストの他端においてピアアプリケーショ ンが使用します。このデータ型は、呼び出し側では解読できません。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-147 gssapi(5) gssapi(5) アプリケーションは、 gss_buffer_t データ型を GSSAPI ルーチンに対するトークンとして使用します。 重要警戒域ステータス値 GSSAPI ルーチンは、その OM_uint32 関数値として GSS ステータスコードを返します。これらのコードは、 汎用 API ルーチンエラーまたは呼び出しエラーを表します。 GSS ステータスコードは、ルーチンにおける致命的な汎用 API エラーおよび呼び出しエラーの1つを表すこと ができます。また、追加のステータス情報も GSS ステータスコードに含めることができます。これらのエラー は、以下のように、32 ビット GSS ステータスコードにエンコードされます。 MSB LSB +-----------------------------------------------------------+ | 呼び出しエラー | ルーチンエラー | 補助情報 | +-----------------------------------------------------------+ ビット 31 24 23 16 15 0 GSSAPI ルーチンから返される GSS ステータスコードの上位 16 ビットにゼロ以外の値が含まれている場合 は、呼び出しが失敗したことを意味します。このうち、呼び出しエラーフィールドがゼロでない場合は、コン テキスト起動側のルーチンの使い方に誤りがあります。また、ルーチンは、ステータスコードの補助情報 フィールドのビットを設定することで、追加情報を示すことができます。以下の各表では、ルーチンエラー、 呼び出しエラー、補助情報の各ステータスビットとその意味を示しています。 以下の表に、GSSAPI ルーチンエラーとその意味をリストします。 名前 フィールド 意味 値 要求された機構はサポートさ GSS_S_BAD_MECH 1 GSS_S_NAME 2 渡された名前は無効です。 GSS_S_NAMETYPE 3 渡された名前はサポートされ GSS_S_BAD_BINDINGS 4 GSS_S_BAD_STATUS 5 ステータス値が無効です。 GSS_S_BAD_SIG 6 トークンの署名が無効です。 GSS_S_NO_CRED 7 資格証明が与えられていませ GSS_S_NO_CONTEXT 8 GSS_S_DEFECTIVE_TOKEN 9 れていません。 ていません。 チャネルバインディングが正 しくありません。 ん。 確立しているコンテキストが ありません。 Section 5-148 Hewlett-Packard Company トークンが無効です。 −6− HP-UX 11i Version 2: August 2003 gssapi(5) gssapi(5) GSS_S_DEFECTIVE_CREDENTIAL 10 資格証明が無効です。 GSS_S_CREDENTIALS_EXPIRED 11 参照した資格証明は期限切れ GSS_S_CONTEXT_EXPIRED 12 GSS_S_FAILURE 13 です。 コンテキストが期限切れで す。 ルーチンが失敗しました。警 戒域ステータスコードを確認 してください。 GSS_S_BAD_QOP 14 GSS_S_UNAUTHORIZED 15 要求されたレベルの保護を提 供できません。 その動作はローカルセキュリ ティポリシーによって禁止さ れています。 以下の表は、呼び出しエラーの値とその意味を示しています。 名前 フィールド 意味 値 GSS_S_CALL_INACCESSIBLE_READ 1 GSS_S_CALL_INACCESSIBLE_WRITE 2 GSS_S_BAD_STRUCTURE 3 要求された入力パラメータを 読み取ることができません。 要求された出力パラメータを 書き込むことができません。 パラメータのデータ構造体が 正しくありません。 以下の表は、補助情報のビットとその意味を示しています。 名前 ビット 意味 番号 GSS_S_CONTINUE_NEEDED 0 (LSB) GSS_S_DUPLICATE_TOKEN 1 GSS_S_OLD_TOKEN 2 ルーチンを再度呼び出して、 関数を完了させてください。 トークンが以前のトークンと 重複しています。 トークンの妥当性検証の有効 期限が切れています。ルーチ ンは、このトークンが以前の トークンと重複していないこ とを確認できません。 HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 5-149 gssapi(5) gssapi(5) GSS_S_UNSEQ_TOKEN 3 後続のトークンが処理されて います。 すべての GSS_S_ シンボルは、 OM_uint32 の、ビットフィールド値ではなく完結したステータスコードと同 等に見なされます。たとえば、 GSS_S_BAD_NAMETYPE (ルーチンエラーフィールドの値が 3) の実際の値は 3 << 16 です。 重要警戒域ステータスコード GSS_S_FAILURE は、重要警戒域ステータスコードで表せないエラーが、基盤と なるセキュリティ機構によって検出されたことを示します。そのエラーについては、警戒域ステータスコード をチェックします。詳細は、警戒域ステータス値についての項を参照してください。 GSSAPI では、以下の3つのマクロが用意されています。 GSS_CALLING_ERROR() GSS_ROUTINE_ERROR() GSS_SUPPLEMENTARY_INFO() 各マクロは、GSS ステータスコードを取得し、関連フィールド以外のフィールドをマスクします。たとえば、 ステータスコードに GSS_ROUTINE_ERROR() マクロを使用すると、このマクロが値を返します。その値は、 ルーチンエラーフィールドだけが使用され、呼び出しエラーフィールドと補助情報フィールドの値はゼロにな ります。 さらにマクロ GSS_ERROR() を使用すると、ステータスコードが呼び出しエラーまたはルーチンエラーを示し ているかどうかを判断できます。ステータスコードが呼び出しエラーまたはルーチンエラーを示している場合 は、このマクロは、ゼロ以外の値を返します。呼び出しエラーもルーチンエラーも示していない場合は、マク ロは 0 (ゼロ) を返します。 注記: 稀に、データにアクセスできない GSSAPI ルーチンが、 GSS_S_CALL_INACCESSIBLE_READ または GSS_S_CALL_INACCESSIBLE_WRITE ステータス値を返す代わりにプラットフォーム固有のシグナルを生成 する場合があります。 警戒域ステータス値 GSSAPI ルーチンは、基盤となるセキュリティ機構からのエラーを示すために、 minor_status パラメータを返 します。このパラメータには、 OM_uint32 データ型の値で示される単一のエラーが格納されます。 名前 名前は本人を識別するものです。GSSAPI は、名前と、その名前を要求する本人との間の関係を認証します。 名前は、以下の2つの形式で表されます。 印字可能形式。アプリケーションに対する表示に使用します。 内部正準形式。API で使用され、アプリケーションでは解読できません。 gss_import_name() ルーチンと gss_display_name() ルーチンは、名前を、印字可能形式と gss_name_t データ型 の間で変換します。 Section 5-150 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 gssapi(5) gssapi(5) gss_compare_name() ルーチンは、内部形式名を比較します。 チャネルバインディング チャネルバインディングを定義して使用することにより、セキュリティコンテキストと、それを搬送する通信 チャネルとを関連付けることができます。チャネルバインディングは、以下のデータ構造体で GSSAPI に渡さ れます。 typedef struct gss_channel_binding_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc aceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; initiator_addrtype フィールドと acceptor_addrtype フィールドは、 initiator_address バッファーと acceptor_address バッファーに含まれるアドレスのタイプを初期化するために使用します。以下の表は、アドレスタ イプとその addrtype 値を示しています。 アドレスタイプ addrtype 値 未規定 GSS_C_AF_UNSPEC ホスト-ローカル GSS_C_AF_LOCAL DARPA インターネット GSS_C_AF_INET ARPAnet IMP GSS_C_AF_IMPLINK pup プロトコル (BSP など) GSS_C_AF_PUP MIT CHAOS プロトコル GSS_C_AF_CHAOS XEROX NS GSS_C_AF_NS nbs GSS_C_AF_NBS ECMA GSS_C_AF_ECMA データキットプロトコル GSS_C_AF_DATAKIT CCITT プロトコル (X.25 など) GSS_C_AF_CCITT IBM SNA GSS_C_AF_SNA デジタル DECnet GSS_C_AF_DECnet 直接データリンクインタフェース GSS_C_AF_DLI LAT GSS_C_AF_LAT NSC ハイパーチャネル GSS_C_AF_HYLINK AppleTalk GSS_C_AF_APPLETALK BISYNC 2780/3780 GSS_C_AF_BSC 分散システムサービス GSS_C_AF_DSS HP-UX 11i Version 2: August 2003 −9− Hewlett-Packard Company Section 5-151 gssapi(5) gssapi(5) OSI TP4 GSS_C_AF_OSI X25 GSS_C_AF_X25 指定アドレスなし GSS_C_AF_NULLADDR タグは、アドレッシング形式ではなくアドレスファミリを指定します。複数の代替アドレス形式を含むアドレ スファミリについては、 initiator_address フィールドと acceptor_address フィールドに、使用するアドレスを 特定できるだけの情報を含める必要があります。アドレスを含むバイトは、それらのバイトがネットワーク経 由で伝送される順序にフォーマットされます。 GSSAPI は、すべてのフィールド (initiator_addrtype、 initiator_address、 acceptor_addrtype、 acceptor_address、および application_data) を連結してオクテット文字列を作成します。セキュリティ機構 は、そのオクテット文字列に署名し、その署名を gss_init_sec_context() ルーチンで生成されたトークンにバイ ンドします。コンテキスト受け入れ側は、同じバインディングを gss_accept_sec_context() ルーチンに渡しま す。これにより、署名が評価され、トークン内の署名との比較が行われます。署名が異なる場合は、 gss_accept_sec_context() ルーチンが GSS_S_BAD_BINDINGS エラーを返し、このコンテキストは確立されませ ん。 一部のセキュリティ機構では、 gss_init_sec_context() ルーチンに渡されたチャネルバインディングの initiator_address フィールドにホストシステムの正しいネットワークアドレスが含まれているかどうかがチェックさ れます。したがって、移植可能なアプリケーションでは、 initiator_addrtype アドレスフィールドに、正しいア ドレスタイプと値、または GSS_C_AF_NULLADDR を使用する必要があります。一部のセキュリティ機構で は、署名ではなくチャネルバインディングデータがトークンに含まれるため、移植可能なアプリケーションで 機密データをチャネルバインディング要素として使用することができません。 GSSAPI は、アドレスを検証し たり、プレーンテキストのバインディング情報をトークンに含めたりしません。 オプションパラメータ ルーチンの記述でオプションパラメータを使用すると、アプリケーションは、そのパラメータのデフォルト値 を渡すことで、デフォルトの動作を要求できます。オプションパラメータには以下の規則が使用されます。 規則 デフォルト値 説明 gss_buffer_t 型 GSS_C_NO_BUFFER 入力パラメータについては、 データが入力されてないこと を示します。出力パラメータ では、返された情報をアプリ ケーションが必要としないこ とを示します。 整数型 (入力) デフォルト値のリファ レンスページを参照してくだ さい。 Section 5-152 Hewlett-Packard Company − 10 − HP-UX 11i Version 2: August 2003 gssapi(5) 整数型 (出力) gssapi(5) アプリケーションが NULL その情報を必要としないこと を示します。 ポインター型 (出力) アプリケーションが NULL その情報を必要としないこと を示します。 OID 名前型またはセキュリティ機 GSS_C_NULL_OID 構のデフォルトの選択を示し ます。 OID セット GSS_C_NULL_OID_SET セキュリティ機構の デフォルトセットを示しま す。 資格証明 GSS_C_NO_CREDENTIAL アプリケーションが デフォルトの資格証明ハンド ルを使用しなければならない ことを示します。 チャネルバインディング GSS_C_NO_CHANNEL_BINDINGS チャネルバインディ ングが使用されていないこと を示します。 参照 gss_accept_sec_context(3)、gss_compare_name(3)、gss_display_name(3)、gss_import_name(3)、 gss_init_sec_context(3)、gss_release_buffer(3)、gss_release_oid_set(3)、libgss(4) DCE-GSSAPI のマンページは DCE-CoreTools 製品に付属しています。このマンページを参照できるようにする には、 MANPATH に /opt/dce/share/man を追加します。 HP-UX 11i Version 2: August 2003 − 11 − Hewlett-Packard Company Section 5-153 hdlpreg_hash_locks(5) hdlpreg_hash_locks(5) 名称 hdlpreg_hash_locks − pregion スピンロックプールのサイズの指定 値 デフォルト 128 可能な値 64 ∼ 262144 説明 実行中のプロセスやメモリー使用量などに関する情報を含むグローバルカーネルデータ構造体は、複数のス レッドによって同時にアクセスされたり変更されたりする状況が頻繁に起こります。これらのデータ構造体 は、競合状態にならないように、スピンロック (同期に使用されるカーネルデータ構造体) で保護されていま す。具体的には、スピンロック「保持」スレッドだけが処理を行うことができ、その間、そのデータ構造体に アクセスしようとする他のすべてのスレッドは待機することになります。 そのようなデータ構造体の複数のインスタンスをそれぞれ保護する必要がある場合は、ハッシュスピンロック を使用します。すべてのインスタンスに単一のスピンロックを使用すると競合が激しくなり、データ構造体ご とにスピンロックを1つずつ使用すると、ほとんどのロックが通常は未使用状態となるためメモリーが無駄に なります。 ハッシュされたロックのプールを割り当てると、1つのハッシュ関数がデータ構造体のグループごとに1つの ロックを選択するため、メモリーを節約しながら競合を減らすことができます。この調整パラメータは、 pregion データ構造体のスピンロックに使用するこのようなプールのサイズを設定します。 この調整パラメータの変更を行う対象ユーザー この調整パラメータの値を変更するのは当社のフィールドエンジニアだけです。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 pregion データ構造体の数が多いためにメモリーの競合が低く、ロックの競合が高いシステムでは、この調整 パラメータを増やす必要があります。通常、そのようなシステムは、プロセスやスレッドの数が多い、大規模 なメモリーシステムです。 この値を大きくした場合の影響 カーネルのメモリー使用量が増加します。 この調整パラメータの値を小さくする場合 物理メモリーの競合が高く、プロセスやスレッドの数が少ないシステムでのみ、この調整パラメータを減らす 必要があります。テーブルを小さくすることで節約されたメモリーは通常の用途向けに解放されます。多数の pregion が存在し、ロックを要求している場合は、ロックの競合が起こる可能性があります。 Section 5-154 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 hdlpreg_hash_locks(5) hdlpreg_hash_locks(5) この値を小さくした場合の影響 pregion ロックのハッシュ競合の可能性が高まります。したがって、複数の pregion の間で共有されるロックを 待たなければならないスレッドが増える可能性があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 hdlpreg_hash_locks は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-155 hfs_revra_per_disk(5) hfs_revra_per_disk(5) 名称 hfs_revra_per_disk − 逆方向順次読み取り時に1回の先読み動作で読み取られる HFS ファイルシステムブロック の最大数 値 フェールセーフ 64 デフォルト 64 可能な値 0 ∼ 8192 説明 この調整パラメータは、逆方向順次読み取り時に1回の先読み動作で読み取られるファイルシステムブロック の最大数を定義します。 この調整パラメータの変更を行う対象ユーザー 当社のフィールドエンジニア。カスタマが直接変更することはできません。 この調整パラメータの値を大きくする場合 ファイルシステムブロックサイズが小さいファイルシステムにおいて逆方向の順次ファイル I/O が多数見られ る場合に、この調整パラメータの値を増やします。 この値を大きくした場合の影響 バッファーキャッシュ内のメモリー使用量が増加します。 この調整パラメータの値を小さくする場合 ファイルシステムブロックサイズが大きいファイルシステムにおいて逆方向の順次ファイル I/O の数が少ない 場合に、この調整パラメータの値を減らします。 この値を小さくした場合の影響 ファイルスループットレートが低下します。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 hfs_revra_per_disk は、HP で開発されました。 Section 5-156 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 hier(5) hier(5) 名称 hier − ファイルシステムの階層 説明 HP-UXのファイルシステムは管理しやすい階層ツリー構造になっています。ツリー構造ファイルシステムの中 で、1台のマシンに固有のファイル、複数のマシンで共用されるファイル、およびホームディレクトリに対し て、別個の領域が提供されています。 共用されるファイルには、共通のアーキテクチャを持つ複数のマシンによって共用されるものと、すべてのマ シンによって共用されるものとの2種類があります。この構造では、共用可能ファイルを1台のマシン(サーバ) にストアしておき、そこに多数のマシン(クライアント)からアクセスすることができます。 下図に、ファイルシステムのレイアウトを示します。この図で示されていないディレクトリがあります。これ については、以下に説明します。 ディレクトリレイアウト図 |---- dev | |---- bin |---- etc | | |---- ccs ------- | |---- bin |---- usr -------- | / ---| |---- lib |---- lib |---- sbin | | |---- sbin |---- var | | |---- lbin |---- home | | |---- include |---- dict |---- opt | | |---- share --- |---- lib |---- (export) | | |---- man 以降に、代表的なHP-UXディレクトリ階層構造を示します。HP-UXアプリケーションの中には、ここに挙げて いないディレクトリを持つものもあります。 / /dev ルートディレクトリ スペシャルファイル(ブロック型および文字型ファイル)。 mknod(1M) を参照して ください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-157 hier(5) hier(5) ホストに固有の構成および管理データベース。 /etc アプリケーションに固有の設定ファイル用のディレクトリ。(オプショナルパッ /etc/opt ケージ用の設定情報) /etc/rc.config.d 起動設定ファイル /export エクスポートされたファイルシステムのデフォルトのルート。サーバ専用。 /home ユーザディレクトリのためのデフォルトのルート /lost+found fsck(1M). によって切り離されたファイルを置く場所 /mnt ローカルファイルシステム用のマウントポイント /net リモートファイルシステム用のマウントポイント /opt オプショナル アプリケーションパッケージ用のサブツリーのルート /sbin 必須システムコマンド。必須コマンドは、システムをブートしファイルシステムを マウントするのに必要な実行可能ファイルとして定義されます。ユーティリティ一 式は、 /usr をマウントしてからでないと使用できません。 /sbin/init.d /sbin/rc0.d 起動およびシャットダウンスクリプト 実行レベル0を開始または終了するための /sbin/init.d の中のスクリプトに対するリ ンクファイル /sbin/rc1.d 実行レベル1を開始または終了するための /sbin/init.d の中のスクリプトに対するリ ンクファイル /sbin/rc2.d ランラベル2を開始または終了するための /sbin/init.d の中のスクリプトに対するリ ンクファイル /sbin/rc3.d 実行レベル3を開始または終了するための /sbin/init.d の中のスクリプトに対するリ ンクファイル /stand /tmp スタンドアロンバイナリおよびカーネル設定ファイル システムによって生成されるテンポラリファイル。通常はブート動作時にクリアさ れます。 /usr 共用可能ユーザおよびシステム管理コマンド、ライブラリ、およびドキュメンテー ションのためのマウントポイント /usr/bin /usr/ccs 一般的なユーティリティおよびユーザコマンドの主な格納場所 Cコンパイレーションシステム。Cプログラムを生成するために使用されるツール とライブラリ Section 5-158 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 hier(5) hier(5) /usr/ccs/bin cc, make, stringsなどを含む、開発用バイナリ /usr/ccs/lib 開発用ライブラリ /usr/ccs/lbin 開発用バックエンド /usr/conf カーネル設定ファイル /usr/contrib ユーザが作成した(サポートされていない内部用の)コマンド、ファイルなどを入れ るディレクトリ。このディレクトリのファイルは、(例えばユーザグループやHPの サービスエンジニアなどの)ローカルサイトや組織の外部に由来するファイルで す。 /usr/contrib/bin ユーザによって作成されたコマンド /usr/contrib/include ユーザによって作成されたインクルードファイル /usr/contrib/lib ユーザによって作成されたライブラリ /usr/contrib/man ユーザによって作成されたマニュアルページ /usr/include Cその他のプログラム用の、インクルードされるヘッダファイル。以下にサブディ レクトリをいくつか示します。 /usr/include/machine マシン固有のCインクルードファイル /usr/include/nfs ネットワークファイルシステム(NFS)用のCインクルードファイル /usr/include/sys カーネル関連のC言語ヘッダファイル /usr/lbin 他のコマンドに対するバックエンド実行可能ファイルのためのディレクトリ。バッ クエンド実行可能ファイルとは、一般にユーザによって直接に呼び出されることが ない実行可能ファイルです。 /usr/lib プログラムライブラリ、オブジェクトコード、およびアーキテクチャ依存データ ベース /usr/lib/nls /usr/local 母国語サポート用のディレクトリ サイトに固有なコマンドやファイルなどのためのディレクトリ。このディレクトリ のファイルはローカルなサイト、組織に由来するファイルです。ローカルなもので はないサポートされていないコマンドやファイルに関しては、/usr/contribを参照し てください。 /usr/local/bin サイトに固有のコマンド /usr/local/lib サイトに固有のライブラリ /usr/local/man サイトに固有のマンページ HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-159 hier(5) hier(5) /usr/newconfig デフォルトのオペレーティングシステム設定データファイル。このディレクトリは /. をミラーリングするディレクトリ階層です。現在のバージョンをオーバライト しないように、カスタマイズ可能な設定ファイルやデータベースはここに置いてあ ります。新たにシステムをインストールする場合は、このディレクトリのファイル を、通常の格納場所にコピーします。システム管理者は、後で参考にするために元 のファイルを残しておくこともできます。 /usr/old 使用されなくなったり古くなったファイルやプログラム /usr/sbin システム管理コマンド /usr/share アーキテクチャに依存しない共用可能ファイル /usr/share/dict spellとispell用のディレクトリ /usr/share/lib 雑多な共用可能ライブラリ /usr/share/man オンラインのドキュメンテーション 「可変」ファイル用サブツリーのルート。これらは、実行時に作成され任意の大き /var さに増大するファイルです。例えば、ログファイル、テンポラリファイル、トラン ジェントファイル、スプールファイルなどです。 ログファイルやアカウンティングファイルといったシステム管理ファイル。以下に /var/adm サブディレクトリをいくつか示します。 /var/adm/crash カーネル クラッシュダンプのセーブ用 /var/adm/cron cron(1M) キューイング用のディレクトリ /var/adm/sw ソフトウェア配布デポ用デフォルトロケーション /var/adm/syslog syslogによって生成されるログファイル syslog(3C) と syslogd(1M). を参照してくだ さい。 /var/mail 着信メール /var/news news(1). 用のローカルシステムニュース項目 /var/opt オプショナル ソフトウェアパッケージに関連した可変ファイルのためのサブツ リーのルート。 /var/preserve /var/run ex(1) と vi(1) が、修復が行われるまで、失われた編集セッションを置く場所 デーモンの実行時に作成されるファイル。例えば、syslogd、syslog.pidのプロセス ID(PID)ファイルはここに置かれます。 /var/spool プリンタスプーリング、メール転送、 cron(1M) などさまざまな用途に使用される ディレクトリ Section 5-160 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 hier(5) hier(5) /var/spool/cron cron(1M) と at(1) のスプーリングファイル /var/spool/lp プリンタ スプールファイル /var/spool/mqueue 発信メールと、メールシステムからのメッセージが入ったログファイル /var/spool/uucp UUCPスプールディレクトリ /var/tmp アプリケーションによって生成されるテンポラリファイル。このディレクトリはシ ステム再ブート間にクリアされないのが普通です。 /var/uucp UUCP管理ファイル 制約 すべてのHP−UXのインプリメンテーションでサポートされていないコマンドやファイルを含むディレクトリも あります。 参照 find(1), grep(1), ls(1), whereis(1) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-161 hostname(5) hostname(5) 名称 hostname − ホスト名の解決 説明 ホスト名は、ドメインです。ドメインは、ドットで区切られた、サブドメインの階層的なリストです。例え ば、 Internet Domain Name System のサブドメインの EDU のサブドメインの Berkeley にある monet というマシ ンは monet.Berkeley.EDU で表されます(最後にドットは付けません)。 ホスト名は、しばしばネットワーク上のクライアントプログラムや、サーバプログラムによって用いられま す。これらのプログラムは一般にホスト名 をアドレス に変換しなければなりません (これは通常ライブラリ ルーチン gethostbyname(3N) によって実行されます)。 ホスト名の解決にNISまたはホストテーブルを使用する場合は、修正なしでホスト名が探索されます。 DNSを 使用すると、リゾルバはホスト名にドメインを追加することがあります。 Internetネームリゾルバでホスト名を解決するデフォルトの方法は、 RFC 1535 のセキュリティ勧告に準拠して います。管理者はこの勧告を無効にしてRFC 1535準拠リゾルバを使用しない場合と同じようにリゾルバを動作 させるためのアクションをとることができます。 (RFC 1535ガイドラインに準拠した)デフォルトの方法は次のとおりです。 ホスト名が、単一の構成要素からなっている、すなわち、ドットを1つも含まず、かつ、環境変数 HOSTALIASES に、ファイル名が指定されていた場合には、そのファイルから一致する文字列を検索します。このファ イルの一行にはそれぞれ空白で区切られた 2つの文字列を書きます。最初の文字列はホスト名のエイリアス で、2番目の文字列はそのエイリアスを置き換える完全なホスト名です。解決対象のホスト名とファイルの行 の1つ目のフィールドの内容が大文字小文字の区別なしで一致した場合は、それ以上の処理は行わずに代替名 が探索されます。 ホスト名にドットが少なくとも1個含まれている場合は、まずそのままのホスト名で探索されます。この動作 を実行させる基準とするドット数は、 /etc/resolv.conf の中の ndots オプションでしきい値を設定することに よって設定できます(デフォルト: 1)。ホスト名の末尾にドットが付いていた場合は、(’ndots’オプションの設定 の如何にかかわらず)末尾のドットを除去して残りの名前で探索が実行され、それ以上の処理は行われません。 入力された名前の末尾にドットが付いていなかった場合は、一致するものがみつかるまでドメインリストを検 索することによって探索されます。 /etc/resolv.conf ファイルの中の検索オプションも LOCALDOMAIN 環境変 数も使用されていない場合は、ドメインの検索リストには /etc/resolv.conf の中の)ドメインオプションで指定さ れたフルドメイン、すなわちローカルホスト名で使用されるドメインだけが入っています (resolver(4) 参照)。 例えば、 domain オプションが CS.Berkeley.EDU に設定された場合は、CS.Berkeley.EDUが検索リストに載り、 このドメインだけが部分的なホスト名 lithiumに付加されるため、 lithium.CS.Berkeley.EDU が検索リストを使 用して探索される唯一の名前になります。 /etc/resolv.conf で検索オプションが使用されている場合、または環境変数 LOCALDOMAIN, がユーザーによっ Section 5-162 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 hostname(5) hostname(5) て設定されている場合は、検索リストにはこれらの方法で設定された内容が入ります。例えば、 search オプ ションに次の内容が入っているとします。 CS.Berkeley.EDU CChem.Berkeley.EDU Berkeley.EDU この場合、部分的なホスト名 (例: lithium) におのおののドメイン名を付加したものが (指定された順序で) 探索 されます。その結果、探索されるホスト名は次のようになります。 lithium.CS.Berkeley.EDU lithium.CChem.Berkeley.EDU lithium.Berkeley.EDU 環境変数 LOCALDOMAIN は search および domain オプションをオーバーライドします。両方のオプション がリゾルバ設定ファイルに存在している場合は、最後にリストされているものだけが使用されます (resolver(4) を参照)。 前に「そのままの」名前が探索されなかった場合(すなわち ndots しきい値に満たなかった場合またはドットを 含まなかった場合)は、最初に提供された名前が探索されます。 著者 hostname は、カリフォルニア大学バークレー校で開発されました。 参照 gethostent(3N), gethostbyname(3N), resolver (4), named (1M), RFC 1535 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-163 hosts_access(5) hosts_access(5) 名称 hosts_access − ホストアクセス制御ファイルのフォーマット 説明 インターネットサービスのアクセス制御機能では、アクセス制御ファイルを使用して、そのサービスへのアク セスを許可または拒否します。アクセス制御ファイルは、クライアントパターン (ホスト名/アドレス, ユー ザー名) とサーバーパターン (プロセス名, ホスト名/アドレス) に基づく、シンプルなアクセス制御言語によっ て定義されます。 「例」の項に簡単な説明があります。 hosts_options(5). では、アクセス制御言語の拡張バージョンについて説明しています。 アクセス制御ファイル デーモンは、ネットワークデーモンプロセスのプロセス名であり、 クライアントは、サービスを要求するホス トの名前またはアドレス (またはその両方) です。ネットワークデーモンプロセス名は、 inetd 構成ファイル (/etc/inetd.conf) で指定されます。アクセス制御ソフトウェアは、 /etc/hosts.allow ファイルおよび /etc/hosts.deny ファイルの内容を検索します。 これらのファイルの検索順序は以下のとおりです。検索は、最初の一致で終了します。 • 最初に /etc/hosts.allow ファイルで、一致する (デーモン、クライアント) ペアが検索されます。 一 致するペアが見つかると、アクセスが許可され、検索が終了します。 • /etc/hosts.allow ファイルで一致するペアが見つからない場合は、 /etc/hosts.deny ファイルが検索さ れ、そこで一致する (デーモン、クライアント) ペアが見つかった場合はアクセスが拒否されます。 • 一致する (デーモン、クライアント) ペアがどのアクセス制御ファイルでも見つからない場合は、ア クセスが許可されます。 存在しないアクセス制御ファイルは、空のファイルがあるものとして処理されます。したがって、アクセス制 御ファイルを用意しないことで、アクセス制御をオフにすることができます。 アクセス制御規則 各アクセス制御ファイルは、0 行以上のテキストで構成されます。これらの行は、先頭から順に処理されま す。検索は、一致が見つかった時点で終了します。以下に、アクセス制御ファイルのフォーマットについて説 明します。 • 改行文字の前にバックスラッシュ ("\") がある場合は、その改行文字は無視されます。これを利用し て、長い行を編集しやすいように分割することができます。 • 空白の行と、# 文字で始まる行は無視されます。これを利用して、表を読みやすくするために、表 にコメントや空白文字を挿入できます。 • 上記以外の行は、以下のフォーマットでなければなりません。角かっこ [] で囲まれている内容は省 略できます。 Section 5-164 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 hosts_access(5) hosts_access(5) daemon_list : client_list [ : shell_command ] daemon_list 1つまたは複数のデーモンプロセス名 (argv[0] 値) またはワイルドカード (以下を 参照) のリスト。 client_list クライアントのホスト名またはアドレスと照合される、1つまたは複数のホスト 名、ホストアドレス、パターン、またはワイルドカード (以下を参照) のリスト。 注記: IPv6 アドレスは、空白なしの角かっこ [] で囲みます。 さらに複雑な形式である daemon@host と user@host については、それぞれ 『サーバーエンドポイントパター ン』と 『クライアントのユーザー名検索』で説明しています。 リストの各要素は、空白またはコンマ (またはその両方) で区切ります。 NIS (YP) netgroup 検索を除くすべてのアクセス制御チェックで、大文字と小文字が区別されます。 パターン アクセス制御言語は、以下のパターンを実装しています。 • ドット (.) 文字で始まる文字列は、ドットの 後に続く要素が照合されます。ホスト名の場合は、そ の名前の最後の要素が指定パターンと一致するかどうかが照合されます。たとえば、パターン .xyz.com は、ホスト名 abc.def.xyz.com と一致します。 • ドット (.) 文字で終わる文字列は、ドットの 前にある要素が照合されます。ホストアドレスの場合 は、その最初の数字フィールドが指定文字列と一致するかどうかが照合されます。たとえば、パ ターン 192.3. は、 192.3 ネットワーク上の (ほぼ) すべてのホスト (192.3.x.x) のアドレスと一致し ます。 • アットマーク (@) で始まる文字列は、NIS (旧 YP) netgroup 名として処理されます。ホスト名の場 合は、指定 netgroup のホストメンバーであるかどうかが照合されます。デーモンプロセス名とクラ イアントユーザー名については、netgroup 照合はサポートされていません。 • n.n.n.n/m.m.m.m 形式の式は、"net/mask" ペアとして解釈されます。ホストアドレスの場合は、その アドレスと "mask" とのビットごとの AND (論理積) が "net" と等しいかどうかが照合されます。た とえば、net/mask パターン 131.155.72.0/255.255.254.0 は、 131.155.72.0 ∼ 131.155.73.255 の範囲の すべてのアドレスと一致します。 • [IPv6_address/ prefix_length] 形式の式は、IPv6 ネットワーク接頭辞として解釈されます。ホストア ドレスの場合は、 IPv6_address 内の prefix_length ビットの値とホストアドレスが等しいかどうかが 照合されます。たとえば、パターン [3ffe::1111:1234/120] は、 3ffe::1111:0 ∼ 3ffe::1111:ffff の範囲 のすべてのアドレスと一致します。 ワイルドカード アクセス制御言語は、明示的なワイルドカードをサポートしています。サポートされているワイルドカードは 以下のとおりです。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-165 hosts_access(5) hosts_access(5) ALL ユニバーサルワイルドカード。すべてに一致します。 LOCAL 名前にドット文字が含まれていない、すべてのホストと一致します。 UNKNOWN 名前が未定義の、すべてのユーザーと一致します。あるいは、名前またはアドレスが未定義 の、すべてのホストと一致します。ネームサーバーの一時的な問題でホスト名が使用できない 場合があるため、このパターンの使用には注意が必要です。ソフトウェアの通信先のネット ワークのタイプをソフトウェアが判別できない場合は、ネットワークアドレスが使用不可能に なります。 名前が定義済みの、すべてのユーザーと一致します。あるいは、名前およびアドレスが定義済 KNOWN みの、すべてのホストと一致します。一時ネームサーバーの問題が原因でホスト名が使用でき ない場合があるため、このパターンの使用には注意が必要です。ソフトウェアの通信先のネッ トワークのタイプをソフトウェアが判別できない場合は、ネットワークアドレスが使用不可能 になります。 名前がそのアドレスと一致しない、すべてのホストと一致します。 /etc/tcpd.conf にある構成 PARANOID パラメータ on_reverselookup_fail が deny に設定されている場合は、 tcpd は、アクセス制御 テーブルを参照する前であっても、そのようなクライアントからの要求をドロップします。 演算子 アクセス制御言語は、以下の演算子をサポートしています。 この演算子は、以下の形式で使用します。 EXCEPT list_1 EXCEPT list_2 この構文は、 list_2 とは一致せずに list_1 と一致するすべてのものと一致します。 EXCEPT 演算子は、 daemon_lists と client_lists で使用できます。また、 EXCEPT 演算子は、入れ子にすることができます。かっこを 使用できる制御言語では、 "a EXCEPT b EXCEPT c" は "(a EXCEPT (b EXCEPT c))" と解析されます。 シェルコマンド 最初に照合されるアクセス制御規則にシェルコマンドが含まれる場合は、そのコマンドは % に展開 (次項を参 照) されます。この結果は、標準入力、標準出力、および標準エラーを持つ、 /dev/null に関連付けられている /bin/sh 子プロセスによって実行されます。コマンドが完了するまで待機しないようにする場合は、コマンドの 末尾にアンパサンド (&) を付けます。 シェルコマンドでは、 inetd の PATH 設定は使用できません。代わりに、絶対パス名を使用するか、明示的な PATH=whatever statement で開始するようにします。 hosts_options(5) マニュアルページでは、シェルコマンドフィールドを使用するアクセス制御言語について説明 しています。 % の展開 以下の展開を、シェルコマンドで使用できます。 Section 5-166 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 hosts_access(5) hosts_access(5) クライアント (サーバー) のホストアドレス。 %a(%A) クライアント情報 (ユーザー@ホスト、 ユーザー@アドレス、ホスト名、または単にアドレス)。使 %c 用可能な情報量によって異なります。 %d デーモンプロセス名 (argv[0] 値)。 %h(%H) クライアント (サーバー) のホスト名またはアドレス (ホスト名が使用不可の場合)。 %n(%N) クライアント (サーバー) のホスト名 (あるいは unknown または paranoid)。 %p デーモンプロセス ID。 サーバー情報 (デーモン@ホスト、 デーモン@アドレス、または単にデーモン名)。使用可能な情報 %s 量によって異なります。 %u クライアントのユーザー名 (または unknown)。 %% 単一の % 文字に展開されます。 % に展開される文字のうち、どの英数字 (A-Za-z0-9) とも、どの !@%-_=+:,./ 文字とも一致しないものは、ア ンダースコアで置き換えられます。 サーバーエンドポイントパターン クライアントを、クライアントの接続先のネットワークアドレスで区別するには、以下の形式のパターンを使 用します。 process_name@host_pattern:client_list... このようなパターンを使用できるのは、1つのマシンに複数のインターネットホスト名と複数のインターネッ トアドレスがある場合です。サービスプロバイダは、この機能を使用して、別の組織に属する可能性のあるイ ンターネット名のアーカイブを、FTP、GOPHER、または WWW で提供できます。 hosts_options(5) の twist オ プションも参照してください。システムによっては、1つの物理インタフェースで複数のインターネットアド レスを持つことが可能です。これが不可能なシステムでは、専用のネットワークアドレス空間にある SLIP ま たは PPP の疑似インタフェースに頼らなければなりません。 host_pattern は、 client_list コンテキストのホスト名およびアドレスと同じ構文規則に従います。通常、サー バーエンドポイント情報は、コネクション型のサービスでのみ使用できます。 クライアントのユーザー名検索 クライアントホストが RFC 931 プロトコルまたはその下位プロトコル (TAP、IDENT、RFC 1413) のいずれか をサポートしている場合は、ラッパープログラムは接続の所有者に関する詳細情報を取得できます。クライア ントのユーザー名情報が使用可能であれば、その情報はクライアントのホスト名とともに記録され、以下のよ うなパターンとの照合に使用できます。 daemon_list:... user_pattern@host_pattern... デーモンラッパーは、実行時に規則駆動型のユーザー名検索を実行するか (デフォルト)、常にクライアントホ ストに問い合わせるように、 (/etc/tcpd.confで) 設定できます。規則駆動型のユーザー名検索の場合、上記の規 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-167 hosts_access(5) hosts_access(5) 則を使用すると、 daemon_list と host_pattern の両方で一致する場合にのみユーザー名検索が行われます。 ユーザーパターンには、デーモンプロセスパターンと同じ構文が含まれるため、同じワイルドカードを使用で きます (netgroup メンバシップはサポートされていません)。ユーザー名検索には以下の制限があるため、ユー ザー名検索を行うかどうかについては慎重な検討が必要です。 • クライアントのユーザー名情報は、それが最も必要なとき、つまりクライアントシステムが危険に さらされているときには信頼できません。一般には、 ALL と (UN)KNOWN だけが、信頼できる ユーザー名パターンです。 • ユーザー名検索は、TCP ベースのサービスでのみ、かつ、クライアントホストが適切なデーモンを 実行する場合にのみ可能です。それ以外の場合は、結果は "認識不能" となります。 • ユーザー名検索を行うと、非 UNIX ユーザーについては著しい遅延が発生する場合があります。 ユーザー名検索のタイムアウト値は、 /etc/tcpd.conf で構成できます。詳細は、 tcpd.conf (4) を参照 してください。 この最後の問題については、ユーザー名検索を選択的に行うことで軽減できます。たとえば、 daemon_list : @pcnetgroup ALL@ALL のような規則は、pcnetgroup に属するシステムにはユーザー名検索をせずに一致しますが、その他のシステム についてはユーザー名検索が実行されます。 アドレススプーフィング攻撃の検出 多くの TCP/IP 実装のシーケンス番号ジェネレータに弱点があると、侵入者が簡単に、信頼される側のホスト を装って、たとえば、リモートシェルサービスなどから侵入することができます。これらを含むさまざまなタ イプのホストアドレススプーフィング攻撃を検出するために、IDENT (RFC931 など) サービスを使用できま す。 ラッパーは、クライアント要求を受け付ける前に、IDENT サービスを使用して、クライアントが要求を送信し ていない場合を確認することができます。クライアントホストが IDENT サービスを提供している場合は、ク ライアントが UNKNOWN@host と一致する負の IDENT 検索結果が、ホストスプーフィング攻撃の有力な証拠 となります。 クライアントが KNOWN@host と一致する正の IDENT 検索結果は、あまり当てになりません。侵入者は、ク ライアント接続と IDENT 検索の両方をスプーフィングすることが可能です (ただし、クライアント接続だけを スプーフィングする場合と比べるとかなり困難です)。また、クライアントの IDENT サーバーの情報が間違っ ている可能性もあります。 注記: IDENT 検索は、UDP サービスでは動作しません。 例 この言語は柔軟性が高いため、さまざまなタイプのアクセス制御ポリシーを最小限の操作で表現できます。こ の言語では2つのアクセス制御テーブルを使用していますが、そのうちの1つが単純であっても (あるいは空 であっても) 最も一般的なポリシーを実装する事ができます。 Section 5-168 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 hosts_access(5) hosts_access(5) ここで紹介する例では、deny テーブルより先に allow テーブルがスキャンされていることに注意してくださ い。一致が見つかると検索が終了し、一致がまったく見つからない場合はアクセスが許可されます。 例では、ホスト名とドメイン名を使用しています。これに一時的な名前解決の失敗による影響の軽減を目的と して、アドレスやネットワークアドレス (およびネットマスク) を含める事で、より改善する事ができます。 大部分が拒否されるアクセス制御 この例では、アクセスはデフォルトで拒否されます。明示的に認可されたホストだけがアクセスを許可されま す。 デフォルトのポリシー (アクセスを許可しない) は、以下のシンプルな deny ファイルを使用して実装されま す。 /etc/hosts.deny: ALL: ALL これによって、すべてのホストに対するすべてのサービスが拒否されます (allow ファイルのエントリによって アクセスを許可される場合を除く)。 明示的に認可されたホストは、allow ファイルにリストされます。以下に例を示します。 /etc/hosts.allow: ALL: LOCAL @some_netgroup ALL: .foobar.edu EXCEPT terminalserver.foobar.edu 1番目の規則は、ローカルドメインにあるホスト (ホスト名にドット「.」がない) からのアクセスと、 some_netgroup netgroup のメンバーからのアクセスを許可します。2番目の規則は、 terminalserver.foobar.edu 以 外の、 foobar.edu ドメインにあるすべてのホスト (.foobar.edu の先頭にドット「.」があることに注目) からの アクセスを許可します。 大部分が許可されるアクセス制御 この例では、アクセスはデフォルトで許可されています。明示的に指定されたホストだけが、サービスを拒否 されます。 デフォルトのポリシー (アクセスを許可する) があるために allow ファイルは冗長になります。したがって、 allow ファイルは省略できます。明示的に未認可であるホストは、deny ファイルにリストされます。以下に例 を示します。 /etc/hosts.deny: ALL: some.host.name, .some.domain ALL EXCEPT fingerd: other.host.name, .other.domain 1番目の規則は、一部のホストとドメインからのすべてのサービス要求を拒否します。2番目の規則は、それ 以外のホストとドメインからの finger 要求だけを許可します。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-169 hosts_access(5) hosts_access(5) トラップの設定 次の例では、ローカルドメインにあるホスト (先頭のドットに注目) からの tftp 要求を許可します。その他の ホストからの要求は拒否され、要求されたファイルの代わりに finger プローブが送信されます。結果はスー パーユーザーにメール送信されます。 /etc/hosts.allow: tftpd: LOCAL, .my.domain /etc/hosts.deny: tftpd: ALL: spawn (/usr/bin/sffinger -l @%h | \ /usr/bin/mailx -s %d-%h root) & sffinger コマンドは、 tcp ラッパーとともに使用されます。これによって、リモート finger サーバーから送信 されたデータによるダメージの可能性が抑えられます。この保護は、 finger コマンドより強力です。 %h (クライアントホスト) シーケンスと %d (サービス名) シーケンスの展開については、前述の「シェルコマ ンド」の項で説明しています。 警告: 無限 finger ループに対応できない場合は、 finger デーモンにトラップを設定しないでください。 サービスのトラップは、特にネットワークファイアウォールシステムに有効です。通常のネットワークファイ アウォールは、外部に対して限られたサービスのセットだけを提供するものですが、それ以外のサービスを上 記の tftp の例のようにトラップすることが可能です。その結果、すぐれた早期警戒システムを実現できます。 診断 問題は、 syslogd (syslogデーモン) から 情報、注意、警告および エラーの各レベルで報告されます。エラーが 報告されるのは、以下のような場合です。 • ホストアクセス制御規則に構文エラーが見つかった場合。 • アクセス制御規則の長さが内部バッファーの容量を超えた場合。 • アクセス制御規則が改行文字で終了しない場合。 • % に展開した結果、内部バッファーがオーバーフローする場合。 • 失敗するはずのないシステムコールが失敗する場合。 警告 ネームサーバー検索がタイムアウトになると、アクセス制御ソフトウェアでホスト名を使用できなくなります (ホストが登録されている場合も同様)。 ドメインネームサーバー検索では、大文字と小文字が区別されません。NIS (旧 YP) netgroup 検索では区別され ます。 Section 5-170 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 hosts_access(5) hosts_access(5) 著者 Wietse Venema (wietse@wzv.win.tue.nl) Department of Mathematics and Computing Science Eindhoven University of Technology Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands ファイル /etc/hosts.allow アクセスを許可される (デーモン、クライアント) ペア /etc/hosts.deny アクセスを拒否される (デーモン、クライアント) ペア 参照 tcpd(1M) TCP/IP デーモンラッパープログラム tcpdchk(1) および tcpdmatch(1) テストプログラム tryfrom(1) および sffinger(1) TCP ラッパーユーティリティプログラム HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 5-171 hosts_options(5) hosts_options(5) 名称 hosts_options − ホストアクセス制御言語の拡張機能 説明 このマニュアルページでは、 hosts_access(5) マニュアルページで説明されている言語に対するオプションの拡 張機能について説明します。 この拡張言語では、以下のフォーマットを使用します。 daemon_list : client_list : option : option ... 最初の2つのフィールドは hosts_access(5) マニュアルページで説明されています。簡単に説明すると、 daemon_list は、1つまたは複数のデーモンプロセス名またはワイルドカードのリストです。 client_list は、1つま たは複数のホスト名、ホストアドレス、パターン、またはクライアントホスト名またはアドレスに一致させる ワイルドカードのリストです。 規則の残りの部分はゼロ個以上のオプションのリストです。オプション内の ":" 文字はバックスラッシュ "\" で 保護する必要があります。 オプションは、「キーワード」または「キーワード 値」の形式です。オプションは指定されている順序で処理 されます。オプションの中には %英字の置換を必要とするものがあります。以前のバージョンとの互換性を保 つために、キーワードと値の間に等号 "=" を使用することもできます。 ロギングオプション severity mail.info severity notice イベントがログされる重要度レベルを変更します。機能名 (mail など) は省略可能であり、古い syslog が実装 されたシステムではサポートされません。機能に関連する syslog(3C) を参照してください。重要度オプション は特定のイベントを強調または無視する目的で使用できます。 アクセス制御オプション allow deny サービスを、 allow オプションの場合は許可、 deny オプションの場合は拒否します。これらのオプションは 規則の最後に指定する必要があります。 allow および deny キーワードによって、単一ファイル (たとえば hosts.allow ファイル) 内のすべてのアクセス 制御規則を管理できます。以下に例を示します。 特定のホストからのアクセスのみを許可するには、以下のように指定します。 ALL: .friendly.domain: ALLOW ALL: ALL: DENY 問題を抱えた一部のホストを除くすべてのホストからのアクセスを許可するには、以下のように指定します。 Section 5-172 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 hosts_options(5) hosts_options(5) ALL: .bad.domain: DENY ALL: ALL: ALLOW ドメイン名のパターンの先頭のドット (.) に注意してください。 他のコマンドの実行 spawn shell_command hosts_access(5) マニュアルページで説明されている %英字の展開を実行した後で、指定されたシェル コマンドを子プロセス内で実行します。コマンドは、 stdin、 stdout、および stderr がヌルデバイスに 接続された状態で実行されるので、クライアントホストとの通信が混乱することはありません。以下 に例を示します。 spawn (/usr/bin/sffinger -l @%h | \ /usr/bin/mailx -s "alert" root) & 上記のコマンドは、バックグラウンドの子プロセスで以下のシェルコマンドを実行します。 sffinger -l @%h | mail root ただし、その実行前に、 %h がリモートホストの名前またはアドレスで置き換えられます。 この例では、フィンガーサーバーによって送信されるデータからダメージを受ける可能性を抑えるた めに、通常の finger コマンドの代わりに sffinger コマンドを使用しています。 sffinger コマンドは、 デーモンラッパーパッケージの一部です。このコマンドは、リモートホストによって送信されるデー タをフィルター処理する通常の finger コマンドのラッパーです。 twist shell_command hosts_access(5) マニュアルページで説明されている %英字の展開を実行した後で、現在のプロセス を、指定されたシェルコマンドで置き換えます。 stdin、 stdout、および stderr はクライアントプロセ スに接続されます。このオプションは規則の最後に指定する必要があります。 実際の ftp デーモンを実行する代わりに、カスタマイズした折り返しメッセージをクライアントに送信 するには、以下のように指定します。 ftpd : ... : twist /bin/echo 421 Some bounce message クライアントプロセスと通信を行う別の方法は、後述する banners オプションを参照してください。 コマンド行の配列またはプロセス環境を変更せずに /some/other/telnetd を実行するには、以下のように 指定します。 telnetd : ... : twist PATH=/some/other; exec telnetd 警告: UDP サービスの場合、クライアントプロセスと通信を行う目的で、標準入出力または read()/write() を使 用するコマンドに twist を使用しないでください。 UDP では他の基本的な I/O が必要です。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-173 hosts_options(5) hosts_options(5) ネットワークオプション keepalive サーバーからクライアントに定期的にメッセージが送信されるようにします。クライアントが応答し ない場合は、接続が切断されたものと考えられます。 keepalive オプションは、マシンがサーバーに接 続されている間にマシンの電源が切られた場合に役立ちます。 keepalive オプションはデータグラム (UDP) サービスには役立ちません。 linger number_of_seconds サーバープロセスが接続を閉じた後、カーネルが未配信データを配信しようとする期間を指定しま す。 ユーザー名検索オプション rfc931 [ timeout_in_seconds ] RFC 931 (TAP, IDENT, RFC 1413) プロトコルを使用してクライアントのユーザー名を検索します。 TCP 以外の転送に基づいたサービスの場合、このオプションは無視されます。クライアントシステムが RFC 931 に準拠したデーモン (IDENT など) を実行している必要があり、非 UNIX クライアントからの 接続では顕著な遅延が発生する可能性があります。タイムアウト期間は、構成ファイル /etc/tcpd.conf で調整できます。タイムアウトが指定されていない場合や、無効なタイムアウトが指定されている場 合は、ユーザー名検索は使用できなくなります。 その他のオプション banners /some/directory /some/directory 内で、デーモンプロセス (telnet サービスの場合の telnetd など) と同じ名前のファイル を検索して、その内容をクライアントにコピーします。改行文字は復帰改行で置き換えられ、 %英字 シーケンスは展開されます (hosts_access(5) マニュアルページを参照)。 警告: バナーは、コネクション型 (TCP) ネットワークサービスでのみサポートされます。 nice [number] プロセスの nice 値を変更します (デフォルトは 10)。正の値を指定すると、他のプロセスで CPU リ ソースが多く使用されます。 setenv name value (名前値) のペアをプロセス環境に設定します。値は %英字の展開の対象であり、空白文字を含むこと ができます (ただし、先頭と末尾の空白は削除されます)。 警告: 多くのネットワークデーモンは、ログインプロセスまたはシェルプロセスを作成する前に、自身 の環境をリセットします。 umask 022 シェルに組み込まれている umask コマンドと似ています。022 の umask は、グループおよび全体の書 き込みパーミッションを持つファイルの作成を防止します。 umask の引き数は8進数でなければなり ません。 Section 5-174 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 hosts_options(5) hosts_options(5) user someuser または user someuser.somegroup "someuser" のユーザー ID (または、ユーザー "someuser"、グループ "somegroup") に特権があるものと します。1番目の形式は、 inetd の実装が root 特権を使用してすべてのサービスを実行するものであ る場合に役立ちます。2番目の形式は、特別なグループ特権のみが必要なサービスに役立ちます。 診断 問題は、 syslogd (syslogデーモン) から 情報、注意、警告および エラーの各レベルで報告されます。アクセス 制御規則に構文エラーが見つかった場合は、このエラーは syslog デーモンに報告されます。以降のオプション は無視され、サービスは拒否されます。 著者 Wietse Venema (wietse@wzv.win.tue.nl) Department of Mathematics and Computing Science Eindhoven University of Technology Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands 参照 hosts_access(5)、デフォルトのアクセス制御言語 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-175 inttypes(5) inttypes(5) 名称 inttypes − 基本的な整数データ型 構文 #include <inttypes.h> 説明 このヘッダファイルは、さまざまなサイズの整数データ型を定義します。このヘッダファイルで定義したデー タ型を使うことによって、開発者は異なるシステム上でもデータ型が必ず同じプロパティと動作を取るように 設定できます。 すべての処理系がこのマニュアルページに定義したすべての整数サイズをサポートしているわけではないの で、現在の処理系で特定のサイズの整数がサポートされているかどうかを調べる最適な方法は、その最大値を 定義している記号をテストすることです。例えば、 #ifdef UINT64_MAX をテストした結果が偽となった場 合、その処理系では 64 ビットの符合なしおよび符合付き整数はサポートされていません。 このヘッダファイルでは、8 ビット、16 ビット、32 ビット、および 64 ビットに関して次の整数データ型を定 義します。 intmax_t 処理系によってサポートされる最大の符合付き整数データ型 int8_t 8 ビットの符合付き整数 int16_t 16 ビットの符合付き整数 int32_t 32 ビットの符合付き整数 int64_t 64 ビットの符合付き整数 uintmax_t 処理系によってサポートされる最大の符合なし整数データ型 uint8_t 8 ビットの符合なし整数 uint16_t 16 ビットの符合なし整数 uint32_t 32 ビットの符合なし整数 uint64_t 64 ビットの符合なし整数 次の 2 つのデータ型は符合付きおよび符合なし整数データ型であり、ポインタを保持できるだけの大きさがあ ります。ポインタは、データを破壊せずにデータ型の間で移動できます。 intptr_t ポインタの保持が可能な大きさを持つ符合付き整数型 uintptr_t ポインタの保持が可能な大きさを持つ符合なし整数型 このヘッダファイルでは、特定の処理系で整数値に使うのに最も効率的なデータ型を決めるための、次の整数 データ型を定義します。 intfast_t 処理系によってサポートされる最も効率的な 符合付き整数データ型 int_fast8_t 最低 8 ビットの最も効率的な符合付き整数 int_fast16_t 最低 16 ビットの最も効率的な符合付き整数 Section 5-176 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 inttypes(5) inttypes(5) int_fast32_t 最低 32 ビットの最も効率的な符合付き整数 int_fast64_t 最低 64 ビットの最も効率的な符合付き整数 uintfast_t 処理系によってサポートされる最も効率的な 符合なし整数データ型 uint_fast8_t 最低 8 ビットの最も効率的な符合なし整数 uint_fast16_t 最低 16 ビットの最も効率的な符合なし整数 uint_fast32_t 最低 32 ビットの最も効率的な符合なし整数 uint_fast64_t 最低 64 ビットの最も効率的な符合なし整数 このヘッダファイルでは、16 ビットまたは 32 ビットのワードサイズ モデルに適合しないシステムとの互換性 のために使われる次の整数データ型を定義します。これらのデータ型によって、最低 8 ビット、16 ビット、32 ビット、および 64 ビットの符合付きおよび符合なし整数が定義されます。 int_least8_t 最低 8 ビットの最小符合付き整数 int_least16_t 最低 16 ビットの最小符合付き整数 int_least32_t 最低 32 ビットの最小符合付き整数 int_least64_t 最低 64 ビットの最小符合付き整数 uint_least8_t 最低 8 ビットの最小符合なし整数 uint_least16_t 最低 16 ビットの最小符合なし整数 uint_least32_t 最低 32 ビットの最小符合なし整数 uint_least64_t 最低 64 ビットの最小符合なし整数 次のマクロでは、上記のデータ型に保存できる最小値および最大値が定義されます。 INTMAX_MIN 最大整数データ型に保存できる最小値 INTMAX_MAX 最大符合付き整数データ型に保存できる最大値 UINTMAX_MAX 最大符合なし整数データ型に保存できる最大値 INTFAST_MIN 最も効率的な整数データ型に保存できる最小値 INTFAST_MAX 最も効率的な符合付き整数データ型に保存できる最大値 UINTFAST_MAX 最も効率的な符合なし整数データ型に保存できる最大値 INT8_MIN int8_t データ型に保存できる最小値 INT16_MIN int16_t データ型に保存できる最小値 INT32_MIN int32_t データ型に保存できる最小値 INT64_MIN int64_t データ型に保存できる最小値 INT8_MAX int8_t データ型に保存できる最大値 INT16_MAX int16_t データ型に保存できる最大値 INT32_MAX int32_t データ型に保存できる最大値 INT64_MAX int64_t データ型に保存できる最大値 UINT8_MAX uint8_t データ型に保存できる最大値 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-177 inttypes(5) inttypes(5) UINT16_MAX uint16_t データ型に保存できる最大値 UINT32_MAX uint32_t データ型に保存できる最大値 UINT64_MAX uint64_t データ型に保存できる最大値 INT_FAST8_MIN int_fast8_t データ型に保存できる最小値 INT_FAST16_MIN int_fast16_t データ型に保存できる最小値 INT_FAST32_MIN int_fast32_t データ型に保存できる最小値 INT_FAST64_MIN int_fast64_t データ型に保存できる最小値 INT_FAST8_MAX int_fast8_t データ型に保存できる最大値 INT_FAST16_MAX int_fast16_t データ型に保存できる最大値 INT_FAST32_MAX int_fast32_t データ型に保存できる最大値 INT_FAST64_MAX int_fast64_t データ型に保存できる最大値 INT_LEAST8_MIN int_least8_t データ型に保存できる最小値 INT_LEAST16_MIN int_least16_t データ型に保存できる最小値 INT_LEAST32_MIN int_least32_t データ型に保存できる最小値 INT_LEAST64_MIN int_least64_t データ型に保存できる最小値 INT_LEAST8_MAX int_least8_t データ型に保存できる最大値 INT_LEAST16_MAX int_least16_t データ型に保存できる最大値 INT_LEAST32_MAX int_least32_t データ型に保存できる最大値 INT_LEAST64_MAX int_least64_t データ型に保存できる最大値 次のマクロは、関数の printf() ファミリと一緒に書式設定オプションとして使用できます (printf (3S) を参照)。 これらのマクロは、このマニュアルページの前半の部分で定義した整数データ型に対して正しい書式設定オプ ションを選択するために使われます。 PRId8 d int8_t 用の印刷書式設定オプション PRId16 d int16_t 用の印刷書式設定オプション PRId32 d int32_t 用の印刷書式設定オプション PRId64 d int64_t 用の印刷書式設定オプション PRIdMAX d intmax_t 用の印刷書式設定オプション PRIdFAST8 d int_fast8_t 用の印刷書式設定オプション PRIdFAST16 d int_fast16_t 用の印刷書式設定オプション PRIdFAST32 d int_fast32_t 用の印刷書式設定オプション PRIdFAST64 d int_fast64_t 用の印刷書式設定オプション PRIdFAST d intfast_t 用の印刷書式設定オプション PRIdLEAST8 d int_least8_t 用の印刷書式設定オプション PRIdLEAST16 d int_least16_t 用の印刷書式設定オプション PRIdLEAST32 d int_least32_t 用の印刷書式設定オプション PRIdLEAST64 d int_least64_t 用の印刷書式設定オプション Section 5-178 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 inttypes(5) inttypes(5) PRIi8 i int8_t 用の印刷書式設定オプション PRIi16 i int16_t 用の印刷書式設定オプション PRIi32 i int32_t 用の印刷書式設定オプション PRIi64 i int64_t 用の印刷書式設定オプション PRIiFAST8 i int_fast8_t 用の印刷書式設定オプション PRIiFAST16 i int_fast16_t 用の印刷書式設定オプション PRIiFAST32 i int_fast32_t 用の印刷書式設定オプション PRIiFAST64 i int_fast64_t 用の印刷書式設定オプション PRIiLEAST8 i int_least8_t 用の印刷書式設定オプション PRIiLEAST16 i int_least16_t 用の印刷書式設定オプション PRIiLEAST32 i int_least32_t 用の印刷書式設定オプション PRIiLEAST64 i int_least64_t 用の印刷書式設定オプション PRIu8 u uint8_t 用の印刷書式設定オプション PRIu16 u uint16_t 用の印刷書式設定オプション PRIu32 u uint32_t 用の印刷書式設定オプション PRIu64 u uint64_t 用の印刷書式設定オプション u uintmax_t 用の印刷書式設定オプション PRIuMAX PRIuFAST8 u uint_fast8_t 用の印刷書式設定オプション PRIuFAST16 u uint_fast16_t 用の印刷書式設定オプション PRIuFAST32 u uint_fast32_t 用の印刷書式設定オプション PRIuFAST64 u uint_fast64_t 用の印刷書式設定オプション PRIuFAST u uintfast_t 用の印刷書式設定オプション PRIuLEAST8 u uint_least8_t 用の印刷書式設定オプション PRIuLEAST16 u uint_least16_t 用の印刷書式設定オプション PRIuLEAST32 u uint_least32_t 用の印刷書式設定オプション PRIuLEAST64 u uint_least64_t 用の印刷書式設定オプション PRIo8 o int8_t 用の印刷書式設定オプション PRIo16 o int16_t 用の印刷書式設定オプション PRIo32 o int32_t 用の印刷書式設定オプション PRIo64 o int64_t 用の印刷書式設定オプション PRIoMAX o intmax_t 用の印刷書式設定オプション PRIoFAST8 o int_fast8_t 用の印刷書式設定オプション PRIoFAST16 o int_fast16_t 用の印刷書式設定オプション PRIoFAST32 o int_fast32_t 用の印刷書式設定オプション PRIoFAST64 o int_fast64_t 用の印刷書式設定オプション PRIoFAST o intfast_t 用の印刷書式設定オプション HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-179 inttypes(5) inttypes(5) PRIoLEAST8 o int_least8_t 用の印刷書式設定オプション PRIoLEAST16 o int_least16_t 用の印刷書式設定オプション PRIoLEAST32 o int_least32_t 用の印刷書式設定オプション PRIoLEAST64 o int_least64_t 用の印刷書式設定オプション PRIx8 x int8_t 用の印刷書式設定オプション PRIx16 x int16_t 用の印刷書式設定オプション PRIx32 x int32_t 用の印刷書式設定オプション PRIx64 x int64_t 用の印刷書式設定オプション PRIxMAX x intmax_t 用の印刷書式設定オプション PRIxFAST8 x int_fast8_t 用の印刷書式設定オプション PRIxFAST16 x int_fast16_t 用の印刷書式設定オプション PRIxFAST32 x int_fast32_t 用の印刷書式設定オプション PRIxFAST64 x int_fast64_t 用の印刷書式設定オプション PRIoFAST x intfast_t 用の印刷書式設定オプション PRIxLEAST8 x int_least8_t 用の印刷書式設定オプション PRIxLEAST16 x int_least16_t 用の印刷書式設定オプション PRIxLEAST32 x int_least32_t 用の印刷書式設定オプション PRIxLEAST64 x int_least64_t 用の印刷書式設定オプション PRIX8 X int8_t 用の印刷書式設定オプション PRIX16 X int16_t 用の印刷書式設定オプション PRIX32 X int32_t 用の印刷書式設定オプション PRIX64 X int64_t 用の印刷書式設定オプション PRIXFAST8 X int_fast8_t 用の印刷書式設定オプション PRIXFAST16 X int_fast16_t 用の印刷書式設定オプション PRIXFAST32 X int_fast32_t 用の印刷書式設定オプション PRIXFAST64 X int_fast64_t 用の印刷書式設定オプション PRIXLEAST8 X int_least8_t 用の印刷書式設定オプション PRIXLEAST16 X int_least16_t 用の印刷書式設定オプション PRIXLEAST32 X int_least32_t 用の印刷書式設定オプション PRIXLEAST64 X int_least64_t 用の印刷書式設定オプション 次のマクロは、関数の scanf() ファミリと一緒に書式設定オプションとして使用できます (scanf(3S) を参照)。 これらのマクロは、このマニュアルの前半の部分で定義した整数データ型に対して正しい書式設定オプション を選択するために使われます。 Section 5-180 SCNd16 d int16_t 用の走査書式設定オプション SCNd32 d int32_t 用の走査書式設定オプション SCNd64 d int64_t 用の走査書式設定オプション Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 inttypes(5) inttypes(5) SCNdMAX d intmax_t 用の走査書式設定オプション SCNi16 i int16_t 用の走査書式設定オプション SCNi32 i int32_t 用の走査書式設定オプション SCNi64 i int64_t 用の走査書式設定オプション SCNiMAX i intmax_t 用の走査書式設定オプション SCNu16 u uint16_t 用の走査書式設定オプション SCNu32 u uint32_t 用の走査書式設定オプション SCNu64 u uint64_t 用の走査書式設定オプション SCNo16 o int16_t 用の走査書式設定オプション SCNo32 o int32_t 用の走査書式設定オプション SCNo64 o int64_t 用の走査書式設定オプション SCNoMAX o intmax_t 用の走査書式設定オプション SCNx16 x int16_t 用の走査書式設定オプション SCNx32 x int32_t 用の走査書式設定オプション SCNx64 x int64_t 用の走査書式設定オプション SCNxMAX x intmax_t 用の走査書式設定オプション SCNdFAST d intfast_t 用の走査書式設定オプション SCNiFAST i intfast_t 用の走査書式設定オプション SCNoFAST o intfast_t 用の走査書式設定オプション SCNxFAST x intfast_t 用の走査書式設定オプション 注意 関数の printf() ファミリの書式設定オプションはすべて PRI で始まるのに対し、関数の scanf() ファミリの書 式設定オプションはすべて SCN で始まります。これらの書式設定文字列は、置き換えて使うことはできませ ん。 例 次の例は、 printf() 関数と一緒に印刷書式設定オプションの 1 つを使う方法を示したものです。 uint64_t u; ... printf("u = %016" PRIx64 "\n", u); 著者 inttypes.h は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-181 inttypes(5) inttypes(5) ファイル /usr/include/inttypes.h 参照 printf(3S), scanf(3S) Section 5-182 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 ioctl(5) ioctl(5) 名称 ioctl − 汎用デバイス制御コマンド 構文 #include <sys/ioctl.h> ioctl(fildes, request, arg) int fildes, request; 説明 システムコール ioctl(2) により、オープンしているデバイスを制御できます。このインクルードファイルに は、 ioctl(2) で使用される一般的な特性を持つ リクエストと 引き数が記述されています。各リクエストが特定 のデバイスに対してどのように影響するかについては、第7章のそのデバイスのマニュアルを参照してくださ い。もし、デバイスが ioctl のあるリクエストをサポートしていなかった場合には、 [EINVAL] が返されます。 FIONREAD すぐに読み出すことのできる文字数を、デバイスファイルから、アドレスが arg のlong整 数で返します。 FIOSSAIOSTAT このコマンドをサポートしているキャラクタ デバイスファイルに対して、アドレスが arg の整数が0でないならば、システムの非同期の I/O を有効にします。すなわち、デバイス ファイルに依存したイベントが生じた時に SIGIO を、その時に FIOSSAIOOWN (下を参 照)で指定されていたプロセスに送るようにします。もし、 FIOSSAIOOWN でプロセスが 指定されていなかった場合にはそのデバイスファイルを最初にオープンしたプロセスに SIGIO を送るようにします。 もし指定されたプロセスが終了してしまった場合には、 SIGIO シグナルはどこにも送られ ません。 arg のアドレスの指す整数が0である場合には、非同期の I/O を無効にします。 FIOGSAIOSTAT このコマンドをサポートしているキャラクタ デバイスファイルに対して、非同期の I/O が 有効になっていれば、アドレスが arg の整数は1にセットされます。そうでなければ、ア ドレスが arg の整数は0にセットされます。 FIOSSAIOOWN このコマンドをサポートしているキャラクタ デバイスファイルに対して、 arg のアドレス に入っている整数の値に、非同期の I/O によって送られる SIGIO シグナルを受けとるプロ セスの ID をセットします。適切な特権を持つユーザーは、任意のプロセスが SIGIO シグ ナルを受けとるように指定できます。もし、スーパーユーザー以外によるリクエストであ る場合には、呼び出しプロセスが、 SIGIO シグナルを受けとるプロセスとして指定できる のは、そのプロセス自身か、あるいはそのプロセスと同じ実ユーザ ID または実効ユー ザー ID を持つプロセスか、またはそのプロセスの子孫のプロセスのみです。もし、argの アドレスに入っている整数で指定されたプロセスが見つからなかった場合には呼び出しは 失敗し、 errno が [ESRCH] にセットされます。スーパーユーザー以外が呼び出した場合、 呼び出しプロセスが、そのプロセス自身ではなく、(1)そのプロセスと同じ実ユーザ ID ま たは実効ユーザー ID を持つ別のプロセスを指定した場合、あるいは (2)そのプロセスの子 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-183 ioctl(5) ioctl(5) 孫でもないプロセスを指定した場合には、呼び出しは失敗し、 errno が [EPERM] にセッ トされます。 もし指定されたプロセスがその後に終了してしまった場合には、 SIGIO シグナルはどこに も送られません。 デバイスファイルをオープンしたとき、オープンを行なったプロセスは SIGIO シグナルを 受けとるようにデフォルトでは指定されます。 FIOGSAIOOWN このコマンドをサポートしているキャラクタ デバイスファイルに対して、アドレスが arg である整数が、 SIGIO シグナルを受け取るように指定されているプロセス ID にセットさ れます。 このコマンドをサポートしているキャラクタ デバイスファイルに対して、アドレスが arg FIOSNBIO である整数が0でなければ、ノンブロッキング I/O を有効にします。すなわち、それ以降 のそのデバイスファイルへの読み出し、書き込みはノンブロッキングモード(下を参照)で 扱われます。もし、アドレスが arg である整数が0であれば、ノンブロッキング I/O を無 効にします。 読み出しでは、ノンブロッキング I/O が有効な時は、そのデバイスへのすべての読み出し 要求は、それが成功したか失敗したかに関わらず、ブロックしません。これらの読み出し 要求は、以下の3つのいずれかで終了します。 • すべての要求を満たすだけの充分なデータがある場合、読み出しは正常に終了し、すべての データを読み出し、読み出したバイト数を返す。 • すべての要求を満たすだけの充分なデータがない場合、読み出しは正常に終了し、すべての データを読み出し、読み出すことのできたバイト数を返す。 • もし読み出せるデータがなかった場合には、読み出しは失敗し、 errno は [EWOULDBLOCK] に設定されます。 書き込みの時にも、ノンブロッキング I/O が有効な時は、そのデバイスへのすべての読み 出し要求は、それが成功したか、失敗したかに関わらず、ブロックしません。これらの書 き込み要求は、以下の3つのいずれかで終了します。 • システムにすべてのデータを収めるのに充分な使用可能領域があった場合、書き込みは正常に 終了し、すべてのデータを書き出し、書いたバイト数を返します。 • 要求全体を収めるのに充分なスペースがなかった場合には、書き込みは正常に終了し、可能な だけのデータを書き出し、書くことのできたバイト数を返します。 • バッファにスペースが全くなかった場合、書き込みは失敗し、 errno に [EWOULDBLOCK] が セットされます。 ノンブロッキング I/O が O_NDELAY フラグ (open(2) 、 fcntl(2) を参照)に干渉するのを防 ぐために、 O_NDELAY の 機能は、つねに、ノンブロッキング I/O の機能に優先します。 Section 5-184 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ioctl(5) ioctl(5) これは、 O_NDELAY がセットされていれば、 O_NDELAY の定義に従って読み出し要求 を行うことを意味します。 O_NDELAY がセットされていなければ、ノンブロッキング I/O の定義が適用されます。 デバイスファイルをオープンしたとき、デフォルトでは、ノンブロッキング I/O は無効に なります。 FIOGNBIO このコマンドをサポートしているキャラクタ デバイスファイルに対して、ノンブロッキン グ I/O が有効になっていれば、1をセットします。無効であれば、アドレスが arg である 整数に0をセットします。 警告 FIOSSAIOSTAT は、4.2 BSD の FIOASYNC と類似していますが、セキュリティ機能が追加されています。 FIOGSAIOSTAT は HP が開発したもので、 FIOSSAIOSTAT と対になっています。これにより BSD スタイル のジョブコントロールを行うために、システムの非同期の I/O TTY の状態を、セーブし、復元することができ ます。 FIOSSAIOOWN は、4.2 BSD の FIOSETOWN と類似していますが、セキュリティ機能を追加されてい ます。 FIOGSAIOOWN は、4.2 BSD の FIOGETOWN と類似しています。 4.2 BSD のこの機能は、プロセス グループに働くのに対して、 HP-UX のバージョンはプロセスに対して働くことに注意してください。 FIOSNBIO は、 AT&T の O_NDELAY open および fcntl のフラグを妨害しないという点を除けば、 4.2 BSD の FIONBIO と同じです。 FIOGNBIO は、 HP が開発したもので、 FIOSNBIO と対になっています。これによ り BSD スタイルのジョブコントロールを行うために、システムのノンブロッキング I/O TTY の状態を、セー ブし、復元することができます。 参照 ioctl(2)、 socket(7)、 arp(7) このマニュアルのセクション7 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-185 kconfig(5) kconfig(5) 名称 kconfig − カーネル構成コマンドの概要 説明 HP-UX には、HP-UX カーネルの構成の表示および修正に使用するコマンドセットがあります。 kconfig カーネル構成全体に対する操作 kcmodule カーネルモジュールに対する操作 kctune カーネル調整パラメータ (「調整パラメータ」) に対する操作 kcpath カーネルファイルのパス名の検索 kclog カーネル構成ログファイルの検索および表示 mk_kernel システムファイルからのカーネル構成の構築 カーネル構成 HP-UX カーネルの動作と内容を制御するデータのセットをカーネル構成と呼びます。システム管理者は、任意 数のカーネル構成を保存することが可能で、それらをいつでもロードすることができます。カーネル構成は、 kcmodule(1M) で作成されたモジュールの使用法の選択、および kctune(1M) で選択された調整パラメータで構成 されます。 デフォルトでは、これらのコマンドは現在実行中のシステムの状態に影響を与えます。これらのコマンドに -c config オプションを指定すると、代わりに config という名前で保存されているカーネル構成に対して作用しま す。 現在実行中のカーネル構成は kconfig -s を使って保存できます。保存されている構成をロードするには kconfig -l を使用します。この場合、実行中のシステムの状態が、保存されている構成に合うように変更されます。 kconfig -n を使用すると、保存されている構成を、システムの次回ブート時に使用するようにマークすること ができます。この操作では、実行中のシステムの状態は変更されませんが、システムのリブート時に、指定し た保存されている構成がロードされます (後述の 「ブート動作」を参照)。 保存するカーネル構成の名前には文字、数字、アンダースコア (_) のみを使用できます。名前の先頭は文字で あることと、長さは最大 32 文字という制限があります。大文字と小文字は区別されます。 バックアップ構成 システムは、構成を保存したもの (バックアップと呼びます) を保持します。これは、構成エラーからの回復に 使用します。システムは、構成に対して要求された変更を行う直前に、 現在実行中の構成を自動的にバック アップに保存します。この動作は、変更の要求時のコマンド行で -K オプション使用することにより、無効に できます。 システムのブート後の最初のバックアップ構成の更新では、リブート前に実行されていた構成のバックアップ を上書きするため、特別な処理が行われます。 バックアップ構成の日付がシステムのブート時点より古い場合 は、構成の変更を行うコマンドでは、常に構成を置き換える前に確認が求められます (コマンドが対話形式で 実行されていない場合は、答えは「いいえ」であるものとみなされます)。この動作を無効にするには、変更を Section 5-186 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 kconfig(5) kconfig(5) 行うコマンド行で -B (バックアップを更新する) または -K (バックアップを更新しない) フラグを指定します。 動的および静的な変更 デフォルトでは、カーネル構成ツールは現在実行中のシステムに構成の変更を適用するので、カーネルの動作 は即時に変更されます。システム管理者は、すべてのコマンドに対して、 -h オプションを指定することでこの デフォルトをオーバーライドできます。このオプションを使用すると、システムをリブートするまで変更は保 留されます。このオプションは、次回のリブートがすぐに行われることが予想される場合にのみ使用すること をお勧めします。変更後何ヶ月もリブートしないような場合は、管理者がこの変更要求を忘れていた場合に問 題につながる可能性もあります。 構成変更の中にはリブートしなければ適用できないものもあります。これらの変更は、 -h オプションを指定し ない場合でも、システムをリブートするまで保留されます。このような場合は警告メッセージが表示されま す。 カーネル構成コマンドのいずれかの1回の呼び出しで複数の構成変更が要求され、その変更のうちのいずれか がリブートを必要とする場合は、要求された変更すべてがシステムをリブートするまで保留されます。特に、 保存されているカーネル構成が kconfig -l を使ってロードされ、その構成がリブートしないと使用できない場 合は、実行中のシステムの状態は変更されず、指定されたカーネル構成は次回ブート時に使用されるようマー クされます。 構成に対する変更が次回ブート時まで保留されている場合に、続けて同じ構成設定に対して即時に適用される 変更を行った場合は、後者の変更が優先され、最初の変更は次回ブート時に適用されません。このような状況 では警告が表示されます。 kconfig -i (インポート)、 kconfig -l (ロード)、または kconfig -n (次回のブート) といった現在実行中の構成全体 を置き換える変更を行うと、次回のブートまで保留されている変更はすべて破棄されます。 現在実行中のシステムに対して行った変更は、システムのリブート時にも保持されます。これらの変更は、新 たに変更が行われたり、保存されているカーネル構成がロードされるまで有効です。 ブート動作 システムのブート時に、管理者はブートコマンド行で、保存されているカーネル構成の名前を指定できます (hpux(1M) および hpux.efi(1M) を参照)。カーネル構成の名前を指定すると、ブート時にそのカーネル構成が ロードされます。 ブートコマンド行でカーネル構成を指定しない場合、システムは、次回のブートで使用するようにマークされ ている (kconfig -n、 kconfig -l、または kconfig -i コマンドを使用) カーネル構成を探します。このような構成 が検出された場合は、ブート時にその構成がロードされます。 ブートコマンド行でカーネル構成を指定せず、次回のブートで使用するようにマークされている構成もない場 合は、システムは、リブート前に使用されていた構成と同じものを使用してブートします。この構成について リブートまで保留されていた変更がある (リブートしないと適用できないため、または -h オプションが使用さ れたため) 場合は、ブートプロセス中にこれらの変更が適用されます。 カーネル構成が正常にブートできない場合は、 バックアップ構成をブートするか、「フェールセーフ ブート」 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-187 kconfig(5) kconfig(5) フラグ (Itanium(R)ベース システムの場合は -tm、PA-RISC の場合は -f0x40000) を使ってブートすることによ り、回復を試行することができます。詳細は、 hpux(1M) および hpux.efi(1M) を参照してください。 システムファイル 過去のリリースの HP-UX のユーザーは、カーネル構成の選択を /stand/system というテキストファイルで保持 していた場合があります。このようなファイルを「システムファイル」と呼びます。システムファイルは現在 実行中のカーネル構成用に自動的に保持されます。このファイルは /stand/system にあります。システムファイ ルは、保存されているそれぞれのカーネル構成についても自動的に保持されます。これらのファイルは /stand/config/system にあります。ここでの config は、保存されている構成の名前です。カーネル構成コマンド のいずれかを使用してカーネル構成 (保存されているもの、または現在使用中のもの) を変更すると、必ず、対 応するシステムファイルが自動的に書き直され、変更が反映されます。また、システムファイルは、すべての 構成セットについて、 kconfig -e を使って要求に応じて生成できます。システムファイルの形式は system(4) で 説明されています。 システムファイルをテキストエディタで修正してから kconfig -i を実行することで、構成を変更することがで きます。このコマンドは、システムファイルを読み取り、適切なカーネル構成をシステムファイルの内容に合 うように修正します (mk_kernel(1M) でも、システムファイルを読み取ってカーネル構成を修正することがで きます。これは、以前のリリースの HP-UX との互換性を保つために残されています)。 注記: 構成変更の中には、カーネル構成コマンドを使用しなくても実行できるものがあります (たとえば、 settune(2) または modload(2) システムコールを直接呼び出します)。この場合、システムファイルは自 動的に更新されません。システムファイルを使用する前に、手動で更新するか、 kconfig -e を使って 再作成してください。 注記: システムファイルにはコメントを記述しないでください。システムファイルはカーネル構成の変更が 行われるたびに再作成されますが、この処理でコメントは保持されません。 システムファイルは、カーネル構成を他のシステムに適用する場合に役立ちます。この場合、 kconfig -e を 使って、構成セットをソースマシン上のシステムファイルにエクスポートします。このファイルを1つまたは 複数のターゲットマシンに移動し、 kconfig -i でシステムファイルをターゲット上の構成セットにインポート します。ターゲットマシンには同じカーネルファイルセットがインストールされている必要があります。イン ストールされていないと、インポート操作が失敗することがあります。 -V フラグを使用すると、ターゲット マシンに同一バージョンのカーネルファイルセットがインストールされていることを確認できます。 現在実行中のカーネル構成に対する変更のうちリブートまで保留されているものがある場合は、これらの変更 はシステムファイル /stand/system に反映されます。 ログファイル カーネル構成コマンドは、カーネル構成の変更をすべて記述したログファイルを維持します。このログファイ ルは /var/adm/kc.log にあります。 kclog コマンドを使用すると、ログファイルの検索および表示を行ったり、 構成の変更に対応しないエントリーを作成することができます。 コマンドを使用して構成の変更を行う際、 -C comment オプションを指定することができます。その変更を記 述するログファイルのエントリーに、指定した comment が取り込まれます。 comment は、シェルによって解 Section 5-188 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 kconfig(5) kconfig(5) 釈されないように、通常は引用符で囲む必要があります。 kconfig -i および mk_kernel は、システムファイル から削除したすべてのコメントをログファイルに取り込みます。 構成変更の中には、カーネル構成コマンドを使用しなくても実行できるものがあります。このような変更につ いては、ログファイルのエントリーは作成されません。 ログファイルの形式は予告なしに変更されることがあります。プログラムでは、ファイルの形式を解析しよう とするのではなく、 kclog コマンドを使用してファイルからエントリーを取り出す必要があります。 出力の解析 カーネル構成コマンドは、そのほとんどが構成の詳細を記述する表形式の出力を作成します。このような出力 はユーザーにとっては見やすいものですが、スクリプトやアプリケーションには解析が困難な場合がありま す。また、表の出力形式は常に変化する可能性があります。たとえば、異なるタイプのシステム間、または HP-UX の各リリース間で、表の出力形式が異なる場合があります。 したがって、このような出力を作成する各カーネル構成コマンドでは、出力形式を変更する -P オプションを 指定できます。 -P の形式は、解析を容易にすることを目的としており、出力形式が変化しないことが保証さ れます。ただし、カーネル構成コマンドの出力を解析するアプリケーションやスクリプトが -P オプションを 使用しない場合は、当社ではこれらをサポートいたしかねます。 -P オプションの後に、フィールド名のリスト (コンマ区切り) を指定する必要があります。各カーネル構成コ マンドごとに、サポートされているフィールド名のセットが異なります。リストについては、各コマンドのマ ンページを参照してください。フィールド名は単一の引き数内に指定する必要があるため、リスト内に空白を 含めないでください。たとえば、次のように指定します。 kcmodule -P name,state,desc カーネル構成コマンドが作成する出力は、ある1つのオブジェクトについて記述する一連の行、空白行、次の オブジェクトについて記述する一連の行、空白行、というように、すべてのオブジェクトについて記述する連 続した行で構成されます。それぞれの行は、フィールド名、単一のタブ文字 (ASCII 9)、およびオブジェクトに ついて記述するためのそのフィールドの値で構成されます。これらの行は要求された順序と同じ順序で生成さ れます。したがって、上記のコマンドでは次のような出力が作成されます。 name module1 state loaded desc name This is the first sample module. module2 state unused desc This is a different sample module. フィールドによっては、1つのオブジェクト内に複数回発生したり、まったく発生しないものもあります。こ れは、フィールドの説明に記載されています。たとえば、次のコマンドを実行した場合、 kcmodule -P name,state,depend HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-189 kconfig(5) kconfig(5) 次のような出力が作成されます。 name module1 state loaded name module2 state unused depend module1 depend module4 これは、 module1 には依存関係がありませんが、 module2 は他の2つのモジュールに依存していることを示 しています。 今後、新しいフィールドが追加される可能性がありますが、 -P オプションで指定しない限り、出力に取り込 まれることはありません。なお、フィールドは削除されることはありません。まれに、将来の開発でフィール ドが意味を持たなくなる可能性があります。このような場合はフィールド名は受け付けられますが、対応する 行は出力から省略されます。 参照 hpux(1M)、 hpux.efi(1M)、 kclog(1M)、 kcmodule(1M)、 kconfig(1M)、 kcpath(1M)、 kctune(1M)、 mk_kernel(1M)、 system(4) Section 5-190 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 kerberos(5) kerberos(5) 名称 kerberos − Kerberos システムの概要 説明 Kerberos システムはネットワーク環境で個々のユーザーを認証します。Kerberos による認証が行われたユー ザーは、リモートホストにパスワードを提示したり、 .rhosts ファイルを編集して使用することなく、 rlogin、 rcp、 rsh などのネットワークユーティリティを使用できます。これらのユーティリティがパスワードなしで 動作するのは、対象となるリモートマシンが Kerberos システムをサポートしている場合に限られます。 ユーザー名を入力したとき、リモートマシンが Kerberos システムではない場合には、以下のメッセージが表示 されます。 Principal unknown (Kerberos) you haven’t been registered as a Kerberos user. このメッセージが表示された場合は、システム管理者に問い合わせる必要があります。 Kerberos 名は通常3つの部分に分かれています。最初の部分は プリンシパル名で、通常はユーザーまたはサー ビスの名前です。2番目の部分は インスタンスで、ユーザーの場合、通常はヌルになります。一部のユーザー には、‘‘root’’ や ‘‘admin’’ などの特権インスタンスがある場合もあります。サービスの場合は、インスタンスは そのサービスが実行されるマシンの完全修飾名になります。たとえば、マシン ABC 上で実行される rlogin サービスは、マシン XYZ で実行される rlogin サービスとは別のインスタンスになります。Kerberos 名の3番 目の部分は レルムです。レルムは、プリンシパルに対する認証を提供する Kerberos サービスに対応するもので す。 Kerberos 名を記述するときは、プリンシパル名とそれに続く インスタンス (ヌル以外の場合) をスラッシュ (/) で区切り、‘‘@’’ 記号を先頭に付加したレルム (ローカルレルム以外の場合) を続けます。有効な Kerberos 名の 例を以下に示します。 david jennifer/admin joeuser@BLEEP.COM cbrown/root@FUBAR.ORG Kerberos によって認証されたユーザーは、最初の Kerberos チケットを受け取ります。Kerberos チケットは、認 証を提供する暗号化されたプロトコルメッセージです。Kerberos は、 rlogin や rcp などのネットワークユー ティリティのためにこのチケットを使用します。チケットのトランザクションは透過的に行われるため、ユー ザーがこれらの管理について気にする必要はありません。 ただし、チケットには期限があることに注意してください。特権チケット (インスタンス ‘‘root’’ のチケットな ど) は数分で期限が切れるのに対し、より一般的な特権を持つチケットは、Kerberos サーバー構成に応じて数 時間または1日間有効である場合があります。ログインセッションがこの期限を超えた場合は、再び Kerberos の認証を受けて、新しいチケットを取得する必要があります。再認証には、 kinit コマンドを使用します。 kinit コマンドを使用してチケットを取得する場合は、ログインセッションを終了する前に kdestroy コマンド HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-191 kerberos(5) kerberos(5) で現在のチケットを破棄する必要があります。ログアウト時にチケットが自動的に破棄されるようにするに は、 .logout ファイルに kdestroy コマンドを指定する必要があります。 kinit および kdestroy コマンドの詳細 は、 kinit(1) および kdestroy(1) のマニュアルページを参照してください。 Kerberos チケットは転送することができます。チケットを転送するには、 kinit コマンドの使用時に 転送可能 チケットを要求する必要があります。転送可能チケットがあれば、ほとんどの Kerberos プログラムで、リモー トホストにチケットを転送するコマンド行オプションを使用できます。 現在、 rlogin、rsh、rcp、 telnet、ftp、および login のネットワークサービスで Kerberos サポートを使用でき ます。 著者 Kerberos は、Massachusetts Institute of Technology で、Steve Miller、MIT Project Athena/Digital Equipment Corporation、および Clifford Neuman、MIT Project Athena によって開発されました。 参照 kdestroy(1)、kinit(1)、klist(1)、kpasswd(1)、krb5.conf(4)、libkrb5(3) Section 5-192 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 krs(5) krs(5) 名称 krs − カーネル レジストリ サービス 説明 KRS は、構造化されたデータを簡単に保守するためのカーネル固有のメカニズムです。カーネル内のサブシス テムは KRS を使用することで、静的データや動的データを保守できます。このデータは揮発性のものであっ ても、システムの再ブート時も保持される持続性があるものでもかまいません。 著者 krs は HP によって開発されました。 参照 krsd(1M), krs_flush(1M) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-193 ksi_alloc_max(5) ksi_alloc_max(5) 名称 ksi_alloc_max − システム全体で割り当てることができる待ち行列シグナルの上限 値 デフォルト NPROC * 8 可能な値 32 ∼ maxint (0x7fffffff) 推奨値 NPROC * 8 説明 ksi_alloc_max は、システム全体で割り当てて使用できる待ち行列シグナル数の上限です。 ksi は「カーネルシ グナル情報」の略で、待ち行列シグナルに関する情報を含むエントリーを識別します。待ち行列シグナル1つ につき1つのエントリーがあります。待ち行列シグナルは、 sigqueue システムコール、タイマーの期限切れ、 POSIX リアルタイムメッセージ待ち行列、および非同期 I/O で使用されます。ユーザーが生成したシグナル (kill および raise による) は待ち行列には入れられません。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 ありません。この調整パラメータは動的です。 この調整パラメータの値を大きくする場合 待ち行列シグナルを使用する機能を頻繁に使用すると、この値を大きくする必要性が生じます。デフォルト値 はプロセス数に基づいていますが、使用量はスレッドに基づくため、待ち行列シグナルを使用するプロセスあ たりのスレッド数が多い場合は、この調整パラメータの値を大きくする必要があります。待ち行列シグナルを 使用するアプリケーションから [EAGAIN] が返された場合は、この調整パラメータの値を大きくする必要があ ります。 この値を大きくした場合の影響 メモリー使用量が増加します。ただし、これは待ち行列シグナルが使用された場合に限ります。割り当てられ るエントリーはすべて 96 バイトです。 この調整パラメータの値を小さくする場合 アプリケーションの待ち行列シグナルの使用量をコントロールしたい場合にのみ値を小さくします。 この値を小さくした場合の影響 値が低すぎると、待ち行列シグナルを使用するアプリケーションが失敗する可能性があります。 同時に変更する必要がある他の調整パラメータ 1プロセスあたりの待ち行列シグナル数を制限する ksi_send_max についても検討します。 ksi_alloc_max はシ ステムベースで、 ksi_send_max はプロセスベースであるため、調整パラメータ ksi_alloc_max の方が常に大き Section 5-194 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ksi_alloc_max(5) ksi_alloc_max(5) くなければなりません。 ksi_send_max のデフォルト値は 32 、 ksi_alloc_max のデフォルト値は ’nproc * 8’ です。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 ksi_alloc_max は、HP で開発されました。 参照 kill(2)、sigqueue(2)、ksi_send_max(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-195 ksi_send_max(5) ksi_send_max(5) 名称 ksi_send_max − 1プロセスあたりの待ち行列シグナル数の上限 値 デフォルト 32 可能な値 32 ∼ maxint (0x7fffffff) 説明 ksi_send_max は、送信元が送信し、受信先で保留可能な待ち行列シグナル数の、1プロセスあたりの上限で す。この上限は、プロセスの送信元ごとに設定します。 ksi は「カーネルシグナル情報」の略で、待ち行列シ グナルに関する情報を含むエントリーを識別します。待ち行列シグナル1つにつき1つのエントリーがありま す。待ち行列シグナルは、 sigqueue システムコール、タイマーの期限切れ、POSIX リアルタイムメッセージ 待ち行列、および非同期 I/O で使用されます。ユーザーが生成したシグナル (kill および raise による) は待ち行列には入れられません。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 待ち行列シグナルを使用する機能を頻繁に使用すると、この値を大きくする必要性が生じます。 sigqueue シス テムコールにより [EAGAIN] が返された場合は、この調整パラメータの値を増やす必要があります。 この値を大きくした場合の影響 メモリー使用量が増加します。ただし、これは待ち行列シグナルが使用された場合に限ります。割り当てられ るエントリーはすべて 96 バイトです。 この調整パラメータの値を小さくする場合 アプリケーションの待ち行列シグナルの使用量をコントロールしたい場合のみです。 この調整パラメータの値を小さくする場合 値が低すぎると、待ち行列シグナルを使用するアプリケーションが失敗する可能性があります。 同時に変更する必要がある他の調整パラメータ システム全体の待ち行列シグナル数を制限する ksi_alloc_max についても検討します。 ksi_alloc_max はシステ ムベースで、 ksi_send_max はプロセスベースであるため、調整パラメータ ksi_alloc_max の方が常に大きくな ければなりません。 ksi_send_max のデフォルト値は 32 で、 ksi_alloc_max のデフォルト値は ’nproc * 8’ です。 Section 5-196 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ksi_send_max(5) ksi_send_max(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 ksi_send_max は、HP で開発されました。 参照 kill(2)、sigqueue(2)、ksi_alloc_max(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-197 lang(5) lang(5) 名称 lang − サポートされている言語の説明 説明 HP-UX NLS (母国語サポート) は、さまざまな言語に対応するために必要な処理や習慣のサポートを提供しま す。 NLS が特定の言語をサポートするには、その言語の定義が HP-UX システムになければなりません。 locale -a コマンド ( locale(1) を参照) を実行すると、その HP-UX システムで現在サポートされている言語に関 する情報を表示します。 HP-UX のデフォルトの処理言語は POSIX です。 POSIX は、NLS の機能なしで処理が行われる環境を提供し ます。この環境は、7ビットにコード化されている USASCII 文字セットに基づいています。 POSIX と C は等価で、互換性があります。 著者 lang は、HPで開発されました。 参照 locale(1), localedef(1M), setlocale(3C), environ(5), Section 5-198 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 langinfo(5) langinfo(5) 名称 langinfo − 言語情報定数 構文 #include <langinfo.h> 説明 このヘッダファイルには、 langinfo のデータの項目 (nl_langinfo(3C) を参照) を識別する定数が記述されていま す。 項目のモードは、 <nl_types.h> に記述されています。以降の定数が定義されています (カテゴリは、その 項目が定義されている setlocale(3C) カテゴリを示します)。 定数 カテゴリ 説明 CODESET LC_CTYPE iso88591 および eucJP のようなコードセット名 D_T_FMT LC_TIME date(1), getdate(3C), strftime(3C) で %c (日付と時刻) を指定する書式文 字列 D_FMT LC_TIME date(1), getdate(3C), strftime(3C) で %x (日付) を指定する書式文字列 T_FMT LC_TIME date(1), getdate(3C), strftime(3C) で %X (時刻) を指定する書式文字列 T_FMT_AMPM LC_TIME 時間を 12時間制で、 AM_STR と PM_STR を用いて表現する書式 AM_STR LC_TIME 12 時間制での午前を示す文字列 (英語では AM) PM_STR LC_TIME 12 時間制での午後を示す文字列 (英語では PM) DAY_1 LC_TIME 週の最初の日の名前(英語では Sunday) ... ... ... DAY_7 LC_TIME 週の7番目の日の名前 ABDAY_1 LC_TIME 週の最初の日の名前の短縮形(英語では Sun) ... ... ... ABDAY_7 LC_TIME 週の7番目の日の名前の短縮形 MON_1 LC_TIME グレゴリオ暦での年の最初の月の名前 ... ... ... MON_12 LC_TIME 12番目の月の名前 ABMON_1 LC_TIME 最初の月の名前の短縮形 ... ABMON_12 ... LC_TIME HP-UX 11i Version 2: August 2003 ... 12番目の月の名前の短縮形 −1− Hewlett-Packard Company Section 5-199 langinfo(5) langinfo(5) ERA LC_TIME 時代記述セグメント。年数のカウント方法、およびロケールでの各時 代の表示方法を記述します。各時代記述セグメントは以下のフォー マットで指定します。 direction:offset:start_date: end_date:era_name:era_format 各記述子については以下で説明します。さまざまな時代記述に必要な 時代記述セグメントがあります。時代記述セグメントは、セミコロン で区切ります。 各時代の開始日は、その時代の一番始めとは限らず、一番最後の場合 もあります。例えば、西暦紀元前で表す場合、紀元前 1年 1月 1日か ら開始し、時代を遡るにつれ年数が増えて行きます。 direction: + または - です。 + を指定した場合、start_date に近い年の ほうが、end_date に近い年と比べ、年数が少なくなります。 offset: 各時代の start_date に最も近い年数 start_date: yyyy/mm/dd のフォーマットで表された日付。この場合、 yyyy、 mm、"dd" はそれぞれ、各時代の開始日の年、月、および日に ちを表します。紀元前 1年以前の年は、負数で表されます。 end_date: 各時代の終了日で、start_date と同じフォーマットで表す か、2つの特別な値である -* または +* のどちらかで表します。 -* は、終了日を起点として時間を表すことを示します。 +* は、終了日 を終点として時間を表すことを示します。 era_name: %EC の規則に従って表された時代の名前 era_format: %EY の規則に従って表された、各時代の年数記述の フォーマット ERA_D_FMT LC_TIME date(1) および strftime(3C) の %E (皇帝/時代名および年代) 命令の フォーマットを指定するためのフォーマット文字列。これは、ある時 代に対してその時代固有のフォーマットが指定されていない場合に、 そのフォーマットを指定するためのものです (localedef (1M) を参照)。 ERA_D_T_FMT LC_TIME ロケールの適切な代替日付および時刻フォーマットで、%Ec フィール ド記述子に相当します。 ERA_T_FMT LC_TIME ロケールの適切な代替日付および時刻フォーマットで、%EX フィー ルド記述子に相当します。 Section 5-200 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 langinfo(5) ALT_DIGITS langinfo(5) LC_NUMERIC 数字に対応する代替シンボル。変換指定修飾子の %O に相当します。 この値は、文字列をセミコロンで区切って指定します。最初の文字列 は、ゼロに相当する代替シンボルで、2番目の文字列は、1に相当する 代替文字列になります。100個までの代替シンボル文字列が指定でき ます。 RADIXCHAR LC_NUMERIC 小数点の文字 (英語では "decimal point’’)。この文字列は、 localeconv(3C) で返される構造体のメンバ decimal_point に等しい。 THOUSEP LC_NUMERIC 1,000 ごとの区切り。この 文字列は、 localeconv(3C) で返される構造 体のメンバ thousands_sep に等しい。 YESEXPR LC_MESSAGES 肯定的応答を示す拡張正規表現 NOEXPR LC_MESSAGES 否定的応答を示す拡張正規表現 YESSTR LC_MESSAGES YES/NO の質問への肯定的応答(現在では使用しません。 YESEXPR を使って下さい) NOSTR LC_MESSAGES YES/NO の質問への否定的応答(現在では使用しません。 NOEXPR を 使って下さい) CRNCYSTR LC_MONETARY 通貨単位を示す文字。数字の前につけるなら − を、数字の後ろにつけ るなら + を、小数点と置き換えるなら . をそれぞれ前に付けます。例 えば、 de_DE.iso88591 では −DM が (DM1234,56)、 da_DK.iso88591 では + Kr が (1234,56 Kr)、 pt_PT.iso88591 では .$ が (1234$56) とな ります。通貨単位の整形の変更に関しては localeconv(3C) を参照。 DIRECTION LC_CTYPE テキストの方向を示す値。現在のところ null、0、および 1 が定義さ れています。 null または 0 の場合は一行の中の文字は左から右に並べ られ、行は上から下に並べられます。 1 の場合は一行の中の文字は右 から左に並べられ、行は上から下に並べられます。この定数は HP 独 自であり、変更される可能性があります。また、他のマシンにはおそ らく移植可能ではありません。 CONTEXT LC_CTYPE 文字のコンテキスト分析について指定する文字列。 null または 0 は、 コンテキスト分析を行わないよう指定します。1 は、アラビア文字の コンテキスト分析を行うよう指定します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-201 langinfo(5) langinfo(5) ALT_DIGIT LC_NUMERIC ASCII形式の文字列 0123456789b+−.,eE にマップされる等価な文字列(b は空白をしめす)。この文字列は出力時には逆のマップに用います。数 字の文字コードの値が連続していなくても構いませんし、値が1バイ トでなくても構いません。この文字列がnull値であった場合には、そ の言語は数字の変換を行いません。(この定数は HP 独自であり、変更 される可能性があります。また、他のマシンにはおそらく移植可能で はありません。) ALT_PUNCT LC_CTYPE アメリカではASCII形式の文字列 b!"#$%&’()*+,−./:;<=>?@[\]ˆ_‘{|}˜ にマップされる等価な文字列(b は空白をしめす)。この文字列は出力 時には逆のマップに用います。句読点の文字コードの値が連続してい なくてもかまいませんし、値が1バイトでなくてもかまいません。も しいずれかの句読点文字が等価な代りの文字を持たない場合には、 ASCII コードが代りの句読点文字列で用いられます。この文字列が null値であった場合には、その言語は句読点文字の変換を行いませ ん。(この定数は HP 独自であり、変更される可能性があります。ま た、他のマシンにはおそらく移植可能ではありません。) YEAR_UNIT LC_TIME 年を示す文字。主に、アジアの言語で日付を特定するために必要で す。(この定数は HP 独自であり、変更される可能性があります。ま た、他のマシンにはおそらく移植可能ではありません。) MON_UNIT LC_TIME 月を示す文字 (この定数は HP 独自であり、変更される可能性があり ます。また、他のマシンにはおそらく移植可能ではありません。) DAY_UNIT LC_TIME 日を示す文字 (この定数は HP 独自であり、変更される可能性があり ます。また、他のマシンにはおそらく移植可能ではありません。) HOUR_UNIT LC_TIME 時を示す文字。主に、アジアの言語で時刻を特定するために必要で す。(この定数は HP 独自であり、変更される可能性があります。ま た、他のマシンにはおそらく移植可能ではありません。) MIN_UNIT LC_TIME 分を示す文字 (この定数は HP 独自であり、変更される可能性があり ます。また、他のマシンにはおそらく移植可能ではありません。) SEC_UNIT LC_TIME 秒を示す文字 (この定数は HP 独自であり、変更される可能性があり ます。また、他のマシンにはおそらく移植可能ではありません。) CHARMAP LC_COLLATE このロケールをコンパイルするために使用されるキャラクタマップの LC_CTYPE 名称。(この定数は HP 独自であり、変更される可能性があります。ま た、他のマシンにはおそらく移植可能ではありません。) Section 5-202 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 langinfo(5) langinfo(5) 警告 category で定義された時間情報をアクセスするためには、strftime() を用いることが推奨されます (strftime(3C) を参照)。 RADIXCHAR、THOUSEP、CRNCYSTR (localeconv(3C) 参照) 関連の情報にアクセスするために は、 LC_TIME および localeconv(3C) の使用が推奨されます。 著者 langinfo は、HPで開発されました。 参照 date(1)、localedef(1M)、getdate(3C)、localeconv(3C)、nl_langinfo(3C)、setlocale(3C)、strftime(3C)、lang(5) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-203 libcrash(5) libcrash(5) 名称 libcrash − クラッシュダンプへのアクセスライブラリ 構文 #include <libcrash.h> int cr_open(const char *path, CRASH **cb, int flags); int cr_verify(CRASH *crash_cb, int flags); cr_info_t *cr_info(CRASH *crash_cb); int cr_uncompress(CRASH *crash_cb, const char *pathname, int cr_isaddr(CRASH *crash_cb, uint64_t pagenum, int *avail); int cr_read(CRASH *crash_cb, void *buf, uint64_t mem_page, uint64_t size, int flags); int *num_pages); int cr_set_node(CRASH *crash_cb, int node_num, int *old_node_num); void int cr_perror(CRASH *crash_cb, int error); cr_close(CRASH *crash_cb); 説明 libcrash は、システムクラッシュ ダンプへのアクセスとして機能するライブラリです。このライブラリを通し てダンプにアクセスする場合は、クラッシュダンプのフォーマット (以下に説明するように、いくつかありま す) には依存しません。また、ダンプの位置にも依存しません。ダンプは raw ダンプデバイス上にあっても、 ファイルシステム内のファイルの中にあっても、またはその両方にあってもかまいません。実行しているシス テムのメモリは、 /dev/mem ドライバーを使って「ダンプ」として扱うこともできます。 このライブラリによるダンプへのアクセスはすべて、 cr_open() を呼び出して開始されます。この呼び出しに よって戻されるクラッシュダンプ記述子は、他の libcrash を呼び出すときに必要なパラメータです。このよう な記述子には、次のものがあります。 cr_verify() ダンプを構成するすべてのファイルのサイズとチェックサムを調べて、ダンプ の整合性を検証します。 cr_info() ダンプに関する情報と、それを生成したマシンおよびカーネルに関する情報の 入っている構造体へのポインタを戻します。 cr_uncompress() クラッシュダンプ内のファイルを圧縮解除し (必要な場合)、そのサイズと チェックサムを確認することによって、そのファイルが使用できるように準備 します。この関数はライブラリが物理メモリイメージにアクセスするために内 部的に使用されますが、呼び出し側がカーネルとカーネルモジュール ファイル にアクセスする場合にも使用できます。 cr_isaddr() ある物理メモリページがダンプしたマシン上で有効かどうか、また有効な場合 には、そのページの内容がダンプ内に含まれているかどうかについて情報を提 Section 5-204 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 libcrash(5) libcrash(5) 供します。 cr_read() ダンプからページを読み取ります。 cr_set_node() ノードのプライベートメモリ領域内のメモリにアクセスするために cr_read() お よび cr_isaddr() によって使用されるノード番号を設定します。 cr_perror() 別のライブラリ呼び出しによって戻されたエラーコードまたは警告コードの 1 つに一致するエラーメッセージまたは警告メッセージを標準エラーに印刷しま す。 cr_close() クラッシュダンプへのアクセスを終了して、ライブラリによって割り当てられ たスペースをすべて解放します。 上記の呼び出しには、その使用法を詳しく説明したそれぞれ専用のマニュアルページがあります。 クラッシュダンプのフォーマット システムクラッシュ ダンプの現在のフォーマットとして、次の 3 つがあります。 COREFILE (バージョン 0) HP-UX 10.01 まで使われるこのフォーマットは、ファイルオフセットとメモリ アドレスが 1 対 1 で対応している物理メモリイメージの入った単一ファイルで構成されます。 通常は、カーネルイメージを含んだファイルが 1 つ関連付けられています。 COREDIR (バージョン 1) このフォーマットは HP-UX 10.10、10.20 および 10.30 で使われており、1 つの core.n ディレクトリで構成されます。このディレクトリには、 INDEX ファイル、カーネル (vmunix) ファイル、および物理メモリイメージの各部分を収めている多数の core.n.m ファイル が入っています。 CRASHDIR (バージョン 2) このフォーマットは HP-UX 11.00 およびそれ以降で使われており、1 つの crash.n ディレクトリで構成されます。このディレクトリには、 INDEX ファイル、カーネル ファイルおよび動的にロードされたすべてのカーネルモジュール ファイル、および物理メモリ イメージの各部分とメタデータ (どのメモリページをダンプし、どれをダンプしていないかを 記述したもの) を収めた多数の image.m. p ファイルが入っています。 CCNUMADIR (バージョン4) マルチノードマシン用のこのフォーマットは、1つの crash.n ディレクトリで 構成されます。このディレクトリには、 INDEX ファイル、カーネルファイル、動的にロード されたカーネルモジュール ファイル、および物理メモリイメージの各部分とメタデータ (どの メモリページをダンプし、どれをダンプしないかを記述したもの) を収めた多数の node.m. p ファイルおよび image.m. p ファイルが入っています。このタイプの sources または destinations は、ccnuma ディレクトリへのパス名として指定する必要があります。 その他のフォーマット (例えば、テープアーカイブ用フォーマット) は、将来追加される可能性があります。 戻り値 libcrash 内のほとんどの呼び出しは、整数ステータス値を戻します。戻り値ゼロは、正常に終了したことを意 味します。正の戻り値は、要求した操作が完了したにもかかわらず、何らかの警告があったことを意味しま HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-205 libcrash(5) libcrash(5) す。負の戻り値は、エラーが発生して、要求した操作が完了しなかったことを意味します。ライブラリによっ て戻される値には、次のものがあります。 CR_OK 正常に終了しました。 CRWARN_NOEXPECTED クラッシュダンプ内の 1 つ、または複数のファイルの予想サイズまたは チェックサムが記録されなかったため、ダンプの整合性は検証できませ ん。ダンプが破壊された可能性があります。 CRWARN_NOACTUAL クラッシュダンプ内の 1 つ、または複数のファイルのチェックサムが計 算できなかったため、チェックサムを予想値に照合させてチェックでき ませんでした。ダンプが破壊された可能性があります。 CRWARN_SWAPPEDON クラッシュダンプの 1 部分を含んでいる raw デバイスがスワップされた ため、ダンプはおそらく破壊されました。 CRWARN_MISMATCH クラッシュダンプ内の 1 つ、または複数のファイルのサイズまたは チェックサムが、予想されるものと一致しませんでした。ダンプはおそ らく破壊されています。 CRERR_NOPAGE ターゲットマシンに存在しないメモリアドレスに対する読み取り要求ま たは書き込み要求が出されました。 CRERR_READONLY クラッシュダンプに対して書き込み要求が出されました。書き込みがサ ポートされているのは、 /dev/mem ドライバーを通して実行しているシス テムだけです。 CRERR_WRONGDUMP ダンプの一部を含んでいるものと想定される raw ダンプデバイスに、そ れが含まれていません。raw ダンプデバイスはスワップ操作によって、ま たはその後のダンプによって上書きされた可能性があります。 CRERR_WRONGHOST クラッシュダンプの一部は、ダンプを実行したシステムのダンプデバイ スにまだ常駐していますが、これは現在のシステムではありません。 CRERR_NONODE 指定されたノード番号は存在しません。 CRERR_ERRNO システムエラーが発生しました。特定のエラーについては、 errno を調 べてください。 errno のいくつかの値は、ライブラリのコンテキストで 特定の意味を持っています。これらの特定の値には、次のものがありま す。 [ENOEXEC] [ENOTDIR] クラッシュダンプの一部が圧縮解除できませんでした。 ダンプに対して指定されたパス名はプレーンファイルで も、INDEX ファイルを含んでいるディレクトリでも、 /dev/mem 疑似ドライバーでもありません。 Section 5-206 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 libcrash(5) libcrash(5) \ errno のその他の値には、従来の意味が備わっています。 著者 libcrash は、HP で開発されました。 参照 cr_close(3), cr_info(3), cr_isaddr(3), cr_open(3), cr_perror(3), cr_read(3), cr_set_node(3), cr_uncompress(3), cr_verify(3) HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-207 libcres.a(5) libcres.a(5) 名称 libcres.a − libc.a の関数のサブセット 説明 libcres.a ライブラリは、 libc から選択された関数 (共有データを使用しないリーフ関数) のアーカイブです。ア プリケーションはこのライブラリを使用することにより、これらのオーバーヘッドの少ない関数を、これらが 共有ライブラリにある場合よりも効率よく呼び出すことができます。 libcres.a の利用モデルが HP-UX 11i バージョン 1.5 で大幅に変更されています。 HP-UX 11i の以前のリリース では、 libcres.a は、リンカーオプション -lcres によりアプリケーションに明示的にリンクする必要がありま す。 一方、 HP-UX 11i バージョン 1.5 では、アプリケーションに適切なヘッダーファイルがインクルードされてい るときは、 libcres.a とのリンクが自動的に処理されます。このライブラリを利用するには、関連するヘッダー ファイルをインクルードする必要があります。ヘッダーファイルがインクルードされていない場合、このライ ブラリが明示的にリンクされていても、 libcres ルーチンはリンクされません。リンカーオプション -lcres によ り libcres.a ライブラリをアプリケーションに明示的にリンクしても悪影響はありませんが、その必要はありま せん。 警告 このライブラリの内容は、今後のリリースにおいて、変更される可能性があります。 参照 『HP-UX Linker and Libraries User’s Guide』 ld コマンドの +help オプションによって表示されるヘルプウィンドウ, 『HP-UX Linker and Libraries Online User Guide』 (ld(1) を参照) システムツール chatr(1) プログラムの内部属性の変更 fastbind(1) fastbind ツールの起動 ld(1) リンクエディタの起動 Section 5-208 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 limits(5) limits(5) 名称 limits − インプリメンテーションに特有の定数 構文 #include <limits.h> 説明 次の記号は、 <limits.h> で定義されています。これらは、このマニュアルの説明文中で使用されているもので す。 HP-UX 値欄は、すべての HP-UX システムで移植性のあるアプリケーションを作成するために想定すべき 値を示しています。 値の後の記号は、次に示す意味を持っています。 + いくつかの HP-UX システムでは、ここで示される値よりも実際の限界値が大きいことがありま す。 − いくつかの HP-UX システムでは、ここで示される値よりも実際の限界値が小さいことがありま す。 = ∗ 実際の限界値は、ここで示される値と常に等しく、すべての HP-UX システムで同じです。 この限界値の名前が定義されるのは、コンパイル時に −D_XPG2 フラグを指定するか、ソースプ ログラムで <limits.h> がインクルードされる前に #define 指令のどちらか一方を用いることに よって、プリプロセッサマクロ _XPG2 が定義されているとき だけです。 # この限界値の定義値は、コンパイル時定数でないことがあります。常にこの定義値は、実行時に 整数式として計算されます。 これらの限界値の中には、システム構成によって違うものがあります。その値は、 sysconf (2) を使って動的に に知ることができます。また、ファイルシステムや、特殊ファイルに対応するデバイスによって違うものがあ ります。その値は pathconf(2) を使って知ることができます。さらに、時代遅れのものもあります。他の限界値 に対して冗長であったり、移植可能なアプリケーションを作成するのに役立ちません。これらは、他のシステ ムからのアプリケーションの移植や、『 X/Open Portability Guide, Issue 2 』に従うアプリケーションをサポート したり、以前の HP-UX の旧製品との互換性を保つために提供されています。新しいアプリケーションでは _XPG2 フラグを定義しないでください。 コンパイルの際に <limits.h> ファイルをインクルードして、そのアプリケーションが、ある特定のシステムで 動作できるかどうかを調べるための適当な限界値を検査することができます。さらに、そのシステムに適合す るようにアプリケーションの挙動を変えて、様々な範囲にわたる限界値の設定やシステムの移植性を向上する こともできます。 定数 説明 HP-UX 11i Version 2: August 2003 HP-UX値 −1− Hewlett-Packard Company Section 5-209 limits(5) limits(5) 環境データを含む、 exec(2)への引き数の最大長 (バ ARG_MAX 5120 +* イト単位) CHAR_BIT char のビット数 CHAR_MAX charの最大整数値 8= 127 = CHAR_MIN charの最小整数値 −128 = CHILD_MAX ユーザー ID あたりの並行プロセスの最大個数 25 +−* CLK_TCK 1秒間あたりのクロックチック数 DBL_DIG doubleの精度の桁数 50 +# DBL_MAX doubleの最大正数値 1.7976931348623157e+308 + DBL_MIN doubleの最小正数値 4.94065645841246544e−324 − FCHR_MAX ファイルの最大オフセット (バイト単位) FLT_DIG floatの精度の桁数 6+ FLT_MAX floatの最大正数値 3.40282346638528860e+38 + FLT_MIN floatの最小正数値 1.40129846432481707e−45 − INT_MAX intの最大10進値 2147483647 + INT_MIN intの最小10進値 −2147483648 − LINE_MAX 1行あたりの最大文字数 LINK_MAX 1ファイルあたりの最大リンク数 LOCK_MAX システムロック テーブルの最大エントリー数 LONG_BIT longのビット数 LONG_MAX longの最大10進値 2147483647 + LONG_MIN longの最小10進値 −2147483648 − MAX_CANON ターミナル基準入力行に含まれる最大バイト数 MAX_CHAR ターミナル入力キューに含まれる最大バイト数 MAX_INPUT ターミナル入力キューに含まれる最大バイト数 NAME_MAX 1つのパス名構成要素の最大バイト数 NL_ARGMAX NLS printf(3S)関数および scanf(3S)関数の呼出しの際 15 + INT_MAX +−* 2048 = 32 767 +* 32 +−* 32 + 512 +* MAX_INPUT =* 512 +* 14 +* 9= の最大「桁」数 1つの NLS メッセージカタログに含まれる最大メッ NL_MSGMAX 32767 + セージ数 1つの NLS メッセージカタログに含まれる最大セッ NL_SETMAX 255 + ト数 1つの NLS メッセージ文字列に含まれる最大バイト NL_TEXTMAX 8192 + 数 NGROUPS_MAX プロセスあたりの最大補助グループ数 OPEN_MAX 1つのプロセスがオープンできる最大ファイル数 PASS_MAX 1つのパスワードに含まれる最大文字数 Section 5-210 Hewlett-Packard Company −2− 20 + 60 +* 8+ HP-UX 11i Version 2: August 2003 limits(5) PATH_MAX limits(5) nullターミネータを除く、 1つのパス名に含まれる 1023 +* 最大文字数 PID_MAX 1つのプロセス ID の最大値 30000 + PIPE_BUF 1つのパイプへの書込み単位の最大バイト数 8192 +* PIPE_MAX 1回の書込みで1つのパイプに書き込める最大バイト INT_MAX + 数 PROC_MAX システムの最大並行プロセス数 SCHAR_MAX signed charの最大整数値 SCHAR_MIN signed charの最小整数値 SHRT_MAX shortの最大10進値 32767 + SHRT_MIN shortの最小10進値 −32768 − STD_BLK 物理的 I/O ブロックに含まれるバイト数 512 + SYSPID_MAX システムプロセスの最大プロセス ID 4 +−* SYS_NMLN uname(2)が返す文字列の長さ SYS_OPEN システムでオープンされるファイルの最大個数 120 +−* TMP_MAX tmpnam(3S)が生成するユニークな名前の最大個数 17576 + UCHAR_MAX unsigned charの最大整数値 UID_MAX ユーザー ID やグループ ID として使用できない値の 84 +−* 127 = -128 = 8 +* 255 = 2147483647 + 最小値 UINT_MAX unsigned intの最大10進値 4294967295 + ULONG_MAX unsigned longの最大10進値 4294967295 + USHRT_MAX unsigned shortの最大10進値 USI_MAX unsigned intの最大10進値 WORD_BIT 1つの「ワード」 (int) 中のビット数 65535 + UINT_MAX =* 32 + 例 UID_MAX の HP-UX 値は 2147483647 + で、これは、すべての HP-UX システムで、ユーザー ID やグループ ID として使用できない値の最小値が少なくとも2147483647であることを意味します。システムのなかには、 2147483647を超えるユーザー ID やグループ ID をサポートできるものがあるかもしれませんが、その場合、 <limits.h> ファイルでは UID_MAX が、より大きい値に設定されます。しかし、そのような大きな値を想定す るアプリケーションは、すべての HP-UX に移植できる保証はありません。 著者 limits はHPで開発されました。 参照 exec(2), fcntl(2), fork (2), getgroups(2), link(2), lockf(2), open(2), pathconf(2), sysconf(2), uname(2), write(2), printf(3S), scanf(3S), tmpnam(3S), passwd(4), values(5), termio(7) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-211 limits(5) limits(5) 標準準拠 <limits.h>: AES, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, POSIX.2, ANSI C Section 5-212 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 man(5) man(5) 名称 man − マンページ書式化のためのマクロ 構文 man file ... nroff -man [option]... [ file]... 説明 man マクロは、 man および nroff コマンド (man(1) および nroff (1) を参照) によって使用され、 — さらに、 troff (他社のマニュアルを参照) によって使用可能で、— HP-UX Reference および他の関連リファレンスマニュ アル内にあるオンラインバージョンのマンページを書式化することができます。 man コマンドは、 nroff を呼 び出します。 man および nroff のデフォルト値 デフォルトのページサイズは、85 文字 66行 (8.5×11 インチ) で、75 文字 60行のテキスト領域を持ちます。ハ イフネーションはオフになり、パラグラフは左詰めされ、右端は不揃いになります。 troff のデフォルト値 デフォルトのページサイズは、8.5×11 インチで、6.5×10 インチのテキスト領域を持ちます。タイプサイズは 10 ポイントで、行間隔は 12 ポイントです。ハイフネーションはオンになり、パラグラフは左右で揃えられま す。 他のデフォルト値 タイプフォントとタイプサイズは、各パラグラフの前、および、 .I, .RB, および .SM などのフォント設定マク ロやサイズ設定マクロを処理した後に、デフォルト値にリセットされます。タブストップは、 .DT や .TH 以 外のマクロでは、使用されず、設定されません。 .TH マクロは .DT を実行します (以下を参照)。 オプション nroff または troff には、以下のオプションを指定することができます。これらのオプションは、 man コマンド には許可されていません。 −rs1 troff の寸法を 4.75×8.375 インチのテキスト領域を持つ 6×9 インチのページサイズに、タイプサイ ズを 9 ポイントに、行間隔を 10 ポイントに削減します。このオプションは、 nroff によって無効に なります。 −rV2 特定のパラメータに特殊な Versatec プリンタに適した値を設定します。つまり、行長を 82 文字 (ens) に、ページ長を 84行に、アンダーラインを禁止に設定します。このオプションと man コマン ドの −Tvp オプションを混同しないでください。後者は HP-UX 以外の一部のオペレーティングシ ステムで使用可能なオプションです。 マクロ、文字列、および数値の一覧 定義済みの man のマクロ、文字列、および数値の一覧をここで記載し、次の項で詳細に説明します。 .B text をボールド体で設定します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-213 man(5) man(5) .B word をボールド体と固定幅フォントと交互に設定します。 .BI word をボールド体とイタリック体と交互に設定します。 .BR word をボールド体とローマン体と交互に設定します。 .B text を固定幅フォントで設定します。 .B word を固定幅フォントとボールド体と交互に設定します。 .B コマンド名を指定します。 .BI word を固定幅フォントとイタリック体と交互に設定します。 .BR word を固定幅フォントとローマン体と交互に設定します。 .I 引用文のタイトルを指定します。 .DT デフォルトのタブ設定を復元します。 .B 強調を指定します。 .ER エラー名を指定します。 .BR 環境関数名を指定します。 .B 用語集の用語を指定します。 .HP ぶら下げインデント付きのパラグラフを開始します。 .I text をイタリック体で設定します。 .IB word をイタリック体とボールド体と交互に設定します。 .IB word をイタリック体と固定幅フォントと交互に設定します。 .IP 任意指定のタグを付けてインデントされたパラグラフを開始します。 .IR word をイタリック体とローマン体と交互に設定します。 .B キーキャップを指定します。 .P 通常のパラグラフを開始します。 .PD パラグラフ間隔を設定します。 .PM Bell System 所有のサブフッタを使用します。 .PP 通常のパラグラフを開始します。 .RB word をローマン体とボールド体と交互に設定します。 .RB word をローマン体と固定幅フォントと交互に設定します。 .RE 相対的なマージンインデントを終了します。 .RI word をローマン体とイタリック体と交互に設定します。 .RS 相対的なマージンインデントを開始します。 .B 戻り値を指定します。 .S3 第 3 レベルのヘッダを挿入します。 .B システム定数名を指定します。 .SH 項のヘッダを挿入します。 .SM text を 1 ポイントだけ小さくプリントします。 .SS 副項目のヘッダを挿入します。 .TH 新しいマンページを開始し、ページのヘッダおよびフッタを定義します。 .TP タグ付きのパラグラフを開始します。 Section 5-214 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 man(5) man(5) \*R 登録商標 \*S デフォルトのタイプサイズに変更します。 \*(Tm 商標 \n(IN 左テキストマージン。つまり、デフォルトのマージンインデントおよびパラグラフインデント \n(LL \n(IN を含む行長 \n(PD パラグラフ間の距離 マクロパラメータ すべてのマクロパラメータは、位置で指定されるので、省略して右のパラメータから開始することができま す。それぞれのパラメータは、以下に説明するように、 意味のあるワード(word) です。 mi マージンの増分。これは、左テキストマージンを増加する量です。省略すると、デフォルトとして \n(IN 基本単位 (u) を使用します。 mi のデフォルトの寸法は ens (n) です。左テキストマージンの基 本の値は \n(IN です。 in パラグラフインデント。これは、パラグラフのインデントされる行をインデントする量です。省略 すると、デフォルトとして最新のパラグラフマクロによって設定された値を使用します。つまり、 .HP、 .IP、または .TP によって明示的に設定されるかまたはデフォルトとして解釈された値、ある いは、 .P、 .PP、 .RE、または .RS によって暗黙に設定された値がデフォルトとして使用されま す。 in のデフォルトの寸法は、ens (n) です。 text ゼロから 6 個までの word で構成されます。 text が空の場合には、次のプリントすべきテキストを 含む行に特殊な扱いが適用されます。例えば、 .I を使用すると行全体をイタリック体にすることが でき、 .SM の後に .B を付けてを使用すると小さなボールド体のテキストを作成します。 word スペース (タグではない) で区切られた文字の列です。引用符を使用する ("[word]") と、 word の中 にスペースを含めたり ("string string")、ヌルの word を指定したり ("") することができます。 (非 分割のパディング不能なスペース (\ ) は、分割スペースではありません。) ヘッダに関するマクロ .TH t1 s2 c3 n4 a5 表題とエントリの見出しを設定します。 t1、 s2、 c3、 n4、および a5 は word t1 s2 エントリの表題 セクション番号。 t1 と、かっこで囲まれた s2 を合わせたものが、ページの左上隅、右上隅の 見出しになります。 c3 「Optional Software Required」などの特殊なコメント。2行または 3行のページ見出し領域の最 下行の中央に、かっこで囲って表示されます。 n4 「Series 300/400 Only」などの他の表記法。これは、最初のページ見出し行のタイトルと項の 間の中央に表示されます。 a5 代わりの名前付け用。例えば、 t1 という名の C 関数に相当する FORTRAN ルーチンの名前な ど。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-215 man(5) man(5) 結果の出力は次の形式です。 t1(s2) n4 t1(s2) a5 a5 c3 .SH text 構文などの項の見出しの text をここに指定します。項の見出しは、左マージンから始まります。項 の見出しは、通常すべて大文字なので、 troff 内で 1 ポイント小さいサイズでプリントされます。 .SS text Options などの副項目の見出しの text をここに指定します。副項目の見出しは、左マージンと通常 のテキストインデントの間から始まります。 .S3 text 副見出しなどの第 3 レベルの見出しの text をここに指定します。第 3 レベルの見出しは、通常のテ キストインデントから始まります。 パラグラフに関するマクロ .P .PP ブロックパラグラフを開始します。 in を \n(IN にリセットして、以前の .HP、 .IP、および .TP マ クロによって設定した値をすべて「取り消します」。 .HP in ぶら下げインデント付きのパラグラフを開始します。テキストは、現在のマージンから始まりま す。 2行目以降の出力行はインデントされます。 .TP in 見出しタグを付けてインデントされたパラグラフを開始します。プリントするテキストを含む次の 入力行は、そのタグとして利用されます。タグは現在のマージンから始まります。タグがインデン ト内に収まる場合には、パラグラフテキストは同じ行のインデント位置から始まります。タグがイ ンデント内に収まらない場合には、パラグラフテキストは次の行のインデント位置から始まりま す。 .IP t in タグ t を付けた .TP in と同じです。タグなしでインデントされたパラグラフを置くために頻繁に使 用されます。 .RS mi 現在の左マージンを mi だけ増加させます。 mi を省略すると、デフォルトとして現在の in の値を 使用します。新しいマージンレベルのパラグラフインデント in を \n(IN に設定します。指定できる .RS 増分レベルは 9つまでです。マージンの増分は、 .RE マクロによって取り消すことができ、 .TH、 .SH、 .SS、および .S3 ヘッダマクロによって基本のマージンにリセットすることができま す。 .RE k k 番目 (最初は k=1 で、 k=0 は k=1 と同じです) の左マージンの設定値に戻します。 k を省略する と、前のマージン値に戻します。パラグラフインデント in は、対応する .RS マクロの前に設定さ れていた値に復元されます。 .PD pd パラグラフ間の距離を pd で示す縦の間隔に設定します。 pd を省略すると、パラグラフ間の距離 は、 nroff では 1行、 troff では 0.4行というデフォルト値に設定されます。 pd の寸法は縦の行間隔 (v) です。 Section 5-216 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 man(5) man(5) フォントに関するマクロ .B text text をボールド体に設定します。 .B text text を固定幅フォントに設定します。「警告」の項を参照してください。 .I text text をイタリック体に設定します。 (.R (ローマン) マクロはありませんが、必要なら、 .XY の組み合わせの 1つを使用することができます。) .XY a b フォント X の a とフォント Y の b を連結して、6 個までの word に対してこれらの 2つのフォント を交互に設定します。フォント文字 X および Y には、以下の組み合わせで、 B (ボールド)、 C (固 定幅フォント)、 I (イタリック)、および R (ローマン) を指定することができます。 .B .IB .RB .B .IB .RB .BI .BI .RI .BR .BR .IR 固定幅フォントについては、「警告」の項を参照してください。 .SM text text をデフォルトのポイントサイズよりも 1 ポイント小さくします。これは、 nroff では効果があ りません。 特殊なマクロ これらのマクロは、マンページ内の一般的なテキスト要素を指定します。これらのマクロは、HP の書体の中 で統一されているフォントの使用を提供したり、他の書式化システムへの変換を利用したりする手助けになり ます。 最初のパラメータは、適切な書体 (フォント) またはフォーマットに設定されます。 2 番目のパラメータ punctuation は、ローマン体で設定され、連結される句読点に与えられます。この 2つのパラメータは、フォントマ クロの場合と同様に連結されます。 .B commandname punctuation commandname は、 man などのコマンド名で、通常は、セクション 1 または 1M のマンページ内に 定義されています。これは、固定幅フォントで表示されます。 .I citationtitle punctuation citationtitle は、 HP-UX Reference などのドキュメントの名前です。これは、イタリックで表示され ます。(マンページリファレンスには、標準の .IR マクロを使用します。) .B emphasis punctuation emphasis は、 Do not (してはいけません) などの強調したいワードまたはフレーズです。強調は多用 しないでください。これは、イタリック体で表示されます。 (変数名には、標準の .I マクロを使用 します。) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-217 man(5) man(5) .ER errorname punctuation errorname は、関数によって errno に代入されマンページの ERRORS の項で説明される値に対応す るエラー名です。これは、大かっこで囲まれたローマン体で表示されます。例えば、 .ER EIO . は [EIO] のように表示されます。 .BR environvarname punctuation environvarname は、 PATH のような環境変数の名前です。これは、固定幅フォントで表示されま す。 .B glossterm punctuation glossterm は、 path name (パス名) などの用語集の用語、または後で使用するためにユーザーがマン ページ内で定義している用語です。これは、ボールド体で表示されます。 .B keycap punctuation keycap は、 Tab などのキーボードキーの名前です。これは、ボールド体で表示されます。 .B returnvalue punctuation returnvalue は、通常、「戻り値」または「終了ステータス」の項で定義される、関数の戻り値また はコマンドの終了ステータスです。これは、通常、 0 、 >3 、および <>0 などの数値式に対して使 用されますが、"nonzero" などのワードによる説明には使用されません。これは、固定幅フォントで 表示されます。 .B systemconstant punctuation systemconstant は、 PATH_MAX などのオペレーティングシステムの通常の名前です。これは、固定 幅フォントで表示されます。 getconf (1) を参照してください。 他のマクロ .DT デフォルトのタブ設定 (troff では半角で 3.6 文字、 nroff では半角で 5 文字) に戻します。 .PM sf Bell System 所有のサブフッタを生成します。 sf によって、次のように 生成されます。 P PRIVATE N NOTICE BP BELL LABORATORIES PROPRIETARY BR BELL LABORATORIES RESTRICTED 文字列 次の文字列が定義されています。 \*R 登録商標記号 : nroff 内では (Reg.) として表示され、 troff 内では \(rg インラインマクロを使用して います。 \*S Section 5-218 デフォルトのタイプサイズに変更します。これは、 \s インラインマクロとして実行されます。 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 man(5) man(5) 可能なら上付けとして表示される商標指示記号 TM です。 \*(Tm 数値 以下の数値参照が定義されています。 セクション見出しから相対的に見た左余白インデントの mi、および in 用のデフォルト (troff では \n(IN 半角で 3.6 文字、 nroff では半角で 5 文字) \n(IN は、基本単位 (u) で表されます。 \n(IN を含む行長で、 nroff では 75 文字、 troff では 6.5 インチです。「オプション」の項も参照し \n(LL てください。 LL は、基本単位 (u) で表されます。 現在のパラグラフ間の距離です。 .PD によって設定します。 PD は、縦の行間隔 (v) で表されま \n(PD す。 寸法 nroff および troff は、多数の尺度指示子を使用して、縦または横の寸法を示します。マクロパラメータの多く は、デフォルトの寸法の単位を持っています。数値変数へのすべての割り当ては基本単位 (u) に変換されるの で、値を割り当てたり参照したりする際に注意することが重要です。 尺度 基本単位 指示子 寸法 c センチメートル 240/2.54 D/2.54 i インチ 240 D nroff troff m em C p*S n en = em/2 C p*S/2 p ポイント = 1/72 インチ 240/72 D/72 P パイカ = 1/6 インチ 240/6 D/6 u 基本単位 1 1 v 縦の行間隔 V V C 出力デバイスの文字幅 D 出力デバイスの 1 インチあたりのドット数 (dpi) S ポイントで表した現在のタイプサイズ V 基本単位で表した現在の縦の行間隔 フォントの使い分け 『HP-UX リファレンス』のエントリでは、次のようにフォントを使い分けています。 roman italic 通常のタイプフェースです。 変数などの語で、ユーザー定義の値や変化する値を持つ引き数を表しま す。また、 強調のためにも用いられます。 HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 5-219 man(5) man(5) boldface 主として見出しとして用いられますが、場合によっては、用語が最初に現 れる場所や定義される場所でも用いられます。 constant-width キーボードコマンドやコマンド行オプション、プログラム中などで用いら れるもので、正確にそのままタイプされる字面のすべてに用います。 ページフッタ ページフッタで用いられる文字列は .TH マクロで初期化されます。 )H は、デフォルトとして非プリント (ヌ ル) 文字列を使用します。 ]W は、 Formatted: July 5, 1995 内に記載されるように、デフォルトとして、マン ページが書式化された日付を使用します。 HP マンページでは、 )H には会社の名前 "Hewlett-Packard Company" が設定されます。 ]W には、"HP-UX Release 10.10: November 1995" 内に記載されるように、リリース情 報が設定されます。 この機能を使えば、ユーザーや他社のソフトウェア提供者が、独自のマニュアルエントリを作成する際に、必 要に応じて、フッタ行の左右フィールドを直接使って社名やリリースバージョンなどを表示することができま す。文字列 )H は左に表示されます。文字列 ]W は右に表示されます。ページ番号は中央に表示されます。文 字列の定義は、 .TH マクロコールの後ならどこで行ってもかまいません。ただし、その定義は、最初のページ の末尾よりも前に現れなければなりません。次に、ソースファイルの部分を例として示します。 .TH man 5 .ds )H XYZ Company .ds ]W Release 2.3: May 1996 すると、次のようなフッタが生成されます。 XYZ Company −1− Release 2.3: May 1996 表 tbl プリプロセッサ (tbl(1) を参照) を使用すると、マンページ内に表を挿入することができます。 man マクロ によって、標準的な tbl マクロ .TS、 .T&、および .TE を使用することができます。これらのマクロは、 mm マクロ展開、 .TS H および .TH をサポートしていません (mm(5) を参照)。 通常の場合、テーブル内では man マクロを使用しないようにします。特にフォントマクロは、予想外の結果を 生成する可能性があります。代わりに nroff/troff 組み込みマクロを使用します。例えば、ボールドタイプを指 定するには、インラインマクロ \fB を使用するか、またはもっと一般的には \f3 を使用します。横方向の空白 行を挿入するには、そのテーブルの前に何があるかによって、 .PP または .IP マクロを使用することができま すが、その後に、 center および expand のテーブルフォーマット指定を使用しないようにしなければなりませ ん。そうでないと、インデントがエラーとなる可能性があります。 警告 HP は、プリントされたマニュアルに目次およびインデックスを準備するために、もう NAME というセクショ ンを使用することはありません。その代わり、この情報はそれぞれのマンページ ソースファイルの最後にコメ ントとしてコードされています。希望があれば、各種のツールおよびプログラムによって、この情報をそこか らアクセスすることができます。 NAME セクションは、後で説明するように、 whatis データベースではまだ Section 5-220 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 man(5) man(5) 使用されています。 HP-UX Reference をプリントするためにマクロパッケージを使用すると、各エントリの 構文の項のワード間の スペースが増加します (あいまいさを除去するため)。 上記のマクロ、文字列、数値レジスタ以外に、多数の内部マクロ、文字列、数値レジスタが定義されていま す。定義されているものは、次のとおりです。 • nroff/troff プロセッサによってあらかじめ定義されている名前 • マクロ th • 数値レジスタ :m • )x, ]x, および }x の形式のマクロ、文字列、および数値の名前。この x は、なんらかの英数字を表しま す。 • XY の形式のマクロ、文字列、および数値の名前。この X および Y は、英字の大文字です。 フォント nroff は、ローマン、イタリック、ボールドという 3つのフォントだけを使用し、それぞれフォント位置 1、 2、および 3 で示されます。マクロパッケージ内の固定幅フォントのフォントマクロ (.B、 .RB、 .IB、 .B、 .BR、 .BI、 .B) は、固定幅フォントをボールド体でシミュレートします。その理由は、すべての nroff 出力が 固定幅フォントまたはタイプライタフォーマットであるためです。 troff によって本当の固定幅フォントを使用するには、それぞれの固定幅フォントのフォントマクロ内の該当す るフォント 3 の指定をフォント 4 に変更して、次のように、 troff .fp 要求を使用して、位置 4 に固定幅フォン トを設定します。 .fp 4 CW whatis データベース それぞれのマンページの「名称」の項は、 catman (catman(1M) を参照) が処理して、 whatis データベース内に エントリを作成します。このエントリは、 man コマンドの −f および −k オプションによって使用されます。 catman は、「名称」の項の行を次のフォーマットで 1行に処理します。 name[, name]... − explanatory-text ハイフン (- または \- として入力される)、二分ダッシュ (\(mi), および全角ダッシュ (\(em) は、同じに扱われま す。行内の最後のスペース-ハイフン-スペースは、名前と説明のテキストの間の分割点になります。 ファイル /usr/share/lib/macros/an man マクロ /usr/share/lib/tmac/tmac.an HP-UX 11i Version 2: August 2003 −9− Hewlett-Packard Company Section 5-221 man(5) man(5) man によって呼び出されます。 /usr/share/lib/macros/an 内にあるマクロ (.so) のソースです。ここで他 のマクロファイルを指定すると、マンページに追加のマクロ要求を与えることができます。 /usr/share/lib/whatis マンページの「名称」の項からの文字列のファイルで、 catman によって作成され、 man -k および -f オプションによって使用されます。 参照 col(1), man(1), neqn(1), nroff(1), tbl(1), catman(1M), mm(5) Section 5-222 Hewlett-Packard Company − 10 − HP-UX 11i Version 2: August 2003 manuals(5) manuals(5) 名称 manuals − HP-UX ドキュメンテーションのリスト 説明 最新の HP-UX ユーザーマニュアルおよびホワイトペーパは http://docs.hp.com (英文) または http://www.jpn.hp.com/go/manual (和文) で参照できます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-223 math(5) math(5) 名称 math − 数学関数と定数および型 構文 #include <math.h> 説明 このファイルには、数学ライブラリ (第 (3M) 章で説明しています) の全関数の宣言が入っています。 Itanium(R)ベース システムの場合、 −fpwidetypes オプションを使ってコンパイルするとき、このファイルは次 の型も定義します。 extended quad Itaniumベース システムの 80 ビットの拡張形式の倍精度型。 IEEE 754 準拠の 128 ビット浮動小数点型。HP-UX では、 quad は long double の同義語 です。 このファイルは、次の型を定義しています。 float_t 少なくとも float と同じビット幅を持つ浮動小数点型。PA-RISC の場合、 float_t は float です。Itaniumベース システムの場合、 float_t は、 FLT_EVAL_METHOD が 0 であれば float であり、 FLT_EVAL_METHOD が1であれば double であり、 FLT_EVAL_METHOD が -2 であれば extended です。 double_t 少なくとも double と同じビット幅を持つ浮動小数点型。PA-RISC の場合、 double_t は double です。Itaniumベース システムの場合、 double_t は、 FLT_EVAL_METHOD が 0 または 1 であれば double であり、 FLT_EVAL_METHOD が -2 であれば extended で す。 Itaniumベース システムの場合、 FLT_EVAL_METHOD の値は、コンパイラオプション -fpeval=float (デフォル ト)、 -fpeval=double、 -fpeval=extended のどれを使用したかによって、0、1、または -2 になります。 このファイルは次の定数を定義しています。Itaniumベース システムの場合、これらは静的データおよび集合型 データの初期化に使用できます。 NAN NaN (Not-a-Number) の値 (float 型) INFINITY 正の無限値 (float 型) HUGE_VAL 倍精度浮動小数点数 (IEEE正のINFINITY) の最大値 (double 型) HUGE_VALF float 型で表現できる最大値 (float 型、IEEE 正の無限大)。 HUGE_VALL Itaniumベース システムのみ。 long double 型で表現できる最大値 (long double 型、IEEE 正の無限大)。 Section 5-224 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 math(5) math(5) HUGE_VALW Itaniumベース システムのみ。 extended 型で表現できる最大値 (extended 型、IEEE 正の 無限大)。 HUGE_VALW を使用するには、 −fpwidetypes オプションを使ってコンパイル します。 HUGE_VALQ Itaniumベース システムのみ。 HUGE_VALL と等価。 HUGE_VALQ を使用するには、 −fpwidetypes オプションを使ってコンパイルします。 このファイルは、 ilogb() 関数の特別な場合の戻り値を示す、次の整数の定数を定義しています。 FP_ILOGB0 引き数が0の場合の ilogb() の戻り値です。 FP_ILOGBNAN 引き数が NaN の場合の ilogb() の戻り値です。 Itaniumベース システムの場合、このファイルは、 <math.h> の関数でサポートされるエラー処理方法を識別す る、次の整数の定数を定義しています。 MATH_ERRNO ISO/IEC C99 errno の仕様をサポートすることを示します。 MATH_ERREXCEPT ISO/IEC C99 例外フラグの仕様をサポートすることを示します。 math_errhandling +Olibmerrno コンパイラオプション (デフォルトではありません) が使用されている場合 は MATH_ERRNO 、それ以外の場合は MATH_ERREXCEPT として定義されます。 ユーザーの便宜を図って、以降の数学定数 (double 型) が定義されています。 M_E 自然対数の底 M_LOG2E 2を底とする e の対数 M_LOG10E 10を底とする e の対数 M_LN2 2の自然対数 M_LN10 10の自然対数 M_PI 円周の直径に対する比 (π 、その逆数および平方根の分数もいくつかあります: M_PI_2、 M_PI_4、M_1_PI、M_2_PI、および M_2_SQRTPI) M_SQRT2 2の正の平方根 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-225 math(5) math(5) M_SQRT1_2 1/2の正の平方根 さまざまな機種に依存した定数の定義は、 <values.h> ヘッダファイルの説明を参照してください。 extended または quad のいずれかの型、 HUGE_VALW または HUGE_VALQ のいずれかのマクロを使用する には、 −fpwidetypes オプションを使ってコンパイルします。 ファイル /usr/include/math.h 参照 intro(3)、 complex(5)、 fenv(5)、 values(5) 標準準拠 <math.h>: SVID3、XPG4.2、ANSI C、ISO/IEC C99 Section 5-226 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 maxdsiz(5) maxdsiz(5) 名称 maxdsiz、maxdsiz_64bit − すべてのユーザープロセスのデータセグメントの最大サイズ (バイト数) 値 デフォルト 32 ビット:1GB 64 ビット:4GB 可能な値 32 ビットの最小値: 0x40000 32 ビットの最大値: 0xfffff000 64 ビットの最小値: 0x40000 64 ビットの最大値: 0x3ffbffff000 説明 HP-UX システム上のユーザープログラムは、仮想メモリーの5つの独立したセグメント (テキスト (または コード)、データ、スタック、共有、および I/O) で構成されます。各セグメントは、そのサイズの上限を設定 する仮想アドレス空間の範囲 (アーキテクチャによって定義される) を占有しますが、テキスト、データ、およ びスタックのセグメントの最大サイズは、調整パラメータ maxtsiz、 maxdsiz、および maxssiz を使用して小さ な値に設定することもできます。 この調整パラメータは、32 ビットおよび 64 ビットプロセスの静的データ記憶領域セグメントの最大サイズを 定義します。データ記憶領域セグメントには、グローバル、配列、静的変数、main() のローカル変数、文字 列、および sbrk() または malloc() を使用して割り当てたスペースなどの、固定データ記憶領域が含まれます。 さらに、プライベートな全てのメモリマップされたファイルと共有ライブラリの呼び出し毎のデータもデータ セグメント内に存在します。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、変更後に起動したプロセスでのみ有効になります。また、データセグメントの rlimit を変更するプロセスは、変更された制限をすべての子プロセスに伝播するため、その後で maxdsiz を修 正しても影響を受けません。 この調整パラメータの値を大きくする場合 ユーザープロセスで以下の [ENOMEM] エラーメッセージが表示された場合に、この調整パラメータの値を増 やす必要があります。 exec(2): data exceeds maxdsiz または HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-227 maxdsiz(5) maxdsiz(5) exec(2): data exceeds maxdsiz_64bit これは、プログラムコードによっては、プロセスの失敗の原因になる場合とならない場合があります。 この値を大きくした場合の影響 この調整パラメータの値を増やすことで、すべてのプロセスでより大きなデータセグメントが使用できるよう になります。調整パラメータ maxdsiz および maxssiz によって、各プロセスが予約または使用できるスワップ スペースのサイズが制限されますが、仮想アドレス空間の使用量が増えても、仮想ページはスワップアウト可 能なため、物理アドレス空間の使用量の増加に直接つながることはありません。 マシン上のスワップスペースがほぼ一杯である場合は、この調整パラメータの値を増やすと、1プロセスあた りの予約可能スワップサイズが大きくなります。この場合、メモリーリークが存在するプロセスや、大量のメ モリーを使用して膨大なスワップスペースを予約する悪意のあるプログラムが許容されるため、システム上の スワップスペースがすべて使い果たされる可能性があります。 この調整パラメータの値を小さくする場合 この調整パラメータの値を減らす必要があるのは、マシン上のスワップスペースが少なく、かつ膨大なスワッ プスペースを使用しているプログラムが他の重要なユーザープロセスの実行に影響を与える場合です。 この値を小さくした場合の影響 マシン上のスワップスペースがほぼ一杯である場合は、この調整パラメータの値を減らすと、各プロセスに予 約されるスワップサイズが制限され、大量のスワップスペースを使用するプロセスで [ENOMEM] エラーが発 生する原因となります。 同時に変更する必要がある他の調整パラメータ 調整パラメータ maxssiz も、プロセスのスタックセグメントによってスワップの使用量を制限するため、この パラメータについても考慮する必要があります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxdsiz は、HP で開発されました。 参照 getrlimit(2)、setrlimit(2)、maxtsiz(5)、maxssiz(5) Section 5-228 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxfiles(5) maxfiles(5) 名称 maxfiles − プロセスごとのファイル記述子の論理的最大数の初期値 値 フェールセーフ 60 デフォルト デフォルト値は、起動中のシステムの物理メモリー量をもとに計算されます。 1 GB 以下の少量のメモリーし か搭載していないシステムでは、デフォルト値は 512 になります。 1 GB 以上のメモリーを搭載しているシス テムでは、2048 (2 K) になります。 許容値 最小値は 32 、最大値は 1048576 (1 M) 。この値は物理制限となる maxfiles_lim の値より大きくならないように 指定します。 正の整数値を指定します。 推奨値 この調整パラメータに 409600 (400 K) より大きい値を指定すると、警告が発せられます。これは、試行時の制 限を超えているためです。 この値が、ファイル記述子のチャンクサイズの倍数 (8 の倍数) でなければ、警告が発せられます。これは、重 大な警告ではなく、管理者向けの情報を提供するメッセージです。 説明 maxfiles は、1つのプロセスが同時に開くことができるファイル記述子数の初期値を指定します。プロセスは その論理制限を大きくすることができるため、 maxfiles より多くのファイルを開くことができます。 スーパーユーザー以外のプロセスは、 setrlimit() や ulimit() を用いて、論理制限を、物理制限である maxfiles_lim まで大きくすることができます。 この調整パラメータの変更を行う対象ユーザー この調整パラメータの値を変更する必要はほとんどありません。しかし、多数のファイル記述子を必要とする アプリケーションを実行しているシステムや、メモリーの消費を抑制する必要があるシステムでは、このパラ メータを変更する必要が生じる場合があります。 変更に関する制限事項 この調整パラメータは静的なパラメータです。この値への変更を有効にするには、システムをリブートする必 要があります。 この調整パラメータの値を大きくする場合 多数のファイル記述子を必要とするアプリケーションを実行しているシステムで、アプリケーションが setrlimit() などを用いてアプリケーションプロセスの論理制限を増やしていない場合。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-229 maxfiles(5) maxfiles(5) この調整パラメータの値を大きくした場合の影響 プロセスのファイルテーブルが大きくなるにしたがって、プロセスの初期メモリー領域が拡大します。 この調整パラメータの値を小さくする場合 メモリーの消費を抑制する必要があるシステムで、プロセスごとのファイル記述子数の初期値に制限を設けた い場合。 この調整パラメターの値を小さくした場合の影響 プロセスのファイルテーブルが小さくなるにしたがって、プロセスの初期メモリー領域が縮小します。 同時に変更する必要がある他の調整パラメータ maxfiles の値は maxfiles_lim の値より大きくならないように指定しなければならず、パラメータの設定時には カーネルによってチェックされます。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxfiles は、HP で開発されました。 参照 kctune(1m)、sam(1M)、gettune(2)、settune(2)、ulimit(2)、setrlimit(2)、maxfiles_lim(5)、nfile(5) Section 5-230 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxfiles_lim(5) maxfiles_lim(5) 名称 maxfiles_lim − プロセスごとのファイル記述子の物理的最大数 値 フェールセーフ 1024 デフォルト 4096 許容値 最小値は 32 、最大値は 1048576 (1 M) 。この値は論理制限となる maxfiles の値より小さくならないように、且 つ、ファイル記述子のシステムワイドでの最大数の半分より大きくならないように指定します。 nfile (maxfiles <= maxfiles_lim <= nfile/2). 正の整数値を指定します。 推奨値 この調整パラメータに 409600 (400 K) より大きい値を指定すると、警告が発せられます。これは、試行時の制 限を超えているためです。 この値が、ファイル記述子のチャンクサイズの倍数 (8 の倍数) でなければ、警告が発せられます。これは、重 大な警告ではなく、管理者向けの情報を提供するメッセージです。 説明 maxfiles_lim は、1つのプロセスが同時に開くことができるファイル記述子数のシステムの物理制限を指定し ます。スーパーユーザー以外のプロセスは、論理制限をこの物理制限まで大きくすることができます。 この調整パラメータの変更を行う対象ユーザー 多数のファイル記述子を必要とするアプリケーションを実行するユーザー。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。 動的な変更は、システムに存在しているすべてのプロセスに影響します。ただし、以下のプロセスは例外で す。 • 新しい制限を超えるファイル記述子を開いているプロセス • setrlimit() または ulimit() に対する呼び出しを使用してプロセス固有の制限が設定されているプロセス この調整パラメータの値を大きくする場合 複数のプロセスが、多数のファイル記述子を開くと予想される場合。 この調整パラメータの値を大きくした場合の影響 プロセスが開くことのできるファイル記述子が増えるため、大量のシステムメモリーが消費される可能性があ ります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-231 maxfiles_lim(5) maxfiles_lim(5) この調整パラメータの値を小さくする場合 システムメモリーの消費を抑制する必要があるシステムで、プロセスが開くことのできるファイル記述子に制 限を設けたい場合。 この調整パラメータの値を小さくした場合の影響 プロセスが開くファイル記述子は新しい制限を超えないので、 maxfiles_lim を低くするとメモリーの消費を制 限することができます。 同時に変更する必要がある他の調整パラメータ maxfiles の値は maxfiles_lim の値より大きくならないように指定しなければなりません。 また、 nfile の値は maxfiles_lim の2倍以上の値でなければなりません。 これは、パラメータの設定時にカーネルによってチェックされます。 警告 65535 より大きい値を設定すると、削除される pstat_getfile() のための互換性が損なわれます。正しく動作させ るために、 pstat_getfile() ではなく pstat_getfile2() をお使いください。システムに pstat_getfile() を使用してい るアプリケーションがあるときは、互換性を保つために maxfiles_lim の値を 65535 より大きくならないように 指定してください。ただし、クエリーされるプロセスが setrlimit() を呼び出し、開くファイル数の上限を 65535 以上に変更している場合は除きます。 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxfile_lim は、HP で開発されました。 参照 kctune(1M)、sam(1M)、setrlimit(2)、gettune(2)、settune(2)、pstat(2)、ulimit(2)、maxfiles(5)、nfile(5) Section 5-232 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxrsessiz(5) maxrsessiz(5) 名称 maxrsessiz、maxrsessiz_64bit − Itaniumベース プラットフォーム上のユーザープロセスのRSE スタックの最大サ イズ (バイト数) 値 デフォルト 32 ビットのデフォルト: 0x800000 (8MB) 64 ビットのデフォルト: 0x800000 (8MB) 可能な値 32 ビットの最小値: 0x40000 32 ビットの最大値: 0x17F00000 64 ビットの最小値: 0x40000 64 ビットの最大値: 0x40000000 説明 Itaniumベース システムは、メインメモリーでプロセス単位のレジスタスタックを使用します (詳細は、『Intel IA-64 Architecture Software Developer’s Manual』第2巻、第6章を参照)。このスタックは、レジスタを物理レジ スタとメインメモリー間で移動します。このスタックはレジスタスタックエンジン (RSE) によって維持されま す。スタックのサイズは maxrsessiz によって決まります。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、システムのリブート後にのみ有効になります。 この調整パラメータの値を大きくする場合 maxrsessiz の値を増やす必要があるのは、ユーザープロセスが RSE スタックのオーバーフローのためにエラー [SIGBUS] で終了した場合です。 この値を大きくした場合の影響 ユーザープロセスは、より多くの仮想メモリーを RSE スタックに使用するようになります。この結果、データ の割り当てに使用できる仮想メモリーが少なくなります。 この調整パラメータの値を小さくする場合 この調整パラメータの値を減らす必要があるのは、システムのスワップスペースが非常に少ない場合だけで す。これは、RSE スタック用の仮想メモリーが、適合するスワップの予約または割り当てを要求するためで す。 maxrsessiz がデフォルトより小さい場合は、RSE スタックがオーバーフローするとユーザーアプリケー ションの予期しない異常が発生する可能性があるため、慎重に検討する必要があります。 マシンのワークロードによる RSE スタックの使用量に関する詳細を完全に把握していない場合は、この調整パ ラメータは変更しないことをお勧めします。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-233 maxrsessiz(5) maxrsessiz(5) この値を小さくした場合の影響 この調整パラメータの値を小さくすると、プロセスごとに RSE スタックで使用できるメモリーの量が制限され ます。このため、RSE スタック要件が大きいプロセスが [SIGBUS] エラーで終了する可能性があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxrsessiz は、HP で開発されました。 参照 maxssiz(5)、maxdsiz(5)、maxtsiz(5) Section 5-234 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxssiz(5) maxssiz(5) 名称 maxssiz, maxssiz_64bit − すべてのユーザープロセスのスタックの最大サイズ (バイト数) 値 デフォルト 32 ビットのデフォルト: 0x800000 (8MB) 64 ビットのデフォルト: 0x10000000 (256MB) 可能な値 32 ビットの最小値: 0x40000 32 ビットの最大値: 0x17F00000 64 ビットの最小値: 0x40000 64 ビットの最大値: 0x40000000 説明 HP-UX システム上のユーザープログラムは、仮想メモリーの5つの独立したセグメント (テキスト (または コード)、データ、スタック、共有、および I/O) で構成されます。各セグメントは、そのサイズの上限を設定 する仮想アドレス空間の範囲 (アーキテクチャによって定義される) を占有しますが、テキスト、データ、およ びスタックのセグメントの最大サイズは、調整パラメータ maxtsiz、 maxdsiz、および maxssiz を使用して小さ な値に設定することもできます。 maxssiz および maxssiz_64bit は、32 ビットおよび 64 ビットプロセスのスタックセグメントの最大サイズを定 義します。スタックセグメントには、実際のプログラムスタックと、プロセスまたはスレッドのコンテキスト スイッチに関するレジスタのための記憶スペースが含まれます。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、変更後に起動したプロセスでのみ有効になります。また、スタックセグメント の rlimit を変更するプロセスは、変更された制限をすべての子プロセスに伝播するため、その後で maxssiz を 修正しても影響を受けません。 この調整パラメータの値を大きくする場合 maxssiz の値を増やす必要があるのは、ユーザープロセスが以下のコンソールエラーメッセージを生成してい る場合です。 Warning: maxssiz value too small. このエラーメッセージを生成しているプロセスは、おそらくセグメンテーション違反エラー [SIGSEGV] で終了 し、コアダンプを作成します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-235 maxssiz(5) maxssiz(5) この値を大きくした場合の影響 この調整パラメータの値を増やすことで、すべてのプロセスでより大きなスタックセグメントを使用できるよ うになります。つまり、 maxdsiz および maxssiz は、各プロセスが予約または使用できるスワップスペースの サイズに対する制限として機能します。したがって、仮想アドレス空間の使用量が増えても、仮想ページはス ワップアウト可能なため、物理アドレス空間の使用量の増加に直接つながることはありません。 マシン上のスワップスペースがほぼ一杯である場合は、この調整パラメータの値を増やすと、1プロセスあた りの予約可能スワップサイズが大きくなります。これにより、メモリーリークが存在するプロセスや、大量の メモリーを使用するように記述されたプロセスが許容されるため、より多くのスワップが予約され、システム 上のスワップスペースが使い果たされる可能性があります。 32 ビットのユーザープロセスでは、データおよびスタックの位置は隣接している点を理解することも重要で す。スタックセグメントのために予約される仮想アドレス空間の量が増えるということは、データセグメント のための仮想アドレス空間の量が減ることを意味します。つまり、 maxssiz の値を増やすと、これまで使用可 能だったデータ領域のすべて (または、ほとんどすべて) を使用するユーザープロセスが、 [ENOMEM] エラー で割り当てに失敗する可能性があります。これは、 maxdsiz が、このプロセスがデータのために割り当てた現 在のメモリーサイズより大きい値に設定されている場合でも同様です。 この調整パラメータの値を小さくする場合 この調整パラメータの値を減らす必要があるのは、システムのスワップスペースが少なく、かつ一部の記述が 不完全なプログラムや悪意のあるプログラムがスワップスペースを使用して、より重要なユーザープロセスに 悪影響を与える場合です。たとえば、大学で数名の学生が製品レベルに達していないコードを実行し、至ると ころでメモリーリークを発生させるような場合が該当します。 この値を小さくした場合の影響 この調整パラメータの値を減らすと、1プロセスあたりのスタックに使用できるメモリーが制限されます。こ のため、スタックに多くのメモリーを必要とするプロセスが、 [SIGSEGV] エラーで終了する原因となる可能性 があります。 同時に変更する必要がある他の調整パラメータ maxdsiz はプロセスのデータセグメントによってスワップの使用量を制限する類似機能を実行するため、この パラメータについても考慮する必要があります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxssiz は、HP で開発されました。 参照 maxdsiz(5)、maxtsiz(5) Section 5-236 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxtsiz(5) maxtsiz(5) 名称 maxtsiz、maxtsiz_64bit − すべてのユーザープロセスのテキストセグメントの最大サイズ (バイト数) 値 デフォルト 32 ビット: 96MB 64 ビット: 1GB 可能な値 32 ビットの最小値: 0x40000 32 ビットの最大値: 0x40000000 64 ビットの最小値: 0x40000 64 ビットの最大値: 0x3FFFFFFFFFF 説明 HP-UX システム上のユーザープログラムは、仮想メモリーの5つの独立したセグメント (テキスト (または コード)、データ、スタック、共有、および I/O) で構成されます。各セグメントは、そのサイズの上限を設定 する仮想アドレス空間の範囲 (アーキテクチャによって定義される) を占有しますが、テキスト、データ、およ びスタックのセグメントの最大サイズは、調整パラメータ maxtsiz、 maxdsiz、および maxssiz を使用して小さ な値に設定することもできます。 maxtsiz は、テキストセグメントのサイズをコントロールします。テキストセグメントは、同じプログラムを 実行する複数のプロセスで共有できる、プロセスの読み取り専用の実行可能オブジェクトコードです。たとえ ば、システム上のすべての vi のコピーは同じテキストセグメントを使用します。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は即時に有効になります。 この調整パラメータの値を大きくする場合 maxtsiz の値を増やす必要があるのは、ユーザープロセスで [ENOMEM] エラーが発生し、以下のメッセージが 表示された場合です。 exec(2): text exceeds maxtsiz または exec(2): text exceeds maxtsiz_64bit この値を大きくした場合の影響 ありません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-237 maxtsiz(5) maxtsiz(5) この調整パラメータの値を小さくする場合 システムのパフォーマンス上の理由以外で、実行中のプロセスのテキストサイズを制限したい場合に、この調 整パラメータの値を小さくします。 この値を小さくした場合の影響 ありません。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxtsiz は、HP で開発されました。 参照 maxdsiz(5)、maxssiz(5) Section 5-238 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxuprc(5) maxuprc(5) 名称 maxuprc − 1ユーザーが同時に実行できるユーザープロセスの最大数の制限 値 フェールセーフ 256 デフォルト 256 可能な値 3 ∼ (nproc -5) 推奨値 256 説明 maxuprc は、1ユーザーあたりのプロセスの最大数を制限する動的な調整パラメータです。root だけが、 maxuprc で制限されているプロセス数より多いプロセスを実行できます。 この調整パラメータの変更を行う対象ユーザー maxuprc の値は、システムの使用法に基づいて、システム管理者が変更できます。 変更に関する制限事項 ありません。この調整パラメータは動的です。 この調整パラメータの値を大きくする場合 maxuprc の値を変更する必要があるのは、ユーザーが、現在 maxuprc で許可されているプロセス数より多く のプロセスを必要とする場合です。 fork() がエラー値 [EAGAIN] で失敗した場合は、その特定のユーザーが maxuprc に達したことを示している可能性があります。ただし、このことだけが、 fork() がエラー番号値 [EAGAIN] で失敗する原因とは限りません。 [EAGAIN] は、システムの調整パラメータ nproc に達したか、シ ステム上のメモリーを使い果たした場合にも返されます。 この値を大きくした場合の影響 maxuprc の値を増やすと、1人のユーザーがシステムの大半のリソースを使用できるようになります。 この調整パラメータの値を小さくする場合 maxuprc の値を減らす必要があるのは、1人のユーザーが同時に多数のプロセスを実行して、システムのリ ソースを独占しているような場合です。 この値を小さくした場合の影響 多数のプロセスに依存するアプリケーションは、異常な動作をしたリ、動作が失敗する可能性があります。既 存のプロセスはそのまま実行されますが、 maxuprc を越える新しいプロセスを作成しようとすると失敗しま す。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-239 maxuprc(5) maxuprc(5) 同時に変更する必要がある他の調整パラメータ maxuprc を調整する場合は、 nproc の値に注意する必要があります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxuprc は、HP で開発されました。 参照 nproc(5) Section 5-240 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 maxusers(5) maxusers(5) (廃止) 名称 maxusers − (廃止) 説明 この調整パラメータは、HP-UX 11i Version 2 リリースで廃止され、削除されました。この調整パラメータは無 効であるため、変更しないでください。 HP-UX 11i Version 2 より以前のリリースでは、 maxusers 調整パラメータを使して、システムリソースの割り 当てを決定するカーネルデータ構造体を制御する nclist, nfile, ninode, のデフォルト値を算出していました。 HP-UX 11i Version 2 では、 maxusers に依存する調整パラメータはありません。この値に依存してデフォルト 値が決定されていた調整パラメータには、それぞれデフォルトの数値が割り当てられています。 maxusers を 変更しても、他の調整パラメータには反映されないため、個々の調整パラメータを変更してください。詳細に ついては、それぞれの調整パラメータのマンページを参照してください。 変更に関する制限事項 この調整パラメータは使用されないため、変更しないでください。 著者 maxusers は HP で開発されました。 参照 nclist(5), nfile(5), ninode(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-241 maxvgs(5) maxvgs(5) 名称 maxvgs − システム上に作成/アクティブ化できる LVM ボリュームグループの最大数 値 フェールセーフ 10 デフォルト 10 可能な値 1 ∼ 256 推奨値 10 ∼ 256 maxvgs の値は、予想されるシステムの要件を超えないように設定します。リソースは指定されたボリューム グループの数だけ予約されるため、リソースが制限されているシステム上で maxvgs の値を必要以上に大きく 設定することはお勧めしません。逆に、 maxvgs の値が小さいと、多くのボリュームグループを使用する場合 に値を大きく設定しなおさなければならないため注意が必要です。 説明 システム上に作成またはアクティブ化できる LVM ボリュームグループの最大数。使用可能なボリュームグ ループ番号の範囲も、この値によって制限されます。たとえば、 maxvgs の値が 10 の場合は、システム上に 10 個のボリュームグループを作成すること可能で、各ボリュームグループのボリュームグループ番号は 0 ∼ 9 までの一意の番号になります。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 maxvgs を変更した場合、変更内容は、システムの次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 ボリュームグループ番号が maxvgs の値よりも大きくなる場合は、ボリュームグループを作成することもアク ティブ化することもできません。このような場合は、 maxvgs の値を超えないようなボリュームグループ番号 を使用するか、選択したボリュームグループ番号に合わせて maxvgs の値を大きくします。 この調整パラメータの値を大きくした場合の影響 カーネルリソースの使用量が増加します。 maxvgs の値を1つ大きくするごとに、使用されるロック可能物理 メモリーが約 4 ∼ 8KB 増加します。 この調整パラメータの値を小さくする場合 カーネルメモリーが特に小さいシステムでは、 maxvgs を 10 以下に設定することでメモリーを他の用途のため に解放することができます。 maxvgs を小さくする場合は、システム上で作成またはアクティブ化するボ リュームグループの数が変更後の値より小さくなるように注意する必要があります。 Section 5-242 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 maxvgs(5) maxvgs(5) この調整パラメータの値を小さくした場合の影響 maxvgs の値が小さすぎると、一部のボリュームグループの作成またはアクティブ化ができなくなる恐れがあ ります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 maxvgs は、HP で開発されました。 参照 lvm(7) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-243 max_acct_file_size(5) max_acct_file_size(5) 名称 max_acct_file_size − アカウンティングファイルの最大サイズの定義 値 フェールセーフ 2,560,000 バイト デフォルト 2,560,000 バイト 可能な値 2,560,000 ∼ 2,147,483,647 バイト 推奨値 2,560,000 バイト 説明 max_acct_file_size は、アカウンティングファイルの最大サイズを制限する動的な調整パラメータです。 acct(2) および acct(4) を参照してください。 max_acct_file_size をアカウンティングレコードサイズの倍数ではない値 に設定すると、この調整パラメータは、上限に達する場合を除き、自動的にレコードサイズの倍数のうち最も 近い値に切り上げられます。上限に達する場合は、自動的にレコードサイズの倍数のうち最も近い値に切り下 げられます。どちらの場合も、メッセージは表示されません。 この規則の唯一の例外は、 max_acct_file_size をデフォルト値に戻した場合です。2,560,000 という値がアカウ ンティングレコードサイズの倍数ではない場合でも、切り上げせずに受け入れられます。これは、HP-UX の以 前のリリースとのバイナリ互換性を保持するための動作です。 この調整パラメータの変更を行う対象ユーザー システム管理者 (アカウンティングファイルをデフォルトより大きくしたい場合)。 変更に関する制限事項 ありません。 この調整パラメータの値を大きくする場合 アカウンティングファイルをデフォルトより大きくする必要がある場合。 この値を大きくした場合の影響 アカウンティングファイルのサイズが 2.5 MB を超えないことを前提としているアカウンティングツールで は、それより大きいファイルを処理できない場合があります。 この調整パラメータの値を小さくする場合 デフォルト値は最小値でもあります。 max_acct_file_size の値を増やしてある場合には、大きなアカウンティン グファイルが必要なければ再び値を小さくすることができます。 Section 5-244 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 max_acct_file_size(5) max_acct_file_size(5) この値を小さくした場合の影響 ありません。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 max_acct_file_size は、HP で開発されました。 参照 acct(2)、acct(4)、acctsuspend(5)、acctresume(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-245 max_async_ports(5) max_async_ports(5) 名称 max_async_ports − 同時に開くことができる非同期ディスクポートの最大数 値 フェールセーフ 1 デフォルト 50 可能な値 1 ∼ 4294967295 (2ˆ64 - 1) (使用可能な物理メモリーサイズに依存) 推奨値 この調整パラメータには推奨値はありません。ドライバに同時にアクセスするプロセス数を、値の設定のガイ ドラインとすることできます。 説明 非同期ディスクドライバは、raw ディスクに対して高性能な I/O を実行するインタフェースを提供します。 raw ディスクに対して読み取りや書き込みを直接行う代わりに、プロセスは非同期ドライバに対して要求を書 き込み、非同期ドライバがディスクドライバに対して適切な呼び出しを行います。 非同期ディスクドライバを開いたすべてのプロセスに、ポートが割り当てられます。ドライバはこのポートを 使用して、そのプロセスの I/O とその他の内部リソースのトラッキングを行います。非同期ディスクドライバ のオープン数は、使用可能なポート数に依存しています。 この調整パラメータの値は nproc より大きな値に設定しないでください。 nproc より大きな値は使用できませ ん。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 このドライバを開くプロセスの数を、このパラメータの現在値より大きくする必要がある場合。 この値を大きくした場合の影響 ポートのためのリソースはカーネルメモリーから割り当てられます。大きな値を設定すると、ドライバが使用 するカーネルメモリーが増えることになります。カーネルメモリーを必要とする他のカーネルコンポーネント に悪影響を与える可能性があります。 この調整パラメータの値を小さくする場合 システムの物理メモリーが少ない場合や、そのドライバへのアクセスに必要なオープン数がそれほど多くない 場合。 Section 5-246 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 max_async_ports(5) max_async_ports(5) この値を小さくした場合の影響 同時オープン数はこの調整パラメータによって制限されるので、ドライバにアクセスするプロセスを多数必要 とするアプリケーションのパフォーマンスに影響する可能性があります。 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 max_async_ports は、HP で開発されました。 参照 nproc(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-247 max_mem_window(5) max_mem_window(5) 名称 max_mem_window − ユーザーが構成可能なグループ専用 32 ビット共有メモリーウィンドウの最大数 値 デフォルト 0 可能な値 最小値: 0 個の共有メモリーウィンドウ 最大値: 8192 個の共有メモリーウィンドウ 説明 PA-RISC 32 ビットアーキテクチャのプロセスは、I/O マッピング、共有ライブラリ、共有マップファイルなど に、通常はグローバルな第3象限と第4象限を共有します。ただし、第3象限を、プロセスの選択グループで のみ共有するというさらに限定した方法で使用したい場合も考えられます。メモリーウィンドウにより、この 機能が可能になります。 この調整パラメータを 0に設定すると、32 ビットプログラムは、共有メモリーのために常にグローバルな第 3象限と第4象限を使用します。この調整パラメータを 0より大きくすると、定義されたグループ内のプロセ スは、第3象限をそのグループ専用に使用し、さらに第3象限が一杯になった場合はグローバルな第4象限を 使用します。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 システムユーザーがグループ専用の第3象限領域をさらに必要とする場合にのみ、この調整パラメータの値を 増やします。多くの領域が必要ではない場合は、この値を増やしても事実上効果はありません。 この値を大きくした場合の影響 カーネルのメモリー使用量が若干増えます。 この調整パラメータの値を小さくする場合 プロセスグループが使用されていない場合、または調整パラメータによって設定されている範囲内で使用され ていない場合は、この値を実際に必要な値より大きくしても事実上効果はありません。 この値を小さくした場合の影響 カーネルのメモリー使用量が若干減ります。この値が 0に設定されている場合は、第3象限領域をグループ専 用に使用することはできません。 Section 5-248 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 max_mem_window(5) max_mem_window(5) 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 max_mem_window は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-249 max_thread_proc(5) max_thread_proc(5) 名称 max_thread_proc − 1つのプロセスで可能な並行スレッドの最大数の定義 値 フェールセーフ 256 デフォルト 256 可能な値 64 ∼ nkthread 推奨値 256 説明 max_thread_proc は、システム上の1つのプロセスで可能なスレッドの最大数を制限する、動的な調整パラ メータです。 max_thread_proc を調整すると、1つのプロセスで可能なスレッドの最大数が max_thread_proc の新しい値になります。プロセスのスレッドの合計数が max_thread_proc を超えると、どのプロセスも新しい スレッドを作成できなくなります。 この調整パラメータの変更を行う対象ユーザー 1プロセスあたりのスレッドを多数必要とするアプリケーションをシステム上で実行するシステム管理者。 変更に関する制限事項 max_thread_proc を調整した場合の既存のプロセスに対する影響はさまざまです。ただし、既存のスレッドは 影響を受けません。 この調整パラメータの値を大きくする場合 max_thread_proc の値を増やす必要があるのは、 max_thread_proc に現在設定されている値より多くのスレッ ドを1つのプロセスで必要とするアプリケーションを実行する場合です。また、スレッドの作成が失敗し、 errno の値が EAGAIN である場合は、 max_thread_proc に達したことを示している可能性があります。ただ し、スレッドの作成が EAGAIN で失敗する原因は max_thread_proc に達したこと以外にも考えられます。 EAGAIN は、システムの調整パラメータ nkthread に達したか、システム上のメモリーを使い尽くされた場合 にも返されます。 この値を大きくした場合の影響 1 つのプロセスグループが、システム全体でのスレッドをすべて使用してしまう可能性があります。 この調整パラメータの値を小さくする場合 1つのプロセスで可能なスレッド数を制限する必要があると考えられる場合。 この値を小さくした場合の影響 多数のスレッドを必要とする一部のアプリケーションでは、異常な動作をしたり、動作が失敗する可能性があ ります。 Section 5-250 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 max_thread_proc(5) max_thread_proc(5) 同時に変更する必要がある他の調整パラメータ 場合によっては nkthread の値を調べてください。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 max_thread_proc は、HP で開発されました。 参照 nkthread(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-251 mesg(5) mesg(5) 名称 mesg − System V IPC メッセージのブート時における有効化/無効化 説明 mesg 調整パラメータは、廃止されました。 System V IPC メッセージサブシステムは常に有効です。 概要 System V メッセージは、共同プロセス間でメッセージ待ち行列を介して交わされるバイトのシーケンスです。 メッセージの長さは任意です。(最大値は調整パラメータで設定) 64バイト(調整不可)を越えるメッセージは、 予約済みカーネルメモリー (メッセージセグメントマップで管理) の1つまたは複数の連続した「セグメント」 に保存されます。 64バイト以下のメッセージは、メッセージヘッダと一緒に確保されるため、「セグメント」 を使用しません。各メッセージは、アプリケーションに固有の番号を使用して「分類」されます。各メッセー ジ待ち行列は固有の ID に基づいて参照され、複数の個別のメッセージを含むことができます。 メッセージを受信するプロセスは、「最初の」メッセージを受信する (FIFO)、指定したタイプの最初のメッ セージを受信する、タイプグループ (複数のタイプをまとめて指定) の最初のメッセージを受信する、特定のタ イプが現れるまで待機する、のいずれかが可能です。 著者 mesg は、AT&T で開発されました。 参照 ipcrm(1), ipcs(1), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), msgmap(5), msgmax(5), msgmnb(5), msgmni(5), msgseg(5), msgssz(5), msgtql(5) Section 5-252 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 mknod(5) mknod(5) 名称 mknod.h − デバイス番号を操作するマクロのヘッダファイル 構文 #include <sys/mknod.h> 説明 ヘッダファイル <sys/mknod.h> は、デバイス識別番号を生成したり解釈するためのマクロを定義します。この 番号は mknod() システムコールで使われます (mknod(2)参照)。 これらのマクロの使用方法はアーキテクチャに依存します。メジャーデバイス番号、マイナーデバイス番号の 情報に関しては、使用中のシステムの『システム管理作業マニュアル』を参照してください。 mknod.h ファイルには、 dev_t makedev(int major, int minor) マクロが含まれています。これは、メジャー要素とマイナー要素を詰め合わせてデバイス識別番号を作るため のものです。この番号は、 mknod() の dev 引き数に適合します。また、次の2つのマクロも含まれています。 int major(dev_t dev) int minor(dev_t dev) これらは、デバイス識別番号 dev から、それぞれ、メジャー番号成分とマイナー番号成分を取り出します。 MINOR_FORMAT マクロは、特定のインプリメンテーションに最適な形式でマイナー番号を表示するための printf() 指定です (printf (3S))。これは、デバイスファイルのマイナー番号を表示する長い形式の ls コマンド (ls(1)) で用いられます。 番号の基数は、Cプログラミング言語と同じ様式で示されます。 10進数では0を前に付けません。8進数では前 に0をつけます。 16 進数では前に 0x を付けます。 参照 ls(1), mknod(1M), mknod(2), printf(3S) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-253 mm(5) mm(5) 名称 mm − ドキュメントの整形に用いるMMマクロパッケージ 構文 mm [ options ] [ files ] nroff −mm [ options ] [ files ] 説明 このパッケージには、非常に広範囲のドキュメントの整形のための機能を実現するマクロが含まれています。 ドキュメントが最終的にターミナル上で整形表示されるか、写植されるかに本質的に関係ない方法で、そのド キュメントを打ち込み、編集することができます。詳細については、下記のリファレンスを参照してくださ い。 −mm オプションを nroff (1) や troff で用いれば、コンパクトでないバージョンのマクロパッケージが使用 されます。 ファイル /usr/share/lib/macros/mmn コンパクトでないバージョンのパッケージ /usr/share/lib/tmac/tmac.m コンパクトでないバージョンのパッケージへのポインタ 参照 mm(1)、 nroff(1) Section 5-254 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 mman(5) mman(5) 名称 mman − メモリマッピングに関する定義 構文 #include <sys/mman.h> 説明 The <sys/mman.h> ヘッダには、 madvise() 関数で用いられる以降の記号定数が定義されています。 MADV_NORMAL 特殊な取扱いをやめます。 MADV_RANDOM ランダムなページ参照を仮定します。 MADV_SEQUENTIAL 逐次的なページ参照を仮定します。 MADV_WILLNEED これらのページが必要です。 MADV_DONTNEED これらのページは必要ではありません。 MADV_SPACEAVAIL リソースが予約されていることを確かめます。 以降の記号定数は mmap() 関数および mprotect() 関数で用いられます。 PROT_READ 領域に対して読取りが行われます。 PROT_WRITE 領域に対して書込みが行われます。 PROT_EXEC 領域が実行されます。 PROT_NONE 領域はアクセスされません。 以降の記号定数 mmap() 関数で用いられます。 MAP_FILE ファイルをマッピングします。 MAP_ANONYMOUS 名前のないメモリ領域をマッピングします。 MAP_VARIABLE 領域を、インプリメンテーションが計算するアドレスに配置します。 MAP_FIXED 領域を、指定されたアドレスに配置します。 MAP_SHARED マッピングされた領域に対して行われた変更を共有します。 MAP_PRIVATE マッピングされた領域への変更を、1つのプロセスだけのものにします。 以降の記号定数は msync() 関数で用いられます。 MS_SYNC 同期の書込みを行います。 MS_ASYNC 非同期の書込みを行います。 MS_INVALIDATE キャッシュされたページを無効化します。 以降の記号定数は msem_init(), msem_lock(), および msem_unlock() 関数で用いられます。 MSEM_LOCKED ロックされた状態のセマフォを生成します。 MSEM_UNLOCKED アンロックされた状態のセマフォを生成します。 MSEM_IF_NOWAIT セマフォがロックされていても待ちません。 MSEM_IF_WAITERS セマフォを待つものがなければ、アンロックしません。 msem_init(), msem_lock(), msem_unlock(), および msem_remove() 関数で用いるための typedef struct HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-255 mman(5) mman(5) msemaphore が定義されています。 参照 mmap(2), munmap(2), mprotect(2), msync(2), madvise(2), msem_init(2), msem_remove(2), msem_lock(2), msem_unlock(2) Section 5-256 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgmap(5) msgmap(5) 名称 msgmap − System V IPC メッセージ空間リソースマップ内のエントリの数 値 フェールセーフ (2+msgtql) デフォルト (2+msgtql) 可能な値 最小値: 3 最大値: msgtql+2 または msgseg+2 の小さい方の値 推奨値 msgtql+2 説明 msgmap 調整パラメータは、共有 IPC メッセージ空間内の空きスペースを追跡するメッセージ空間リソース マップのサイズ (格納されるエントリの数) を指定します。各リソースマップエントリはオフセットとスペース のペアになっており、連続した未使用のメッセージ空間「セグメント」のオフセットとサイズ (バイト単位) を 指します。 メッセージセグメントが解放されたとき (たとえば msgrcv() が実行された場合など) にマップが一杯であれ ば、 DANGER: mfree map overflow. という警告メッセージが表示され、それらのセグメントは使用できない状態になります。 存在可能なメッセージの数は、 msgtql 調整パラメータによって決定されます。最も多い場合は、未使用のセグ メント範囲 (連続するセグメント) は、存在するすべてのメッセージの間に1つずつ存在することになります。 つまり、未使用のセグメント範囲は msgtql+1 個になります。アカウンティング情報用にもう1つマップエン トリが必要なため、 msgmap 調整パラメータの推奨値は msgtql+2 になります。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 空きスペースマップが一杯で、警告メッセージ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-257 msgmap(5) msgmap(5) DANGER: mfree map overflow. が表示された場合は、このパラメータの値を大きくします。 msgmap の値を大きくすることで、この問題を解 決できます。 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgtql 調整パラメータを変更した場合に は、 msgmap 調整パラメータも必ず変更しなければなりません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 msgmap は、AT&T で開発されました。 参照 msgrcv(2)、 mesg(5)、 msgmax(5)、 msgmnb(5)、 msgmni(5)、 msgseg(5)、 msgssz(5)、 msgtql(5) Section 5-258 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgmax(5) msgmax(5) 名称 msgmax − System V IPC メッセージの最大サイズ (バイト単位) 値 デフォルト 8192 フェールセーフ 8192 可能な値 最小値: 0 最大値: (64*1024*1024)、 (msgssz*msgseg)、 msgmnb のうち最小の値 説明 msgmax 調整パラメータは、System V メッセージ待ち行列に入る個々のメッセージの最大許容サイズをバイト 単位で指定します。 msgmax は、 msgmnb (待ち行列のサイズ) を超えたり、事前に割り当てられているシステ ム全体のメッセージ記憶スペース (msgssz*msgseg) を超える値に設定することはできません。 この調整パラメータの値を決定する方針としては、 msgmnb (待ち行列ごとに1個のメッセージ) と同じ値にす るか、 msgmnb よりも小さいメッセージの中で最もサイズが大きくなると予想されるものと同じ値にします。 msgsnd() システムコールで msgmax のバイトよりも大きいメッセージを送信しようとすると、 [EINVAL] が返 されます。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 変更内容は、変更後の msgsnd() 処理で有効になります。 この調整パラメータの値を大きくする場合 アプリケーションでより大きいメッセージを送信する必要がある場合に、この調整パラメータの値を大きくし ます。 この調整パラメータの値を小さくする場合 アプリケーションで使用するメッセージのサイズが現在の値より小さい場合に、この調整パラメータの値を小 さくします。 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgmax 調整パラメータを変更した場合に HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-259 msgmax(5) msgmax(5) は、 msgmnb、 msgssz、および msgseg 調整パラメータも必ず変更しなければなりません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 msgmax は、AT&T で開発されました。 参照 msgsnd(2)、 mesg(5)、 msgmap(5)、 msgmnb(5)、 msgmni(5)、 msgseg(5)、 msgssz(5)、 msgtql(5) Section 5-260 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgmnb(5) msgmnb(5) 名称 msgmnb − 1つの System V IPC メッセージ待ち行列内に格納できる最大バイト数 値 デフォルト 16384 フェールセーフ 16384 可能な値 最小値: 0 最大値: 64*1024*1024 または (msgssz*msgseg) の小さい方の値 説明 msgmnb 調整パラメータは、1つの System V IPC メッセージ待ち行列に同時に格納できる全メッセージの合計 サイズの最大値をバイト単位で指定します。 msgsnd() システムコールは、 msgmnb で設定されている上限を超える場合には、 msgrcv() の呼び出し元に よって待ち行列内のバイト数が減少され、新しいメッセージと待ち行列内に残っているメッセージが msgmnb の制限内に収まるサイズになるまでブロックします (IPC_NOWAITが指定されている場合は [EAGAIN] を返し ます)。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 変更内容は、変更後の msgsnd() の処理で有効になります。 この調整パラメータの値を大きくする場合 アプリケーションで1つの待ち行列内により多くのデータを格納する必要がある場合に、この調整パラメータ の値を大きくします。 この調整パラメータの値を小さくする場合 アプリケーションが1つの待ち行列内に多くのデータを格納する必要がない場合に、この調整パラメータの値 を小さくします。 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgmnb 調整パラメータを変更した場合に は、 msgseg および msgtql 調整パラメータも必ず変更しなければなりません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-261 msgmnb(5) msgmnb(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 msgmnb は、AT&T で開発されました。 参照 msgrcv(2)、 msgsnd(2)、 mesg(5)、 msgmap(5)、 msgmax(5)、 msgmni(5)、 msgseg(5)、 msgssz(5)、 msgtql(5) Section 5-262 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgmni(5) msgmni(5) 名称 msgmni − System V IPC メッセージ待ち行列 (ID) のシステム全体での最大数 値 デフォルト 512 フェールセーフ 512 可能な値 最小値: 1 最大値: 32767 説明 msgmni 調整パラメータは、 System V IPC メッセージ待ち行列の識別子 (待ち行列につき1つ) の、システム全 体での最大数を指定します。作成されるすべてのメッセージ待ち行列には1つの識別子 (ID) があり、その識別 子の上限が msgmni です。 アプリケーションは、 msgget() システムコールを使用して待ち行列を新たに作成します。すでに ID がすべて 使用されている場合は、 msgget() は [ENOSPC] を返します。 あるプロセスがメッセージ待ち行列を取得し、待ち行列を削除せずに終了した場合、待ち行列とすべてのメッ セージはそのまま残ります。残されたメッセージ待ち行列は、 ipcrm コマンドを使用して削除することができ ます。メッセージ待ち行列の状態を監視するには ipcs コマンドを使用します。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整の値を大きくする場合 アプリケーションでより多くの待ち行列が必要とされる場合に、この調整パラメータの値を大きくします。 この調整パラメータの値を小さくする場合 待ち行列の用件が少なくなった場合に、この調整パラメータの値を小さくします。 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgmni 調整パラメータを変更した場合 は、 msgseg および msgtql 調整パラメータも調整する必要があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-263 msgmni(5) msgmni(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 msgmni は、AT&T で開発されました。 参照 ipcrm(1)、 ipcs(1)、 msgget(2)、 mesg(5)、 msgmap(5)、 msgmax(5)、 msgmnb(5)、 msgseg(5)、 msgssz(5)、 msgtql(5) Section 5-264 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgseg(5) msgseg(5) 名称 msgseg − システム内の Sytem V IPC メッセージセグメントの数 値 デフォルト 8192 フェールセーフ 8192 可能な値 最小値: 1 最大値: 32767 または ((2ˆ32-1)/msgssz) の小さい方の値 msgseg*msgssz の値は、 32ビットの整数値 4,294,967,295 (2ˆ32)-1 を超えてはなりません。 説明 msgseg は、すべての IPC メッセージ待ち行列で共有されるシステム全体の共有メモリーメッセージ記憶ス ペースの「セグメント」の合計数を指定します。 システム内のメッセージに使用できるスペースの合計は、セグメント数にセグメントサイズを掛けた msgseg*msgssz で定義されます。 64バイトを越えるメッセージだけがセグメントに保存保存されます。 64バイト以下のメッセージは、別の領域 に確保されるため、セグメントを使用しません。 アプリケーションによってすべてのメッセージセグメントが使用されると、 msgsnd() 呼び出しはセグメントが 使用できるようになるまでブロックするか、 IPC_NOWAIT が指定されていれば [EAGAIN] を返します。 1つのセグメントより大きいメッセージは、そのメッセージを格納できるだけの、複数の連続したセグメント に割り当てられます。すべてのセグメントはテーブル (連続したメモリー) として割り当てられるため、メッ セージの追加と削除を行う過程で断片化が起こる場合があります。このため、メッセージサイズが頻繁に1つ のセグメントより大きくなる場合は、断片化を考慮して、実際に必要になる数よりも多くのセグメントをメッ セージデータに割り当てます。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 カーネルメッセージ待ち行列内に格納する必要があるメッセージの数またはサイズが大きいために、 msgsnd() でアプリケーションによるブロックが頻繁に発生する場合は、このパラメータの値を大きくします。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-265 msgseg(5) msgseg(5) この調整パラメータの値を小さくする場合 アプリケーションが多くのメッセージ空間を必要としない場合は、このパラメータの値を小さくします。 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgseg 調整パラメータを変更した場合は、 変更内容に合わせて msgssz および msgtql 調整パラメータも調整する必要があります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 メッセージセグメントのテーブルは、ブート時にカーネルメモリーに割り当てられます。このメモリーは、使 用するか否かに関係なく予約されます。 メモリーの必要量は、 msgssz と msgseg 調整パラメータを掛けて求められます。これらの調整パラメータの値 には、一方の値に他方の値を掛けただけの影響力があり、メモリーの使用率に大きく影響するため、設定時に は注意が必要です。 64バイトのしきい値は、HP-UX の今後のリリースにおいて変更される可能性がありま す。 著者 msgmni は、AT&T で開発されました。 参照 msgsnd(2)、 mesg(5)、 msgmap(5)、 msgmax(5)、 msgmnb(5)、 msgmni(5)、 msgssz(5)、 msgtql(5) Section 5-266 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgssz(5) msgssz(5) 名称 msgssz − System V IPC メッセージセグメントのバイト数 値 デフォルト 96 フェールセーフ 96 可能な値 最小値: 65 最大値: (2ˆ32-1)/"msgseg" msgseg*msgssz の値は、32ビットの整数値 4,294,967,295 (2ˆ32)-1 以下でなければなりません。 説明 msgssz 調整パラメータは、IPC メッセージを格納するために予約されるメモリー空間の「セグメント」のサイ ズをバイト単位で指定します。メッセージで使用するスペースは、そのメッセージを格納するために必要なだ け、セグメントサイズの倍数で取得されます。別々のメッセージがセグメントを共有することはありません。 64バイト以下のメッセージは、別の領域に確保されるため、セグメントを使用しません。 システム内で、64バイトを越えるメッセージに使用できるスペースの合計は、セグメント数にセグメントサイ ズを掛けた msgseg*msgssz で定義されます。 セグメントサイズには、アプリケーションによって送信されるメッセージのうち最も大きいものと同じサイズ を選択することをお勧めします。こうすることで、セグメントのメモリー使用率を最適化できます。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 カーネルメッセージ待ち行列に格納する必要があるメッセージの数またはサイズが大きいために、 msgsnd() で アプリケーションによるブロックが頻繁に発生する場合は、このパラメータの値を大きくします。 この調整パラメータの値を小さくする場合 アプリケーションが多くのメッセージ空間を必要としなくなった場合に、このパラメータの値を小さくしま す。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-267 msgssz(5) msgssz(5) 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgssz 調整パラメータを変更した場合は、 変更内容に合わせて msgseg および msgtql 調整パラメータも調整する必要があります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 メッセージセグメントのテーブルは、ブート時にカーネルメモリーに割り当てられます。このメモリーは、使 用するか否かに関係なく予約されます。 メモリーの必要量は、 msgssz と msgseg 調整パラメータを掛けて求められます。これらの調整パラメータの値 には、一方の値に他方の値を掛けただけの影響力があり、メモリーの使用率に大きく影響するため、設定時に は注意が必要です。 64バイトのしきい値は、HP-UX の今後のリリースにおいて変更される可能性がありま す。 著者 msgssz は、AT&T で開発されました。 参照 msgsnd(2)、 mesg(5)、 msgmap(5)、 msgmax(5)、 msgmnb(5)、 msgmni(5)、 msgseg(5)、 msgtql(5) Section 5-268 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 msgtql(5) msgtql(5) 名称 msgtql − システム上に同時に存在可能な System V IPC メッセージの最大数 値 デフォルト 1024 フェールセーフ 1024 可能な値 最小値: 1 最大値: msgseg 推奨値 予想されるメッセージの最大数 説明 msgtql 調整パラメータは、すべてのメッセージ待ち行列に格納できる個々のメッセージの、システム全体での 最大総数を指定します。各メッセージにはメッセージのタイプと場所を指定するためのヘッダーがあり、ヘッ ダーの総数は msgtql によって制限されます。 msgsnd() システムコールは、 msgtql で設定されている上限を超える場合には、メッセージ空間が使用できる ようになるまでブロックするか、 IPC_NOWAIT が設定されていれば [EAGAIN] を返します。 サポートされるメッセージの最大数は、他の調整カーネルパラメータ、 msgmnb (キューの最大バイト数) や msgseg (メッセージセグメントの最大数) によって制限されることがあります。 System V メッセージ待ち行列についての詳細は、 mesg(5) マンページの 概要の項を参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整パラメータの変更は、次回リブート時に有効になります。 この調整パラメータの値を大きくする場合 カーネルメッセージ待ち行列に格納する必要があるメッセージの数が多いために、 msgsnd() でアプリケーショ ンによるブロックが頻繁に発生する場合は、この調整パラメータの値を大きくします。 この調整パラメータの値を小さくする場合 アプリケーションが必要とするメッセージの合計数が減少した場合に、この調整パラメータの値を小さくしま す。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-269 msgtql(5) msgtql(5) 同時に変更する必要がある他の調整パラメータ System V IPC メッセージ待ち行列の調整パラメータはすべて相互に関連しているため、個別の変数として扱う ことは できません。これらのパラメータのセットを1つのシステムとして評価し、アプリケーションの要件が 確実に反映されるようにします。メッセージの調整パラメータには、 msgmap、 msgmax、 msgmnb、 msgmni、 msgseg、 msgssz、および msgtql が含まれます。特に、 msgseg または msgssz 調整パラメータは、 msgtql 調整パラメータとともに調整する必要があります。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 msgtql は、AT&T で開発されました。 参照 msgsnd(2)、 mesg(5)、 msgmap(5)、 msgmax(5)、 msgmnb(5)、 msgmni(5)、 msgseg(5)、 msgssz(5) Section 5-270 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ncdnode(5) ncdnode(5) 名称 ncdnode − オープンされた CDFS ファイルの最大数 (システムワイド) 値 フェールセーフ 150 デフォルト 150 許容値 最小値は 25 、最大値はメモリーに依存します。 正の整数値を指定します。 説明 ncdnode は、CD-ROM ファイルシステム (CDFS) における iノードテーブルのスロット数を定義します。すな わち、CDFS ファイルシステムのためにメモリー内に同時に格納できるオープンノード数を制限します。この パラメータの機能は ninode とよく似ていますが、 ncdnode は CD-ROM ファイルシステムにのみ適用されま す。 この調整パラメータの変更を行う対象ユーザー CD-ROM ファイルシステムにアクセスする必要があるアプリケーションを実行しているシステムでは、このパ ラメータを調整する必要が生じる可能性があります。 変更に関する制限事項 CD-ROM ファイルシステムにファイルシステムタイプの特別なサポートを提供する cdfs は、動的にロード可 能なカーネルモジュールです。調整パラメータ ncdnode の変更は、アンロードとリロードか、リブートを行わ なければ有効になりません。 (kcmodule(1M) を参照) この調整パラメータの値を大きくする場合 多数の CDFS ファイルを同時にオープンする必要のあるアプリケーションを実行する場合。 この調整パラメータの値を大きくした場合の影響 CDFS のノードに使用されるメモリー消費量が増加します。 cdfs カーネルモジュールのロードや、システムリ ブートに依存する ncdnode を基にして、CDFS のための静的な iノードテーブルがより多く作成されます。 この調整パラメータの値を小さくする場合 CDFS のオープンファイル数を制限して、メモリー消費量を抑制したい場合。 この調整パラメータの値を小さくした場合の影響 cdfs カーネルモジュールのロードやシステムリブートに依存する CDFS iノードに用いられるシステムメモリー が減少します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-271 ncdnode(5) ncdnode(5) 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 ncdnode は、HP で開発されました。 参照 kctune(1M)、kcmodule(1M)、sam(1M)、gettune(2)、settune(2)、ninode(5) Section 5-272 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nclist(5) nclist(5) 名称 nclist − pty および tty データ転送に使用する cblock の数 値 デフォルト 8292 許容値 最小値は 132。最大値は使用可能メモリーに依存します。 説明 nclist は、システム内で割り当てられる cblock の数を指定します。データトラフィックは、tty デバイスおよび pty デバイスを通過するときに、 cblock に保存されます。 nclist のデフォルト値である 8292 は、コンソールなどへのトラフィックを処理するときにシステムで100 cblock を使用し、これに加えて、 512 ユーザーが、ユーザーセッションごとに平均 16 cblock を使用すること に基づいた式です。 cblocks は、SLIP 接続、UUCP 転送、端末エミュレータなどのような、ログインセッショ ン以外のシリアル接続でも使用されます。このような他種接続をシステムで使用する場合は、それに応じて nclist を増やす必要があります。 cblock プールが空になると、 cblock が必要なときに使用できないために、tty デバイスまたは pty デバイスを 通過しているデータが失われる可能性があります。これが発生した場合は、 WARNING: cblock exhaustion has occurred n times (see termio(7)). メッセージがシステムメッセージバッファーに表示されます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 カーネルがエラーメッセージ WARNING: cblock exhaustion has occurred n times (see termio(7)). を送信したと きには、システムが cblock を使い切っています。この場合は、 nclist を増やす必要があります。 nclist の最小値は 132 です。上限はありませんが、各 cblock は、32 バイトの常駐 (スワップ不可) マシンメモ リーを使用します。このことを念頭において値を選択する必要があります。 この調整可能パラメータの値を大きくした場合の影響 常駐 (スワップ不可) マシンメモリーの使用量が増えます。 この調整変数の値をいつ減らすべきか? 最小システムを作成するときは、この値を減らします。 この調整可能パラメータの値を小さくした場合の影響 システムが cblock を使い切る可能性があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-273 nclist(5) nclist(5) 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nclist は、HP で開発されました。 参照 termio(7) Section 5-274 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ncsize(5) ncsize(5) 名称 ncsize − ディレクトリ名検索キャッシュ (DNLC) のエントリ数 値 フェールセーフ 5596 デフォルト 8976 可能な値 最小値は 128、最大値はシステムメモリーの限界値です。この値は、DNLC ロック数の8倍以上でなければな りません。 (ncsize >= 8 * dnlc_hash_lock) 正の整数値を指定します。 説明 カーネル内でディレクトリを高速に検索するために、 ディレクトリ名検索キャッシュ (DNLC) と呼ばれるメモ リー常駐のキャッシュが使用されます。カーネル内でファイル名を探索する際に、後でそのディレクトリや ファイル名を参照できるように DNLC に保持されます。調整パラメータ ncsize は、システムのブート時に静的 に確保される DNLC エントリの数を決定します。したがって、 ncsize の値を大きくすると、ファイル名検索用 にメモリーにキャッシュされるディレクトリやファイルのエントリ数が増加します。 この調整パラメータの変更を行う対象ユーザー HP-UX システムの管理者。 変更に関する制限事項 この調整パラメータは静的で、変更はシステムのリブート後にのみ有効になります。 この調整パラメータの値を大きくする場合 この値を大きくすると、多数のファイル名アクセスを行うアプリケーションで、ファイル名検索の性能を向上 させることができます。 この値を大きくした場合の影響 DNLC エントリの領域として、システムメモリーの使用量が増えます。 この調整パラメータの値を小さくする場合 この値を小さくすると、DNLS のエントリ数を制限し、メモリーの使用量を減らすことができます。 この値を小さくした場合の影響 システムのリブート時に、DNLC 用に使用されるシステムメモリーが減少します。ファイル名検索を行う処理 (open(2) など) の性能が低下することがあります。 同時に変更する必要がある他の調整パラメータ? ncsize の値は、 dnlc_hash_locks の値の8倍以上でなければなりません。 (ncsize >= 8 * dnlc_hash_lock) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-275 ncsize(5) ncsize(5) 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 ncsize は、HP で開発されました。 参照 kctune(1M), sam(1M), gettune(2), settune(2), dnlc_hash_locks(5) Section 5-276 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ndir(5) ndir(5) 名称 ndir.h − HP-UXディレクトリストリームの形式 構文 #include <ndir.h> 説明 このヘッダファイルには、 directory(3C) で説明しているディレクトリ ストリームルーチンで使用されるデータ 型が定義されています。この定義によって、以前の HP-UX プログラムを、変更なしにコンパイルすることがで きます。このファイルは、HP-UX 10.30から廃止され、将来のバージョンでは削除される予定です。 System V リリース 3, 『X/Open Portability Guide』、および IEEE P1003.1 POSIX 標準との互換性を持たせるため、新しいす べてのプログラムでは、 dirent(5) で説明しているヘッダファイル <dirent.h> を用いるようにしてください。 以降のデータ型が定義されています。 DIR 開いているディレクトリストリームに関する情報の入った構造体 struct direct 以前の HP-UX readdir 関数 ( directory(3C) を参照) が返すエントリーの形式を定義する 構造体 struct direct 構造体には、以下の要素があります。 char d_name[MAXNAMLEN+1]; /* name of directory entry */ long d_ino; short d_namlen; short d_reclen; /* file serial number */ /* length of string in d_name */ /* length of this record */ 定数 MAXNAMLEN は <ndir.h> で定義されています。 このファイルには、 directory(3C) パッケージに含まれる関数の外部宣言も入っています。以降の宣言も入って います。 extern struct direct *readdir( ); 警告 このファイルをインクルードするプログラムでは、 lint(1) で警告が出るかもしれませんが、コンパイルと実行 は正しく行われます。 著者 ndir.h はカリフォルニア大学バークレー校およびHPで開発されました。 参照 directory(3C), dirent(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-277 nfile(5) nfile(5) 名称 nfile − オープンファイルの最大数 (システムワイド) 値 フェールセーフ 16384 デフォルト デフォルト値は、起動中のシステムの物理メモリー量をもとに計算されます。1 GB 以下の少量のメモリーしか 搭載していないシステムでは、デフォルト値は 16384 (16 K) になります。 1 GB 以上のメモリーを搭載してい るシステムでは、65536 (64 K) になります。 許容値 最小値は 2048 、最大値はシステムで表現できる 32ビットの符号付き整数の最大値です。この値はプロセスご とに開くことができるファイルの物理制限の2倍より小さくならないように指定します。 (nfile >= 2*maxfiles_lim) 正の整数値を指定します。 説明 nfile は、システムのオープンファイルテーブルにあるスロットの最大数を定義します。すなわち、システムの すべてのプロセスによってオープンされるファイルの累積数を制限します。一般的なファイル (標準的なファ イル、ディレクトリ、リンク、デバイスファイルなど) 以外にも、システムのオープンファイルテーブルにあ るスロットを使用するパイプ、FIFO、ソケット、ストリームなどが対象となります。システムコール dup(2) と dup2(2) がプロセスごとのファイルテーブルにあるエントリーを使用しているとき、それらは、システムの オープンファイルテーブルにある新しいスロットを使用することはありません。 この調整パラメータの変更を行う対象ユーザー 多数のオープンファイルを必要とするアプリケーションを実行するユーザー。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。 nfile の値が動的 に調整されているときは、実行中のカーネルにある現在のオープンファイル数より低い値には設定されませ ん。 この調整パラメータの値を大きくする場合 複数のプロセスが、多数のファイルを同時にオープンすると予想される場合。必要なメモリーは最小限なの で、この数は多めに設定してください。スロット数が十分でないと、システムの処理能力が制限されます。 この調整パラメータの値を大きくした場合の影響 ファイルをオープンするときに、システムのファイルテーブルが常駐することになるので、メモリー消費量が 増加します。すなわち、 nfile の値を増やすことは、システムのファイルテーブルによるメモリー消費量の増加 につながります。 Section 5-278 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nfile(5) nfile(5) この調整パラメータの値を小さくする場合 この調整パラメータの値を小さくする必要はほとんどありません。しかし、メモリー消費量を抑制する必要が あるシステムで、オープンファイル数に制限を設けたい場合は、この値を小さくする必要が生じる可能性があ ります。 この調整パラメータの値を小さくした場合の影響 カーネルが、余っているメモリーをシステムにプールします。 同時に変更する必要がある他のパラメータ nfile の値は maxfiles_lim の2倍より小さくならないように指定しなければならず、パラメータの設定時には カーネルによってチェックされます。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 nfile は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(2)、settune(2)、maxfiles(5)、maxfiles_lim(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-279 nflocks(5) nflocks(5) 名称 nflocks − ファイルロックの最大値 値 フェールセーフ 1024 デフォルト デフォルト値は、起動中のシステムの物理メモリー量をもとに計算されます。1 GB 以下の少量のメモリーしか 搭載していないシステムでは、デフォルト値は 1200 になります。1 GB 以上のメモリーを搭載しているシステ ムでは、4096 (4 K) になります。 許容値 最小値は 50 、最大値は 0x1000000 。 正の整数値を指定します。 説明 nflocks は、システム全体で使用可能なファイルロックの最大数を指定します。 この調整パラメータの変更を行う対象ユーザー 多数のファイルロックを必要とするアプリケーションをシステムで実行するユーザー。この値を変更すると、 1つのファイルに複数のロックが含まれる可能性があること、および lockf() や fcntl() を使用するデータベー スで必要なロックの数が例外的に大きくなる可能性があることに注意してください。 変更に関する制限事項 これは動的なパラメータなので、値を変更すると実行しているシステムに即時反映されます。 nflocks の値が 動的に調整されているときは、実行中のカーネルにある現在のファイルロック数より低い値には設定されませ ん。 この調整パラメータの値を大きくする場合 多数のファイルロックが同時に使用されると予想される場合。 この調整パラメータの値を大きくした場合の影響 カーネルは nflocks の新しい値に比例したメモリーを確保し、古い値に比例したメモリーを開放します。新た にロックが作成されるたびにメモリー消費量が増加します。 この調整パラメータの値を小さくする場合 メモリーの消費を抑制する必要があるシステムで利用できるファイルロック数に制限を設けたい場合。 この調整パラメータの値を小さくした場合の影響 カーネルは nflocks の新しい値に比例したメモリーを確保し、古い値に比例したメモリーを開放します。新し い値より多くのファイルロックが使用されていた場合、その分のメモリーがシステムに開放され、他の目的で 使用できるようになります。 Section 5-280 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nflocks(5) nflocks(5) 同時に変更する必要がある他の調整パラメータ ありません。 警告 nflocks を最大値 (0x1000000) に設定すると、大量のメモリー割り当て (最大 0.5GB) がおこなわれます。十分な 空きメモリーが無い場合、あるいは、空きメモリーが少なくなってシステムのパフォーマンス低下が起こる場 合は、 nflocks の値の変更は [ENOMEM] エラーで失敗します。 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 著者 nflocks は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(2)、settune(2)、fcntl(2)、lockf(2) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-281 ninode(5) ninode(5) 名称 ninode − メモリー内で存在可能な、HFS ファイルシステムのオープン iノードの最大数 値 フェールセーフ 476 デフォルト デフォルト値は、起動中のシステムの物理メモリー量をもとに計算されます。1 GB 以下の少量のメモリーしか 搭載されていないシステムでは、デフォルト値は 4880 になります。 1 GB 以上のメモリーを搭載しているシス テムでは、8192 (8 K) になります。 許容値 最小値は 14 、最大値はメモリーに依存します。 正の整数値を指定します。 説明 ninode は、HFS における iノードテーブル内のスロット数を定義します。すなわち、これは、 HFS ファイルシ ステムのために任意の時点においてメモリー内に存在できるオープン iノードの最大数を制限します。iノード テーブルは、キャッシュメモリーとして使用されます。パフォーマンス上の理由から、最新の ninode 個のオー プン iノードはメインメモリーに格納されます。テーブルはハッシュされます。 各オープンファイルには、それに関連付けられたオープン iノードがあります。したがって、オープンファイ ルの数が多くなるほど、 ninode を多くする必要があります。 この調整パラメータの変更を行う対象ユーザー この調整パラメータの使用は、HFS ファイルシステムがマウントされたシステムにのみ該当します。 HP-UX における HFS ファイルシステムの使用は非推奨であることにご注意ください。 変更に関する制限事項 これは静的なパラメータなので、変更した値を有効にするためにはリブートを行う必要があります。 この調整パラメータの値を大きくする場合 HFS ファイルシステムで多数のオープンファイルを必要とするアプリケーションを実行する場合。 この調整パラメータの値を大きくした場合の影響 HFS における iノードテーブルは静的に確保されるので、もしこの調整パラメータの値を増やすと、メモリー 消費量は増加します。 この調整パラメータの値を小さくする場合 HFS ファイルシステムがほとんどマウントされていないシステムで、メモリーの消費を抑制したい場合。 この調整パラメータの値を小さくした場合の影響 メモリー内に存在する HFS のオープン iノードの数が新しい下限値に制限されます。 Section 5-282 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ninode(5) ninode(5) 同時に変更する必要がある他の調整パラメータ ありません。 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、 HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 この調整パラメータの使用は、HFS ファイルシステムがマウントされたシステムにのみ該当します。 HP-UX における HFS ファイルシステムの使用は非推奨であることにご注意ください。HFS の調整パラメータは HPUX の今後のリリースでは削除される可能性があります。 著者 ninode は、HP で開発されました。 参照 kctune(1M)、sam(1M)、gettune(2)、settune(2) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-283 nkthread(5) nkthread(5) 名称 nkthread − 同時に実行できるスレッドの数の制限 値 フェールセーフ 8416 デフォルト ((nproc*2)+16) または 8416 許容値 200 - 250,000 nkthread は nproc + 100 より大きくなければなりません。 nkthread は、 max_thread_proc より大きくなければなりません。 この値は許容値より高く設定できますが、このような値が必要となることはないでしょう。 推奨値 非常に多くのスレッドを持つアプリケーションがシステム上にない限り、 nproc が正しく調整されていれば、 デフォルトの式で十分です。 説明 nkthread 調整可能パラメータは、任意の時点において、システム上に存在できるスレッドの絶対数を制御しま す。この値を増やすと、存在できるスレッドが増え、減らすと、スレッドの数が制限されます。 kthread: table is full メッセージがメッセージバッファーに表示された場合は、 nkthread が低すぎることがわ かります。このメッセージは、 dmesg または syslog から読み取ることができます。このメッセージは、アプリ ケーションがスレッドを作成できなかったことを示します。 nkthread の設定値が低すぎると、新しいスレッ ドを作成したり、新しいプロセスを fork できないことが原因で、アプリケーション エラーが発生する可能性 があります。 上記メッセージが表示される前に、 pstat_dynamic を呼び出して psd_numkthreadsallocd を検査することに よって、同時に使用されていたスレッドの数がわかります。このフィールドは、同時に使用されていたスレッ ドの数の「ハイウォーターマーク」を示しています。 この調整可能パラメータの変更を行う対象ユーザー 多数のスレッドを実行することが予想されるユーザー。 変更に関する制限事項 ありません。この調整可能パラメータは動的です。 この調整可能パラメータの値を大きくする場合 多数のスレッドやプロセスを実行しているシステムのほとんどでは、この値を直接、または nproc の調整を介 して、増やす必要があります。 Section 5-284 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nkthread(5) nkthread(5) この値を大きくした場合の影響 ありません。 この調整可能パラメータの値を小さくする場合 システム上のスレッドの数を制限する場合、またはメモリーが圧迫されていて、かつ nkthread の値が予想を はるかに超える大きさである場合に限り、この値を減らす必要があります。 この値を小さくした場合の影響 新しいスレッドを作成したり、新しいプロセスを fork できないことが原因で、アプリケーション エラーが発 生するリスクが増えます。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nkthread は、HP で開発されました。 参照 max_thread_proc(5)、 nproc(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-285 nproc(5) nproc(5) 名称 nproc − 同時に存在できるプロセスの数の制限 値 フェールセーフ 4200 デフォルト 4200 許容値 100 - 30000 この値は許容値より高く設定できますが、このような値が必要となることはないでしょう。 nproc を 110 未満 に設定すると、システムのマルチユーザーモードでの実行に支障があります。構成によっては、最小値を高く することができます。 nproc は、 nkthread + 100 より大きくなければなりません。 nproc は、 maxuprc + 5 より大きくなければなりません。 推奨値 プロセッサあたり 1000 プロセス。 説明 nproc 調整可能パラメータは、任意の時点において、システム上に存在できるプロセスの絶対数を制御しま す。この値を増やすと、存在できるプロセスが増え、減らすと、プロセスの数が制限されます。 proc: table is full メッセージがメッセージバッファーに表示された場合は、 nproc が低すぎることがわかりま す。このメッセージバッファーは、 dmesg または syslog から読み取ることができます。このメッセージは、ア プリケーションが新しいプロセスを作成できなかったことを示します。 nproc の設定値が低すぎると、新しい プロセスを fork できないことが原因で、アプリケーション エラーが発生する可能性があります。 pstat_dynamic を呼び出して psd_numprocsallocd を検査することによって、同時に使用されていたプロセスの 数がわかります。このフィールドは、同時に使用されていたプロセスの数の「ハイウォーターマーク」を示し ています。 この調整可能パラメータの変更を行う対象ユーザー 多数のプロセスを実行することが予想されるユーザー。 変更に関する制限事項 ありません。この調整可能パラメータは動的です。 この調整可能パラメータの値を大きくする場合 多数のプロセスを同時に実行するときに、この調整可能パラメータを増やす必要があります。 Section 5-286 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nproc(5) nproc(5) この値を大きくした場合の影響 ありません。 この調整可能パラメータの値を小さくする場合 システム上のプロセスの数を制限する場合、またはメモリーが圧迫されていて、かつ nproc の値が予想をはる かに超える大きさである場合に限り、この値を減らす必要があります。 この値を小さくした場合の影響 新しいプロセスを fork できないことが原因で、アプリケーション エラーが発生するリスクが増えます。 同時に変更する必要がある他の調整可能パラメータ nkthread は、絶対に nproc より大きくなければなりません。デフォルトの式はこれを徹底するものであり、ま た、ランタイムカーネルもこの点をチェックします。 アプリケーションからファイルを操作できるようにする場合は、 nfile と ninode を増やす必要があります。(デ フォルトではありません) デフォルトの式が nproc の倍数であるため、 ksi_alloc_max を増やす必要があります。 maxuprc は、 nproc より小さくなければなりません。 これらの関連する調整可能パラメータのいくつかは、 nproc の変更に応じて自動的に調整されていましたが、 今後は明示的に調整を行う必要があります。 また、調整可能パラメータには、リブートしないと有効にならないものがあります。したがって、リブートせ ずに nproc を大幅に増やす場合は注意が必要です。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nproc は、HP で開発されました。 参照 ksi_alloc_max(5)、 maxuprc(5)、 nfile(5)、 ninode(5)、 nkthread(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-287 npty(5) npty(5) 名称 npty − 疑似テレタイプ (pty) の最大数 値 デフォルト npty = 60 許容値 最小値 : 1 最大値 : システムメモリーサイズ 説明 npty は、1つのシステムがサポートできる疑似テレタイプ (pty) ドライバの数です。 pty ドライバは、擬似 ターミナルと呼ばれるデバイスペアのサポートを提供します。疑似ターミナルは、キャラクタ型デバイスのペ ア、マスターデバイス、およびスレーブデバイスです。これらは、アプリケーションプロセスとサーバープロ セスの間の通信を可能にします。ウィンドウなどの pty デバイスにデータを送信する場合、pty デバイスは、 任意の時点において開いているすべてのウィンドウに対して存在しなければなりません。 pty の数より著しく大きなパラメータ値を使用することはお勧めできません。値が大きすぎると、カーネルメ モリー空間を浪費します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムが pty を使い切る場合は、この調整可能パラメータの値を増やす必要があります。 この値を大きくした場合の影響 システムメモリーの使用量が増えます。 この調整可能パラメータの値を小さくする場合 最小システムを作成するときは、この値を減らします。 この値を小さくした場合の影響 システムが pty を使い切る可能性があります。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 Section 5-288 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 npty(5) npty(5) 著者 npty は、HP で開発されました。 参照 pty(7) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-289 NSTREVENT(5) NSTREVENT(5) 名称 NSTREVENT − 未処理の STREAMS bufcall の最大数 値 フェールセーフ 50 デフォルト 50 許容値 0 - 2147483647 推奨値 50 説明 この調整可能パラメータは、任意の時点においてシステム内に存在できる、未処理の bufcall の最大数を制限 します。 この調整可能パラメータは、過剰な数の bufcall を発行する全てのストリームで実行するモジュールに起因す るリソースの過負荷から、システムを保護することを目的としています。選択される値は、システム上のすべ てのストリームから通常の操作が行われている間に予想される無理のない範囲での bufcall の最大数の総和を 下回らない値である必要があります。 bufcall は、低メモリー状況では、STREAMS モジュールによって使用さ れます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 低メモリー状況がシステムで多発している場合です。 この調整可能パラメータの値を大きくした場合の影響 選択する数が大きすぎると、STREAMS サブシステムが内部データ構造に対してあらかじめ割り当てるメモ リー量が必要以上に多くなります。これによって、アプリケーションやシステムで使用できるメモリーの量が 減ります。 この調整可能パラメータの値を小さくする場合 ある特定の STREAMS モジュールまたはドライバに対してこの調整可能パラメータを増やすと、その STREAMS モジュールまたはドライバが削除されたときにこの調整可能パラメータが減る可能性があります。 その場合は、前の値に戻します。ただし、値をデフォルト値より小さくすることはお勧めできません。 Section 5-290 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 NSTREVENT(5) NSTREVENT(5) この調整可能パラメータの値を小さくした場合の影響 低メモリー状況では、システムパフォーマンスが低下します。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 NSTREVENT は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-291 nstrpty(5) nstrpty(5) 名称 nstrpty − ストリームベースの疑似テレタイプ (pty) の最大数 値 デフォルト nstrpty = 10 許容値 最小値 : 1 最大値 : システムメモリーサイズ 説明 nstrpty は、1つのシステムがサポートできる、ストリームベースの疑似テレタイプ (pty) ドライバの数です。 pty ドライバは、擬似ターミナルと呼ばれるデバイスペアのサポートを提供します。疑似ターミナルは、キャ ラクタ型デバイスのペア、マスターデバイス、およびスレーブデバイスです。これらは、アプリケーションプ ロセスとサーバープロセスの間の通信を可能にします。ウィンドウなどの pty デバイスにデータを送信する場 合、pty デバイスは、任意の時点において開いているすべてのウィンドウに対して存在しなければなりませ ん。 nstrpty は、ストリームベースの I/O パイプを使用しようとするシステムにある pty デバイスの数を下回らない 値に設定する必要があります。 pty の数より著しく大きなパラメータ値を使用することはお勧めできません。 nstrpty は、ストリームベースの pty をサポートするデータ構造をカーネル内に作成するときに使用されます。 値が大きすぎると、カーネルメモリー空間を浪費します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムが pty を使い切る場合は、この調整可能パラメータの値を増やす必要があります。 この値を大きくした場合の影響 システムメモリーの使用量が増えます。 この調整可能パラメータの値を小さくする場合 最小システムを作成するときは、この値を減らします。 この値を小さくした場合の影響 システムが pty を使い切る可能性があります。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 Section 5-292 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nstrpty(5) nstrpty(5) 著者 nstrpty は、HP で開発されました。 参照 pty(7) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-293 NSTRPUSH(5) NSTRPUSH(5) 名称 NSTRPUSH − 単一ストリーム内の STREAMS モジュールの最大数 値 フェールセーフ 16 デフォルト 16 許容値 0 - 2147483647 推奨値 16 説明 この調整可能パラメータは、1つのストリームにプッシュできる STREAMS モジュールの最大数を定義しま す。これは、プロセスが暴走して、ストリームにプッシュするモジュールが勝手に選択されてしまう事態に対 して何らかの保護を提供します。これは、システムユーザーが STREAMS モジュールを悪意で使用することに 対する防御を意図したものではありません。 ほとんどのシステムでは、ストリーム内で3∼4個程度を超えるモジュールは不要です。ただし、より多くの モジュールを必要とする特異なケースもないわけではありません。この調整可能パラメータのデフォルト値で あれば、1つのストリームに 16 モジュールまでプッシュできます。これは、最も要求がきびしいインストー ルおよびアプリケーションにおいても十分な数であるはずです。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 単一ストリームにより多くの STREAMS モジュールをプッシュすることを、カスタマが必要としている場合で す。 この調整可能パラメータの値を大きくした場合の影響 暴走したアプリケーションによってシステムリソースが必要以上に使用されるおそれがあります。 この調整可能パラメータの値を小さくする場合 この調整可能パラメータの値をデフォルト値より小さくする必要はありません。 この調整可能パラメータの値を小さくした場合の影響 値が小さすぎると、ネットワークコマンドが失敗する可能性があります。 Section 5-294 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 NSTRPUSH(5) NSTRPUSH(5) 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 NSTRPUSH は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-295 NSTRSCHED(5) NSTRSCHED(5) 名称 NSTRSCHED − 実行する STREAMS スケジューラデーモンの数 値 フェールセーフ 0 デフォルト 0 許容値 0 - 2147483647 推奨値 0 説明 この調整可能パラメータは、複数のプロセッサを搭載するシステムで実行するマルチプロセッサ (MP) STREAMS スケジューラデーモンの数を定義します。ユニプロセッサ (UP) システムでは MP スケジューラ デーモンを使用しませんが、MP システムにも UP システムにも、1つの UP STREAMS スケジューラ (supsched) は必ずあります。 この調整可能パラメータの値をゼロに設定すると、システムは、実行するデーモンの数を、システム内のプロ セッサの数に基づいて決定します。この調整可能パラメータをゼロでない正の値に設定すると、この値の数の smpsched デーモンが MP システム上に生成されます。 注: この調整可能パラメータは、特定の HP 製品専用です。HP-UX の今後のリリースで削除される可能性があ ります。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 この調整可能パラメータは、特定の HP 製品専用です。HP-UX の今後のリリースで削除される可能性がありま す。 この調整可能パラメータの値を大きくした場合の影響 予測できないシステムパフォーマンスの変化が起こる可能性があります。 この調整可能パラメータの値を小さくする場合 この調整可能パラメータは、特定の HP 製品専用です。HP-UX の今後のリリースで削除される可能性がありま す。 Section 5-296 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 NSTRSCHED(5) NSTRSCHED(5) この調整可能パラメータの値を小さくした場合の影響 予測できないシステムパフォーマンスの変化が起こる可能性があります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 この調整可能パラメータは、特定の HP 製品専用です。 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 NSTRSCHED は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-297 nstrtel(5) nstrtel(5) 名称 nstrtel − 受信時の telnet セッションに対してカーネルがサポートできる telnet デバイスファイルの数の指定 値 フェールセーフ 60 デフォルト 60 許容値 任意の正の整数 (使用可能な物理メモリー量によって決まります) デフォルト値の使用をお勧めします。この値を減らす必要はまったくありません。ただし、同時に接続された telnet の負荷が非常に高い場合は、 nstrtel の値を増やすことができます。 推奨値 60 (デフォルト値) 説明 telnet デーモンは、2つの STREAMS ベースの疑似ターミナル ドライバ (telm および tels) を使用します。カー ネルパラメータ nstrtel は、疑似ターミナルの数を調整するために使用できます。 nstrtel は、システムブート 時に生成されるカーネルのデータ構造の数を指定します。このカーネルのデータ構造は、サーバー上の受信時 の telnet セッションで使用されるデバイスファイルをサポートするために必要です。 insf コマンドまたは SAM によって telnet デバイスファイルが追加作成された場合は、それに応じて nstrtel の値を増やす必要がありま す。そうしないと、システムとの通信に使用できるカーネルのデータ構造がなくなり、デバイスファイルを使 用できなくなります。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 telnet 接続の負荷が増え、telnet 接続を開くために使用できるデバイスファイルがなくなった場合は、このカー ネルパラメータを増やす必要があります。 telnetd: Telnet device drivers missing: No such device エラーが発生した場合は、デバイスファイルを使い切っ ているので、 nstrtel を増やす必要があります。 nstrtel の値を増やした場合は、 insf を実行して、新しいデバ イスファイルを作成する必要があります (SAM を使用して nstrtel の値を増やした場合は、 insf が自動的に実 行されます)。 この調整可能パラメータの値を大きくした場合の影響 リソースの使用量が増えます。カーネルのデータ構造およびデバイスファイルが追加されたことによって、シ ステムの動作が停滞する可能性があります。 Section 5-298 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nstrtel(5) nstrtel(5) この調整可能パラメータの値を小さくする場合 この調整可能パラメータをデフォルト値から減らすことはお勧めできません。ほとんどの場合、減らす必要は ありません。この調整可能パラメータをデフォルト値から減らす場合は、事前に当社サポートにご相談くださ い。 この調整可能パラメータの値を小さくした場合の影響 減らすことはお勧めしませんが、減らしても副作用はありません。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nstrtel は、HP で開発されました。 参照 insf(1M)、 telnetd(1M)、 telm(7)、 tels(7) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-299 nswapdev(5) nswapdev(5) 名称 nswapdev − スワップに使用できるデバイスの最大数 値 デフォルト 10 デバイス 許容値 最小値: 1 デバイス 最大値: 25 デバイス 説明 スワップデバイスは、カーネル内でのインデックス計算を簡単にするためにテーブルで管理されます。 nswapdev は、このテーブルの上限の役割を果たすカーネル変数を設定します。したがって、これは、スワッ プに使用できるデバイスの上限を設定することになります。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムにスワップデバイスを追加したためにデバイスの数が nswapdev を上回り、 swapon() が呼び出し側に [ENOENT] を返した場合 (swapon(2) マンページを参照)。 この値を大きくした場合の影響 より多くのデバイスをシステムに追加できるようになり、テーブル用としてカーネルで必要なメモリー量が少 し増えます。重複するデバイスの有無を調べるためにカーネルがスキャンするデバイスの数が増えるので、 swapon の動作中はパフォーマンスが低下しますが、これは実質的に無視できる程度のものです。 この調整可能パラメータの値を小さくする場合 システムのスワップデバイスの数が特定の値を超えないことが確実な場合、 swapon 操作の間のカーネルメモ リーの量を抑え、カーネルのパフォーマンスを維持するために、この調整可能パラメータの値を小さくできま す。 この値を小さくした場合の影響 スワップデバイスの数に新たな制限がかかりますが、これは当然であり、意図されるとおりです。これ以外の 副作用はありません。 同時に変更する必要がある他の調整可能パラメータ ありません。 Section 5-300 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nswapdev(5) nswapdev(5) 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nswapdev は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-301 nswapfs(5) nswapfs(5) 名称 nswapfs − スワップに使用できるファイルシステムの最大数 値 デフォルト 10 ファイルシステム 許容値 最小値: 0 ファイルシステム 最大値: 25 ファイルシステム 説明 ファイルシステム スワップデバイスは、カーネル内でのインデックス計算を簡単にするためにテーブルで管理 されます。 nswapfs は、このテーブルの上限の役割を果たすカーネル変数を設定します。したがって、これ は、スワップに使用できるファイルシステムの上限を設定することになります。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムにファイルシステム スワップを追加したためにファイルシステムの数が nswapfs を上回り、 swapon() が呼び出し側に [ENOENT] を返した場合 (swapon(2) マンページを参照)。 この値を大きくした場合の影響 より多くのスワップ用ファイルシステムをシステムに追加できるようになり、テーブル用としてカーネルで必 要なメモリー量が少し増えます。重複するデバイスの有無を調べるためにカーネルがスキャンするデバイスの 数が増えるので、swapon の動作中はパフォーマンスが低下しますが、これは実質的に無視できる程度のもので す。 この調整可能パラメータの値を小さくする場合 システムのスワップ ファイルシステムの数が特定の値を超えないことが確実な場合、swapon 操作の間のカー ネルメモリーの量を抑え、カーネルのパフォーマンスを維持するために、この調整可能パラメータの値を小さ くできます。 この値を小さくした場合の影響 スワップ ファイルシステムの数に新たな制限がかかりますが、これは当然であり、意図されるとおりです。こ れ以外の副作用はありません。 同時に変更する必要がある他の調整可能パラメータ ありません。 Section 5-302 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nswapfs(5) nswapfs(5) 警告 HP-UX のすべてのカーネル調整パラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nswapfs は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-303 nsysmap(5) nsysmap(5) 名称 nsysmap、nsysmap64 − カーネル動的メモリーアロケーションマップ内のエントリの数 値 デフォルト 8400 許容値 任意の正の値 実際には、値が非常に小さいと、ブート中またはブート直後に高い確率でパニックが発生します。また、あま り大きな値は必要ありません。この調整可能パラメータの値をデフォルトから変更する必要があるのは、ある 特定の状況下に限られます。 説明 この値は、カーネル動的メモリー リソースマップのサイズを指定します。カーネル動的メモリー リソースマッ プは、カーネルの動的アドレス空間にある空き仮想空間を示す、アドレスと長さのペアの配列です。 この配列は、従来は固定サイズでした。したがって、特定の異常なワークロードによってカーネルのアドレス 空間が断片化されると、配列へのエントリが過剰になります。この状態になっても、システムは、パニックに はなりませんが、最後のエントリを破棄します。その結果、カーネルの仮想アドレス空間に「リーク」が発生 します。このようなオーバーフローが頻繁に発生すると、システムは、最終的には仮想空間を使い切り、パ ニックを起こして、次のメッセージを表示します。 kalloc: out of virtual space マップサイズを調整可能にすることにより、システムは、システムワークロードサイズに応じてマップサイズ を自動的に変更し、この問題を回避することが可能になります。この自動変更が正常に動作しない場合は、特 定のワークロードに合わせて手動で調整できます。デフォルト値が上書きされた場合、カーネルは、システム のサイズに応じて、ユーザーの指定より値を大きくする場合があります。 64 ビット カーネルの仮想アドレス空間は 32 ビット カーネルより大きいため、32 ビット カーネルと 64 ビッ ト カーネルとでは調整可能パラメータが異なります。 nsysmap 調整可能パラメータは 32 ビット カーネルを制 御し、 nsysmap64 調整可能パラメータは 64 ビット カーネルを制御します。 この調整可能パラメータの変更を行う対象ユーザー この調整可能パラメータの修正が必要になるのは、リソースマップのオーバーフローに直面しているユーザー だけです。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 リソースマップのオーバーフローが発生すると、次のメッセージがコンソールに表示されます。 sysmap{32|64}: rmap ovflo, lost [X,Y) Section 5-304 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nsysmap(5) nsysmap(5) これがたまにしか発生しないのであれば、特にアクションは必要ありません。これが頻繁に発生する場合は、 この調整可能パラメータの値を大きくしないと、次のパニックメッセージが表示される可能性があります。 kalloc: out of kernel virtual space. nsysmap(nsysmap64) の値を大きくする場合は、値を倍にするのが妥当です。この調整可能パラメータをデフォ ルト値の倍にしても問題が解決されない場合は、カーネルの深刻な問題が考えられるので、当社サポートに調 査を依頼してください。 この調整可能パラメータの値を大きくした場合の影響 非常にわずかですが、カーネルのメモリー使用量が増えます。この調整可能パラメータがかなり大きい場合 は、ワークロードに応じて、カーネルメモリーアロケーションのパフォーマンスが影響を受ける可能性があり ます。 この調整可能パラメータの値を小さくする場合 この調整可能パラメータをデフォルト値から小さくすることは危険であり、また、ほとんどの場合は不要で す。小さくする場合は、必ず事前に当社サポートにご相談ください。 この調整可能パラメータの値を小さくした場合の影響 リソースマップのオーバーフローが発生したときに、非常に高い確率でカーネルがパニックを起こします。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 nsysmap および nsysmap64 は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-305 orientation(5) orientation(5) 名称 orientation − ストリームの指向性 説明 ストリームの指向性は、入出力ストリームとして処理される FILE オブジェクトの属性の1つです。これは、 文字がアプリケーション内でワイドキャラクタとして処理され、ファイル内にマルチバイトの文字コードセッ トとして保存されること、さらに、すべてのワイドキャラクタの入出力関数が2つのマルチバイト文字間の境 界に位置するストリームによって実行を開始することを入出力モデルが想定している場合に有効です。 ストリームがファイルに関連付けられた後、ただし、操作がストリーム上で実行される前は、ストリームは無 指向の状態です。ワイドキャラクタの入力関数または出力関数が無指向のストリームに適用されると、スト リームは暗黙のうちにワイド指向になります。同様に、バイトの入力関数または出力関数が無指向のストリー ムに適用されると、ストリームは暗黙のうちにバイト指向になります。ストリームが無指向の場合は、 fwide() 関数のみがストリームの指向性を明示的に変更できます。 ストリームが popen() 関数によってパイプと関連付けられた直後に、ストリームはバイト指向になります。 ストリームがバイト指向またはワイド指向になった後は、ストリームの指向性が固定します。ストリームがク ローズされるまで、指向性を変更することはできません。 ワイドキャラクタの入出力関数は、以下のとおりです。 fgetwc()、 fgetws()、 fputwc()、 fputws()、 fwprintf()、 fwscanf()、 getwc()、 getwchar()、 putwc()、 putwchar()、 putws()、 ungetwc()、 vfwprintf()、 wprintf()、 wscanf() バイトの入出力関数は、以下のとおりです。 fgetc()、 fgets()、 fprintf()、 fputc()、 fputs()、 fread()、 fscanf()、 fwrite()、 getc()、 getchar()、 getc_unlocked()、 getchar_unlocked()、 gets()、 getw()、 printf()、 putc()、 putchar()、 putc_unlocked()、 putchar_unlocked()、 puts()、 putw()、 scanf()、 ungetc()、 vfprintf()、 vprintf() 例 ストリームの指向性が不明のときに、ストリームから文字を読み取る場合: int so; wchar_t ws[CHAR_NUM]; char s[CHAR_NUM]; so = fwide(stream, 0); /* Check the orientation */ if (so > 0) /* the stream is wide-oriented */ fgetws(ws, CHAR_NUM, stream); else if (so < 0) / * stream is byte-oriented */ fgets(s, CHAR_NUM, stream); else /* the stream is without orientation */ fprintf(stderr, "It is first time to access this file."); Section 5-306 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 orientation(5) orientation(5) 警告 バイトの入出力関数がワイド指向のストリームに適用されたり、ワイドキャラクタの入出力関数がバイト指向 のストリームに適用されると、動作は不定です。 著者 ストリームの指向性機能は、HP および三菱電機により開発されました。 参照 fgetws(3C), fopen(3S), fread(3S), fwide(3C), fwprintf(3C), fwscanf(3C), getc(3S), gets(3S), getwc(3C), popen(3S), printf(3S), putc(3S), puts(3S), putwc(3C), putws(3C), scanf(3S), ungetc(3S), ungetwc(3C) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-307 pam_unix(5) pam_unix(5) 名称 pam_unix − UNIX 用認証、アカウント、セッション、およびパスワードの PAM 管理モジュール 構文 /usr/lib/security/libpam_unix.1 説明 PAM の UNIX サービスモジュールである /usr/lib/security/libpam_unix.1 は、認証、アカウント管理、セッショ ン管理、パスワード管理の 4つすべての機能を提供します。 libpam_unix.1 モジュールは要求に応じて動的にロードされ、必要な機能を提供する共有オブジェクトです。パ スは PAM 構成ファイルで指定します。 Unix 認証モジュール UNIX 認証構成要素は、ユーザーの身元を検査する関数 (pam_sm_authenticate()) や、ユーザー特定の資格を設 定する関数 (pam_sm_setcred()) を提供します。 pam_sm_authenticate() は、ユーザーが入力したパスワード (またはユーザーのスマートカードから取り出した パスワード) を、UNIX パスワードデータベースのパスワードと比較します。UNIX パスワードデータベースと は、高信頼性システムとして保護されたパスワードのデータベースも含みます。パスワードが一致したら、 ユーザーは認証されます。ユーザーがSecure RPC 資格も持っていて、Secure RPC パスワードが UNIX パス ワードと同じである場合、Secure RPC 資格も取得されます。 UNIX サービスモジュールには以下のオプションが渡されることがあります。 debug syslog(3C) により、 LOG_DEBUG レベルでデバッグ情報を記録します。 nowarn 警告メッセージの表示をオフにします。 use_first_pass パスワードデータベースのパスワードをユーザーの初期パスワード (認証モジュールに対 して認証された、ユーザーが入力した最初のスタック) と比較します。パスワードが一致 しないか、入力されていなかった場合、処理を中止し、パスワード入力を求めるプロンプ トは表示しません。このオプションは、 pam.conf 構成ファイルで optional として認証 サービスが指定されている場合にのみ使用されます。 try_first_pass パスワードデータベースのパスワードをユーザーの初期パスワード (認証モジュールに対 して認証された、ユーザーが入力した最初のスタック) と比較します。パスワードが一致 しないか、入力されていなかった場合、パスワード入力を求めるプロンプトを表示しま す。 use_psd psd とは、パーソナル セキュリティデバイスを表します。現在実現されている唯一のパー ソナル セキュリティデバイスはスマートカードです。パスワードデータベースのパスワー ドと、ユーザーのスマートカードに登録されているパスワードを比較します。このオプ ションを使用すると、パスワードプロンプトの代わりにPAM フレームワークのプロンプト "Enter PIN:" を使用します。このオプションは、 pam.conf または pam_user.conf 構成ファ イルの、認証またはパスワードのモジュールタイプ (auth, password) のサービスと共にに使 Section 5-308 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pam_unix(5) pam_unix(5) 用した場合のみサポートされます。 以下の状況のいずれかが発生しない限り、現在のパスワードの入力を求めるプロンプトを表示する場合、 UNIX 認証モジュールはプロンプト "Password:" を使用します。 1. オプション try_first_pass が指定され、UNIX モジュールに対して最初に入力したスタック内の パスワードで失敗した場合。 2. オプション try_first_pass が指定されず、 pam.conf ファイルでこれより前にリストされている 認証モジュールが、パスワード入力を求めるプロンプトを表示した場合。 3. オプション use_psd を指定した場合。このとき、UNIX 認証モジュールはプロンプト "Enter PIN:" を使用します。 1 と 2 の場合、UNIX 認証モジュールはプロンプト "System Password:" を使用します。 pam_sm_setcred() 関数はユーザー特定の資格を設定します。ユーザーが Secure RPC 資格を持っていても、 Secure RPC パスワードが UNIX パスワードと同じではない場合、警告メッセージが表示されます。ユーザーが Secure RPC 資格を得たい場合、 keylogin(1) を実行する必要があります。 Unix アカウント管理モジュール UNIX アカウント管理構成要素は、アカウント管理を実行する関数 (pam_sm_acct_mgmt()) を提供します。こ の関数は、ユーザーのパスワードエントリを UNIX パスワードデータベースから取り出し、アカウントおよび パスワードの期限が切れていないか検査します。高信頼性システムの場合、このモジュールは安全運用構成に 基づいて、許可されたアクセス時間およびアクセス端末の妥当性検査も行います。UNIX サービスモジュール には以下のオプションが渡されることがあります。 debug syslog(3C) により、 LOG_DEBUG レベルでデバッグ情報を記録します。 nowarn 警告メッセージの表示をオフにします。 Unix セッション管理モジュール UNIX セッション管理構成要素は、UNIX セッションを開始する関数 (pam_sm_open_session()) と終了する関数 (pam_sm_close_session()) を提供します。UNIX の場合、 pam_open_session() は、高信頼性モード用に保護され たパスワードデータベース内の、最後に成功または失敗したログイン時間を更新します。アカウント管理モ ジュールはこの情報を読み取り、ユーザーの前回のログイン時間を表示します。 pam_open_session() は、呼び出し側の umask の修正も行い、 /etc/default/security に指定されている制限を追加 します。高信頼性システムの場合、umask には、 /usr/include/hpsecurity.h に定義されている SEC_DEFAULT_MODE を超えないようにするための制限も行われます。 security(4) の UMASK エントリーを 参照してください。 UNIX サービスモジュールには以下のオプションが渡されることがあります。 debug syslog(3C) により、 LOG_DEBUG レベルでデバッグ情報を記録します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-309 pam_unix(5) pam_unix(5) 警告メッセージの表示をオフにします。 nowarn pam_close_session は NULL 関数です。 Unix パスワード管理モジュール UNIX パスワード管理構成要素は、UNIX パスワードデータベースのパスワードを変更する関数 (pam_sm_chauthtok()) を提供します。 pam.conf 内でこのモジュールに required が指定されていなければなり ません。 optional や sufficient であってはなりません。UNIX サービスモジュールには以下のオプションが渡さ れることがあります。 debug syslog(3C) により、 LOG_DEBUG レベルでデバッグ情報を記録します。 nowarn 警告メッセージの表示をオフにします。 use_first_pass パスワードデータベースのパスワードをユーザーの古いパスワード (パスワードモジュー ルに対して入力した、スタック中で最初のもの) と比較します。パスワードが一致しない か、入力されていなかった場合、処理を中止し、古いパスワードの入力を求めるプロンプ トは表示しません。このモジュールに対する新しいパスワードも (パスワードモジュール に対して入力した、スタック中で最初のもの) 同様に試されます。新しいパスワードが失 敗した場合、処理を中止し、新しいパスワードの入力を求めるプロンプトは表示しませ ん。 try_first_pass パスワードデータベースのパスワードをユーザーの古いパスワード (パスワードモジュー ルに対して入力した、スタック中で最初のもの) と比較します。パスワードが一致しない か、入力されていなかった場合、古いパスワードの入力を求めるプロンプトを表示しま す。このモジュールに対する新しいパスワードも (パスワードモジュールに対して入力し た、スタック中で最初のもの) 同様に試されます。新しいパスワードが失敗した場合、新 しいパスワードの入力を求めるプロンプトを表示します。 ユーザーに PIN の入力を求めるプロンプトを表示し (PIN を使用すると、PAM フレーム use_psd ワークはパスワードをスマートカードから取り出せます)、古いパスワードをスマートカー ドから取り出します。パスワードデータベースのパスワードを、古いパスワードと比較し ます。パスワードが一致した場合、新しいパスワードの入力を求めるプロンプトを表示し ます。 ユーザーのパスワードの期限が切れている場合、UNIX アカウントモジュールは pam_set_data() を使ってこの 情報を認証ハンドルに保存します。UNIX パスワードモジュールは pam_get_data() を使ってこの情報を認証ハ ンドルから取り出し、ユーザーへのパスワード更新の催促を判別します。 アプリケーション使用法 高信頼性システムでは、UNIX サービスモジュール libpam_unix 内で実現される pam_sm_*() インタフェース はスレッドセーフではありません。また、ネームサービススイッチ構成ファイル /etc/nsswitch.conf に指定され る、 passwd または publickey のための「データベース」が nisplus である場合も、これらのインタフェースは スレッドセーフではありません。これら以外の場合、これらのインタフェースはスレッドセーフです。スレッ Section 5-310 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pam_unix(5) pam_unix(5) ドがこれらのインタフェースのいずれかを実行している間に、キャンセルポイントが発生することがありま す。これらのインタフェースは、キャンセルセーフ、非同期キャンセルセーフ、非同期シグナルセーフのいず れでもありません。 参照 keylogin(1)、pam(3)、pam_authenticate(3)、pam_setcred(3)、syslog(3C)、nsswitch.conf(4)、pam.conf(4)、 pam_user.conf(4) HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-311 pam_updbe(5) pam_updbe(5) 名称 pam_updbe − ユーザーポリシー定義サービスモジュール 構文 /usr/lib/security/libpam_updbe.1 説明 /usr/lib/security/libpam_updbe.1 は、PAM のユーザーポリシー定義サービスモジュールです。これは、ユー ザー構成ファイル /etc/pam_user.conf ( pam_user.conf(4) を参照) で定義された options を読み取り、以降のサー ビスモジュールが使用できるように、 pam_set_data ( pam_set_data(3) を参照) を使って情報を pam ハンドルに 保存します。サービスモジュールは、ユーザーが認証されるときやユーザーパスワードが変更されるときに、 pam_get_data を実行して pam ハンドルから対応する情報を取り出します。 pam_updbe の使用は必須ではありません。ユーザー単位の構成を行う場合のみ必要となります。ただし、 pam_updbe の機能を有効にするには、 /etc/pam.conf で最初のサービスモジュールとしてリストしなければな りません。 pam_updbe は、他のサービスモジュールと同様に、認証、アカウント管理、セッション管理、パスワード管理 の 4つすべての PAM モジュールに対するインタフェースを提供します。各モジュールは、特定モジュールタ イプを定義したオプションを読み取ります。 UPDBE 認証モジュール UPDBE 認証構成要素は、 pam_user.conf でモジュールタイプを "auth" と定義した場合のオプションを読み取 る関数を提供します。使用するモジュールデータ名は PAM_AUTH_USER です。 Unix アカウント管理モジュール UNIX アカウント管理構成要素は、 pam_user.conf でモジュールタイプを "account" と定義した場合のオプショ ンを読み取る関数を提供します。使用するモジュールデータ名は PAM_ACCOUNT_USER です。 Unix セッション管理モジュール UNIX セッション管理構成要素は、 pam_user.conf でモジュールタイプを "session" と定義した場合のオプショ ンを読み取る関数を提供します。使用するモジュールデータ名は PAM_SESSION_USER です。 Unix パスワード管理モジュール UNIX パスワード管理構成要素は、 pam_user.conf でモジュールタイプを "password" と定義した場合のオプ ションを読み取る関数を提供します。使用するモジュールデータ名は PAM_PASSWORD_USER です。 参照 pam(3), pam_set_data(3), pam.conf(4), pam_user.conf(4) Section 5-312 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 partition(5) partition(5) 名称 partition − Partition コマンドに関する情報の表示 構文 partition 説明 このマンページは、パーティション対応システムの管理に使用されるコマンドのリストと簡単な説明を表示し ます。 コマンド 説明 cplxmodify 既存のコンプレックスを変更します。 parcreate パーティションを新規に作成します。 parmodify 既存のパーティションを変更します。 parstatus パーティション対応システムのパーティションと使用可能なリソースに関する情報を表示します。 parremove 既存のパーティションを削除します。 parunlock コンプレックス構成データ (Complex Configuration Data) またはパーティション構成データ (Partition Configuration Data) をアンロックします。 fruled セル、キャビネット、I/O シャーシのアテンション LED をオン/オフします。 frupower セル、キャビネット、セル、I/O シャーシの電源をオン/オフします。 著者 partition は、HP により開発されました。 参照 cplxmodify(1M), fruled(1), parstatus(1), frupower(1M), parcreate(1M), parmgr(1M), parmodify(1M), parremove(1M), parunlock(1M) HP System Partitions Guide HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-313 pa_maxssiz(5) pa_maxssiz(5) 名称 pa_maxssiz_32bit, pa_maxssiz_64bit − Itaniumベース システム上の PA-RISC エミュレータで実行されているユー ザープロセスで使用されるスタックの最大サイズ (バイト) 値 デフォルト 32 ビット デフォルト: 0x04FC6000 (79MB) 64 ビット デフォルト: 0x20000000 (512MB) 許容値 32 ビット最小値: 0x04FC6000 (79MB) 32 ビット最大値: 0x1BF00000 (447MB) 64 ビット最小値: 0x20000000 (512MB) 64 ビット最大値: 0x60000000 (1.5GB) 説明 HP-UX システム上のユーザープログラムは、仮想メモリーの5つの独立したセグメントで構成されます。それ らは、テキスト (またはコード)、データ、スタック、共有、および I/O です。 Itaniumベース システムで PA-RISC エミュレータを使用して実行されている PA-RISC バイナリのスタックセグ メントサイズ (これには、ユーザーメモリースタックと RSE スタックの両方が含まれます) は、 pa_maxssiz_32bit または pa_maxssiz_64bit で指定されます。 エミュレートされているプロセスから見れば、エミュレートされているスタックは、そのプロセスが PA-RISC システム上でエミュレータ無しで実行される場合のスタックと同一です。エミュレートされていないプロセス の、実際のスタック (メモリーと RSE の両方) は、そのサイズを設定することはできず、Itaniumベース システ ム上で PA-RISC プロセスのエミュレータ内部でのみ使用されます。したがって、この調整パラメータは、エ ミュレートされるプロセスを、対応する PA-RISC システム上で実行するのに必要となる maxssiz あるいは maxssiz_64bit の値に、エミュレータ自身の作業スペースを加えた値を表します。 maxssiz の値で決定されるスタックのアドレス空間のサイズと同様に、エミュレータが使用するアドレス空間 は、そのプロセスのプライベート空間であり、エミュレータのスタックが限度まで増大しているかどうかとは 無関係に、その他の用途には使用できません。つまり、この調整パラメータの値は、エミュレートされている PA-RISC プロセスで使用できないデータのアドレス空間と総量と考えることが出来ます。特に、デフォルトの アドレス空間モデルでは、プライベートなアドレス空間を 1 GB しか持てない 32ビットプロセスでは注意が必 要です。この調整パラメータの値を大きくし過ぎると、十分なアドレス空間を使用できずに、他のデータ割り 当て (プライベートな mmap() や sbrk() 呼び出し) が失敗することになります。そのような状況が起こる場合 には、より大きなプライベートデータの仮想アドレス空間を持てるように、 chatr を使って、失敗した PARISC の実行ファイルのアドレス空間モデルを変更するか、あるいは、この調整パラメータの値を小さくしま す。 Section 5-314 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pa_maxssiz(5) pa_maxssiz(5) この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、システムのリブート後に有効になります。 この調整可能パラメータでユーザーメモリースタックのサイズを変更できない場合は、この調整可能パラメー タを変更する前に、PA-RISC エミュレータのメモリーの使い方について熟知していることが必要であると考え られます。 この調整可能パラメータの値を大きくする場合 Itaniumベース システム上の PA-RISC エミュレータがスタックエミュレーションのための追加スペースを必要 としている場合に、この調整可能パラメータの値を大きくします。 この調整可能パラメータの値を大きくした場合の影響 PA-RISC エミュレータがスタックに使用する仮想アドレス空間が大きくなり、データ割り当てのための仮想ア ドレス空間が小さくなります。この値を大きくし過ぎると、アプリケーションが十分な仮想アドレススペース を確保できずに、データ割り当てに失敗します。 PA-RISC バイナリから生成されたプロセスなのか、あるいは Itaniumベース バイナリから生成されたプロセス なのかを判別することはできないので、この調整パラメータの値を 無造作に大きくすることは避けてくださ い。 この調整可能パラメータの値を小さくする場合 PA-RISC エミュレータのワークロードがシステム上で既知であり、必要以上のスペースがスタックエミュレー ションに使用されていて、システム上の予約済みまたは割り当て済みのスワップスペースに余裕がない場合の み、この調整可能パラメータの値を小さくします。 この値を小さくした場合の影響 この調整可能パラメータの値を小さくすると、エミュレートされている PA-RISC バイナリの実行時に使用でき るスタックスペースが減少するため、大量のスタックを必要とするエミュレート中のプロセスが、スタックサ イズ増加の要求を行うと失敗する可能性があります。これは、 maxssiz や maxssiz_64bit の値を小さくした場 合に、スタックサイズを増加できずにプロセスが中断することがあるのと同様です。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 pa_maxssiz は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-315 pa_maxssiz(5) pa_maxssiz(5) 参照 chatr(1), maxssiz(5), mmap(2), sbrk(2) Section 5-316 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pfdat_hash_locks(5) pfdat_hash_locks(5) 名称 pfdat_hash_locks − pfdat スピンロックプールのサイズの指定 値 デフォルト 128 許容値 64 ∼ 262144 説明 実行中のプロセスやメモリー使用量に関する情報を格納しているグローバルカーネル構造は、頻繁に、複数の スレッドから同時にアクセスされたり変更されたりします。これらの構造は、競合状態にならないよう、スピ ンロック (同期に使用されるカーネルデータ) で保護されます。これにより、スピンロック「ホルダ」のスレッ ドだけが処理を進めることができ、その間、その構造にアクセスしようとする他のすべてのスレッドは待機し なければなりません。 そのようなデータ構造の各インスタンスを保護する必要があり、インスタンスが複数ある場合は、ハッシュさ れたスピンロックが使用されます。すべてのインスタンスに対して単一のスピンロックを使用すると、過剰な 競合が発生します。一方、構造ごとに1つのスピンロックを使用すると、任意の時点において大部分のロック が未使用状態になり、メモリーの無駄になります。 ハッシュされたロックのプールを割り当てると、ハッシュ関数が構造のグループごとに1つのロックをピック するので、メモリーを節約しながら、競合を少なくすることができます。この調整可能パラメータは、そのよ うなプールのサイズを、pfdat データ構造のスピンロックについて設定します。 この調整可能パラメータの変更を行う対象ユーザー 当社のフィールドエンジニアのみ。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 メモリーの競合が少なく、多数の pfdat 構造に起因するロックの競合が多いシステムに対しては、この調整可 能パラメータの値を大きくします。通常、そのようなシステムは、大量のプロセスやスレッドがある大規模メ モリーシステムです。 この値を大きくした場合の影響 カーネルのメモリー使用量が増えます。 この調整可能パラメータの値を小さくする場合 物理メモリーの競合が多く、プロセスやスレッドがほとんどないシステムに対してのみ、この調整可能パラ メータの値を小さくします。テーブルを小さくしてメモリーを節約すると、そのメモリーが一般用途向けに解 放されますが、多数の pfdat 構造が存在してロックを要求している場合は、競合が発生する可能性がありま す。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-317 pfdat_hash_locks(5) pfdat_hash_locks(5) この値を小さくした場合の影響 pfdat ロックのハッシュ競合がより発生しやすくなります。それによって、2つ以上の pfdat 間で共有される ロックをスレッドが待たなければならない可能性が増大します。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 pfdat_hash_locks は、HP で開発されました。 Section 5-318 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pfs_exports(5) pfs_exports(5) 名称 pfs_exports, pfs_xtab − PFSクライアントへのディレクトリのエクスポート 構文 /etc/pfs_exports /etc/pfs_xtab 説明 /etc/pfs_exports ファイルには、PFSクライアントにエクスポートできるディレクトリのエントリーが保存され ます。このファイルは、 pfs_exportfs(1M) コマンドにより、自動的に読み取られます。このファイルを変更し た場合は、デーモンの動作に影響を与える変更に対して pfs_exportfs(1M) を実行する必要があります。 ブート時に pfs_exportfs(1M) が実行されるように、 rc(1M) にコマンドを入れるようにしてください。 /etc/pfs_xtab ファイルには、現在エクスポートされているディレクトリに対するエントリーが保存されます。 このファイルを直接変更することはできません。今後、 PFS パッケージのアップデートにより、このファイル を編集できるライブラリが組み込まれる予定です (このファイルからエントリーを削除する場合は、 pfs_exportfs の −u オプションを使用してください)。 ディレクトリのエントリーは、次のように構成されます。 directory −option[, option ] . . . directory ディレクトリ (ファイル) のパス名 option 次のいずれかのオプション access=client[:client] . . . リストされた各 client に対してマウントアクセスを与えます。 client には必 ず、ホスト名を指定します。デフォルト値では、任意のマシンでディレクト リをマウントできます。 ファイル名の中のいずれかの位置に番号記号 ‘#’ を入れると、その位置から行末までのテキストがコメ ントになります。 例 /usr/local # export to the world /usr2 −access=hermes:zip:tutorial # export to only these machines 著者 pfs_exports はYoung Minds社で開発されました。 ファイル /etc/pfs_exports /etc/pfs_xtab HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-319 pfs_exports(5) pfs_exports(5) /etc/hosts 参照 hosts(5), pfs_exportfs(1M), pfsd(1M), pfs_mountd(1M), rc(1M) Section 5-320 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pfs_fstab(5) pfs_fstab(5) NAME pfs_fstab, mtab − スタティック ファイルシステム マウントテーブル、マウント済みファイルシステムテーブル 構文 /etc/pfs_fstab /etc/mtab 説明 /etc/pfs_fstab ファイルには、 pfs_mount(1M) コマンドを使用してマウントする CD-ROMファイルシステム、お よびディスクイメージのエントリーが保存されます。 pfs_mount(1M) コマンドは通常、ブート時に rc(1M) スク リプトによって起動されます。このファイルは、 pfs_mount や pfs_umount などの各種ユーティリティで使用 されます。 /etc/mtab ファイルには、現在マウントされているファイルシステムのエントリーが保存され、 getmntent(3X) で記述されたルーチンを使用してプログラムに読み取られます。 umount (mount(1M) 参照) により、このファ イルのエントリーが削除されます。 各エントリーは次のように構成されます。 filesystem filesystem directory type options freq pass rawデバイス、またはブロック スペシャルデバイスのパス名、 host: pathname 形式のリモート ファイルシステム名、または MakeDisc で作成したファイル名です。 directory type options ファイルシステムのマウント先となるディレクトリのパス名です。 次のいずれかのファイルシステムタイプです。 pfs-iso9660 デバイスをiso9660としてマウントします。 pfs-hsfs デバイスをhsfsとしてマウントします。 pfs-rrip デバイスをrripとしてマウントします。 pfs-nfs エクスポート済みのPFSファイルシステムをマウントします。 各マウントオプションをカンマで区切ったリスト (スペースは不要) を指定します。このうち、 ファイルシステムの全タイプに適用するものも、特定のタイプだけに適用するものもあります。 ファイルシステムに適用される オプション ro 省略された場合でも、このオプションは暗黙で指定されます。 suid | nosuid ユーザID設定の実行を許可/禁止します。 bg | fg 最初の試行が失敗した時点で、リトライをバックグラウンド/フォアグラウ ンドで実行します。 retry=n マウント操作のリトライ回数を指定します。 rsize=n 読み取りバッファのサイズを n 単位で設定します。 timeo=n PFSのタイムアウトを 10分の1秒単位 n で設定します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-321 pfs_fstab(5) pfs_fstab(5) retrans=n soft | hard PFSの再転送回数を指定します。 サーバが応答しないときにエラーを返します。またはサーバが応答するまで リトライを続行します。 intr ハードマウント上でキーボードの割り込みを許可します。 iso9660 および hsfs ファイルシステムに適用される オプション xlat=xlat_flags xlat_flags には、転送オプションのリストをコロン (:) で区切って並べます。現在 サポートされているオプションは、 no_version, dot_version, lower_case, および unix です。 freq pass ダンプの頻度を日数単位で指定します。 PFSファイルシステムの場合は、0に設定します。 パーティションをチェックするときの fsck(1M) パスを指定します。 PFSファイルシステムの場合は、0 に設定します。 先頭に番号記号 (#) を置くと、その行はコメント行になるので、ファイルの読み取りルーチンでは無視されま す。 fsck, mount, および umount はファイルをシーケンシャルに処理するので、 /etc/pfs_fstab 中のレコード順 は重要になります。すなわちファイルシステム中のエントリーは必ず、最上位にマウントするファイルシステ ムのエントリーの後に記述されていなければなりません。 例 /dev/sr0 /cd-rom pfs-iso9660 ro,suid 0 0 example: /home/user /home/user pfs-nfs ro,hard,fg 0 0 著者 pfs_fstab Young Minds社で開発されました。 ファイル /etc/pfs_fstab /etc/mtab 参照 pfs_mount (1M) Section 5-322 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 physical_io_buffers(5) physical_io_buffers(5) 名称 physical_io_buffers − 物理 I/O 動作用バッファーの総数 値 デフォルト 0 バッファー 許容値 最小値: 384 バッファー 最大値: 65535 バッファー 説明 カーネル内の多くの物理 I/O 動作では、I/O デバイスに対して読み書きされるデータを、メモリーの細片 (バッ ファー) からなる共有プールに保持します。I/O 動作ルーチンに対してバッファーが割り当てられておらず、 カーネルバッファーが他の物理 I/O トランザクションに使用されていて空きがない場合、呼び出し側は、バッ ファーが使用可能になるまで待機しなければなりません。I/O 動作を試行するスレッドが多いために I/O 負荷 が高くなると、バッファー不足によって著しくパフォーマンスが低下する可能性があります。 管理者は、 physical_io_buffers 調整可能パラメータを使用してカーネルバッファー量の増減を行うことによ り、マシン上の I/O トラフィックがパフォーマンスのボトルネックになることを回避できます。 この調整可能パラメータの変更を行う対象ユーザー カーネルの動作および基本となるデバイスのハードウェアについて完全に理解しているユーザーのみ。 変更に関する制限事項 この調整可能パラメータをゼロ (デフォルト値) に設定すると、カーネルは、この調整可能パラメータの最適な 値を計算しようとします。この調整可能パラメータの変更はただちに有効になります。 空きメモリーが不足していて、カーネルが必要なバッファーを作成できない場合に、この調整可能パラメータ の値を大きくしようとすると、 [ENOMEM] エラーにより失敗する可能性があります。 この調整可能パラメータの値を大きくする場合 マシンに多数の I/O デバイスがあり、それらが同時負荷の下で動作している場合は、この調整可能パラメータ の値を大きくします。またこうした状況下では、I/O 動作の時間が長くなるように感じられます。 ps -fl を用い ることで、これらの I/O プロセスが同じ待ちチャネルで休眠状態になっていることが示されます (待ちチャネ ルの正確な数は変動します)。 この調整可能パラメータの値は、同時 I/O スレッド動作の数とデバイスの数を乗じた値まで大きくする必要が あります。ただし、同時 I/O スレッド動作の数を計測するのは困難なので、 ps -fl によってレポートされた休 眠プロセスの数より大きな値まで大きくし、ボトルネックがまだあるかどうかを監視することをお勧めしま す。 この値を大きくした場合の影響 カーネル動的メモリーの使用量が増えます。特に各バッファーは、カーネル内に 608 バイトのメモリーを必要 とします。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-323 physical_io_buffers(5) physical_io_buffers(5) この調整可能パラメータの値を小さくする場合 調整可能パラメータの値が最小値より大きく、物理メモリーが不足している場合は、次の2つのケースの一方 が当てはまれば、この値を小さくすることができます。 • デバイスに対して読み取りまたは書き込みを実行している同時スレッドよりかなり多くのバッファーがマシ ン上にある場合。 • マシンの主なワークロードがメモリーをバインドし、追加のスペースを要求するものであり、対応している I/O ボトルネックが全体的なマシンの使用状況とは無関係である場合。 この値を小さくした場合の影響 カーネルまたはユーザーのメモリー要求に対して、物理メモリーが返されます。これにより、デバイスに対す る読み取りや書き込みに使用できるバッファーが少なくなり、いくつかのスレッドがバッファー待ちのために 休眠する可能性があります。その結果、それらのスレッドに関連するシステム パフォーマンスが低下する可能 性があります。 同時に変更する必要がある他の調整可能パラメータ physical_io_buffers の変更は、他の調整可能パラメータと無関係です。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 physical_io_buffers は、HP で開発されました。 Section 5-324 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 portal(5) portal(5) 名称 portal − アプリケーション用の「将来のウィンドウ」 構文 #include <sys/portal.h> 説明 このヘッダファイルは、アプリケーション用の「将来のウィンドウ」であり、次の操作に役立ちます。 • 32 ビットと 64 ビットのシステムで相互に移植可能なコードを書き込むこと。 • 整数型のサイズに関する前提条件がドキュメント化されないことのないようにすること。 • 整数型のサイズについて明示的でなければならないコードを書き込むこと。 • 異なるサイズの整数型のあるプラットフォームに移植可能なコードを書き込むこと。 • 32 ビットと 64 ビットのシステム間で移植可能な、よく使われるマクロを共有すること。 このファイルで定義されたマクロの他に、ヘッダファイル limits.h (limits(5) を参照) と inttypes.h (inttypes(5) を 参照) が含まれます。 次のマクロが、 sys/portal.h の中で定義されます。 SET_MASK_BIT( bit_num, type) このマクロを使って、1ビットを設定したマスクを作成できます。 bit_num は設定するビットの位置で あり、 type はマスクのデータ型です。オーバーフローまたはアンダーフローの場合には、-1 が戻され ます。 SET_MASK_BIT_LOOP(mask, bit_num, type) このマクロを使って、マスク内にビットを設定できます。 mask はマスクの現在値、 bit_num は設定す るビットの位置、 type はマスクのデータ型です。 SIGN_BIT(type) このマクロを使って、指定されたデータ型に対して符合ビットの位置を戻すことができます。 type は、符合ビットの位置を戻す場合のデータ型です。 SIGN_BIT_MASK(type) このマクロを使って、指定されたデータ型に対して符合ビットのマスクを戻すことができます。 type は、符合ビットマスクを戻す場合のデータ型です。 SIGN_EXTEND(value, old_type, new_type) このマクロを使って、1 つのデータ型から別のデータ型に符合拡張を行うことができます。 value は、 符合拡張される現在値です。 old_type は value の現在のデータ型であり、 new_type は value の新しい データ型です。 TEST_ENDIAN(endian) このマクロを使って、コードが Big Endian または Little Endian でコンパイルされたかどうかをチェッ クすることができます。 endian は、結果が戻される整数です。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-325 portal(5) portal(5) 次のマクロは、コンパイルフラグ _FILE_OFFSET_BITS に基づいてサイズを変更できるデータ型の値の印刷 書式設定および走査書式設定用に使用できます。このようなデータ型の例として、 off_t および fpos_t があり ます。 PRIdF64 d 32 ビットまたは 64 ビットのサイズ値の印刷書式設定オプション PRIoF64 o 32 ビットまたは 64 ビットのサイズ値の印刷書式設定オプション PRIxF64 x 32 ビットまたは 64 ビットのサイズ値の印刷書式設定オプション PRIuF64 u 32 ビットまたは 64 ビットのサイズ値の印刷書式設定オプション SCNdF64 d 32 ビットまたは 64 ビットのサイズ値の走査書式設定オプション SCNoF64 o 32 ビットまたは 64 ビットのサイズ値の走査書式設定オプション SCNxF64 x 32 ビットまたは 64 ビットのサイズ値の走査書式設定オプション SCNuF64 u 32 ビットまたは 64 ビットのサイズ値の走査書式設定オプション 例 次の例の SET_MASK_BIT マクロは、64 ビット整数の中の高位ビットをオンにします。 SET_MASK_BIT(SIGN_BIT(int64_t), int64_t) 次の例の SET_MASK_BIT マクロは、32 ビット整数の中の符合ビットを除くすべてのビットをオンにするた めに使われます。 ˜SET_MASK_BIT(SIGN_BIT(int32_t), int32_t) 次の例の SET_MASK_BIT_LOOP マクロは、最大整数の 3 つの最下位ビットをオンにします。 int i; intmax_t mask = 0; for (i = 0; i < 3; i++) { SET_MASK_BIT_LOOP(mask, i, intmax_t); } 次の例の SIGN_BIT マクロは、32 ビット整数の中の符合ビットの位置を戻します。 SIGN_BIT(int32_t) 次の例の SIGN_BIT_MASK マクロは、32 ビット整数に対する符合ビットマスクを戻します。 SIGN_BIT_MASK(int32_t) 次の例の SIGN_EXTEND マクロは、char データ型に保存されている 8 ビット整数を 64 ビット整数に変換し、 符合を正しく拡張します。 char c; int64_t i; Section 5-326 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 portal(5) portal(5) i = SIGN_EXTEND(c, char, int64_t); 次の例の TEST_ENDIAN マクロは、Big Endian でコンパイルされた場合に endian に 1 を保存し、それ以外の 場合は endian に 0 を保存します。 int endian; TEST_ENDIAN(endian); if (endian == 0) printf("This a little endian system\n"); if (endian == 1) printf("This a big endian system\n"); 著者 portal.h は、HP で開発されました。 ファイル /usr/include/sys/portal.h 参照 inttypes(5), limits(5), printf(3S), scanf(3S) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-327 pthread_stubs(5) pthread_stubs(5) 名称 pthread_stubs − C ライブラリにスタブが用意されている pthread 呼び出しのリスト 説明 libc 累積パッチの PHCO_22923 (11.00) および PHCO_23772 (11.11) 以降の libc 共有ライブラリには、 libpthread および libcma にある pthread 関数のためのスタブが含まれています。それらのスタブにより、非スレッドアプリケーション が、pthread シンボルを解決するために、スレッドセーフ ライブラリを動的にロードできます。スタブへの pthread または cma 呼び出しを解決するアプリケーションは、リンク行に -lpthread または -lcma を置かずに構 築される必要があります。 libc に用意されるスタブには機能がありません。それらは、ゼロを返すダミー関数です。ただし、 pthread_getspecific(3T) ファミリの API だけは、スタブにフル機能が実装されています。 以下のどのスタブ関数への pthread 呼び出しでも、ゼロが返されます。 pthread_atfork(3T) pthread_attr_destroy(3T) pthread_attr_getdetachstate(3T) pthread_attr_getguardsize(3T) pthread_attr_getinheritsched(3T) pthread_attr_getschedparam(3T) pthread_attr_getschedpolicy(3T) pthread_attr_getscope(3T) pthread_attr_getstackaddr(3T) pthread_attr_getstacksize(3T) pthread_attr_setdetachstate(3T) pthread_attr_setguardsize(3T) pthread_attr_setinheritsched(3T) pthread_attr_setschedparam(3T) pthread_attr_setschedpolicy(3T) pthread_attr_setscope(3T) pthread_attr_setstackaddr(3T) pthread_attr_setstacksize(3T) pthread_cancel(3T) pthread_cond_broadcast(3T) pthread_cond_destroy(3T) pthread_cond_init(3T) pthread_cond_signal(3T) pthread_cond_timedwait(3T) pthread_cond_wait(3T) pthread_condattr_destroy(3T) Section 5-328 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_stubs(5) pthread_stubs(5) pthread_condattr_getpshared(3T) pthread_condattr_init(3T) pthread_condattr_setpshared(3T) pthread_continue(3T) pthread_detach(3T) pthread_getconcurrency(3T) pthread_getschedparam(3T) pthread_join(3T) pthread_kill(3T) pthread_mutex_destroy(3T) pthread_mutex_getprioceiling(3T) pthread_mutex_init(3T) pthread_mutex_lock(3T) pthread_mutex_setprioceiling(3T) pthread_mutex_trylock(3T) pthread_mutex_unlock(3T) pthread_mutexattr_destroy(3T) pthread_mutexattr_getprioceiling(3T) pthread_mutexattr_getprotocol(3T) pthread_mutexattr_getpshared(3T) pthread_mutexattr_gettype(3T) pthread_mutexattr_init(3T) pthread_mutexattr_setprioceiling(3T) pthread_mutexattr_setprotocol(3T) pthread_mutexattr_setpshared(3T) pthread_mutexattr_settype(3T) pthread_once(3T) pthread_rwlock_destroy(3T) pthread_rwlock_init(3T) pthread_rwlock_rdlock(3T) pthread_rwlock_tryrdlock(3T) pthread_rwlock_trywrlock(3T) pthread_rwlock_unlock(3T) pthread_rwlock_wrlock(3T) pthread_rwlockattr_destroy(3T) pthread_rwlockattr_getpshared(3T) pthread_rwlockattr_init(3T) pthread_rwlockattr_setpshared(3T) pthread_self (3T) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-329 pthread_stubs(5) pthread_stubs(5) pthread_setcancelstate(3T) pthread_setcanceltype(3T) pthread_setconcurrency(3T) pthread_setschedparam(3T) pthread_sigmask(3T) pthread_suspend(3T) pthread_testcancel(3T) 以下の pthread 呼び出しのスタブにはフル機能があります。詳細については、 pthread(3T) を参照してくださ い。 pthread_key_create(3T) pthread_getspecific(3T) pthread_setspecific(3T) pthread_key_delete(3T) pthread_exit(3T) 以下のスタブへの呼び出しでは、それぞれ次の値が返されます。 pthread_self (3T) は常に1を返します。 pthread_equal(arg1,arg2) は (arg1==arg2) を返します。 pthread_create(3T) および pthread_attr_init(3T) は ENOSYS を返します。 上に挙げたスタブは、 libc 内に用意されます。これは、HP-UX において、非スレッドアプリケーションがスレッドセーフ ライブラリに リンクすると、アプリケーションからスレッドセーフ ルーチンへの呼び出しが、 pthread_* 形式の未解決シン ボルを原因として実行時に失敗するためです。それらのシンボルを解決するには、非スレッドアプリケーショ ンをスレッド ライブラリ (libpthread または libcma) とリンクする必要があります。ただし、スレッドライブラ リとリンクすると、アプリケーションは、スレッドを作成しない場合でもスレッドセーフ機能を使用しなけれ ばならず、それによってパフォーマンスが低下します。 この問題を克服するために、 POSIX.1c API のスタブが C ライブラリ内に用意されています。HP-UX C 言語ラ イブラリ内に POSIX.1c API のスタブを用意すると、非スレッドアプリケーションに対して次の2つの直接的 な効果があります。 • 非スレッドアプリケーションがスレッドセーフ ライブラリとリンクすると、 POSIX.1c スレッドシンボル が解決されます。 • 実スレッドライブラリのオーバーヘッドを回避します。特に、非スレッドアプリケーションが実スレッドラ イブラリ プロシージャではなくスレッドスタブを使用する場合の相互実行関数に関連するオーバーヘッド を回避します。 Section 5-330 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread_stubs(5) pthread_stubs(5) リンク順の問題 実 pthread API または実 cma API を使用するはずだったアプリケーションが、 libc にあるスタブを誤って選択 してしまうことがあります。これはリンク順の問題によるものです。cma 動作を必要とするアプリケーション は、 libcma とリンクしなければならず、サポートされているリンク順でそれを行わなければなりません。つま り、そのリンク行では必ず共有ライブラリが使用されるべきであり、 -lcma の前に -lc があってはなりませ ん。この条件が満たされる限り、正しい cma 関数が参照されます。同様に、pthread ライブラリ動作を必要と するマルチスレッドアプリケーションは、 libpthread とリンクしなければならず、サポートされているリンク 順でそれを行わなければなりません。また、共有 libc と libpthread だけを使用する必要があります。 例 以下に、潜在的なリンク順の問題に関する例を示します。 例1 libc 内の pthread スタブへの pthread または cma 呼び出しを解決する必要があるアプリケーション (または、リ ンクされているライブラリ) は、リンク行に -lpthread または -lcma を置かずに構築される必要があります。 リンク行で -lpthread または -lcma の前に -lc が指定されている場合は、pthread または cma 呼び出しが libc 内 の pthread スタブへの呼び出しとして解決されます。これは、以下の例に示すような問題を引き起こす可能性 があります。 $ cat thread.c #include <pthread.h> #include <stdio.h> void *thread_nothing(void *p) { printf("Success\n"); } int main() { int err; pthread_t thrid; err = pthread_create(&thrid, (pthread_attr_t *) NULL, thread_nothing, (void *) NULL); sleep(1); if (err) { printf("Error\n"); return err; HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-331 pthread_stubs(5) pthread_stubs(5) } } $ cc thread.c -lc -lpthread $ a.out Error $ chatr a.out a.out: shared executable shared library dynamic path search: SHLIB_PATH disabled second embedded path disabled first Not Defined shared library list: dynamic /usr/lib/libc.2 <- libc before libpthread dynamic /usr/lib/libpthread.1 shared library binding: deferred global hash table disabled ... 例1の解決策 スレッドアプリケーションの場合は、次のように、環境変数 LD_PRELOAD を libpthread ライブラリに設定し て実行可能ファイルを実行するか、実行可能ファイルを -lpthread とリンクします。 $ LD_PRELOAD="/usr/lib/libpthread.1" a.out Success $ cc thread.c -lpthread $ a.out Success $ chatr a.out a.out: shared executable shared library dynamic path search: SHLIB_PATH disabled second embedded path disabled first Not Defined shared library list: dynamic /usr/lib/libpthread.1 dynamic /usr/lib/libc.2 shared library binding: deferred Section 5-332 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 pthread_stubs(5) pthread_stubs(5) global hash table disabled ... 例2 スレッドアプリケーションにおいて、 -lpthread の前に -lc を指定すると、実行時に次のような問題が発生する 可能性があります。これは、pthread 呼び出しが、pthread ライブラリ内の関数に対してではなく、 libc 内のス タブに対して解決されるためです。 • 初期化されていない内部構造体が原因で、pthread 関数の呼び出しが失敗します。 • gethostbyname(3N) の呼び出しが失敗し、ヌルが返されます。 • Apache webmin アプリケーションおよび perl DBI アプリケーションが失敗し、次のエラーメッセージが表示 されます。 Can’t load libname.sl for module xxx: Invalid argument at address • shl_load(3X) が、次のエラーをともなって失敗します。 errno 22 (invalid argument) これは、 pthread_mutex_lock スタブがゼロを返すためです。 $ cat a.c #include <stdio.h> #include <dl.h> extern int errno; main() { shl_load("lib_not_found", BIND_DEFERRED, 0); printf("Error %d, %s\n", errno, strerror(errno)); } $ cc a.c -lc -lpthread $ a.out Error 22, Invalid argument $ LD_PRELOAD=/usr/lib/libpthread.1 ./a.out Error 2, No such file or directory $ cat b.c #include <stdio.h> #include <dlfcn.h> void* handle; HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-333 pthread_stubs(5) pthread_stubs(5) extern int errno; main() { handle = dlopen("lib_not_found", RTLD_LAZY); printf("Error %d, %s\n", errno, strerror(errno)); if (handle == NULL) { printf("Error: %s\n",dlerror()); } } $ cc b.c -lc -lpthread $ a.out Error 22, Invalid argument Error: $ ./a.out $ LD_PRELOAD=/usr/lib/libpthread.1 Error 0, Error 0 Error: Can’t open shared library: lib_not_found 上に挙げた問題のため、実行可能ファイルや共有ライブラリの構築コマンドでは -lc を指定しないでくださ い。デフォルトでは、実行可能ファイルのリンク行の最後でコンパイラドライバ (cc、 aCC、 f90) が、自動的 に -lc をリンカーに渡します。共有ライブラリが -lc を使用して構築されているかどうかを確認するには、 chatr の出力で共有ライブラリリストを参照するか (chatr(1) を参照)、次のように ldd を使用して従属ライブラ リをリストします (ldd(1) を参照)。 $ cc +z -c lib1.c $ ld -b -o lib1.sl lib1.o -lc $ ldd lib1.sl /usr/lib/libc.2 => /usr/lib/libc.2 /usr/lib/libdld.2 => /usr/lib/libdld.2 /usr/lib/libc.2 => /usr/lib/libc.2 $ cc +DA2.0W +z -c lib1.c $ ld -b -o lib1.sl lib1.o -lc $ ldd lib1.sl Section 5-334 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 pthread_stubs(5) pthread_stubs(5) libc.2 => /lib/pa20_64/libc.2 libdl.1 => /usr/lib/pa20_64/libdl.1 依存する共有ライブラリが実行時にロードされる順序を確認するには、次のように、実行可能ファイルに対し て ldd コマンドを使います (64 ビットモードでのみ正しい順序が表示されます)。 ldd コマンドを 32 ビット モードで使用すると、ライブラリのロード順序が逆順で表示されます。 $ cc +DA2.0W thread.c -lpthread $ ldd a.out libpthread.1 => /usr/lib/pa20_64/libpthread.1 libc.2 => /usr/lib/pa20_64/libc.2 libdl.1 => /usr/lib/pa20_64/libdl.1 $ cc +DA2.0W thread.c -lc -lpthread $ ldd a.out libc.2 => /usr/lib/pa20_64/libc.2 libpthread.1 => /usr/lib/pa20_64/libpthread.1 libdl.1 => /usr/lib/pa20_64/libdl.1 $ cc +DA2.0W thread.c -lpthread -lc $ ldd a.out libpthread.1 => /usr/lib/pa20_64/libpthread.1 libc.2 => /usr/lib/pa20_64/libc.2 libdl.1 => /usr/lib/pa20_64/libdl.1 推奨事項: • すべての共有ライブラリの構築コマンドから -lc を削除します。 • すべての実行可能ファイルの構築コマンドから -lc を削除します。 • libpthread または libcma の絶対パス名に設定された LD_PRELOAD 環境変数を使用します。これにより、 そのライブラリがプログラムの起動時に、他の従属ライブラリより先にロードされます。 LD_PRELOAD に関する機能は、 PHSS_22478 以降のリンカーのパッチで使用可能です。 dld.sl(5) マンページを参照して ください。 • コンパイラドライバの代わりに ld(1) コマンドを用いて直接リンクする場合、リンク行で最後のコンポーネ ントとして、 -lc を追加します。 例3 (64 ビット) 64 ビット共有ライブラリが -lpthread を使用して構築され、実行可能ファイルには -lpthread が使用されていな い場合は、(幅優先探索のため) libpthread の前に libc がロードされ、pthread 呼び出しは、 libc 内の pthread ス HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 5-335 pthread_stubs(5) pthread_stubs(5) タブに対する呼び出しとして解決されます。実行時には、 a.out がロードされた後に、 a.out が依存しているも のが幅優先順でロードされます。つまり、 libc は、 libpthread が libc.2 の従属としてロードされる前に、 a.out の従属としてロードされます。最初のケースの依存関係リストは次のとおりです。 a.out / / \ lib1 lib2 libc | | libc libpthread したがって、ロードグラフは次のように構成されます。 lib1.sl --> lib2.sl -->libc.2 --> libpthread.1 これは、非スレッドアプリケーションには必要な動作ですが、 libpthread または libcma を使用するスレッド アプリケーションは失敗します。 lib1.sl は -lc を指定します。 lib2.sl の生成時に -lpthread を指定し、 a.out の生成時に -lpthread を指定しない 場合、次のようになります。 $ cc -c +z +DA2.0W lib1.c lib2.c lib1.c: lib2.c: $ ld -b -o lib1.sl -lc lib1.o $ ld -b -o lib2.sl -lpthread lib2.o $ cc +DA2.0W thread.c -L. -l1 -l2 $ a.out Error $ ldd a.out lib1.sl => ./lib1.sl lib2.sl => ./lib2.sl libc.2 => /usr/lib/pa20_64/libc.2 libc.2 => /lib/pa20_64/libc.2 libpthread.1 => /lib/pa20_64/libpthread.1 libdl.1 => /usr/lib/pa20_64/libdl.1 lib2.sl の生成時に -lpthread を指定し、 a.out の生成時に -lpthread を指定しない場合、次のようになります。 $ ld -b -o lib1.sl lib1.o Section 5-336 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 pthread_stubs(5) pthread_stubs(5) $ ld -b -o lib2.sl -lpthread lib2.o $ cc +DA2.0W thread.c -L. -l1 -l2 $ a.out Error $ ldd a.out lib1.sl => ./lib1.sl lib2.sl => ./lib2.sl libc.2 => /usr/lib/pa20_64/libc.2 libpthread.1 => /lib/pa20_64/libpthread.1 libdl.1 => /usr/lib/pa20_64/libdl.1 libcma が共有ライブラリの従属ライブラリとしてリストされているときに、 -lcma を使用して実行可能ファイ ルをリンクする必要がある場合にも同じ問題が起こります。 例3の推奨事項 スレッドアプリケーションについては、次のように、 LD_PRELOAD を libpthread ライブラリに設定して実行 可能ファイルを実行するか、 -lpthread を使用して実行可能ファイルをリンクします。 まず、 LD_PRELOAD を使用して libpthread をロードします。 $ ld -b -o lib1.sl lib1.o $ ld -b -o lib2.sl -lpthread lib2.o $ cc +DA2.0W thread.c -L. -l1 -l2 $ a.out Error $ ldd a.out lib1.sl => ./lib1.sl lib2.sl => ./lib2.sl libc.2 => /usr/lib/pa20_64/libc.2 libpthread.1 => /lib/pa20_64/libpthread.1 libdl.1 => /usr/lib/pa20_64/libdl.1 $ LD_PRELOAD="/lib/pa20_64/libpthread.1" a.out Success HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 5-337 pthread_stubs(5) pthread_stubs(5) a.out は、スレッドアプリケーションに対する -lpthread を正しくリストします。 $ ld -b -o lib1.sl lib1.o $ ld -b -o lib2.sl -lpthread lib2.o $ cc +DA2.0W thread.c -L. -l1 -l2 -lpthread $ a.out Success $ ldd a.out lib1.sl => ./lib1.sl lib2.sl => ./lib2.sl libpthread.1 => /usr/lib/pa20_64/libpthread.1 libc.2 => /usr/lib/pa20_64/libc.2 libpthread.1 => /lib/pa20_64/libpthread.1 libdl.1 => /usr/lib/pa20_64/libdl.1 例4 (アーカイブ libc) 共有ライブラリのリンク行に、 libc を明示的にリンクするための -lc が含まれる場合は、 -lc を削除します。そ うしないと、 a.out が古い (アーカイブ) libc バージョンを参照する一方で、共有ライブラリが libc.2 を参照し ている場合があります。その場合、アプリケーションは、実際には、異なる2つのバージョンの libc を使用す ることになり、コードが混在する可能性もあります。これは互換性の問題になる可能性があります。基本的に は、アプリケーションもライブラリも、 libc を直接リンクすべきではありません。すべてのプログラムは、 libc とリンクされる必要があります (これは、コンパイラによって自動的に行われます)。したがって、共有ラ イブラリには、正しく実行されるために必要なインタフェースが必ず含まれ、リンク行で -lc を指定する必要 はありません。 参照 chatr(1)、 ld(1)、 ldd(1)、 pthread(3T)、 shl_load(3X)、 dld.sl(5) Section 5-338 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 quota(5) quota(5) 名称 quota − ディスク割り当て 説明 システム管理者は、ディスク割り当てを用いて、ファイルシステムごとに、ユーザーが所有できるファイルと ファイルブロックの個数を制限できます。ユーザーごとに、ファイル (iノード) の個数と、1キロバイトブロッ クの個数のそれぞれについて、別々の制限を課すことができます。 論理 (希望的)制限と、 物理制限とがあり ます。 例えば、ユーザー joe_doe の HOME ディレクトリと /tmp, を含むルートファイルシステム (/) でのユーザーの 論理制限は1000ブロック、200ファイルで、物理制限は1200ブロック、300 ファイルであり、マウントされた ファイルシステム /mnt でのこのユーザーの論理ブロック制限は100、物理ブロック制限は120、ファイル制限 は特にない (0) という具合です。 各ファイルシステムで、時間制限が設定されます。これは、ユーザーが論理制限を超過することが許される時 間です。デフォルト時間制限は1週間 (7日間) です。 ユーザーが論理制限を超過すると、ユーザーの端末に警告が出ます。ユーザーは論理制限を超えて使用を続け ることができますが、物理制限を超過するか、または設定された"時間制限"を超過すると、使用を続けること はできなくなります。これらのどちらかの状況になると、ユーザーの端末にメッセージが送られ、以降のファ イル作成またはブロック使用、あるいはその両方をしようとしてもできません。正常な操作を行えるようにす るには、この時点でユーザーは、論理制限を超えないように、制限を超過した部分の使用量を減らさなければ なりません。 ディスク割り当て制限を超過しているユーザーに対しては、 (login(1) が) ログイン時に、超過しているディス ク割り当てと、その改善のための方法を知らせます。ユーザーは quota コマンド (quota(1) を参照) を用いて、 いつでも、現在のディスク割り当て状況を知ることができます。 割り当て制限と使用統計は、割り当てが有効になっているファイルシステムごとに、オペレーティングシステ ムによって保守されています (mount(1M) および quotaon(1M) を参照)。 ディスク割り当ては、各ユーザー、各ファイルシステムに対して独立に、 edquota (edquota(1M) を参照) を用 いて設定されます。このコマンドで、ユーザーが論理制限を超過することが許される時間も設定することがで きます。デフォルトの時間制限は1週間です。 制限値と使用量統計は、割り当てが有効になっている各ファイルシステムのルートの quotas ファイルに静的に 格納されています。このファイルとカーネル内の情報は、 quotactl() システムコール (quotactl(2) を参照) を使 用したとき、および、そのファイルシステムがアンマウントされたときに、一致させられます。 /etc/fstab ( fstab(4) および mount(1M) を参照) のオプションリストに quotas オプションを加えると、ブート時ま たはマウント時に自動的に割り当てが有効になります。デフォルトでは、 mount ディスク割り当てを有効にし ません。 その後、割り当てを無効にしたり、再び有効にするには、 quotaoff および quotaon コマンド (quotaon(1M) を 参照) を用います。割り当てが無効になっていると、カーネルは、使用量統計の保守を行いませんし、ファイ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-339 quota(5) quota(5) ルシステムを利用すれば、 quotas ファイルの使用量統計は無効になります。割り当てを無効にすると性能は向 上しますが、その後、割り当てを再び有効にした場合、カーネルと quotas ファイルをアップデートするために quotacheck コマンド (quotacheck(1M) を参照) を実行する必要が生じます。 repquota コマンド (repquota(1M) を参照) は、現在の割り当て統計値のレポートを表示します。関連はあるが独 立の quot コマンド (quot(1M) を参照) は、ディスク割り当てと独立に、ディスク利用情報を集めてレポートし ます。 mount コマンド (mount(1M) を参照) は、割り当てが有効になっているファイルシステムを報告します。 データ記憶構造体 quotactl() システムコール (quotactl(2) を参照)は、 dqblk データ構造体 (<quota.h> で定義されています) を用い て割り当て情報を取得し設定します。この構造体には、特定のファイルシステムに関する、ユーザーの現在の ファイル数、ブロック数、ブロックカウントおよび割り当て制限を記憶するフィールドが入っています。 struct dqblk には次の要素が入っています。 uint32_t dqb_bhardlimit; /* maximum # of disk blocks +1 */ uint32_t dqb_bsoftlimit; /* preferred limit on disk blocks */ uint32_t dqb_curblocks; /* current block count */ uint32_t dqb_fhardlimit; /* maximum # allocated files +1 */ uint32_t dqb_fsoftlimit; /* preferred file limit */ uint32_t dqb_curfiles; /* current # allocated files */ uint32_t dqb_btimelimit; /* time limit for excessive block use */ uint32_t dqb_ftimelimit; /* time limit for excessive files */ dqblk64 データ構造体 (<quota.h> で定義されています) は、64 ビットファイルシステムのための割り当て情報 を取得または設定するために、 quotactl() システムコール (quotactl (2) を参照) で使用されます。この構造体に は、特定のファイルシステムに関する、ユーザーの現在のファイル数、ブロック数、および割り当て制限を記 憶するフィールドがあります。VxFS 3.5 の場合、 dqb64_curblocks フィールドでの使用状況の追跡は最大 2 TB までであることに注意してください。 struct dqblk64 には次の要素が入っています。 uint64_t dqb64_bhardlimit; /* maximum # of disk blocks +1 */ uint64_t dqb64_bsoftlimit; /* preferred limit on disk blocks */ uint64_t dqb64_curblocks; /* current block count */ uint64_t dqb64_fhardlimit; /* maximum # allocated files +1 */ uint64_t dqb64_fsoftlimit; /* preferred file limit */ uint64_t dqb64_curfiles; /* current # allocated files */ uint64_t dqb64_btimelimit; /* time limit for excessive block use */ uint64_t dqb64_ftimelimit; /* time limit for excessive files */ Section 5-340 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 quota(5) quota(5) ネットワーク機能 割り当ては、NFS ファイルシステム上で完全にサポートされてはいません。しかし、ディスク割り当てが有効 になっているリモート NFS ファイルシステムが RPC rquotad サービス (rquotad(1M) を参照) を提供している場 合は、 quota コマンドがそのファイルシステム上の割り当て統計を報告することができます。 rquotad は、他のシステムへの返答を行うためのものです。 例 初期化設定 ディスク割り当てが利用できるようにカーネルを再構成しなければなりません。システム管理者マニュアルを 参照してください。ディスク割り当てを設定することのできるファイルシステムは、マウント時のオプション に rw および quota, を指定したものです。 mount(1M) および fstab(4) に説明があります。 割り当てが有効になっているファイルシステムごとに、以下の作業を行います。 1. ファイルシステムをマウントします。 2. /etc/fstab に書かれているオプションのリストに quota を加えます。例えば、ルート (/) に関し て設定されている default という文字列を default,quota に書き換えます。いったんこれを行っ ておけば、システムのリブート時に該当するすべてのシステムについて割り当てが自動的に有 効になります。 3. そのファイルシステムのマウントディレクトリに quotas ファイルを作成します。例えば /mnt ファイルシステムに関して、次のコマンドを実行します。 cpset /dev/null /mnt/quotas 600 root bin 4. edquota コマンド (edquota(1M) を参照) を用いて、1つまたは複数の prototype ユーザー割り当 てを設定します。 システム上の多数のユーザーに、同一の制限を課したい場合は、 edquota を用いて、その割り 当てを proto_user に設定し、次に edquota -p コマンドを使って、その制限をユーザーグループ に複写させます。 5. quotaon. を使用して、そのファイルシステムでの割り当てをオンにします。例えば次のコマ ンドを実行します。 /usr/sbin/quotaon /mnt 6. そのファイルシステムで quotacheck (quotacheck(1M) を参照) を走らせて、現在の使用量統計 を記録させます。 新規ユーザーの追加 新規ユーザーを割り当てシステムに追加するには 1. edquota を用いて、既存のユーザーの割り当てを複写します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-341 quota(5) quota(5) quotacheck を走らせます。 2. 設定されたシステムへの新規ファイルシステムの追加 上記 初期化設定の1から5を、新規ファイルシステムに関して繰り返します。 警告 デフォルトでは、 HP-UX は、 chown(2) を許容します。これは、ディスク割り当て機構と不一致を起こすこと があります。 chown コマンド (chown(1) を参照) あるいは chown() システムコール (chown(2) を参照) システム コールをユーザーが利用できると、ディスク割り当ては役に立たなくなります。 setprivgrp コマンド (setprivgrp(1M) を参照) コマンドを用いて chown() システムコールへのアクセスを制限することによって、指定された グループのユーザーだけに chown コマンドや chown() システムコールの使用を認めることができます。 sam コマンド (sam(1M) を参照) は、まだディスク割り当てをサポートしていません。新規ユーザーまたは新規 ファイルシステムを追加する場合、 sam の外部で所望の割り当てを設定する必要があります。 HP は、割り当てを mount で有効にしたり、 umount (umount(1M) を参照) で無効にしたときの quotas ファイル の内容を正しく保つために、元のインプリメンテーションにいくつかの機能を追加しました。この追加のおか げで、 quotacheck (quotacheck(1M) を参照) を走らせる必要はなくなりました。しかし、 quotaoff および quotaon (quotaon(1M) を参照) を用いて割り当てを制御している場合には、これらの機能は効果がありません。 quotacheck は、動作していないファイルシステムに対してのみ実行してください。これは、正確な使用量情報 を得るためです。 fsclean コマンド ( fsclean(1M) を参照) の −qv オプションは、現時点で割り当て情報を作れる かどうかを報告します。 著者 ディスク割り当てはカリフォルニア大学バークレー校、Sun Microsystems, Inc. および HP で開発されました。 ファイル /etc/fstab ファイルシステムに関する静的情報 /etc/mnttab マウントされたファイルシステムのテーブル directory/quotas ファイルシステムに関する割り当て統計の静的記憶領域。ただし directory は、その ファイルシステムのルートで、 mount コマンド (mount(1M) を参照) に指定されるも のです。 参照 chown(1)、 chown(2)、 quota(1)、 edquota(1M)、 fstab(4)、 mount(1M)、 quot(1M)、 quotacheck(1M)、 quotaon(1M)、 rquotad(1M), setprivgrp(1M)、 quotactl(2)、 vfsmount(2) Section 5-342 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rcsintro(5) rcsintro(5) 名称 rcsintro − RCS コマンドの説明 説明 リビジョン コントロールシステム(RCS) は、 ASCII形式のテキストファイルのリビジョンの保管、検索、ロギ ング、識別、およびマージを自動化します。 RCS は頻繁に変更されるファイルを管理するのに便利です。 関数 RCS • テキストファイルのリビジョンの保管および検索。 RCS は記憶領域の効率の良い方法でリビジョンを保管 します。リビジョン番号、シンボリル名、日付、著者、および状態によってリビジョンを検索できます。 • 変更の完全な履歴の保守。 RCS は変更のすべてを自動的に記録します。各リビジョンのテキストに追加を 行うとき、 RCS は、著者、チェックインの日付と時間、 および変更を要約したロギングメッセージを記憶 します。 • アクセス競合の解消。 2人以上の人が、同じリビジョンのファイルを修正しようとすると、 RCS は警告を 与え、一方の修正が他方を変えてしまわないようにします。 • リビジョンのツリーの保守。 RCS は、各ファイルについて、異なる開発ラインを保守することができま す。リビジョン間の親子関係を表すツリー構造を記憶します。 • リビジョンのマージおよび競合の解消。 1つのファイルの2つの開発ラインを、マージして合流する事がで きます。マージする複数のリビジョンがファイルの同じ行に影響を及ぼす場合、 RCS は、重複する変更を 知らせます。 • リリースおよび設定の制御。リビジョンにシンボリル名を与えることができ、リリースされた (released)、 定常 (stable)、実験用 (experimental) などのマークを付けられます。これらの機能により、ファイルの設定 を、簡素にかつダイレクトに記述できます。 • ファイル名、リビジョン番号、作成時刻、著者などによる、各リビジョンの自動識別。この識別はスタンプ のようなもので、リビジョンのテキスト中の適当な位置に埋め込めます。このスタンプにより、どのファイ ルのどのリビジョンによって、与えられた構成ができるのかが簡単にわかります。 • 二次記憶領域の最小化。 RCS は、リビジョン管理のために余分なスペースを少ししか使用しません (差異の みが記憶されます)。中間のリビジョンを削除した場合は、それに従って、残っている差異が圧縮されま す。 RCS 入門 基本的なユーザーインタフェースはきわめて簡単です。初心者は2つのコマンド、すなわち ci(1) と co(1) を覚 えるだけで十分です。 ci は「チェックイン」の短縮形で、 RCS ファイルと呼ばれるアーカイブファイルに、 テキストファイルの内容を保存させます。 1つの RCS ファイルには、特定のテキストファイルのすべてのリビ ジョンがあります。 co は「チェックアウト」の短縮形で、 RCS ファイルからリビジョンを検索します。 f.c というファイルを RCS で制御しようとしていると想定します。以下のチェックイン コマンドを実行してく ださい。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-343 rcsintro(5) rcsintro(5) ci f.c このコマンドにより、 RCS ファイル f.c,v が作成され、その中に f.c がリビジョン 1.1 として記憶され、そして f.c は削除されます。また、チェックイン コマンドは、ファイルについての説明文を要求します。説明文に は、ファイルの内容の概要を記述するようにしてください。以後、チェックイン コマンドを実行すると、加え られた変更を要約するログエントリーの内容を要求します。 名前が ",v" で終わるファイルは、 RCS ファイルと呼ばれ ("v" は "versions" を意味します)、他のファイルは ワーキングファイルであるとみなされます。先ほどの例のワーキングファイル f.c を元に戻すには、次の チェックアウト コマンドを使います。 co f.c このコマンドは、 f.c,v から最新のリビジョンを取り出し、 f.c に書き込みます。 f.c を編集したら、次のコマ ンドを実行して、再びチェックインできます。 ci f.c ci はリビジョン番号を正しくインクリメントします。 ci がメッセージ ci error: no lock set by <your login> を訴えるのは、システム管理者が、すべての RCS ファイルのロック属性の設定を、「厳密 (strict) 」にしている 場合です。この場合は、前回チェックアウトする際にリビジョンをロックしておくべきでした。つまり、前回 のチェックアウトは次のようにするべきでした。 co −l f.c もちろん、今となってはロックをしてチェックアウトするには遅すぎます。なぜなら、おそらくすでに f.c を 変更してしまっていて、再びチェックアウトを行うと、その変更がオーバライトされてしまうからです。 チェックアウト コマンドの代わりに、次のコマンドを実行してください。 rcs −l f.c このコマンドは、他の誰もロックしていなければ、最新のリビジョンをロックします。そうでない場合は、 ロックをかけた人と協議する必要があるでしょう。 ロッキングは、他の人が次のアップデートをチェックインできないことを保証し、複数の人が同じファイルに ついて作業をする場合に生じる、難しい問題を避けることができます。リビジョンがロックされたとしても、 読出しやコンパイルなどのためにチェックアウトすることはできます。ロッキングは、ロックした人以外の人 がチェックインするのを回避するだけです。 RCS ファイルがプライベートの場合、つまり他の人がリビジョンをそこに置くことはないという場合は、厳密 なロッキングは必要なく、無効にできます。厳密なロッキングを無効にした場合は、 RCS ファイルの所有者は チェックインするのにロックをかける必要はなく、他の人はロックする必要があります。厳密なロッキングを 無効にしたり有効にしたりするには、次のコマンドを実行します。 Section 5-344 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rcsintro(5) rcsintro(5) rcs −U f.c および rcs −L f.c ワークディレクトリを RCS ファイルで乱雑にしたくない場合は、 RCS という名前のサブディレクトリをワーク ディレクトリに作成し、すべての RCS ファイルをそこに移動します。 RCS 関係のコマンドは、必要なファイル を見つけるのに、そのディレクトリを検索します。上で説明したすべてのコマンドは、修正しなくてもそのま ま動作します。 チェックインするときにワークファイルを削除したくない場合 (続けて編集したい場合) は、次のように実行し ます。 ci −l f.c あるいは ci −u f.c これらのコマンドは、 f.c を通常の場合と同様にチェックインしますが、暗黙的にチェックアウトも実行しま す。最初の形式では、リビジョンのロックも行いますが、2番目の形式ではロックしません。このように、こ れらのオプションを使うと、チェックアウト操作を行わずにすみます。最初の形式はロッキングが厳密な場合 に有用で、2番目の形式は厳密でない場合に有用です。どちらも、ワークファイル中の識別用のマーカ (後述) をアップデートします。 チェックインするリビジョンに与えたい番号を、 ci で指定できます。これまでのリビジョンが1.1, 1.2, 1.3 など の番号であり、以後はリリース2を開始すると仮定します。コマンド ci −r2 f.c あるいは ci −r2.1 f.c は、新しいリビジョンに2.1という番号を与えます。以後のリビジョンには、 ci によって 2.2, 2.3, ... という番 号が付けられます。同様に co コマンド co −r2 f.c および co −r2.1 f.c は、それぞれ2.xという番号の付いた最新のリビジョンおよびリビジョン2.1を、取り出します。リビジョン番 号を指定せずに co を実行すると、最新の、つまり2フィールドで構成される数の最も大きいリビジョンが選ば れます。分岐を扱うには、3つ以上のフィールドで構成される数が必要です。例えば、リビジョン1.3で分岐を 始めるには、次のように実行します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-345 rcsintro(5) rcsintro(5) ci −r1.3.1 f.c このコマンドにより、リビジョン1.3において、1という枝番が始まり、新しいリビジョンには1.3.1.1という番 号が付けられます。枝番のより詳しい情報については、 rcsfile(4) を参照してください。 RCS ファイル名と配置 RCS は、2種類のファイル、すなわち RCS ファイル(リビジョンアーカイブ) およびワークファイルを認識しま す。ワークファイル名は RCS のユーザーによって決められ、 RCS ファイル名は RCS がワークファイル名に",v" を追加して生成します。 RCS とワークファイルの組は、以下の3つの方法で指定できます。 • RCS ファイルとワークファイルの両方が与えられた場合。 RCS ファイル名は path1/workfile,v とい う形式であり、ワークファイル名は path2/workfile という形式となります。ただし、 path1 および path2 は(異なっているか、空の)パスであり、また workfile はファイル名です。 • RCS ファイルのみが与えられた場合。ワークファイルは現在のディレクトリにあると仮定され、そ の名前は、 RCS ファイルの名前から path1/ と、サフィックス ",v" を取り除いて求められます。 • ワークファイルのみが与えられた場合。 RCS ファイルは、ワークファイルの名前から path2/ を取 り除き、サフィックス ",v" を追加して求められます。 RCS ファイル名を指定しないか、パスなしで指定した場合は、 RCS コマンドは RCS ファイルを見つけるのに、 ディレクトリ ./RCS (あるいはそれがディレクトリリンクの場合は、それが指し示すディレクトリ) を検索し、 次に現在のワークディレクトリを検索します。 RCS ディレクトリリンク RCS はディレクトリリンクを提供します。 RCS という名前の通常のファイルが現在のワークディレクトリに存 在する場合、 RCS は、その最初の行を RCS ファイルが格納されているディレクトリのパス名であると解釈しま す。 RCS は、ディレクトリに達するのに、10までのディレクトリリンクのつながりをたどることができます。 自動識別 RCS は、識別のための特別な文字列を、ソースコードおよびオブジェクトコードの中に入れることができま す。そのような識別を行うためには、マーカ $Header$ をテキストの中、たとえばコメントの中に入れてください。 RCS はこのマーカを次の形式の文字列と置き換え ます。 $Header: filename revision_number date time author state$ このようなマーカを各モジュールの最初のページに入れておけば、作業中のリビジョンがどれであるかを常に 知ることができます。 RCS はそのマーカのアップデートを自動的に行います。マーカをオブジェクトコードに 伝達させるには、マーカを文字列の中に入れます。 Cでは、次のように行います。 static char rcsid[] = $Header$ ; ident コマンドは、オブジェクトコードやダンプなど、どのようなファイルの中からでも、そのようなマーカを Section 5-346 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rcsintro(5) rcsintro(5) 取り出します。したがって、 ident を使うと、どのモジュールのどのリビジョンが、プログラムに使われてい るのかを知ることができます。 マーカ $Log$ をテキストのコメントの中などに入れておくのも便利です。このマーカには、チェックインの時 に要求されるロギングメッセージが蓄積されます。したがって、ファイルの完全な履歴を、直接その中に入れ て保守することができます。他にもいくつかの識別用のマーカがあります。詳細については co(1) を参照して ください。 警告 RCS ファイルの名前は、ワークファイルの名前の最後に ,v を追加して生成されます。生成された RCS ファイル 名が、 RCS ファイルが存在するファイルシステムにとって長すぎる場合、 RCS コマンドはエラーメッセージを 表示して、終了します。 RCS はテキストファイルだけに適用するように設計されています。 RCS をテキストファイル以外(バイナリ ファイル)に適用しようとすると、データ破壊を引き起こします。 著者 rcsintro は、 Purdue 大学(West Lafayette, IN 47907)の Walter F. Tichy によって開発されました。 Revision Number: 3.0; Release Date: 83/05/11. Copyright 1982 by Walter F. Tichy. 参照 ci(1), co(1), ident(1), merge(1), rcs(1), rcsdiff(1), rcsmerge(1), rlog(1), rcsfile(4) Walter F. Tichy, "Design, Implementation, and Evaluation of a Revision Control System," in Proceedings of the 6th International Conference on Software Engineering, IEEE, Tokyo, Sept. 1982. HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-347 regexp(5) regexp(5) 名称 regexp − 正規表現およびパターンマッチング表記の定義 説明 正規表現は、テキスト中のパターンを発見し、操作するのに、多くのユーティリティでサポートされている機 構です。 「パターンマッチング表記」は、シェルや他のユーティリティで、ファイル名の展開に使われます。 このマニュアルエントリーでは、正規表現の2つの形式、 「基本正規表現」および 「拡張正規表現」と、ひと つの 「パターンマッチング表記」の形式を定義します。 基本正規表現 基本正規表現 (RE) の表記および構文規則は、基本 RE を使用すると定義されたユーティリティに適用します。 以下の規則の例外は、 RE を使用する特定のユーティリティで説明されています。 単一の文字にマッチする RE 次の RE は、単一の文字または単一の照合要素にマッチします。 通常の文字 通常の文字は、それ自身にマッチする RE です。通常の文字は、サポートされている文字セットのどの文字で もいいですが、改行文字と、下の 「特殊文字」にリストしてある正規表現特殊文字は除きます。通常の文字の 前にバックスラッシュ (\) を付けると、通常の文字それ自身として扱われますが、 (、 )、 {、 }、数字 1 ∼ 9 は除きます (「複数の文字にマッチする RE」を参照)。マッチングは、文字をコードに組むビットパターンに よるものであり、文字のグラフィック表現によるものではありません。 特殊文字 前にバックスラッシュを付けた正規表現特殊文字は、その特殊文字自身にマッチする正規表現です。前にバッ クスラッシュが付いていない場合は、そのような文字は、 RE の指定において特別な意味を持ちます。正規表 現特殊文字、およびそれらが特殊な意味を持つコンテキストを以下に示します。 ピリオド、左大かっこ、およびバックスラッシュは特殊文字です。ただし大かっこ式 .[\ の中で使われた場合は除きます (「RE 大かっこ式」を参照)。 アスタリスクは特殊文字です。ただし、大かっこ式の中で使われた場合、正規表現の * 最初の文字として使われた場合、あるいは文字のペア \( に続く最初の文字として使わ れた場合は除きます (「複数の文字にマッチする RE」を参照)。 サーカムフレックスは、 RE すべての最初の文字として使われるか (「式の固定」を ˆ 参照)、大かっこ式の最初の文字として使われる、特殊文字です。 ドル符号は、 RE すべての最後の文字として使われると、特殊文字です (「式の固 $ 定」を参照)。 デリミタ RE 全体の範囲を定めるのに使われている文字 (例えば、デリミタ) は、その RE にお いて特殊文字です。 Section 5-348 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 regexp(5) regexp(5) ピリオド ピリオド (.) は、大かっこ式の外で使うと、改行文字を除くどんなプリント可能文字にもプリント不可能文字 にもマッチする RE です。 RE 大かっこ式 大かっこ ([ ]) で囲まれた大かっこ式は、大かっこ式で示された空でない照合要素に含まれている、単一の照合 要素にマッチする RE です。 次の規則を、大かっこ式に適用します。 大かっこ式 大かっこ式は、 「マッチングリスト式」あるいは 「非マッチングリスト式」のいずれか であり、 1つかそれ以上の任意の順序の式で構成されます。式は、照合要素、照合記 号、非照合文字、等価クラス、レンジ式、あるいは文字クラスです。右大かっこ (]) は、大かっこ式の中でリストの最初 (最初の ˆ があればその後) に現れると、特別な意味 を失い、右大かっこ自身を表します。それ以外の場合、右大かっこは大かっこ式を終了 させます (ただし、有効な照合記号、等価クラス、あるいは文字クラスの最後の右大 かっこではなくて、照合記号あるいは等価クラス式の中の照合要素でない場合です)。次 の特殊文字 .*[\ (ピリオド、アスタリスク、左大かっこおよびバックスラッシュ) は、大かっこ式の中で は、その特別な意味を失います。 次の文字シーケンス [. [= [: (左大かっこの後にピリオド、等号、またはコロンが続いたもの) は、大かっこ式の中で は特殊な意味をもち、照合記号、等価クラス式、および文字クラス式の区切りとして使 用されます。これらの記号の後には有効な式が続かねばならず、マッチングは .]、 =]、 または :] で終了します。 マッチングリスト マッチングリスト式は、そのリストの中に現れる文字のどれにでもマッチするというリ ストを示します。サーカムフレックスをリストの最初の文字にすることはできません。 例えば、 [abc] は、 a、 b、あるいは c のどれにでもマッチする RE です。 非マッチングリスト 非マッチングリスト式は、サーカムフレックス (ˆ) で開始し、改行文字とそのリストの 中に現れる文字または照合要素「以外」のどれにでもマッチするというリストを示しま す。例えば、 [ˆabc] は、改行および a、 b、あるいは c 以外のどんな文字にもマッチす る RE です。サーカムフレックスは、リストの先頭、つまり左大かっこの直後に現れた とき 「のみ」特別な意味を持ちます。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-349 regexp(5) regexp(5) 照合要素 照合要素は、 1つかそれ以上の文字のシーケンスであり、ロケールカテゴリ LC_COLLATE の最も最近の設定を経て定義された照合シーケンスの中の単一の要素を表します (setlocale(3C) を参照)。 照合記号 照合記号は、大かっこ-ピリオド ([. .]) デリミタの中に囲まれた、照合要素です。複数文 字の照合要素は、単一文字の照合要素と区別するために、照合記号として表さなければ なりません。例えば、文字列 ch が有効な照合要素ならば、 ch が文字 c および h から成 る単一のリストとして扱われ、 [[.ch.]] は同じ文字の文字列にマッチする要素として扱 われます。大かっこ-ピリオドデリミタの中の文字列が現在の照合シーケンス定義の中の 有効な照合要素でない場合、記号は正しくない式として扱われます。 非照合文字 非照合文字は、照合の目的においては無視される文字です。定義では、そのような文字 は、等価クラスあるいはレンジ式に加わることはできません。 等価クラス 等価クラス式は、等価クラスに属する照合要素の集合を表します。これは、大かっこ-等 号 ([= =]) デリミタの中に、等価クラスのひとつ以上の照合要素を囲んで表されます。例 えば a と A が同じ等価クラスに属する場合、 [[=a=]b] と [[=A=]b] はそれぞれ [aAb] に 等価です。 レンジ式 レンジ式は、照合要素の集合を表しており、それは、ロケールカテゴリ LC_COLLATE の最も最近の設定を経て定義された現在の照合シーケンスの中の 2つの要素の間にマッ チします (setlocale(3C) を参照)。ハイフン (−) によって分離された、最初の位置と最後 の位置として表されます。 レンジの開始点と終了点は、照合要素、照合記号、あるいは等価クラス式のいずれかで なければなりません。等価クラス式をレンジ式の終了点として使用すると、等価クラス の中のすべての照合要素がレンジに含まれている、と解釈されます。 例えば、照合の順序が A、 a、 B、 b、 C、 c、 ch、 D、 d であり、文字 A および a ば等価クラスに属している場合は、式 [[=a=]−D] は [AaBbCc[.ch.]D] として扱われま す。 レンジの開始点と終了点の両方とも、有効な照合要素、照合記号、あるいは等価クラス 式でなくてはならず、レンジの終了点は開始点と比べて同じか高くなければなりませ ん。そうでないと、式は正しくありません。例えば、上の照合順序で、 E が非照合文字 であると仮定すると、式 [[=A=]−E] および [d−a] の両方とも正しくありません。 レンジの終了点は、それに続いているレンジ式の開始点になることができます。そのよ うなおのおののレンジ式は別々に評価されます。例えば、大かっこ式 [a−m−o] は [a−mm−o] として扱われます。 ハイフン文字は、リストの最初 (先頭の ˆ の後) やリストの最後、あるいはレンジ式の最 も右の記号として現れると、その文字自身として扱われます。例えば、式 [−ac] および [ac−] は等価であり、 a、 c、または − のどの文字にもマッチします。式 [ˆ−ac] および Section 5-350 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 regexp(5) regexp(5) [ˆac−] は等価であり、改行、 a、 c、または − 以外のどの文字にもマッチします。式 [%−−] は、定義された照合シーケンスの、 % および − の間のすべてを含んだどの文字 にもマッチします。式 [−−@] は、定義された照合シーケンスの、 − および @ の間のす べてを含んだどの文字にもマッチします。式 [a−−@] は、 a の前にある − が照合シーケ ンスにあると仮定すると、正しくありません。 大かっこ式に − と ] の両方を指定しなければならない場合には、 ] を最初に置かねばな らず ( ˆ がある場合はその後)、 − は大かっこ式の中の最後に置かなければなりません。 文字クラス 文字クラス式は、ロケールカテゴリ LC_CTYPE の最も最近の設定を経て定義された文 字クラスに属する文字の集合を表します。これは、大かっこ-コロン ([: :]) デリミタに囲 まれた、文字クラス名として表されます。 すべてのロケールでサポートされる標準文字クラス式。 [:alpha:] 文字 [:upper:] 大文字 [:lower:] 小文字 [:digit:] 10進数の数字 [:xdigit:] 16進数の数字 [:alnum:] 文字あるいは 10進数の数字 [:space:] テキストを表示するときに、空白になる文字 [:print:] 印字可能な文字 [:punct:] 句読点の文字 [:graph:] 表示可能な文字 [:cntrl:] 制御文字 [:blank:] 空白文字 例えば、ロケール変数 LC_CTYPE に C が設定されている場合、 [[:upper:]] という表現 は [A-Z] と等価になります。同じように、 [[:digit:]] という表現は [0-9] と等価になりま す。 複数の文字にマッチする RE 次の規則は、単一の文字にマッチする RE から複数の文字にマッチする RE を構築するのに使用します。 RE RE RE を連結すると、 RE の各構成要素にマッチする文字列の連結で、最初に現れたものに マッチする RE になります。例えば、 RE bc は、文字列 abcdefabcdef の2番目と3番目の 文字にマッチします。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-351 regexp(5) regexp(5) 単一の文字にマッチする RE の次にアスタリスク (*) を付けると、アスタリスクの前の RE* RE を0回以上繰り返したものにマッチする RE になります。ひとつの文字にマッチす る、最初に現れた文字列が選ばれ、マッチした文字列は RE にマッチする文字の最大値 を包含します。例えば、文字列 abbbcdeabbbbbbcde の中では、 RE b*c および RE bbb*c の両方が、 2∼5番目の位置のサブストリングである bbbc にマッチします。アスタリス クを RE の最初の文字にすると、その特別な意味は失われ、アスタリスク自身として扱 われます。 文字のペア \( および \) の間に囲むことにより、ひとつの RE の中に、部分式を定義でき \(RE\) ます。このような部分式は、 \( および \) が無かった場合と同じようにマッチします。部 分式は任意にネストできます。 \( の直後に続くアスタリスクは、その特別な意味を失 い、その文字自身として扱われます。 \) の直後に続くアスタリスクは、無効な文字とし て扱われます。 式 \n は、 \n. の前に現れた \( と \) に囲まれた部分式にマッチした文字列と同じものに \n マッチします。文字 n は 1 ∼ 9 までの数字でなくてはならず、 n番目の部分式 (n 番目 の \( で始まり、対応するペアの \) で終わる部分式) であることを示します。例えば、式 ˆ\(.*\)\1$ は、同じ文字列の2つの連続で構成される行にマッチします。 \n の次にアスタリスクが続くと、参照される部分式の0回以上の出現にマッチします。 例えば、式 \(ab\(cd\)ef\)Z\2*Z\1 は、文字列 abcdefZcdcdZabcdef にマッチします。 RE\{m,n\} 単一の文字にマッチする RE の後ろに \{m\}、 \{m,\}、あるいは \{m,n\} が続くと、 RE の 連続する出現にマッチする RE になります。 m および n の値は、範囲が0∼255の10進 数の整数でなくてはならず、 m で出現のちょうどの数、あるいは最小値を指定し、 n で 出現の最大値を指定します。 \{m\} は、すぐ前の RE の、ちょうど m 回の繰返しにマッ チします。 \{m,\} は、最低でも m 回の繰返しにマッチし、 \{m,n\} は、 m と n の間の任 意の数の繰返しにマッチします。 式にマッチする最初の文字列が選択され、可能なかぎり多くの RE の繰返しを包含しま す。例えば、文字列 abbbbbbbc の中で、 RE b\{3\} は2∼4番目の文字にマッチし、 RE b\{3,\} は2∼8番目の文字にマッチし、そして RE b\{3,5\}c は4∼9番目の文字にマッチし ます。 式の固定 RE は、次の規則に従って、マッチする文字列を行の最初か最後に制限する (つまり固定する) ことができま す。 • サーカムフレックス (ˆ) を RE の最初の文字として使うと、その式を行の最初に固定します。行の最初 の文字で始まる文字列だけが、その RE にマッチします。例えば例、 RE ˆab は、行 abcdef の文字列 ab にマッチしますが、行 cdefab の同じ文字列にはマッチしません。 • ドル符号 ($) を RE の最後の文字として使うと、その式を行の最後に固定します。行の最後の文字で 終る文字列だけが、その RE にマッチします。例えば、 RE ab$ は、行 cdefab の文字列 ab にマッチ Section 5-352 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 regexp(5) regexp(5) しますが、行 abcdef の同じ文字列にはマッチしません。 • RE が、 ˆ および $ の両方で固定されると、行となる文字列のみにマッチします。例えば、 RE ˆabcdef$ は、文字列 abcdef だけから成る行にのみマッチします。 固定文字の後に重複文字 (+、*) を使用するのは正しくありません。 拡張正規表現 拡張正規表現 (ERE) の表記および構文規則は、拡張 RE を使うと定義されたユーティリティに適用します。以 下の規則の例外は、 ERE を使用する特定のユーティリティで説明されています。 単一の文字にマッチする ERE 以下の ERE は、単一の文字または単一の照合要素にマッチします。 通常の文字 通常の文字は、それ自身にマッチする ERE です。通常の文字は、サポートされている文字セットのどの文字で もいいですが、改行文字と、下の「特殊文字」にリストしてある正規表現特殊文字は除きます。通常の文字の 前にバックスラッシュ (\) を付けると、通常の文字それ自身として扱われます。マッチングは、文字コードの ビットパターンによるものであり、文字のグラフィック表現によるものではありません。 特殊文字 前にバックスラッシュを付けた正規表現特殊文字は、その特殊文字自身にマッチする正規表現です。前にバッ クスラッシュが付いていない場合は、そのような文字は、 ERE の指定において特別な意味を持ちます。拡張正 規表現特殊文字、およびそれらが特殊な意味を持つコンテキストを以下に示します。 ピリオド、左大かっこ、バックスラッシュ、左かっこ、右かっこ、アスタリスク、プ .[\()*+?$| ラス符号、クエスチョンマーク、ドル符号、および縦線は特殊文字です。ただし大 かっこ式の中で使われた場合は除きます (「ERE 大かっこ式」を参照)。 サーカムフレックスは特殊文字です。ただし、大かっこ式の先頭でない位置で使われ ˆ た場合を除きます。 デリミタ ERE 全体の範囲を定めるのに使われている文字は、その ERE において特殊文字で す。 ピリオド ピリオド (.) は、大かっこ式の外で使うと、改行文字を除くどんなプリント可能文字にもプリント不可能文字 にもマッチする ERE です。 ERE 大かっこ式 ERE 大かっこ式の構文および規則は、上で述べた RE 大かっこ式のものと同じです。 複数の文字にマッチする ERE 次の規則は、単一の文字にマッチする ERE から複数の文字にマッチする ERE を構築するのに使用します。 ERE ERE ERE を連結すると、 ERE の各構成要素にマッチする文字列の連結で、最初に現れたも のにマッチする RE になります。かっこで囲まれた ERE の連結は、かっこがない場合に HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-353 regexp(5) regexp(5) マッチする連結と同じものにマッチします。例えば、 ERE bc および ERE (bc) のどちら も、文字列 abcdefabcdef の2∼3番目の文字にマッチします。全体として一番長い文字列 にマッチします。 特殊文字プラス符号 (+) は、単一の文字にマッチする ERE の次か、かっこで囲まれた ERE+ ERE の連結の次に付けられると、プラス符号の直前の ERE を1回以上繰り返したものに マッチする ERE になります。マッチする文字列は可能なかぎり多くの繰返しを包含しま す。例えば、 ERE b+c は、文字列 acabbbcde の4∼7番目の文字にマッチします。 特殊文字アスタリスク (*) は、単一の文字にマッチする ERE の次か、かっこで囲まれた ERE* ERE の連結の次に付けられると、アスタリスクの直前の ERE を 0 回以上繰り返したも のにマッチする ERE になります。例えば、 ERE b*c は、文字列 cabbbcde の最初の文字 にマッチします。選択が複数ある場合は、マッチングを満たす文字列のうち、一番左側 にあり最も長いものが選ばれます。例えば、 ERE b*cd は、文字列 cabbbcdebbbbbbcdbc の3∼7番目の文字にマッチします。 特殊文字クエスチョンマーク (?) は、単一の文字にマッチする ERE の次か、かっこで ERE? 囲まれた ERE の連結の次に付けられると、クエスチョンマークの直前の ERE の 0 回ま たは 1 回の出現にマッチする ERE になります。マッチする文字列は可能なかぎり多く の繰返しを包含します。例えば、 ERE b?c は、文字列 acabbbcde の2番目の文字にマッ チします。 ERE{m,n} は、基本正規表現構文 ERE\{m,n\} と同じ働きをするインターバル表現です。 オルタネーション 特殊文字である縦線 (|) で分離された2つの ERE は、そのどちらかの ERE にマッチする文字列に、マッチしま す。例えば、 ERE ((ab)|c)d は、文字列 abd にも文字列 cd にもマッチします。縦線 ’|’ は、次の場所では使用 できません。 ERE の先頭または最後では使用できません。 縦線の直後では使用できません。 左かっこの後では使用できません。 右かっこの直前では使用できません。 優先順位 優先順位を、次に高い方から低い方へ示します。 Section 5-354 [] 大かっこ *+? アスタリスク、プラス符号、クエスチョンマーク ˆ$ 固定 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 regexp(5) regexp(5) 連結 オルタネーション | 例えば、 ERE abba|cde は、 「abba あるいは cde のどちらかにマッチする」と解釈されます。 「abb の次に a または c が続き、その次に de が続くものにマッチする」という意味にはなりません (なぜなら、連結はオルタ ネーションより高い優先順位を持つからです)。 式の固定 ERE は、次の規則に従って、マッチする文字列を行の最初か最後に制限する (つまり固定する) ことができま す。 • サーカムフレックス (ˆ) は、行の先頭にマッチします (その式を行の先頭に固定します)。例えば、 ERE ˆab は、行 abcdef の中の文字列 ab にマッチしますが、行 cdefab の同じ文字列にはマッチしませ ん。 • ドル符号 ($) は、行の末尾にマッチします (その式を行の末尾に固定します)。例えば、 ERE ab$ は、 行 cdefab の文字列 ab にマッチしますが、行 abcdef の同じ文字列にはマッチしません。 • ERE が、 ˆ および $ の両方で固定されると、行となる文字列のみにマッチします。例えば、 ERE ˆabcdef$ は、文字列 abcdef だけから成る行にのみマッチします。 ERE ˆ$ には空行のみがマッチしま す。 固定文字の後に重複文字 (+、*) を使用するのは正しくありません。 パターンマッチング表記 以下の規則はパターンマッチング表記に適用されますが、パターンマッチングを用いる特定のユーティリティ の説明に例外が述べられています。 単一の文字にマッチするパターン 次のパターンは、単一の文字または単一の照合要素にマッチします。 通常の文字 通常の文字は、それ自身にマッチするパターンです。通常の文字は、サポートされている文字セットのどの文 字でもいいですが、改行文字と、下の「特殊文字」にリストしてあるパターンマッチング特殊文字は除きま す。マッチングは、文字コードのビットパターンによるものであり、文字のグラフィック表現によるものでは ありません。 特殊文字 前にバックスラッシュ (\) を付けたパターンマッチング特殊文字は、その特殊文字自身にマッチするパターン です。前にバックスラッシュが付いていない場合は、そのような文字は、パターンの指定において特別な意味 を持ちます。パターンマッチング特殊文字、およびそれらが特殊な意味を持つコンテキストを以下に示しま す。 ?*[ クエスチョンマーク、アスタリスク、および左大かっこは特殊文字です。ただし大かっ こ式の中で使われた場合は除きます ( 「パターン大かっこ式」を参照)。 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 5-355 regexp(5) regexp(5) クエスチョンマーク クエスチョンマーク (?) は、大かっこ式の外で使われると、改行文字を除くどんなプリント可能文字にもプリ ント不可能文字にもマッチするパターンです。 パターン大かっこ式 パターン大かっこ式の構文および規則は、上で述べられた RE 大かっこ式と同じですが、次の例外がありま す。 感嘆符文字 (!) は、正規表現表記における非マッチングリストでのサーカムフレックス文字 (ˆ) の役割 をします。 バックスラッシュは、大かっこ式の中でも、エスケープ文字として使われます。 複数の文字にマッチするパターン 次の規則は、単一の文字にマッチするパターンから、複数の文字にマッチするパターンを構築するのに使用し ます。 アスタリスク (*) は、null 文字列を含むどのような文字列にもマッチするパターンで * す。 RERE 単一の文字にマッチするパターンを連結すると、各パターンにマッチする文字あるい は照合要素の連結にマッチする、有効なパターンになります。例えば、パターン a[bc] は、文字列 ab および ac にマッチします。 単一の文字にマッチするパターンを、1つ以上のアスタリスクと共に、 1つかそれ以 上連結したものは、有効なパターンです。そのようなパターンでは、おのおののアス タリスクが、パターン中でアスタリスクの次の文字にマッチする最初の文字まで、 0 個以上の文字から成る文字列にマッチします。 例えば、パターン a*d は文字列 ad、 abd、および abcd にマッチしますが、文字列 abc にはマッチしません。パターンの最初あるいは最後の文字がアスタリスクの場合 は、アスタリスクは、パターンの残りにマッチした文字の前あるいは後ろの、 0個以 上の文字にマッチします。例えば、パターン a*d* は、文字列 ad、 abcd、 abcdef、 aaaad、および adddd にマッチし、パターン *a*d は、文字列 ad、 abcd、 efabcd、 aaaad、および adddd にマッチします。 ファイル名展開にパターンを使用する場合の規則の制限 以上に述べたパターンマッチングの規則は、パターンマッチング表記が、 sh(1)、csh(1)、ksh(1)、および make(1) によってファイル名の展開に使われる場合、以下の規則によって制限されます。 ファイル名 (スラッシュ (/) 文字に続く、パス名の構成要素を含む) がピリオド (.) で始まる場合、その ピリオドは、パターンの最初の文字としてピリオドを使用して、明示的にマッチしなければいけませ ん。アスタリスク特殊文字、クエスチョンマーク特殊文字、あるいは大かっこ式のいずれにもマッチ しません。この規則は make(1) には適用されません。 Section 5-356 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 regexp(5) regexp(5) パス名の中のスラッシュ文字は、パターンの中にスラッシュを使用して、明示的にマッチしなければ いけません。アスタリスク特殊文字、クエスチョンマーク特殊文字、あるいは大かっこ式のいずれに もマッチしません。 make(1) では、パス名の最後のスラッシュ文字の次の部分だけは、特殊文字にマッ チします。すなわち、最後のスラッシュ文字以前のすべての特殊文字が、その特別な意味を失いま す。 指定されたパターンは、存在する適切なファイル名およびパス名にマッチします。パターンが、存在 する複数のファイル名あるいはパス名にマッチした場合、パターンはそれらのファイル名およびパス 名と置き換えられ、有効な照合シーケンスに応じてソートされます。パターンが、存在するファイル 名あるいはパス名にマッチしない場合、パターン文字列は変更されずに残ります。 パターンの始まりがチルド記号 (˜) の場合は、最初のスラッシュの前の通常の文字 (あるいは、スラッ シュがない場合はすべての文字) は、可能ならばログイン名として扱われます。ログイン名が null (つ まり、パターンにはチルド記号だけか、チルド記号の直後にスラッシュがある) 場合は、チルド記号 は、プロセスのホームディレクトリを指すパス名の後ろにスラッシュをつけたものに置き換わりま す。そうでない場合は、チルド記号およびログイン名の組は、ログイン名に対応するホームディレク トリを指すパス名の後ろにスラッシュをつけたものに置き換わります。システムがログイン名を識別 できない場合、その結果はインプリメンテーションで定義されます。この規則は、 sh(1) あるいは make(1) には適用されません。 パターンに $ 文字が含まれる場合は、変数の置換が起こります。環境変数を、次のようにしてパター ンの中に埋め込めます。 $name または ${name} 中かっこは、 name の次の文字が name に属すると解釈されないことを保証するのに使用します。置換 は、示した順序で一度だけ行われます。すなわち、置換の結果新しい名前が現れたかどうかを調べる のに、結果の文字列をもう一度調べることはしません。 caseコマンドでパターンを使用する場合の規則の制限 以上に述べたパターンマッチングの規則は、パターンマッチング表記が、 sh(1) および ksh(1) のcaseコマンド に使われる場合、以下の規則によって制限されます。 複数のオルタナティブパターンを、各パターンを縦線文字 (|) で区切って、単一の項目に指定できま す。この方法で分離されたパターンのいずれかにマッチする文字列は、対応するコマンドリストを選 択させます。 参照 ksh(1)、sh(1)、fnmatch(3C)、glob(3C)、regcomp(3C)、setlocale(3C)、environ(5) HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 5-357 regexp(5) regexp(5) 標準準拠 <regexp.h>: AES、SVID2、SVID3、XPG2、XPG3、XPG4 Section 5-358 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 region_hash_locks(5) region_hash_locks(5) 名称 region_hash_locks − 領域スピンロックプールのサイズの指定 値 デフォルト 128 許容値 64 ∼ 262144 説明 実行中のプロセスやメモリー使用量に関する情報を格納しているグローバルカーネル構造は、頻繁に、複数の スレッドから同時にアクセスされたり変更されたりします。これらの構造は、競合状態にならないよう、スピ ンロック (同期に使用されるカーネルデータ構造) で保護されます。これにより、スピンロック「ホルダ」のス レッドだけが処理を進めることができ、その間、その構造にアクセスしようとする他のすべてのスレッドは待 機しなければなりません。 そのようなデータ構造の各インスタンスを保護する必要があり、インスタンスが複数ある場合は、ハッシュさ れたスピンロックが使用されます。すべてのインスタンスに対して単一のスピンロックを使用すると、過剰な 競合が発生します。一方、構造ごとに1つのスピンロックを使用すると、任意の時点において大部分のロック が未使用状態になり、メモリーの無駄になります。 ハッシュされたロックのプールを割り当てると、ハッシュ関数が構造のグループごとに1つのロックをピック するので、メモリーを節約しながら、競合を少なくすることができます。この調整可能パラメータは、そのよ うなプールのサイズを、領域データ構造のスピンロックについて設定します。 この調整可能パラメータの変更を行う対象ユーザー 当社のフィールドエンジニアのみ。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 メモリーの競合が少なく、多数の領域構造に起因するロックの競合が多いシステムに対しては、この調整可能 パラメータの値を大きくします。通常、そのようなシステムは、大量のプロセスやスレッドがある大規模メモ リーシステムです。 この値を大きくした場合の影響 カーネルのメモリー使用量が増えます。 この調整可能パラメータの値を小さくする場合 物理メモリーの競合が多く、プロセスやスレッドがほとんどないシステムに対してのみ、この調整可能パラ メータの値を小さくします。テーブルを小さくしてメモリーを節約すると、そのメモリーが一般用途向けに解 放されますが、多数の領域が存在してロックを要求している場合は、競合が発生する可能性があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-359 region_hash_locks(5) region_hash_locks(5) この値を小さくした場合の影響 領域ロックのハッシュ競合がより発生しやすくなります。それによって、2つ以上の領域間で共有されるロッ クをスレッドが待たなければならない可能性が増大します。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 region_hash_locks は、HP で開発されました。 Section 5-360 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 remote_nfs_swap(5) remote_nfs_swap(5) 名称 remote_nfs_swap − NFS 全体にわたるスワップの有効化 値 デフォルト 0 (オフ) 許容値 0 (オフ) または 1 (オン) 説明 この調整可能パラメータは、NFS ファイルシステムを、スワップに使用するために追加する操作を制御しま す。 remote_nfs_swap が 0 (オフ) に設定された場合は、ローカルのファイルシステムとデバイスだけをスワッ プに使用できます。 1 (オン) に設定された場合は、ローカルのファイルシステムとネットワーク ファイルシス テムの両方をスワップに使用できます。 歴史的背景としては、この調整可能パラメータは、すでにサポートされていない NFS クラスタで使用されてい ましたが、この機能はまだ削除されていません。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータをオンにする場合 ほとんどの場合、オンにはしません。前述のとおり、この調整可能パラメータは、現在使用されていないシス テムのためのものです。きわめて強固な NFS 機能を持つシステムでも、スワップに NFS を使用するか否かを さらに検討すべきです。 この調整可能パラメータをオンにした場合の影響 この値を 1 (オン) に設定し、NFS パーティションをスワップとして追加すると、一部のカーネルメモリーが、 スワップファイルシステムに対する NFS トランザクションに備えて確保されます。これにより、カーネルは、 NFS スワップパーティションを、ローカルのファイルシステムとまったく同じように使用します。システムの NFS 機能が強固でない場合は、スワップ時間がかなり長くなる可能性があり (スワップイン、スワップアウト とも)、さらにはメモリー損失が発生することもあります。これは、メモリーが圧迫されているときにスワップ を必要とする NFS が予約分以上のメモリーを使用するためです。 この調整可能パラメータをオフにする場合 NFS システムが、スワップとして使用されることの負荷を処理できること、および余分なローカルファイルシ ステムやディスクドライブがないことが明らかでない限り、この調整可能パラメータは、 常に 0 (オフ) に設定 します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-361 remote_nfs_swap(5) remote_nfs_swap(5) この調整可能パラメータをオフにした場合の影響 以前に定義された NFS スワップファイルシステムがすべて無効になります。カーネルメモリーは、スワップに 対する NFS トランザクション用として予約されることがなくなります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 remote_nfs_swap は、HP で開発されました。 Section 5-362 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rtsched_numpri(5) rtsched_numpri(5) 名称 rtsched_numpri − POSIX.1b リアルタイムアプリケーションに対してサポートされる優先順位の値の数 値 フェールセーフ 32 デフォルト 32 許容値 32 ∼ 512の範囲の任意の値を使用できます。 32 より低い値は 32 に再設定されます。 512 より高い値は 512 に再設定されます。 推奨値 32 説明 rtsched_numpri 調整可能パラメータは、POSIX 1.b リアルタイムアプリケーションに対してサポートされる優 先順位の値の数を定義します。値を大きくすると、アプリケーションがすべてのスレッドの相対的な優先順位 (スレッド間の相対順位およびシステムで実行中の他のアプリケーションとの相対順位) を管理する際の柔軟性 が高まります。ただし、値が大きいと、検索時間が長くかかる可能性があるために、管理する実行キューが大 きくなり、オペレーティングシステムの処理オーバーヘッドが増えます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムが主に POSIX リアルタイムアプリケーションを実行していて、アプリケーションの相対的な優先順位 をさらに柔軟に管理できるようにする場合。 この値を大きくした場合の影響 rtsched_numpri 調整可能パラメータの値を大きくすると、実行キューが大きくなり、場合によっては使用密度 が低下するために、オペレーティングシステムのオーバーヘッドがいくらか発生する可能性があります。 この調整可能パラメータの値を小さくする場合 rtsched_numpri 調整可能パラメータのデフォルト値は、最小限の値にあらかじめ設定されています。 同時に変更する必要がある他の調整可能パラメータ ありません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-363 rtsched_numpri(5) rtsched_numpri(5) 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 rtsched_numpri は、HP で開発されました。 Section 5-364 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 scroll_lines(5) scroll_lines(5) 名称 scroll_lines − Internal Terminal Emulator で使用されるスクロール可能な行数 値 フェールセーフ 100 デフォルト 100 許容値 60 ∼ 999 推奨値 ユーザーの目的に十分な値を上回らない値。 説明 この調整可能パラメータは、HP-UX グラフィックスコンソールの Internal Terminal Emulator (ITE) で使用される スクロールバッファー行の総数を指定します。この値は、オンスクリーン行とオフスクリーン行の合計です。 たとえば、ITE にオンスクリーン行が 68 あり、scroll_lines の値が 128 であれば、上にスクロールして表示で きるオフスクリーン行が 60 あります。 システムはブート中に、インストールされているグラフィックスハードウェアに合わせて、 scroll_lines の値を 高めに調整できます。複数の解像度で動作可能なグラフィックスカードに対しては、ITE はまず、可能なすべ ての解像度の中からオンスクリーン行の最大数を判別します。次に ITE は、 scroll_lines が最低でもこのオン スクリーン行の数と等しいことを確認します。たとえば、グラフィックスカードが2つの解像度をサポートし ていて、それらがそれぞれ 160 文字× 62 行と 120 文字× 78 行の ITE 解像度であるとします。システムファイ ル内で scroll_lines の値として 62 が指定されていた場合、ITE は、この値を調整して 78 に増やします。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 ユーザーがスクロールバッファーに余分な行を保持しておきたい場合は、 scroll_line の値を大きくできます。 この調整可能パラメータの値を大きくした場合の影響 ITE スクロールバッファーのサイズを大きくすると、ITE 専用となるカーネルメモリーが使用されます。この メモリーをシステムの他の部分で別の目的に使用することはできません。メモリーは、オフスクリーン文字ご とに2バイトの割合で使用されます。 この調整可能パラメータの値を小さくする場合 スクロールバッファーに余分なオフスクリーン行を保持する必要がない場合は、 scroll_lines の値を小さくし て、メモリーをわずかながら解放できます。節約できるメモリー量は、オフスクリーン文字ごとに2バイトで HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-365 scroll_lines(5) scroll_lines(5) す。たとえば、表示幅が 160 文字であれば、 scroll_lines の値を 10 小さくすると、3200 バイトが解放されま す。 この調整可能パラメータの値を小さくした場合の影響 scroll_lines を、ITE スクリーンに表示される行数以下に設定すると、オフスクリーン文字にアクセスできなく なります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 scroll_lines は、HP で開発されました。 Section 5-366 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 scsi_maxphys(5) scsi_maxphys(5) 名称 scsi_maxphys − すべての SCSI デバイスの I/O の最大許容長 値 フェールセーフ 1048576 デフォルト 1024*1024 許容値 1048576 (V クラスシステムの場合は 16777215 および 33554432) 推奨値 1048576 (V クラスシステムの場合は 16777215) 説明 この調整可能パラメータは、SCSI サブシステムが I/O のために受け付ける最大データサイズを設定します。 SCSI サブシステムが特定の SCSI デバイスに対して許容する最大サイズは、デバイスの特性やデバイスドライ バの構成によっては、この調整可能パラメータの値以下になる場合があります。この調整可能パラメータの値 を上回ることはありません。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、デバイスを最初に開いたときに有効になります。 この調整可能パラメータの値を大きくする場合 V クラスシステム以外では、この値を大きくしないでください。V クラスシステムでは、32 MB まで大きくで きます。 この調整可能パラメータの値を小さくする場合 この値を小さくしないでください。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 scsi_maxphys は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-367 scsi_max_qdepth(5) scsi_max_qdepth(5) 名称 scsi_max_qdepth − ターゲットが実行のためにキューに入れる I/O の最大数 値 フェールセーフ 1 デフォルト 8 許容値 1 - 255 推奨値 1 - 255 SCSI-2 以上のほとんどのデバイスは、複数のコマンドを受け付けることができ、HP が設定したデフォルトの キューの深さをサポートできるだけの内部メモリーを搭載しています。スループットの高速化や負荷バランス のために、このデフォルト値を変更してデバイスを調整することができます。 説明 一部の SCSI デバイスは、タグ付きキューイングをサポートしています。つまり、それらのデバイスは、任意 の時点で複数の SCSI コマンドを未処理のままにしておくことができます。未処理のままにしておけるコマン ドの数は、デバイスによって異なり、HP-UX には認識されません。このキューがオーバーフローしないように するために、HP-UX は、特定の数を超える未処理コマンドをどの SCSI デバイスにも送信しません。この調整 可能パラメータは、その制限のデフォルト値を設定します。 ioctl を使用して、特定のデバイスについてのこの デフォルト値を変更することができます。 ここで言うキューの深さとは、タグ付きキューイングにおけるそれと同義です。タグ付きキューイングをサ ポートしているターゲットは、複数の SCSI コマンドを実行のために受け付けることができます。一部のター ゲットは、異なるイニシエータからの最大 256 コマンドを保存することができます。この仕組みにより、パ フォーマンスを上げるための最適化が行いやすくなります。ターゲットのコマンドキューが一杯になると、 ターゲットはそれ以上の I/O を行わず、イニシエータに QUEUE FULL ステータスを返します。保存できるコ マンドの数が 256 未満のターゲットもあるので、工場出荷時のデフォルト値は 8 に設定してあります。 サポートしているキューの深さが小さいデバイスと大きいデバイスがシステムに混在している場合は、キュー の深さを、ほとんどのデバイスで動作する値に設定することが可能です。特定のデバイスに対しては、システ ム管理者は、 SIO_SET_LUN_LIMIT を ioctl() で使用して、キューの深さをデバイスごとに変えることができ ます。 ioctl() の使い方の詳細については、 scsictl(1M) を参照してください。 32 ビットカーネル用の値と 64 ビットカーネル用の値は同じです。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 Section 5-368 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 scsi_max_qdepth(5) scsi_max_qdepth(5) 変更に関する制限事項 この調整可能パラメータの変更はただちに有効になります。 この調整可能パラメータの値を大きくする場合 SCSI デバイスのメモリーで、HP が設定したデフォルトより大きな値のキューの深さをサポートできる場合。 キューの深さの値を大きくすると、パフォーマンスが向上する可能性があります。 この調整可能パラメータの値を大きくした場合の影響 キューの深さは、タグ付きキューイングをサポートしているすべての SCSI デバイスに適用されます。キュー の深さを、ディスクの処理能力を超える値に設定すると、ディスクに QUEUE FULL 状態が発生したときに I/O が停止します。 QUEUE FULL 状態が発生したときにそのデバイスで QUEUE FULL 状態が無限に続かな いように、デバイスのキューの深さの値を小さくする機構が存在します。ただし、この機構は一定間隔で キューの深さの値を大きくしようとするため、そのときに QUEUE FULL 状態が発生します。 この調整可能パラメータの値を小さくする場合 接続している SCSI デバイスでサポートしているキューの深さの値が小さい場合。または、そのデバイスが負 荷バランス用の場合。 この調整可能パラメータの値を小さくした場合の影響 サポートしているキューの深さの値が大きい場合は、それを小さい値に設定するとパフォーマンスが最適にな らない可能性があります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 scsi_max_qdepth は、HP で開発されました。 参照 scsictl(1M)、 ioctl(2)、 scsi(7) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-369 secure_sid_scripts(5) secure_sid_scripts(5) 名称 secure_sid_scripts − スクリプトの setuid ビットおよび setgid ビットを有効にするかどうかの制御 値 フェールセーフ 0 デフォルト 1 許容値 0-1 推奨値 0-1 説明 この調整可能パラメータは、実行可能スクリプトの setuid ビットおよび setgid ビットが何らかの効果を持つか どうかを制御します。スクリプトの set*id を有効にすると、悪意のあるユーザーからの攻撃に対してシステム が脆弱になります。 このパラメータのデフォルト値は1です。これは、セキュリティを高めるために、 execve(2) システム呼び出し が set*id ビットを無視するようにする設定です。セキュリティを犠牲にして古いリリースとの互換性を得るた めに、この調整可能パラメータを0に設定することができます。ただし、そのような設定が急務でない限り、 この調整可能パラメータの値を変更しないよう、強くお勧めします。 set*id ビットを持つスクリプトが実行されると、制御ターミナルとシステムログの両方に対し、カーネルが次 のエラーメッセージを生成します (このエラーメッセージを見るには、 dmesg(1M) を使用するか、 /var/adm/syslog/syslog.log を調べます)。 Warning: Ignoring set*id bit on program_name as the tunable secure_sid_scripts is set. この調整可能パラメータの変更を行う対象ユーザー 管理者。 変更に関する制限事項 この調整可能パラメータの変更は、変更後に起動した新しいスクリプトに対して有効になります。 この調整可能パラメータの値を変更する場合 この調整可能パラメータは、データ構造のサイズや制限ではなく動作モードを制御します。システムにとって 適切な設定は、セキュリティを重視するか、互換性を重視するかによって異なります。 値を 0 にすると、HP-UX の旧リリースとの互換性が得られますが、セキュリティは弱くなります。 値を 1 にすると、 set*id スクリプトを利用した競合状態攻撃に対するセキュリティを強くできます。 Section 5-370 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 secure_sid_scripts(5) secure_sid_scripts(5) この値を変更した場合の影響 この調整可能パラメータは、 set*id ビットが設定された実行可能スクリプト (プログラムではない) だけを制御 します。 HP-UX には、そのようなスクリプトは添付されません。カスタマが set*id スクリプトを使用する必 要があれば、 suidperl や sudo のようなサードパーティ製アプリケーションが使用できます。あるいは、次の ように、シェルスクリプトを適切なパーミッションで実行する、シンプルな C プログラムで、シェルスクリプ トをラップすることができます。 #include <unistd.h> #include <stdlib.h> #include <string.h> #define SETUID_SCRIPT "/usr/local/bin/cdeject" int main(int argc, char *const argv[]) { if (strcmp(argv[1], SETUID_SCRIPT) == 0) { execv(argv[1], argv+1); perror(argv[0]); } else { fprintf(stderr, "%s is not a known setuid script\n", argv[1] ? argv[1] : "unspecified-script" ); } exit(1); } 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 ファイル /var/adm/syslog/syslog.log 著者 secure_sid_scripts は、HP で開発されました。 参照 chmod(1)、 execve(2)、 kctune(1M) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-371 sema(5) sema(5) 名称 sema − ブート時の System V IPC セマフォの有効化/無効化 説明 sema この調整可能パラメータは、廃止されました。 System V セマフォサブシステム全体は常に有効です。 概要 System V IPC は、データメッセージの送受信、仮想アドレス空間の共有、セマフォによる実行の同期化などを 行う任意のプロセスのための各機構で構成されます。 System V セマフォは、ユーザープロセスが共通のデータおよびリソースへのアクセスを同期化またはシリアル 化するための同期方法です。各セマフォ「セット」には1つの ID がありますが、各セットには独立したセマ フォを1つ以上含めることができます。 セマフォセットは、アプリケーションで指定される「キー」を使用して semget() によって作成されるか、最初 にアクセスされます。また、「キー」は、 ftok() で生成することも可能です。セットに対する操作は、 semop() または semctl() から実行されます。セマフォセットは、 semctl() または ipcrm コマンドによって削除 されます。 著者 sema は、AT&T で開発されました。 参照 ipcs(1), ipcrm(1), semget(2), semop(2), semctl(2), semaem(5), semmni(5), semmns(5), semmnu(5), semmsl(5), semume(5), semvmx(5), sysv_hash_locks(5) Section 5-372 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 semaem(5) semaem(5) 名称 semaem − 終了時の修正の最大値 値 フェールセーフ 16384 デフォルト 16384 許容値 最小値: 0 最大値: semvmx または 32767 以下。 説明 調整可能パラメータ semaem は、1つのセマフォに対して1つのプロセス内で行なった変更を「取り消し」可 能な最大値を指定します。つまり、プロセスは、 SEM_UNDO が指定されているセマフォにおいて、最大 semaem 件まで増分または減分を未処理とすることができます。 アプリケーションがこの制限を超えようとすると、アプリケーションは、 semop() から [ERANGE] エラーを受 け取ります。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 「取り消し」機能のため、セマフォに対する多数の増分または減分、減分が介入しない多数の一連の増分、ま たは、増分が介入しない多数の一連の減分を持つことがアプリケーションに期待される場合。 この調整可能パラメータの値を小さくする場合 大きくした値がアプリケーションで不要になった場合。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきで はありません。これらの調整可能パラメータは、アプリケーションの要求を確実に反映するよう、システムと して評価される必要があります。セマフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。特に、 semvmx および semaem の値は、同時に調整しなければならない場合があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-373 semaem(5) semaem(5) 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 semaem は、AT&T で開発されました。 参照 semop(2)、 sema(5)、 semmni(5)、 semmns(5)、 semmnu(5)、 semmsl(5)、 semume(5)、 semvmx(5)、 sysv_hash_locks(5) Section 5-374 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 semmni(5) semmni(5) 名称 semmni − System V IPC システム全体のセマフォ識別子の数 値 フェールセーフ 2048 デフォルト 2048 許容値 最小値: 2 最大値: semmns 説明 semmni 調整可能パラメータは、任意の時点において存在できる System V IPC システム全体のセマフォセット (および識別子) の最大数を指定します。1つ以上 (最大 semmsl) のセマフォの新しいセットを作成する各 semget() システム呼び出しに対して、1つの識別子 (ID) が返されます。 アプリケーションがセマフォセットを作成しようとしたときに、すべての ID がすでに割り当てられていた場 合、アプリケーションは、 semget() から [ENOSPC] エラーを受け取ります。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムにおいて一意のセマフォ ID の総数を増やすよう要求がある場合。または、1つ以上のアプリケー ションからセマフォ ID を増やすよう要求がある場合。 semmns セマフォの総数より多いシステム全体の識別 子を指定する理由はありません。 この調整可能パラメータの値を小さくする場合 セマフォセット (ID) の要求が大幅に減っている場合。または、アプリケーションが取得するセマフォ ID の数 が増えないよう、厳格に制限する必要がある場合。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきで はありません。これらの調整可能パラメータは、アプリケーションの要求を確実に反映するよう、システムと して評価される必要があります。セマフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。特に、 semmni 調整可能パラ メータを変更するときは、 semmns 調整可能パラメータも同時に変更しなければならない場合があります。ま HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-375 semmni(5) semmni(5) た、 semmni 調整可能パラメータを大幅に変更するときは、 sysv_hash_locks 調整可能パラメータも同時に変更 しなければならない場合があります。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 semmni は、AT&T で開発されました。 参照 semget(2)、 sema(5)、 semaem(5)、 semmns(5)、 semmnu(5)、 semmsl(5)、 semume(5)、 semvmx(5)、 sysv_hash_locks(5) Section 5-376 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 semmns(5) semmns(5) 名称 semmns − System V IPC システム全体のセマフォの数 値 フェールセーフ 4096 デフォルト 4096 許容値 最小値: semmni 最大値: 335534080 説明 semmns 調整可能パラメータは、アプリケーションが割り当てることのできる、個別の System V IPC システム 全体のセマフォの合計の最大値を指定します。セマフォは、1つの ID に関連付けられた「セット」として割 り当てられます。したがって、セマフォは、ある範囲の ID の全域にわたり、各 ID に対し1つ以上、任意の形 式で分散させることができます。 各 ID には1つ以上のセマフォが必要なので、 semmni (識別子の最大数) を下回る semmns を指定する理由は ありません。 アプリケーションが、残っているセマフォの数より多いセマフォを含むセマフォセットを作成しようとする と、アプリケーションは、 semget() から [ENOSPC] エラーを受け取ります。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 アプリケーションがシステム内のセマフォの総数を増やすよう要求している場合。 この調整可能パラメータの値を小さくする場合 セマフォの要求が減った場合。または、アプリケーションが取得するセマフォの数が増えないよう厳格に制限 する場合。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきで はありません。これらの調整可能パラメータは、アプリケーションの要求を確実に反映するよう、システムと して評価される必要があります。セマフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。通常は、 semmns 調整可能パ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-377 semmns(5) semmns(5) ラメータを変更しても、他の調整可能パラメータを変更する必要はありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 semmns は、AT&T で開発されました。 参照 semget(2)、 sema(5)、 semaem(5)、 semmni(5)、 semmnu(5)、 semmsl(5)、 semume(5)、 semvmx(5)、 sysv_hash_locks(5) Section 5-378 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 semmnu(5) semmnu(5) 名称 semmnu − System V IPC プロセスの取り消し構造体の最大数 値 フェールセーフ 256 デフォルト 256 許容値 最小値: 1 最大値: (nproc-4) 説明 semmnu 調整可能パラメータは、任意の時点において「取り消し」操作を保留にしておける System V IPC シス テム全体のプロセスの最大数を指定します。 アプリケーションがこの制限を使い切ると、アプリケーションは、 semop() から [ENOSPC] エラーを受け取り ます。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 セマフォの「取り消し」機能を使用する一連のアプリケーションプロセスがこの制限を超えた場合。 この調整可能パラメータの値を小さくする場合 セマフォの「取り消し」機能の要求が大幅に減った場合。または、セマフォを変更する暴走したアプリケー ションに対する保護を制限する場合。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきで はありません。これらの調整可能パラメータは、アプリケーションの要求を確実に反映するよう、システムと して評価される必要があります。セマフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。通常は、 semmnu を変更し ても、他の調整可能パラメータに注意を払う必要はありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-379 semmnu(5) semmnu(5) 取り消し構造体の2次元のテーブル (それぞれ8バイト以下) が、ブート時にカーネルメモリーに割り当てられ ます。このメモリーは、使用するかしないかにかかわらず、確保されます。 このテーブルの規模は、 semume および semmnu (プロセスごとの取り消し構造体の最大数) によって決まりま す。したがって、必要なメモリーのサイズは、それら2つの調整可能パラメータと構造体のサイズの積に近い 値になります。それら2つの調整可能パラメータは積で作用するため、メモリーの使用量に重大な影響を及ぼ す可能性があります。したがって、それらのパラメータの設定には注意が必要です。 著者 semmnu は、AT&T で開発されました。 参照 semop(2)、 sema(5)、 semaem(5)、 semmns(5)、 semmni(5)、 semmsl(5)、 semume(5)、 semvmx(5)、 sysv_hash_locks(5) Section 5-380 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 semmsl(5) semmsl(5) 名称 semmsl − 識別子ごとの System V IPC セマフォの最大数 値 フェールセーフ 2048 デフォルト 2048 許容値 最小値: 1 最大値: 10240 説明 semmsl 調整パラメータは、セマフォ識別子 (ID) ごとの個別の System V IPC セマフォの最大数を指定します。 アプリケーションがこの制限を超えようとすると、アプリケーションは、 semget() から [EINVAL] エラーを受 け取ります。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整パラメータの変更を行う対象ユーザー すべてのユーザー。 この調整パラメータの値を大きくする場合 アプリケーションにおいて、ID ごとのセマフォ数を増やすことが必要な場合。 この調整パラメータの値を小さくする場合 ID ごとのセマフォに対するアプリケーションの要求が減った場合。または、アプリケーションの誤作動から保 護する必要がある場合。 同時に変更する必要がある他の調整パラメータ System V セマフォの調整パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきではあ りません。これらの調整パラメータは、アプリケーションの要求を確実に反映するよう、システムとして評価 される必要があります。セマフォの調整パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。特に、 semmsl 調整パラメータを変更し たときは、 semmns 調整パラメータも変更しなければならない場合があります。 警告 HP-UX のすべての調整カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今 後のリリースにおいて、削除されるか、意味が変わる可能性があります。 HP-UX リリース Version 1 より前のリリースでは、ID ごとのセマフォの最大数は、ヘッダーファイル sys/sem.h 内で非公開の定数として 2048 と定義されていました。通常、アプリケーションはこの制限に依存しません。 旧式の、定数でコンパイルされたアプリケーションでは、 semmsl 調整パラメータの値が 2048 より大きい場合 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-381 semmsl(5) semmsl(5) は、通常は影響ありませんが、 semmsl 調整パラメータの値が 2048 より小さい場合は、失敗することがありま す。その場合は、 pstat_getipc(2) で semmsl の現在値を取得するようにコードを変更してください。 著者 semmsl は、AT&T で開発されました。 参照 semget(2)、 sema(5)、 semaem(5)、 semmns(5)、 semmni(5)、 semmnu(5)、 semume(5)、 semvmx(5)、 sysv_hash_locks(5) Section 5-382 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 semume(5) semume(5) 名称 semume − System V IPC のプロセスごとの取り消しエントリの最大数 値 フェールセーフ 100 デフォルト 100 許容値 最小値: 1 最大値: semmns 説明 semume 調整可能パラメータは、単一プロセスに含めることのできる未処理 (非ゼロ)「取り消し」操作の対象 となる System V IPC セマフォの最大数を指定します。 アプリケーションがこの制限を使い切ると、アプリケーションは、 semop() から [EINVAL] エラーを受け取り ます。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 アプリケーションにおいてプロセスごとのセマフォ取り消し操作の数を増やす必要がある場合。 この調整可能パラメータの値を小さくする場合 プロセスごとに必要なセマフォ操作の数が大幅に減った場合。または、セマフォを変更する暴走したアプリ ケーションに対する保護を制限する場合。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきで はありません。これらの調整可能パラメータは、アプリケーションの要求を確実に反映するよう、システムと して評価される必要があります。マフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。通常は、 semume を変更し ても、他の調整可能パラメータに注意を払う必要はありません。ただし、個々のアプリケーションプロセス が、「取り消し」機能を持つセマフォをより少なく、あるいはより多く使用すると予想されている場合は、 semmsl または semmni を変更したときに semume も変更しなければならない場合があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-383 semume(5) semume(5) 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 取り消し構造体の2次元のテーブル (それぞれ8バイト以下) が、ブート時にカーネルメモリーに割り当てられ ます。このメモリーは、使用するかしないかにかかわらず、確保されます。 このテーブルの規模は、 semume および semmnu (プロセスごとの取り消し構造体の最大数) によって決まりま す。したがって、必要なメモリーのサイズは、それら2つの調整可能パラメータと構造体のサイズの積に近い 値になります。それら2つの調整可能パラメータは積で作用するため、メモリーの使用量に重大な影響を及ぼ す可能性があります。したがって、それらのパラメータの設定には注意が必要です。 著者 semume は、AT&T で開発されました。 参照 semop(2)、 sema(5)、 semaem(5)、 semmni(5)、 semmnu(5)、 semmsl(5)、 semmns(5)、 semvmx(5)、 sysv_hash_locks(5) Section 5-384 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 semvmx(5) semvmx(5) 名称 semvmx − 任意の単一 System V IPC セマフォの最大値 値 フェールセーフ 32767 デフォルト 32767 許容値 最小値: 1 最大値: 65535 説明 semvmx 調整可能パラメータは、任意の System V IPC セマフォがとりうる最大値を指定します。 アプリケーションがこの制限を超えようとすると、アプリケーションは、 semop() または semctl() から [ERANGE] エラーを受け取ります。 System V セマフォの詳細については、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 アプリケーションがより大きなセマフォ値を必要とする場合。 この調整可能パラメータの値を小さくする場合 単一のセマフォ値に対する要求が減った場合。または、セマフォを変更する暴走したアプリケーションに対す る保護を制限する場合。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて、互いに関連しているので、 独立した変数として扱うべきで はありません。これらの調整可能パラメータは、アプリケーションの要求を確実に反映するよう、システムと して評価される必要があります。セマフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 semume、 semvmx、および sysv_hash_locks が含まれます。 semvmx を変更する場合 は、 semaem も変更するかどうかを検討してください。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-385 semvmx(5) semvmx(5) 著者 semvmx は、AT&T で開発されました。 参照 semop(2)、 semctl(2)、 sema(5)、 semaem(5)、 semmni(5)、 semmns(5)、 semmnu(5)、 semmsl(5)、 semume(5)、 sysv_hash_locks(5) Section 5-386 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sendfile_max(5) sendfile_max(5) 名称 sendfile_max − sendfile で使用されるバッファーキャッシュページの最大数 値 フェールセーフ 0 無制限 デフォルト 0 無制限 Allowed values 0 無制限 または 1 ∼ 262144 推奨値 0 無制限 説明 この変数は、 sendfile() システム呼び出しで使用できるバッファーキャッシュページの数を制限します。この変 数は、マシンの sendfile() の負荷が大きく、メモリーが限られている場合に有用です。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 この調整可能パラメータは、マシンの sendfile() の負荷が大きく、メモリーが限られている場合に有用です。 この値を大きくした場合の影響 sendfile() の処理速度が低下する可能性があります。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 sendfile_max は、HP で開発されました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-387 shmem(5) shmem(5) 名称 shmem − System V 共有メモリーの有効化/無効化 説明 shmem 調整パラメータは廃止されました。 System V IPC 共有メモリーは常に有効です。 共有メモリーは、効率のよい InterProcess Communications (IPC) 機構です。1つのプロセスが共有メモリーセグ メントを作成し、それをそのプロセスのアドレス空間に割り当てます。共有メモリーセグメント経由でこのプ ロセスと通信しようとするプロセスは、自分の対応するアドレス空間にその共有メモリーセグメントを同様に 割り当てます。共有メモリーセグメントを割り当てたプロセスは、割り当て時に指定されたパーミッションに 従い、そのセグメントに対して読み取りや書き込みを行うことができます。 著者 shmem は、HP で開発されました。 参照 shmmax(5), shmmni(5), shmseg(5) Section 5-388 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 shmmax(5) shmmax(5) 名称 shmmax − System V 共有メモリーセグメントの最大サイズ (バイト) 値 デフォルト 1 GB 許容値 最小値: 2048 最大値: 0x40000000000 説明 共有メモリーは、効率のよい InterProcess Communications (IPC) 機構です。1つのプロセスが共有メモリーセグ メントを作成し、それをそのプロセスのアドレス空間に割り当てます。共有メモリーセグメント経由でこのプ ロセスと通信しようとするプロセスは、自分の対応するアドレス空間にその共有メモリーセグメントを同様に 割り当てます。共有メモリーセグメントを割り当てたプロセスは、割り当て時に指定されたパーミッションに 従い、そのセグメントに対して読み取りや書き込みを行うことができます。 この調整可能パラメータは、システム内のそのようなセグメントの最大サイズを設定します。HP-UX 11i の時 点では動的な調整可能パラメータです。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更はただちに有効になります。 この調整可能パラメータの値を大きくする場合 shmmax の値が最大値を下回っていて、ユーザープログラムが現在の値より大きなセグメントを shmget しよ うとして [EINVAL] エラーメッセージを受け取った場合。 この調整可能パラメータの値を大きくした場合の影響 ユーザープログラムが shmget を使用して、より大きなセグメントを取得できるようになることが唯一の効果 です。 この調整可能パラメータの値を小さくする場合 System V セグメントの最大サイズを制限する動作をユーザーのコード上で実現する場合。 この調整可能パラメータの値を小さくした場合の影響 ありません。 同時に変更する必要がある他の調整可能パラメータ セグメントを強制的に小さくすると、ユーザーのコードが、タスクを達成するためにセグメントを追加作成し ようとする場合があるため、 shmseg および shmmni の変更について検討する必要があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-389 shmmax(5) shmmax(5) 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 shmmax は、HP で開発されました。 参照 shmem(5)、 shmmni(5)、 shmseg(5) Section 5-390 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 shmmni(5) shmmni(5) 名称 shmmni − システム内の System V 共有メモリーセグメント識別子の数 値 デフォルト 400 識別子 許容値 最小値: 3 最大値: 8192 説明 共有メモリーは、効率のよい InterProcess Communications (IPC) 機構です。1つのプロセスが共有メモリーセグ メントを作成し、それをそのプロセスのアドレス空間に割り当てます。共有メモリーセグメント経由でこのプ ロセスと通信しようとするプロセスは、自分の対応するアドレス空間にその共有メモリーセグメントを同様に 割り当てます。共有メモリーセグメントを割り当てたプロセスは、割り当て時に指定されたパーミッションに 従い、そのセグメントに対して読み取りや書き込みを行うことができます。 各セグメントには識別子がカーネルによって割り当てられるため、この調整可能パラメータは、システム全体 で作成可能な一意のセグメントの数を効果的に設定します。この識別子は、カーネルによって生成される単な るリファレンスです。これにより、任意のユーザープロセスが、単純な整数を使用して、特定のセグメントの 共有を要求することができ、カーネルに、識別子に対応するセグメントを特定させることができます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更はただちに有効になります。 現在使用されている識別子の数、または shmseg の現在の値より、 shmmni の値を小さくしようとすると、 [EINVAL] エラーメッセージが発生します。 必要な構造体を作成するためにカーネルが使用できるメモリーが不足しているときに、 shmmni の値を大きく しようとすると、 [ENOMEM] メッセージが発生します。 この調整可能パラメータの値を大きくする場合 System V 共有メモリーのユーザーが shmget() 呼び出しに対して [ENOSPC] エラーメッセージを受け取った場 合には、 shmmni の値を大きくします。 この調整可能パラメータの値を大きくした場合の影響 カーネルメモリーの使用量が少し増えます。これは、セグメントの追跡に使用されるデータ構造が、この調整 可能パラメータに基づいて割り当てられるためです。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-391 shmmni(5) shmmni(5) この調整可能パラメータの値を小さくする場合 カーネルメモリーが非常に少ない場合、またはセグメントがほとんど必要とされないことがわかっている場合 は、この調整可能パラメータの値を小さくすると、それに関連する、データ構造のメモリー使用量が減り、わ ずかながらメモリーを節約できます。 この調整可能パラメータの値を小さくした場合の影響 カーネルメモリーの使用量が少し減ります。 同時に変更する必要がある他の調整可能パラメータ shmmax および shmseg の変更を検討する必要があります。 shmmni を変更する場合と同様に、 shmseg を変更 する必要があります。これは、少数のプロセスがすべてのセグメントを取得するようにする場合のみ、セグメ ントの総数を減らし、プロセスごとに使用可能な数を増やすことが意味を持つためです。 shmmax は複雑であり、すべての変更は、どのような効果を期待するかに応じて行われる必要があります。こ の調整可能パラメータを変更する方法の詳細については、 shmmax(5) マンページを参照してください。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 shmmni は、HP で開発されました。 参照 shmem(5)、 shmmax(5)、 shmseg(5) Section 5-392 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 shmseg(5) shmseg(5) 名称 shmseg − プロセスごとの System V 共有メモリーセグメントの最大数 値 デフォルト 300 セグメント 許容値 最小値: 1 最大値: shmmni 以下の任意の値 説明 共有メモリーは、効率のよい InterProcess Communications (IPC) 機構です。1つのプロセスが共有メモリーセグ メントを作成し、それをそのプロセスのアドレス空間に割り当てます。共有メモリーセグメント経由でこのプ ロセスと通信しようとするプロセスは、自分の対応するアドレス空間にその共有メモリーセグメントを同様に 割り当てます。共有メモリーセグメントを割り当てたプロセスは、割り当て時に指定されたパーミッションに 従い、そのセグメントに対して読み取りや書き込みを行うことができます。 この調整可能パラメータは、プロセスごとの、割り当て可能なセグメントの数の上限を設定します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更はただちに有効になります。 この調整可能パラメータの値を大きくする場合 ユーザープロセスが上限に達した場合、さらに多くのセグメントが必要となった場合、あるいは、現在の値が システム内のセグメントの総数 (shmmni) より小さい場合。 この調整可能パラメータの値を大きくした場合の影響 単一のプロセスで取得できるセグメントの数が増えます。これによって、これまで必要なセグメントをすべて 取得できていた別のプロセスが、すべては取得できなくなる可能性があります。この場合、 shmmni が最大値 を下回っていれば、値を大きくする必要があります。 この調整可能パラメータの値を小さくする場合 ユーザープロセスに対してセグメントポリシーを強制する場合、または1つの暴走プロセスがグローバルセグ メントプールを占有している場合に限り、この調整可能パラメータの値を小さくする必要があります。小さく しない場合は、最大値を通常の使用量より大きくしておくのが無難です。 この調整可能パラメータの値を小さくした場合の影響 ありません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-393 shmseg(5) shmseg(5) 同時に変更する必要がある他の調整可能パラメータ 前述のとおり、 shmmni の変更について検討する必要があります。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 shmseg は、HP で開発されました。 参照 shmmni(5) Section 5-394 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 signal(5) signal(5) 名称 signal: signal.h − シグナルの説明 構文 #include <signal.h> 説明 ヘッダ <signal.h> は以下の記号定数を定義しています。それぞれの記号定数は、 void (*)(int) の型によって別々の定数表現に展開され、その値は、宣言可能でない関数の値に一致します。 SIG_DFL デフォルトのsignal処理を要求します。 SIG_ERR エラーの場合であり、 signal() から戻り値を返します。 SIG_HOLD シグナルを受け取るよう要求します。 SIG_IGN シグナルを無視するよう要求します。 以下のデータ型は typedef によって定義されています。 sig_atomic_t 非同期の割込みにおいても、アトミックエンティティとしてアクセスできるオブジェ クトの整数型 sigset_t シグナルの集合を表すのに使用されるオブジェクトの整数型または構造体型 pid_t <sys/types.h> で説明しています。 このヘッダは、システムで発生するシグナルを参照するのに使用する定数についても宣言しています。ここで 定義されているシグナルは、英字 SIG から始まります。各シグナルは、それぞれ別々の正整数の値を持ってい ます。 null シグナルとして使用するように、値 0 が予約されています (kill(2) を参照)。この他にも、インプリ メンテーションに依存したシグナルが、システムで発生することがあります。 以下のシグナルは、すべてのインプリメンテーションでサポートされています。(下記の表ではデフォルトのア クションについて説明しています) デフォルトの シグナル アクション 説明 プロセス アボートシグナル SIGABRT ii SIGALRM i アラームクロック SIGFPE ii 算術演算の例外 SIGHUP i ハングアップ SIGILL ii 不法な命令 SIGINT i 端末の割り込みシグナル HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-395 signal(5) signal(5) SIGKILL i 強制終了 (捕捉または無視できない) SIGPIPE i 読み取りが行われないパイプへの書き込み SIGQUIT ii 端末の中止シグナル SIGSEGV ii 無効なメモリの参照 SIGTERM i 終了シグナル SIGUSR1 i ユーザー定義シグナル1 SIGUSR2 i ユーザー定義シグナル2 SIGCHLD iii 子プロセスの終了または停止 SIGCONT v 中断している場合の実行の継続 SIGSTOP iv 実行の停止(捕捉または無視できない) SIGTSTP iv 端末の停止シグナル SIGTTIN iv バックグラウンドプロセスの読み取り SIGTTOU iv バックグラウンドプロセスの書き込み SIGBUS ii バスエラー ポール可能なイベント SIGPOLL i SIGPROF i タイマのプロファイルの時間切れ SIGSYS ii 無効なシステムコール SIGTRAP ii トレーストラップまたは ブレークポイントトラップ ソケットで高帯域データが使用可能 SIGURG iii SIGVTALRM i 仮想タイマの時間切れ SIGXCPU ii CPU 制限時間の超過 SIGXFSZ ii ファイルサイズの上限の超過 SIGRTMIN i 最初のリアルタイムシグナル SIGRTMAX i 最後のリアルタイムシグナル SIGRTMIN および SIGRTMAX マクロは整数式として評価され、アプリケーションの使用とリアルタイムシグ ナルの拡張をサポートするために予約された、少なくとも {RTSIG_MAX} のシグナル番号を含む範囲を指定し ます。(sigaction(2)) を参照) デフォルトのアクションは、次のとおりです。 i プロセスが異常終了します。プロセスは、 _exit() と結果と同じ状態で終了します。ただ し、ステータスは、 wait() 可能であり、さらに、 waitpid() は指定したシグナルに対する異 常終了の値を示します。 ii プロセスが異常終了します。この他にも、コアファイルの作成など、インプリメンテー ションに依存した異常終了アクションが発生することがあります。 iii Section 5-396 シグナルを無視します。 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 signal(5) signal(5) iv プロセスが停止します。 v プロセスが停止している場合、継続します。これ以外の場合、シグナルを無視します。 ヘッダは、構造体 sigaction の宣言を行っています。それには、少なくとも以下のメンバーが含まれます。 void (*sa_handler)(int) シグナルの受信時に行われる 処理 sigset_t シグナル処理関数の実行中に sa_mask ブロックされるシグナルの集 合 int sa_flags スペシャルフラグ void (*) sa_sigaction シグナルハンドラー 関数へのポインタ (int, siginfo_t *, void *) sa_handler および sa_sigaction が入っている記憶領域は重複していることがあるため、移植可能なプログラムで は、これらを同時に使用してはなりません。 定数として、以下のものが宣言されています。 SA_NOCLDSTOP 子プロセスが停止している場合、 SIGCHLD を生成しません。 SIG_BLOCK 現在の集合と引き数 set が指すシグナルの集合との和集合が作られます。 SIG_UNBLOCK 現在の集合と引き数 set が指すシグナルの補集合との"交わり"が作られま す。 SIG_SETMASK 引き数 set が指すシグナルの集合が作られます。 SA_ONSTACK 代替スタックにシグナルが送信されます。 SA_RESETHAND シグナルハンドラーへ入るときに、シグナルの処理が SIG_DFL にセット されます。 SA_RESTART SA_SIGINFO ある一定の関数が再実行可能になります。 シグナルの受け取りに時に、シグナルハンドラーに特別な情報が渡されま す。 SA_NOCLDWAIT 子プロセスの抹消のときに、インプリメンテーションはゾンビプロセスを 作成しません。 SA_NODEFER シグナルハンドラーへ入るときに、シグナルが自動的にブロックされませ ん。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-397 signal(5) signal(5) SS_ONSTACK 代替シグナルスタック上でプロセスを実行します。 SS_DISABLE 代替シグナルスタックが使用できません。 MINSIGSTKSZ シグナルハンドラーの最小スタックサイズ SIGSTKSZ 代替シグナルスタックのバイト単位のデフォルトサイズ <ucontext.h> で説明しているように、 ucontext_t 構造体は typedef によって定義されています。 ヘッダ <signal.h> は、 stack_t 型を、少なくとも次のメンバーを含む構造体として定義しています。 スタックベースまたはスタックポインタ void *ss_sp size_t ss_size スタックサイズ int ss_flags フラグ ヘッダ <signal.h> は、 sigstack 構造体を、少なくとも次のメンバーを含む構造体として定義しています。 int ss_onstack シグナルスタックが使用中の場合はゼロ以外の値 void *ss_sp シグナルスタックのポインタ ヘッダ <signal.h> は、 sigevent 構造体を、少なくとも次のメンバーを含む構造体として定義しています。 int sigev_notify 通知方法 int sigev_signo シグナル番号 union sigval sigev_value シグナル値 sigev_notify メンバーは、非同期のイベントが発生した場合の通知方法を指定します。 sigev_notify にはメン バーには次の値が定義されています。 SIGEV_NONE SIGEV_SIGNAL 重要なイベントが発生した時、非同期の通知が送られません。 プロセスの実行時に重要なイベントが発生した場合、 sigev_signo で指定さ れたシグナルが生成されます。 SA_SIGINFO に、このシグナル番号が設 定されている場合、生成されたシグナルは待ち行列に入り、 sigev_value で 指定された値が送られます。 SA_SIGINFO に sigev_signo で指定したシグ ナル番号が設定されていない場合、シグナルが待ち行列に入るかどうか、 また、どのような値が送られるのかが指定されていないことになります。 sigev_signo メンバーは生成されるシグナルを指定します。 sigev_value メンバーは、シグナルの送信時にシグナ ル受信関数に渡されたり、シグナル受信時に siginfo_t 構造体の si_value メンバーとして戻されるアプリケー ション定義の値です。 ヘッダ <signal.h> は、 sigval を、少なくとも次のメンバーを含む構造として定義しています。 int Section 5-398 sival_int int 型のシグナル値 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 signal(5) signal(5) void * sival_ptr ポインタ型のシグナル値 ヘッダ <signal.h> は、 siginfo_t 型を、少なくとも次のメンバーを含む構造体として定義しています。 int si_signo シグナル番号 int si_errno ゼロ以外であればこのシグナルに 対応する errno の値( <errno.h> で定義されています ) シグナルコード int si_code union sigval si_value シグナル値 id_t si_pid 送信プロセスID uid_t si_uid 送信プロセスの実ユーザーID void *si_addr フォルトしている命令のアドレス int si_status 終了値または終了シグナル long si_band SIGPOLLのバンドイベント si_code メンバーには、シグナルが発生した原因を示すコードが含まれています。次の値が si_code に定義され ます。 このシグナルは kill() から送られました。 si_code には SI_USER が設定さ SI_USER れます。また、 raise() または kill() の拡張処理として提供される同様の関 数から送られた場合も同じ値が設定されます。 このシグナルは sigqueue() から送られました。 SI_QUEUE このシグナルは timer_settime() で設定されたタイマーセットが終了した時 SI_TIMER に生成されました。 SI_ASYNCIO このシグナルは非同期 I/O 要求が完了した時に生成されました。 このシグナルは空のメッセージキューにメッセージが到着した時に生成さ SI_MESGQ れました。 上記の関数やイベントによりシグナルが生成されなかった場合、 si_code には上記のどの値とも異なる処理系 定義の値 (下記を参照) が設定されます。 si_code が SI_QUEUE、SI_TIMER、SI_ASYNCIO または SI_MESGQ のいずれかの場合、 si_value アプリ ケーション定義のシグナル値となります。それ以外の場合、 si_value の内容は未定義となります。 次の表の「コード」の欄で指定されているマクロは、それぞれ、シグナルが生成された理由を示す si_code の 値として使用するために定義されています。 シグナル コード HP-UX 11i Version 2: August 2003 理由 −5− Hewlett-Packard Company Section 5-399 signal(5) signal(5) SIGILL SIGFPE SIGSEGV ILL_ILLOPC 不当な演算コード ILL_ILLOPN 不当なオペランド ILL_ILLADR 不当なアドレスモード ILL_ILLTRP 不当なトラップ ILL_PRVOPC 特権演算コード ILL_PRVREG 特権レジスタ ILL_COPROC コプロセッサエラー ILL_BADSTK 内部スタックエラー FPE_INTDIV 整数の除算例外 FPE_INTOVF 整数のオーバーフロー FPE_FLTDIV 浮動小数点の除算例外 FPE_FLTOVF 浮動小数点のオーバーフロー FPE_FLTUND 浮動小数点のアンダーフロー FPE_FLTRES 浮動小数点の不正確な結果 FPE_FLTINV 無効な浮動小数点演算 FPE_FLTSUB 添え字の範囲超過 SEGV_MAPERR アドレスがオブジェクトにマップしていない SEGV_ACCERR マップしたオブジェクトに対する無効な パーミッション SIGBUS SIGTRAP SIGCHLD BUS_ADRALN 無効なアドレス整列 BUS_ADRERR 存在しない物理アドレス BUS_OBJERR オブジェクト特有のハードウェアエラー TRAP_BRKPT プロセスのブレークポイント TRAP_TRACE プロセスのトレーストラップ CLD_EXITED 子プロセスの存在 CLD_KILLED 子プロセスが異常終了し コアファイルを作成しなかった CLD_DUMPED 子プロセスが終了しコアファイルを 作成した Section 5-400 CLD_KILLED 子プロセスが抹消された CLD_DUMPED 子プロセスの異常終了 CLD_TRAPPED トレースした子プロセスがトラップしている CLD_STOPPED 子プロセスの停止 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 signal(5) signal(5) CLD_CONTINUED SIGPOLL 停止した子プロセスの継続 POLL_IN データが入力可能 POLL_OUT 出力バッファが使用可能 POLL_MSG 入力メッセージが使用可能 POLL_ERR I/O エラー POLL_PRI 優先入力が使用可能 POLL_HUP デバイスの非接続 インプリメンテーションによっては、このリスト以外の si_code 値をサポートしていたり、このリストで記述 している以外の環境でこのリストの値を生成したり、値の生成を妨げる拡張機能や制約がある場合がありま す。また、このリストで記述している環境に対して、このリストと異なる値を生成しないインプリメンテー ションもあります。 さらに、次のようなシグナル特有の情報が使用可能です。 シグナル メンバー 値 SIGILL void * si_addr フォールトした命令のアドレス void * si_addr フォールトしたメモリ参照のアドレス SIGFP SIGSEGV SIGBUS SIGCHLD pid_t si_pid 子プロセス ID int si_status 終了値または終了シグナル uid_t si_uid シグナルを送信したプロセスの実ユー long si_band POLL_IN、POLL_OUT、または ザーID SIGPOLL POLL_MSG のバンドイベント インプリメンテーションによっては、 si_addr の値が不正確な場合があります。 次のものは、関数として宣言されるとともに、マクロとしても定義されています。 void (*bsd_signal(int sig, void (*func)(int)))(int); int kill(pid_t pid, int sig); int killpg(pid_t pgrp, int sig); int raise(int sig); int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); int sigaddset(sigset_t *set, int signo); int sigaltstack(const stack_t *ss, stack_t *oss); HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 5-401 signal(5) signal(5) int sigdelset(sigset_t *set, int signo); int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sighold(int sig); int sigignore(int sig); int siginterrupt(int sig, int flag); int sigismember(const sigset_t *set, int signo); int sigmask(int signum); void (*signal(int sig, void (*func)(int)))(int); int sigpause(int sig); int sigpending(sigset_t *set); int sigprocmask(int how, const sigset_t *set, sigset_t *oset); int sigqueue(pid_t pid, int sig, const union sigval value); int sigrelse(int sig); void *sigset(int sig, void (*disp)(int)))(int); int sigstack(struct sigstack *ss, struct sigstack *oss); int sigsuspend(const sigset_t *sigmask); int sigtimedwait(const sigset_t *set, siginfo_t * info, const struct timespec *timeout); int sigwait(const sigset_t *set, int *sig); int sigwaitinfo(const sigset_t *set, siginfo_t * info); アプリケーション使用法 スレッドについての留意事項 スレッドにおけるシグナルのモデルを次に要約します。 ブロックされるシグナルを指定したシグナルマスクは、各スレッドごとに管理されます。 捕捉無視デフォルトなどのシグナル受信時の動作は、プロセスの属性であり、プロセス内のすべての スレッドで共有されます。 シグナルアクションが終了、一時停止、または続行するよう設定されていると、プロセス中のすべて のスレッドが個々に終了、一時停止、または続行されます。シグナルがプロセスに直接送信される場 合でも、プロセス中の特定のスレッドに送信される場合でも同じです。 (不正なポインタ参照など)特定のスレッドの動作が原因で発生したシグナルは、原因となったスレッド に送信されます。このようなシグナルは、同期的に生成されたシグナルと呼ばれています。 kill(2) や、(ターミナルからの入力といった)別の非同期的なイベントによってプロセスに通知されるシ グナルは、対象シグナルがブロックされていないスレッドのうちの1つにだけ送信されます。該当する Section 5-402 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 signal(5) signal(5) スレッドが複数個存在する場合、アプリケーションから受信スレッドを指定する方法はありません。 プロセス中のすべてのスレッドで対象シグナルがブロックされていると、そのうちの1つのスレッドが ブロックを解除するまでそのシグナルは保留されます。対象シグナルに対して sigwait() を呼び出す か、シグナル受信時の動作で無視するように設定すると、ブロックは解除されます。このようなシグ ナルは、非同期的に生成されたシグナルと呼ばれています。 スレッドから、同一プロセス上の特定のスレッドにシグナルを通知する場合は、 pthread_kill() を使用 します。シグナルを通知されたスレッド側で対象シグナルがブロックされていると、シグナルはス レッド上で保留状態になります。 sigpending() を使用すると、プロセスおよび呼び出したスレッド上で保留状態になっているシグナルの 種類を取得できます。結果は、シグナルのセットを表わす共用体に戻されます。 各スレッドごとに、代替シグナルハンドラー スタックを定義できます。 スレッドセーフについての留意事項 libc および libpthread インタフェースのうちの、非スレッドセーフ、キャンセルポイント、キャンセルセーフ、 非同期シグナルセーフ、非同期キャンセルセーフであるもののリストは、 thread_safety(5) を参照してくださ い。 LWPについての留意事項 ブロックされるシグナルを指定したシグナルマスクは、各ライトウェイトプロセス (LWP) ごとに管理されま す。 捕捉無視デフォルトなどのシグナル受信時の動作は、プロセスの属性であり、プロセス内のすべての LWP で 共有されます。 LWP から、同一プロセス上の特定の LWP にシグナルを通知する場合は、 lwp_kill() を使用します。シグナル を通知されたスレッド側で対象シグナルがブロックされていると、シグナルはスレッド上で保留状態になりま す。 各 LWP ごとに、代替シグナルハンドラー スタックを定義できます。 参照 alarm(2)、 ioctl(2)、 kill(2)、 sigaction(2)、 sigaltstack(2)、 siginterrupt(2)、 signal(2)、 sigpending(2)、 sigprocmask(2)、 sigstack(2)、 sigsuspend(2)、 sigwait(2)、 thread_safety(5)、 wait(2)、 waitid(2) 変更履歴 第1刷で第1回リリース 第4刷 ISO の POSIX−1 標準へ準拠するために以下の変更が行われました。 • このヘッダの関数宣言は、ISO C の完全なプロトタイプに拡張されています。 • 「説明」の項は次のように変更されています。 HP-UX 11i Version 2: August 2003 −9− Hewlett-Packard Company Section 5-403 signal(5) signal(5) − sig_atomic_t 型を定義 − シグナル名およびシグナル関数の構文を定義しました。 − 2つの表の定数をまとめました。 − SIGFPE は、浮動小数点の例外だけでなく、算術演算のあらゆるエラーを対象とするようにな りました。 以下の変更は、ISO C 標準に準拠するために行われています。 • このヘッダで宣言している関数のリストに、 raise() 関数を追加しました。 その他の変更は、次のとおりです。 • pid_t の定義のために、 <sys/types.h> の参照を追加しました。これは、拡張機能として記述されて います。 • SIGCHLD で始まるシグナルのリストでは、「ただし、ジョブコントロール オプションをサポート していないシステムでは、これらのシグナルの機能をサポートしているとは限りません」という文 章が削除されています。これは、第4刷に準拠したインプリメンテーションでは、ジョブコント ロールが必須であるとして定義されているためです。 • デフォルトのアクションリストの項iiにおける、コアファイルの作成など、インプリメンテーショ ンに依存した異常終了ルーチンに関しては、拡張機能として記述されています。 第4刷バージョン2 X/OPEN UNIX へ準拠するために以下の変更が行われました。 • SIGTRAP、SIGBUS、SIGSYS、SIGPOLL、SIGPROF、SIGXCPU、SIGXFSZ、SIGURG、およ び SIGVTALRM シグナルが、XOPEN UNIXに準拠した全インプリメンテーション上でサポートす るシグナルのリストに追加されました。 • sigaction 構造体に sa_sigaction メンバーが追加され、 sa_handler および sa_sigaction が使用する記 憶領域が重複することがある、という注意が追加されています。 • SA_ONSTACK、SA_RESETHAND、SA_RESTART、SA_SIGINFO、SA_NOCLDWAIT、 SS_ONSTACK、SS_DISABLE、MINSIGSTKSZ、および SIGSTKSZ 定数が定義されています。 stack_t、sigstack、および siginfo 構造体が定義されています。 • ucontext_t、stack_t、sigstack、および siginfo_t 型の定義が行われています。 • シグナルの生成理由を示すように定義されたマクロの表が提供されています。シグナルの追加情報 が指定されています。 • bsd_signal()、killpg()、_longjmp()、_setjmp()、sigaltstack()、sighold()、sigrelse()、sigset()、およ び sigstack() 関数が、このヘッダの関数宣言のリストに追加されています。 Section 5-404 Hewlett-Packard Company − 10 − HP-UX 11i Version 2: August 2003 signal(5) HP-UX 11i Version 2: August 2003 signal(5) − 11 − Hewlett-Packard Company Section 5-405 signal(5) signal(5) HP−UX の拡張機能 説明 HP-UX は複数のシグナルインタフェースをサポートし (sigaction(2)、signal(2)、sigvector(2)、bsdproc(3C)、およ び sigset(3C)) を参照)、それを使用すると、プロセスはシグナルを受け取ったときの動作を指定できます。サ ポートされているシグナルインタフェースはすべて、下に示す 名称および 番号で明記された、シグナルの指定 を要求します。シグナルの指定は以降のどれでも可能ですが、 SIGKILL あるいは SIGSTOP は、受け取るこ とができないか無視されるので指定できません。 番号 注記 意味 SIGILL 名称 04 A,B,C 不法な命令 SIGTRAP 05 A,B,C トレーストラップ SIGIOT 06 A,B ソフトウェアシグナル SIGEMT 07 A,B ソフトウェアシグナル SIGFPE 08 A,B 浮動小数点の例外 強制終了 SIGKILL 09 A,D,E,F SIGCLD l8 G 子プロセスの終了 (警告を参照) SIGPWR 19 C,G 電源異常 (警告を参照) 非同期の I/O シグナル (select(2) を参照) SIGIO 22 G SIGWINCH 23 G ウィンドウサイズの変更 (termio(7) を参照) SIGURG 29 G I/O チャネルへの緊急データ到着 SIGLOST 30 A ファイルロックの消失 (NFS ファイル ロッキング) 上の表の 注記の欄の文字は、シグナルを受け取ったときの動作、およびその使用についての特別な条件を示し ます。 A デフォルトの動作はプロセスの終了 B デフォルトの動作であるプロセスの終了時に、可能ならばコアイメージのファイルを作成 C シグナルを受けとる関数を呼び出す前に、 SIG_DFL をリセットしない。 D シグナルは無視できない。 E シグナルを受け取ることはできない。 F シグナルは中断したプロセスから、遅らせて伝えることはできない。 G デフォルトの動作はシグナルの無視 H デフォルトの動作はプロセスの中断 すべてのシグナルインタフェースは、シグナルを受け取ったときにどのような動作をするか指定できます。そ Section 5-406 Hewlett-Packard Company − 12 − HP-UX 11i Version 2: August 2003 signal(5) signal(5) れは、次のうちのどれかに決定しなくてはなりません。 SIG_DFL デフォルトの動作を実行する場合。デフォルトの動作は上に述べたシグナルによって異 なります。 A B exit(2) に概要が示されているように、受け取ったプロセスを終了させます。 次の条件が満たされる場合、コアイメージ ファイル (core(4) を参照) を、受け 取ったプロセスの現在のワークディレクトリに生成します。 • 実効ユーザー ID と、受け取ったプロセスの実際のユーザーIDが等し い場合 • 実効グループ ID と、受け取ったプロセスの実際のグループidが等し い場合 • core という名前の通常のファイルが存在せず、生成可能であるか、 または存在して書き込み可能な場合 ファイルが生成されると、それは以降の属性を持ちます。 • ファイルのモードは0666であり、ファイル生成モードマスクにより 修正されます (umask(2) を参照)。 • ファイルのユーザーIDは、受け取ったプロセスの実効ユーザー ID と 等しくなります。 • ファイルのグループIDは、受け取ったプロセスの実効グループ ID と 等しくなります。 G H シグナルを無視します。受け取ったプロセスは終了も中断もしません。 受け取ったプロセスを中断します。プロセスが中断している間、そのプロセ スにさらに送られたシグナルは、そのプロセスが再起動するまで停止させら れます (ただし上で注記に F のマークがついているものは除きます。その場 合は即座に処理されます)。しかし、プロセスが再起動したとき、停止中のシ グナルは処理されます。親なしプロセスグループ (glossary(9) を参照) のプロ セスが、SIGTSTP、SIGTTIN、あるいは SIGTTOU シグナルを受け取った場 合、そのプロセスは中断されません。なぜなら、親なしプロセスグループの プロセスは、中断することが許されていないからです。その代わりに、 SIGHUP シグナルがプロセスに送られ、そして SIGTSTP、SIGTTIN、ある いは SIGTTOU が放棄されます。 SIG_IGN シグナルを無視する場合サポートされているシグナル インタフェースルーチンのひとつ が、シグナルの動作を SIG_IGN に設定するために使われていて、シグナルの実体が停止 させられている場合、その停止しているシグナルはクリアされます。 HP-UX 11i Version 2: August 2003 − 13 − Hewlett-Packard Company Section 5-407 signal(5) signal(5) D address 上で 注記に D とマークされているシグナルは、無視できません。 シグナルを受け取る場合 signal() が動作を設定するのに使われている場合は、シグナルを受け取るときに、捉えた シグナルに対する動作を、 SIG_DFL にリセットします (注記に C とマークされているシ グナルは除きます)。それから、 address で指し示されるシグナルを受けとる関数を呼び 出し、そして、受け取ったプロセスを、割込みを受けた点から再び実行します。 signal() 以外のシグナル インタフェースルーチンは、通常、捉えたシグナルに対する動作をリ セットしません。しかし、 sigaction() および sigvector() は、そのように動作させるため の方法を提供しています (sigaction(2) あるいは sigvector(2) を参照)。 シグナルを受けとる関数は、次の3つのパラメータで呼び出されます。 sig シグナル番号 code 通常、ハードウェアにより提供される、情報のワード scp <signal.h> で定義されている、機種に依存した構造体 sigcontext へのポイ ンタ sig の値によって、code を0にしたり、scp を NULL にすることができます。 code および scp の意味と、それらが0あるいは NULL でない場合を決定する条件は、実現方法に依存 しています (「制約」を参照)。 code を常に0にすることは可能ですし、また scp を常に NULL にすることも可能です。 ポインタ scp は、シグナルを受けとる関数のコンテクストにいる間だけ有効です。 シグナルを受けとる関数が UNIX システムVに厳密に互換性がある場合には、シグナルを 受けとる関数のパラメータリストからオプションのパラメータを省くことができます。 本当に移植可能なソフトウェアは、シグナルを受け取るルーチンで、オプションのパラ メータを使うべきではありません。 シグナルを受けとる関数から戻ると、シグナルを受け取ったプロセスは、割り込まれた 点から再び実行を行います。 スローデバイス (端末など。ファイルは違います。) で、 read()、write()、open()、ある いは ioctl() のようなシステムコールを実行している間、または以前に中断しているプロ セスまたはゾンビプロセスがすでに存在するために、即座には戻ってこない pause() シス テムコールまたは wait() システムコールの間に、シグナルを受け取った場合、シグナル を受けとる関数は実行され、割り込まれたシステムコールは −1 を呼び出したプロセスに 返し、 errno を EINTR にセットします。 C 前述の注記に C のマークの付いたシグナルの場合、シグナルを受けとる関数を呼び出す前に、動 作は SIG_DFL にリセットされません。そのうえ、動作を設定するために signal() 以外のどのシ グナル インタフェースルーチンを使っても、動作はリセットされません。上の、シグナル受取り の説明を参照してください。 Section 5-408 Hewlett-Packard Company − 14 − HP-UX 11i Version 2: August 2003 signal(5) signal(5) E 前述の注記に E とマークされているシグナルの場合は、シグナルは捉えられません。 あるプロセスに対する中断シグナル (SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU) のどれかが発生した場 合、そのプロセスに対する、停止していた SIGCONT シグナルは破棄されます。逆に、プロセスに対する SIGCONT が発生した場合、そのプロセスに対する、停止していた中断シグナルはすべて破棄されます。 SIGCONT が中断しているプロセスに対して発生すると、 SIGCONT シグナルがブロックまたは、無視されていて も、そのプロセスは継続されます。 SIGCONT がブロックされていてかつ、無視されていない場合、そのプロ セスは、ブロックが外れるか、中断シグナルが発生するまで、停止したままになります。 注意: プロセス競合状態で作成されたスレッドに対して、 pthread_kill() を使用して中断シグナル (SIGSTOP、 SIGTSTP、SIGTIN、SIGTTOU) を指示しても、保留していた SIGCONT シグナルが破棄されないことがありま す。同様に、プロセス競合状態で作成されたスレッドに対して、 pthread_kill() を使用して SIGCONT シグナル を指示しても、保留していた中断シグナルが破棄されないことがあります。ただし、システム競合状態で作成 されたスレッドに対して pthread_kill() を使用して指示された中断シグナルおよび継続シグナルは、前のパラ グラフの説明に従います。 exec() システムコールが異常終了し、元のプログラムがすでに消去された場合に、 SIGKILL がシステムから 送られます。 警告 シグナル SIGCLD および SIGPWR は、前述の説明とは違った動作をします。 これらのシグナルへの動作は、次のように修正されます。 SIGCLD 親プロセスにおいて SIGCLD に対する動作を SIG_IGN にセットすると、呼び出した プロセスの子が終了するときに、ゾンビプロセスを作り出すのを避けることができま す。親プロセスが wait() 関数を実行すると、呼び出したプロセスの子プロセスがすべ て終了するまで、呼び出しプロセスはブロックします。 wait() 関数はそれから −1 の 値を返し、 errno に ECHILD をセットします (wait(2) を参照)。 シグナル インタフェースルーチンの1つを使って、 SIGCLD を、現在終了している ( ゾンビの) 子を持っているプロセス内で受け取るように動作を設定した場合 (すなわ ち、関数のアドレスを提供した場合)、 SIGCLD シグナルは、その親プロセスにすぐ に送られます。したがって、シグナルを受けとる関数が再び自分自身をインストール すると、関数を実行している間の子の死に応じて受け取る SIGCLD シグナルは、 キューに入れられます。そしてシグナルを受けとる関数はキューが空になるまで継続 的に再入されるという効果が現れます。関数は、 wait()、wait3() あるいは waitpid() を呼んだ後で、自分自身を再インストールしなければならないことに注意してくださ い。そうしないと、元のシグナルを引き起こした子の存在が、もう1つのシグナルを すぐに引き起こして、無限の再帰を起こす結果となります。 Cシェル、Kornシェルおよび POSIX シェル (csh(1)、ksh(1)、および sh-posix(1) を参照) を含むジョブコントロールシェルは、シェル自身をパイプラインのすべてのプロセス の親プロセスにします。したがって、パイプからデータを受け取ることができるプロ HP-UX 11i Version 2: August 2003 − 15 − Hewlett-Packard Company Section 5-409 signal(5) signal(5) セスは、 SIGCLD を受け取ろうとしてはいけません。 SIGPWR SIGPWR シグナルは、電源中断の後、電源が復旧してシステムが必要な再初期化をす べて行ったときに、すべてのプロセスに対して送られます。プロセスは、 SIGPWR を受け取って (あるいは無視して)、再起動します。 電源異常から回復しようとするアプリケーションは、 SIGPWR を受け取って、自分 自身の再初期化に必要なステップを行わなければなりません。 いくつかのインプリメンテーションでは、 SIGPWR は発生しません。不揮発メモリ を持ったシステムだけが、電源異常から回復できます。 制約 シリーズ 700 現在、シグナル SIGPWR は発生しません。 シリーズ 700/800 構造体へのポインタ scp は常に定義されています。 code ワードは、 SIGILL および SIGFPE 以外のすべてのシグナルにおいて常に0です。 SIGILL については、 code は次の値を持ちます。 8 不法な命令トラップ 9 ブレーク命令トラップ 10 特権操作トラップ 11 特権レジスタトラップ SIGFPE については、 code は次の値を持ちます。 12 オーバフロートラップ 13 条件トラップ 14 アシスト例外トラップ 22 アシストエミュレーション トラップ これらのエラーの意味の詳細については、シリーズ 800 プロセッサの文書を参照してください。 インストラクションアドレス オフセットキュー(プログラムカウンタ) は、シリーズ 800 システムにおいてト ラップが起きた場合には、進みません。ハードウェアトラップによって発生したシグナルが、マスクされる か、シグナルの動作が SIG_IGN に設定されていると、トラップを引き起こした命令が再実行されるため、再 びトラップが引き起こされて、プログラムは無限ループします。シグナルを、ユーザープログラムの中のシグ ナルを受けとる関数で受け取ると、トラップを引き起こした命令は、シグナルを受けとる関数によってプログ ラムの流れが変わらない限りシグナルを受けとる関数から返ったときに再実行されます。例えば、 longjmp() ルーチン (setjmp(3C) を参照) を呼び出すことができます。 longjmp() を使うと、異なったハードウェアアーキ Section 5-410 Hewlett-Packard Company − 16 − HP-UX 11i Version 2: August 2003 signal(5) signal(5) テクチャでのソフトウェアの移植性が保証されます。 著者 signal はHP, AT&T, およびカリフォルニア大学バークレー校で開発されました。 参照 kill(1)、init(1M)、bsdproc(3C)、exit(2)、kill(2)、lseek(2)、pause(2)、sigaction(2)、signal(2)、sigvector(2)、 wait(2)、sigset(3C)、abort(3C)、setjmp(3C) 標準準拠 <signal.h>: AES、SVID2、SVID3、XPG2、XPG3、XPG4、FIPS 151-2、POSIX.1、ANSI C HP-UX 11i Version 2: August 2003 − 17 − Hewlett-Packard Company Section 5-411 sis(5) sis(5) 名称 sis − Kerberos 方式の認証と認可によるインターネットの安全性サービス 説明 インターネットの安全性サービス (SIS) を HP DCE セキュリティサービス、HP Praesidiumセキュリティサー バ、 または Kerberos V5 ネットワーク認証サービス環境を提供するその他のソフトウェア製品と共に使用する と、ネットワーク認証が提供されます。ネットワーク認証により、ローカルホストとリモートホストが安全か つ信頼性の高い方法で互いを確認することと、ユーザーがリモートホストでサービスを使用するのを認可でき ます。 telnet、 rlogin、または ftp などの従来のインターネットサービスでは、ユーザーのパスワードを入力し、その 後パスワードがネットワークを介してリモートシステムへ送られことによって、リモートシステムへのアクセ スが許可されます。パスワードは暗号化なしでネットワークを介して送られるため、傍受者はパスワードを含 むクリアテキストのパケットを得ることができます。これは、従来のインターネットサービスにおける主な安 全性の落とし穴といえます。 オプションであるインターネットの安全性サービスは、従来のものに取って代わるものであり、ユーザーのパ スワードがネットワークを介してクリアテキストで転送されるのを防ぎます。しかし、これらのサービスはど れも、サービスの認証またはユーザーの認可に必要なレベルを超えるセッション暗号化を行いません。 このマンページは、 Kerberos V5 ネットワーク認証サービス環境に通常添付されている Kerberos 専門用語を熟 知している読者を想定して構成されています。ここでは、特に SIS によって使用される Kerberos 環境の概要を 説明します。 認証 Kerberos で認証を成功させるには、ユーザーは Kerberos 領域 (realm) 内でシステムに正常にログインして証明 書 (credential) のセットを取得する必要があります。証明書には、TGT (Ticket Granting Ticket) とセッション鍵が 含まれます。 SIS クライアントは、TGT を使用してネットワークで SIS デーモンにアクセスするサービスチ ケットを取得します。証明書がない場合または TGT が無効である場合は、認証を実行できずに SIS デーモン への接続は拒否されます。 DCE セルに構成されているシステムの場合は、 dce_login コマンドで証明書を取得します。 Praesidiumセキュ リティサーバ セルに設定されたシステムの場合は、 dess_login コマンドで証明書を取得します。 DCE 以外の Kerberos を基本としたセキュアな環境では、 kinit コマンドで証明書を取得します。 認可 これらのサービスのすべてのユーザーについて、ユーザー主体 (principal) を「鍵配布センタ」と呼ばれる KDC (Key Distribution Center) のデータベースに構成しておく必要があります。ユーザー主体は、 Kerberos 認証機構 の一部としてリモートのサービスに送られるサービスチケットをユーザーが取得することを許します。認証が 成功すると、その後ユーザー主体は Kerberos 認可機構の一部として使用されます。 認可を取得するために、次の必要条件の両方を満たす必要があります。 Section 5-412 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 sis(5) sis(5) 1. ログイン名がリモートシステムのパスワードファイルに存在している必要があります。つまり、リ モートのアカウントが必要です。注意: ログイン名は、ログインのプロンプトに対する応答としてユー ザーが指定する名前であり、現在のユーザー名と異なっていてもかまいません。 2. A. 次の状態のうち1つに該当する必要があります。 リモートアカウントのホームディレクトリにユーザー主体を含むファイル .k5login がある場合。その アカウントがファイル .k5login の所有者である必要があり、そのアカウントのみが書き込みパーミッ ションを持っている必要があります(つまり、パーミッションが-rw-r--r--として表示される)。 B. リモートシステムに、ユーザー主体を含む認可ネームのデータベースファイル aname がある場合。 ファイル aname には、ユーザー主体からリモートシステムのアカウントへのマッピングを含む必要が あります。 C. ユーザー主体のユーザー名が、アクセス中のアカウントのユーザー名と同じであり、ローカルおよび リモートシステムが同じ領域にある場合。 認可されると、ユーザーに対するパスワードのプロンプトは(パスワードが要求されるとき)表示されず、リ モートシステムへの接続が成功します。認証または認可されない場合は、ユーザーにエラーが通知され、作業 を継続できません。 認証/認可のバイパスまたは強制 認証または認可されない場合、 Kerberos 以外の認証を要請するための特別なコマンド行オプション (−P) を付 けてサービスを再実行することができます。しかし、パスワードが要求されるとき、そのパスワードは読み取 り可能な形式でネットワークを介して送られます。通常、この特別なコマンド行オプションは、セキュアでな いリモートシステムへのアクセスのみに使用する必要があります。 ftp と telnet デーモンには特別なコマンド行オプション (-A) があり、これを使用するとセキュアでないリモー トシステムからのアクセスを確実に拒否することができます。 rcp、remsh、または rlogin コマンドによるセキュアでないアクセスを防止するために、リモートシステム上の ファイル inetd.conf を編集して shell エントリーと login エントリーをコメントアウトする必要があります。 サービス ftp, ftpd ファイル転送プログラム rlogin, rlogind リモートログイン telnet, telnetd Telnet プロトコルのユーザーインタフェースとサーバ rcp, remshd リモートファイルのコピー remsh, remshd リモートシェルからの実行 不具合の究明と対策 SIS を正しく実行するために、セキュアな環境を適切にインストールし、構成し、実行させることが重要で す。以下に、これを確認するための簡単なチェックリストを示します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-413 sis(5) sis(5) 1. DCE、Praesidiumセキュリティサーバ、または Kerberos 安全運用方式は、 Kerberos サーバ上で実行し ている必要があります。ファイル /etc/services が、 Kerberos ポートのエントリーを含んでいる必要が あります。 2. ユーザーのユーザー主体は、KDC (Key Distribution Center) のデータベースの中に構成しておく必要が あります。適切なツール (例えば、 kadmin または HP DCE の dcecp) を使用し、データベースのリス トを表示させてユーザーがユーザー主体を構成していることを確認してください。 3. ローカルシステムおよびリモートシステムの Kerberos 構成ディレクトリには、 krb.conf、 krb.realms、およびサーバの鍵のテーブルファイルが必要です。一般に、 Kerberos 構成ディレクトリ は /krb5 となり、サーバの鍵のテーブルファイルは v5srvtab と命名されます。 4. ユーザー主体は、ローカルシステムおよびリモートシステム上の ˜/.k5login で指定する必要がありま す。 ˜/.k5login は、ユーザーのアカウントへのアクセスパーミッションを持つ、主体と領域名のリスト を示します。 代わりに、セキュアなシステムにおけるローカルシステムとリモートシステムで認可ネームのデータ ベース aname を使用することができます。このファイルのエントリーは、指定されたログイン名に ユーザー主体のユーザー名を認可します。 ˜/.k5login が存在し、正しいパーミッション (つまり、-rw-r--r--) を持っており、ユーザー主体を含むこ とを確認してください。または、適切なツール (例えば、HP DCE 以外のシステム上の krb5_anadd) を 使用してユーザー主体がファイル aname にあることを確認してください。 5. リモートシステム上のサーバの鍵のテーブルファイルには、ホスト主体が必要です。ルートユーザー は、コマンド klist -k によって v5srvtab の内容を確認することができます。 klist が -k オプションをサ ポートしている場合には、このコマンドを入力してホスト主体のリストが表示されることを確認して ください。 代わりに、検査ツール krbval がシステムで使用可能な場合には、コマンド krbval -v を使用してくだ さい。 6. ローカルシステムおよびリモートシステム上で krbval が使用可能な場合には、このツールを使用して ローカルシステム上のクライアントのアプリケーションおよびリモートシステム上のサーバのアプリ ケーションとして機能するよう実行し、 Kerberos 構成をテストします。詳細については krbval(1M) を 参照してください。 7. SIS ファイルがインストールされている必要があります。従来のサービスは保存され、新しいサービス のためのファイルがオリジナルの従来のファイル名とリンクされます。 診断 Kerberos 固有のエラーメッセージに加えて、 SIS にはサービスの一部またはすべてに共通する安全運用関連エ ラーメッセージがいくつかあります。これらのエラーメッセージは、サービスを実行できなかったかどうかを 検出するスクリプトで使用することができます。 Section 5-414 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 sis(5) sis(5) SIS クライアントが報告するエラーメッセージと警告メッセージ ERROR! Kerberos authentication failed. ユーザーが (kinit、 dce_login、または dess_login を使用して) 有効な TGT (Ticket Granting Ticket) を入 手していないか、領域 (realm) における KDC (Key Distribution Center) のデータベースに有効なホスト主 体が構成されていません。可能性のある障害原因を示す具体的なエラーメッセージがさらに、このエ ラーメッセージに伴います。 このエラーメッセージは、セキュアでないリモートシステムへのアクセスをユーザーが試みる場合に も生成されます。この場合、このメッセージの前に "To bypass Keyberos authentication, use the -P option" のメッセージが表示されます。 このエラーは、ftp、rlogin、telnet によって報告されます。 ERROR! Kerberos-specific options are invalid with the -P option. -P コマンド行オプションは、 Kerberos 認証を実行してはならないことを示しています。コマンド行で 任意の Kerberos 固有のオプションも指定している場合、そのオプションはこの要求と矛盾しているこ とになります。 remsh と rlogin の場合、このメッセージは -P オプションを -F、 -f、または -k オプションと組み合わ せて使用することはできないことを意味します。 rcp の場合は、 -P オプションを -k オプションと組み合わせて使用することはできないことを意味しま す。 telnet の場合、 -P オプションを -a または -l オプションと組み合わせて使用することはできないことを 意味します。 WARNING! Password will be sent in a non-secure manner. WARNING! Kerberos authentication will be bypassed. ユーザーがコマンド行で -P オプションを指定し、セキュアでないリモートシステムにアクセスした か、 Kerberos 環境において不具合のある構成をバイパスしました。 パスワードが要請される場合には、 -P コマンド行オプションはネットワークを介して読み取り可能な 形式でパスワードを送ります。この場合には、パスワードが傍受されたり奪われたりする可能性があ ります。 不具合のある構成を訂正して、リモートシステムがセキュアでないシステムの場合のみに -P オプショ ンを使用するようお勧めします。 最初の警告は ftp、 rlogin、 telnet によって報告されます。 2番目の警告は rcp によって報告されま す。 remsh は、パスワードが要求されるかどうかによって、どちらかの警告を報告できます。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-415 sis(5) sis(5) SIS デーモンによって syslog 内に報告されるエラーメッセージ ERROR! Access denied. Kerberos authentication must succeed. リモートシステムがセキュアでないアクセスを確実に防止できるようにするために、 -A コマンド行ス イッチを使用してデーモンが開始しました。ユーザーは、ローカルシステムがセキュアなアクセス用 に構成されていない限り、リモートシステムにアクセスできません。 このエラーは、 ftpd と telnetd で記録されます。 ERROR! Principal <principal> (<remote_user>@<remote_host>) logging in as <local_user> has no account. "local_user" には有効なパスワードファイルのエントリーがありません。 このエラーは、すべての SIS デーモンで記録されます。 ERROR! Principal <principal> (<remote_user>@<remote_host>) logging in as <local_user> failed krb5_userok. 認証されましたが、認可されませんでした。そのユーザー名がリモートシステム上のファイル ˜/.k5login またはファイル aname 内のリストにあることを確認する必要があります。ユーザーの ˜/.k5login は、正しいパーミッションを持ってる必要があり、ユーザーが所有している必要があります (つまり、-rw-r--r--)。 このエラーは、すべての SIS デーモンで記録されます。 ERROR! Principal <principal> (<remote_user>@<remote_host>) logging in as <local_user> failed ruserok. ファイル /etc/hosts.equiv またはファイル ˜/.rhost が存在しないか、 "local_user" を認可するよう適切に 設定されていません (ruserok(3N)を参照)。 rlogind または remshd が -R、 -r、 または -k オプションを使用して開始されている場合に、このエ ラーがこれらのデーモンで記録されます。 参照 ftp(1), kinit(1), kdestroy(1), klist(1), krbval(1M), rcp(1), remsh(1), rlogin(1), telnet(1), dce_intro(1M), dce_login(1M), dess_login(1M), ftpd(1M), remshd(1M), rlogind(1M), telnetd(1M), dess(5) Section 5-416 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 stat(5) stat(5) 名称 stat.h − stat() 関数で返されるデータ 構文 #include <sys/stat.h> 説明 ヘッダ <sys/stat.h> は、関数 fstat()、 lstat()、および stat() で返されるデータの構造体を定義しています。 stat 構造体には、最小限でも次のメンバーが含まれます。 dev_t st_dev ファイルが入っているデバイスの ID ino_t st_ino ファイルのシリアル番号 mode_t st_mode ファイルのモード (後述) nlink_t st_nlink ファイルへのリンク数 uid_t st_uid ファイルのユーザー ID gid_t st_gid ファイルのグループ ID dev_t st_rdev デバイス ID (キャラクタ型特殊ファイルまたはブロック型特殊ファイルの場合) off_t st_size バイト単位のファイルサイズ (通常ファイルの場合) time_t st_atime 最終アクセス時刻 time_t st_mtime 最終変更時刻 time_t st_ctime 最終ステータス変更時刻 long st_blksize このオブジェクトに対するファイルシステム特有のI/O ブロックサイズ。ファ blkcnt_t st_blocks short st_fstype このファイルが置かれているファイルシステムのタイプ dev_t st_realdev このファイルの i ノードが含まれているデバイスの実デバイス番号 イルシステムの種類によってはファイルごとに異なるものもある。 このオブジェクトに割り当てられたファイルシステム特有のサイズのブロック 数 (vfsmount(2) 参照) 同時に取得したファイルのシリアル番号およびデバイス ID は、システム内のファイルを一意に識別します。 dev_t、ino_t、mode_t、nlink_t、uid_t、gid_t、off_t、time_t、および blkcnt_t 型は、<sys/types.h> で説明し たのと同様に定義しています。時間はエポック以降の時間を秒単位で表します。 また、 st_mode の値として、次のシンボル名が定義されています。 ファイルタイプ ファイルのタイプ S_IFMT 0170000 S_IFSOCK 0140000 ソケット S_IFLNK 0120000 シンボリックリンク S_IFNWK 0110000 ネットワーク特殊ファイル HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-417 stat(5) stat(5) 通常ファイル S_IFREG 0100000 S_IFBLK 0060000 ブロック型特殊ファイル S_IFDIR 0040000 ディレクトリ S_IFCHR 0020000 キャラクタ型特殊ファイル S_IFIFO 0010000 FIFO 特殊ファイル (名前付きパイプ) ファイルモードビット ファイルの各種モードビット S_CDF 0004000 ディレクトリはコンテキスト依存ファイル S_ISUID 0004000 実行時にユーザー ID を設定 S_ISGID 0002000 実行時にグループ ID を設定 S_ENFMT 0002000 強制するファイルロッキングモードを設定 S_ISVTX 0001000 スワップテキストを使用後も保存 ファイルパーミッションモードビット S_IRWXU 0000700 所有者のファイルアクセスパーミッションビット S_IRUSR 0000400 所有者の読み取りアクセスパーミッション S_IWUSR 0000200 所有者の書き込みアクセスパーミッション S_IXUSR 0000100 所有者の実行/検索アクセスパーミッション S_IRWXG 0000070 グループのファイルアクセスパーミッションビット S_IRGRP 0000040 グループの読み取りアクセスパーミッション S_IWGRP 0000020 グループの書き込みアクセスパーミッション S_IXGRP 0000010 グループの実行/検索アクセスパーミッション S_IRWXO 0000007 その他のユーザーのアクセスパーミッションビット S_IROTH 0000004 その他のユーザーの読み取りアクセスパーミッション S_IWOTH 0000002 その他のユーザーの書き込みアクセスパーミッション S_IXOTH 0000001 その他のユーザーの実行/検索アクセスパーミッション 廃止予定のファイルパーミッションモードビットの名前 所有者の読み取りアクセスパーミッション S_IREAD 0000400 S_IWRITE 0000200 所有者の書き込みアクセスパーミッション S_IEXEC 0000100 所有者の実行/検索アクセスパーミッション S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGlD および S_ISVTX で定義したビットは重複しません。 S_IRWXU は、 S_IRUSR, S_IWUSR, および S_IXUSR のビット OR です。 S_IRWXG は、 S_IRGRP, S_IWGRP, および S_IXGRP のビット OR です。 S_IRWXO は、 S_IROTH, S_IWOTH, および S_IXOTH のビット OR です。 インプリメンテーションによっては、その他インプリメンテーション依存のビットを S_IRWXU, S_IRWXG, および S_IRWXO に OR することがありますが、それは、本書で定義するその他のビットのどれとも重複しま Section 5-418 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 stat(5) stat(5) せん。ファイル パーミッションビットは、 S_IRWXU, S_IRWXG, および S_IRWXO のビットの包含的OR に 対応するものとして定義されています。 次のマクロは、ファイルが、指定したタイプであるかどうかをテストします。これらのマクロに与えられる値 m は、 stat 構造体からの st_mode の値です。このマクロは、テストが真であれば0以外の値を返し、テストが 偽であれば0を返します。 S_ISBLK(m) ブロック型特殊ファイルのテスト S_ISCHR(m) キャラクタ型特殊ファイルのテスト S_ISDIR(m) ディレクトリのテスト S_ISFIFO(m) パイプまたはFIFO特殊ファイルのテスト S_ISREG(m) 通常ファイルのテスト S_ISLNK(m) シンボリックリンクのテスト S_ISCDF(m) コンテキスト依存ファイルのテスト S_ISNWK(m) ネットワーク特殊ファイルのテスト S_ISSOCK(m) ソケットのテスト 次のものは関数として宣言されるとともに、マクロとしても定義されることがあります。 int chmod(const char *path, mode_t mode); int lstat(const char *path, struct stat *buf); int mkdir(const char *path, mode_t mode); int mkfifo(const char *path, mode_t mode); int mknod(const char *path, mode_t mode, dev_t dev); int stat(const char *path, struct stat *buf); mode_t umask(mode_t cmask); アプリケーション使用法 このマクロは、ファイルタイプの判断に使用することをお薦めします。 警告 32 ビットアプリケーションの場合、 st_ino は、64 ビットの値を使用するファイルシステム用に最下位の 32 ビットに切り捨てられます。 参照 chmod(2)、 chown(2)、 link(2)、 mkdir(2)、 mkfifo(3C)、 mknod(2)、 stat(2)、 symlink(2)、 umask(2)、 utime(2)、 types(5) 標準準拠 <sys/stat.h>: AES、SVID2、SVID3、XPG2、XPG3、XPG4、FIPS 151-2、POSIX.1 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-419 stat(5) stat(5) 変更履歴 第1刷で第1回リリース SVID の第1刷に由来 第4版 ISO POSIX−1 標準に準拠するために、次の変更が行われました。 • このヘッダの関数宣言は、ISO C の完全なプロトコルに拡張されています。 • 「説明」の項では、(a) システム内でファイルを重複せずに識別する方法、 (b) 時間は、Epoch 以降 の時間を秒単位で表していること、(c) ファイル モードビットの定義および使用法を定めるルー ル、および (d) ファイルタイプをテストするマクロの使用法を示しています。 その他の変更は、次のように行われています。 • dev_t, ino_t, mode_t, nlink_t, uid_t, gid_t, off_t, および time_t を定義するために、ヘッダ <sys/types.h> への参照が追加されています。これは、拡張機能として記述されています。 • S_IREAD, S_IWRITE, S_IEXEC ファイルおよび S_ISVTX モードについての項目が削除されてい ます。 • 「説明」の項で、 stat 構造体のメンバーについての説明が修正されています。 第4刷バージョン2 X/OPEN UNIX へ準拠するために、次の変更が行われています。 • stat 構造体に、メンバー st_blksize および st_blocks が追加されています。 • S_IFMT の S_IFLINK 値が定義されています。 • S_ISVTX ファイル モードビットおよび S_ISLNK ファイルタイプをテストするマクロが定義され ています。 • Section 5-420 このヘッダの関数宣言のリストに、 fchmod(), lstat(), および mknod() 関数が追加されています。 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 stdarg(5) stdarg(5) 名称 stdarg.h − 可変個の引き数リストを操作するマクロ 構文 #include <stdarg.h> void va_start(va_list pvar, argN); type va_arg(va_list pvar, type); void va_end(va_list pvar); 説明 <stdarg.h> ヘッダには、可変個の引き数リストを受け取ることのできる手続きを、移植可能な方法で書くため の、マクロの集合があります。 (printf() のように) 可変個の引き数リストを持つルーチンを stdarg を使わずに 書くと、引き数を渡す規約がマシンごとに異なっていますので、移植不可能になってしまいます。 va_list は、リストをトラバースするのに使われる変数のために定義された型です。 va_start は、 pvar を初期化してリストの先頭を指すようにするために呼び出します。 argN の型は、関数の引 き数リストの可変部分の直前の引き数と同じでなければなりません。 va_arg は、リストの中で pvar で指し示される、次の引き数を返します。 type は、取り出す引き数の型です。 異なった型を混合することができますが、ルーチンには取り出す引き数がどの型なのかを知らせる必要があり ます。実行時には判定できないからです。 va_end は、クリーンアップに使います。 それぞれを va_start ... va_end で囲むと、複数のトラバーサルができます。 注記: <stdarg.h> ヘッダーファイルは <varargs.h> ヘッダーを置き換えるものであり、 varargs マクロがすべて 含まれています。 <varargs.h> は、ANSI 以前のコンパイラおよび HP C/HP-UX の以前のリリースとの互換性 を保つために提供されています。 例 この例は、 execl のインプリメンテーションです ( exec(2)を参照)。 #include <stdarg.h> #define MAXARGS 100 /* execl is called by execl(file, arg1, arg2, ..., (char *)0); */ execl(const char *file, const char *args, ...) { va_list ap; char *array[MAXARGS]; int argno = 0; HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-421 stdarg(5) stdarg(5) va_start(ap, args); if ((array[0] = args) != 0) while ((array[argno++] = va_arg(ap, char *)) != 0) ; va_end(ap); return execv(file, array); } 警告 引き数の数は、スタックフレームより判定できない場合があるので、ルーチンを呼ぶときに指定します。例え ば、 execl() ではリストの終わりを知らせるのにゼロポインタを渡し、また printf() ではフォーマットの文字列 により、引き数の数を知らせることができます。 ANSI C を使わない場合は、 va_arg の2番目の引き数に char, short, あるいは float を指定すると、移植不可能に なるかもしれません。なぜなら、呼び出された関数では、引き数は決して char, short, あるいは float ではない からです。 ANSI C 以前の C では、引き数を関数に渡す前に、 char および short 引き数を int に変換し、また float 引き数 を double に変換します。 参照 exec(2)、 vprintf(3S)、 varargs(5) 標準準拠 <stdarg.h>: AES, SVID3, XPG4, FIPS 151-2, POSIX.1, ANSI C va_arg: SVID3, XPG4, ANSI C va_end: SVID3, XPG4, ANSI C va_list: SVID3, XPG4, ANSI C va_start: SVID3, XPG4, ANSI C Section 5-422 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 stdsyms(5) stdsyms(5) 名称 stdsyms − "名前付き定義" および HP-UX ヘッダファイルに基づいた名前空間のためのその他の詳細についての 説明 説明 stdsyms は、"名前付き定義" および適切な HP-UX ヘッダファイルに基づいた名前空間を得るためにアプリ ケーションが設定しなければならないその他の詳細についての説明です。 HP-UX ヘッダファイルは、そのヘッダファイルで使用可能な記号のサブセットだけを、明確な標準に従ったア プリケーションに対して可視にする方法で構成されています。 ANSI-C, POSIX.1, POSIX.2, および XPG4 標準 は、それぞれその標準の名前空間に、記号のある集合を予約しています。さらに、HP-UX の XPG3 および "OSF AES/OS" のインプリメンテーションでは、それらの標準の要求ではありませんが、クリーンな名前空間 を提供しています。 次の規則は、ある標準で何という記号が予約されているかを知るのに適用します。これらの記号は標準のため に予約されており、インプリメンテーションに使われていますので、使用するのを完全にやめるか、特定の標 準で定義されているように正確に使用しなければなりません。 • 希望の標準で定義された記号はすべて予約されています。予約されている記号の完全なリストにつ いては、適切な標準の文書を参照してください。 • アンダースコアで始まり、もうひとつのアンダースコアと大文字が続く記号はすべて、インプリメ ンテーションのために予約されています。 • アンダースコアで始まる外部識別子はすべて、インプリメンテーションのために予約されていま す。 ヘッダファイルから適切な名前空間を得るために定義されていなくてはならない、機能テスト用マクロのリス トを次に示します。 _ _STDC_ _ この記号は、ANSI-Cプリプロセッサ (/opt/langtools/lib/cpp.ansi) によって自動的に定義さ れ、また ANSI-C コンパイル (cc -Aa) を指定すると自動的に定義されます。厳密な ANSI オ プション -Aa を使うと、HP-UX 名前空間で使用可能な最も小さいサブセットである、純粋 な ANSI-C 名前空間が要求されます -Aa オプションはまた、強い型チェックのための ANSI-C スタイルの関数プロトタイプを含めるようにします。 -Aa オプションを使う場合の デフォルトの名前空間は ANSI-C の名前空間であり、必要ならばより広い名前空間が 要求 されるということに注意してください。 _POSIX_SOURCE IEEE POSIX.1 標準に記述されているように、 POSIX.1 名前空間および POSIX.1 機能を得る ために、プログラマは _POSIX_SOURCE 機能テスト用マクロを定義することが要求されま す。この機能テストマクロは、コンパイラオプション (-D_POSIX_SOURCE) を使うか、 #define 指令をソースファイルのどの #include 指令よりも前に使うことにより、定義できま HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-423 stdsyms(5) stdsyms(5) す。デフォルトの POSIX 名前空間は、 POSIX.1-1990 名前空間であることに注意してくだ さい。 POSIX.1-1988 名前空間を得るためには、 _POSIX_SOURCE マクロに加えて、 _POSIX1_1988 機能テストマクロを定義する必要があります。 _POSIX_C_SOURCE IEEE POSIX.2 標準に記述されているように、 POSIX.1 および POSIX.2 名前空間および機能 を得るために、プログラマは値が2の _POSIX_C_SOURCE 機能テストマクロを定義するこ とが要求されます。この機能テストマクロは、コンパイラオプション (-D_POSIX_C_SOURCE=2) を使うか、 #define 指令をソースファイルのどの #include 指令 よりも前に使うことにより、定義できます。このマクロは、XPG4 X/Open 名前空間 (すな わち _XOPEN_SOURCE および _XPG4 が定義され、 _XPG2 あるいは _XPG3 が定義され ない) では自動的に定義されます。 _XOPEN_SOURCE XPG3 および XPG4 標準に記述されているように、 X/Open 機能を得るために、プログラマ は _XOPEN_SOURCE 機能テスト用マクロを定義することが要求されます。この機能テス トマクロは、コンパイラオプション (-D_XOPEN_SOURCE) を使うか、 #define 指令をソー スファイルのどの #include 指令よりも前に使うことにより、定義できます。 XPG3 は名前 空間を汚染する規則を設定していませんが、 XPG4 はそのような規則を設けています。し たがって、 HP-UX オペレーティングシステムは、 _XOPEN_SOURCE が定義されてもク リーンな名前空間を提供します。 現在のデフォルトの X/Open 名前空間は、 XPG3 に対応します。 X/Open 名前空間の別の バージョンが必要な場合は、 _XOPEN_SOURCE とともに、 _XPG2 あるいは _XPG4 を定 義してください。 _AES_SOURCE "OSF AES/OS" 標準に記述されているように、OSF 機能を得るために、プログラマは _AES_SOURCE 機能テスト用マクロを定義することが要求されます。この機能テストマク ロは、コンパイラオプション (-D_AES_SOURCE) を使うか、 #define 指令をソースファイ ルのどの #include 指令よりも前に使うことにより、定義できます。 AES は名前空間を汚染 する規則を設定していませんが、他の標準はそのような規則を設けています。したがっ て、HP-UX は、 _AES_SOURCE が定義されてもクリーンな名前空間を提供します。 _HPUX_SOURCE HP-UX 名前空間および完全な HP-UX 機能を得るために、プログラマは _HPUX_SOURCE 機能テスト用マクロを定義できます。現在、HP-UX 名前空間は、上で述べた名前空間すべ てのスーパーセットであることに注意してください。互換モードのコンパイラ (-Aa オプ ションを付けない cc(1)) を使う場合、 HP-UX デフォルトの名前空間が提供されます。 HPUX 名前空間の適切なサブセットを得るためには、プログラマは上で述べた他の名前空間の 1つを要求しなくてはなりません。厳密な ANSI-C モードのコンパイラ (cc -Aa) を使う場 合、プログラマは、より広い名前空間を明確に要求しなくてはなりません。 Section 5-424 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 stdsyms(5) stdsyms(5) _HPUX_SOURCE 機能テストマクロは、コンパイラオプション (-D_HPUX_SOURCE) を使 うか、 #define 指令をソースファイルのどの #include 指令よりも前に使うことにより、定義 できます。 次に示すのは、いろいろな機能テストマクロのリストであり、さまざまな追加機能を提供します。 _ _cplusplus この記号は、HP C++ コンパイラによって自動的に定義されます。このマクロを定義する と、システム ヘッダファイル内の C++ の関数プロトタイプが有効になります。 C++ のデフォルトの名前空間は、ANSI-C の名前空間 です。別の名前空間が必要な場合 は、適切な機能テストマクロを定義してください。 HP C++ は、デフォルトで、ANSI C 準拠のプリプロセッサを使用します。互換モードのプ リプロセッサにするためには、 -Ac オプションを cc(1) で指定してください。互換モードの プリプロセッサは、HP-UX の名前空間 (_HPUX_SOURCE) を使用します。 _POSIX1_1988 POSIX.1-1988 名前空間が要求されるときに、この機能テストマクロが定義されなくてはな りません。デフォルトの POSIX.1-1990 名前空間が要求されない場合、このマクロは _POSIX_SOURCE マクロとともに使う必要があります。 このマクロは、 _AES_SOURCE あるいは _XPG3 が要求される場合でも、自動的に定義さ れます。 _XPG2 互換モードのコンパイラを使う場合、XPG2 機能を得るために、 _XPG2 マクロを定義でき ます。このマクロにより、XPG2 設定の関数宣言、および HP-UX 名前空間のマクロが提供 されます。このオプションを使って使用可能なマクロから得られる値のほとんどは、現在 では pathconf(), fpathconf(), および sysconf() システムコール (pathconf (2) および sysconf (2) を参照) を経て、実行時に使用可能であることに注意してください。 _XPG2 マクロは、旧 式の機能へのアクセスしか提供しないので、使用はお勧めできません。この機能テストマ クロを使うと、関数プロトタイプは提供されないことに注意してください。 _XPG3 プログラマが XPG3 名前空間を要求すると、 _XPG3 機能テスト用マクロが自動的に定義さ れます (すなわち、 _XOPEN_SOURCE では定義されますが、 _XPG2 あるいは _XPG4 の ように競合する名前空間では定義されません)。 _XPG4 プログラマが _XPG3 名前空間とは少し異なる XPG4 名前空間を得るために、 _XPG4 機能 テスト用マクロが提供されます。 XPG4 名前空間を得るために、プログラマは _XOPEN_SOURCE と _XPG4 両方の機能テストマクロを定義しなくてはなりません。 _XOPEN_SOURCE および _XPG4 機能テストマクロは、コンパイラオプション (-D_XOPEN_SOURCE -D_XPG4) を使うか、 #define 指令をソースファイルのどの #include 指令よりも前に使うことにより、定義できます。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-425 stdsyms(5) stdsyms(5) _SVID2 互換モードのコンパイラを使用し、HP-UX 名前空間において、SVID2 関数のリターンタイ プにするために、 _SVID2 マクロは定義されています。したがって、多くの関数のデフォ ルトリターンタイプは、 ANSI-C、POSIX 、X/Open、および OSF 標準に整合させるため に、HP-UX オペレーティングシステムによって変更されています。 _SVID3 SVID3 の関数プロトタイプを取得するために、SVID3 マクロを定義できます。アプリケー ションが SVID3 の要件を満たすように記述されていることを示すために、コンパイラフラ グ -D_SVID3 を定義する必要があります。関数プロトタイプが ANSI C に導入された時点で は、このフラグによって公開される関数は、SVID3 で定義されていただけでした。 _CLASSIC_TYPES プログラマが _CLASSIC_TYPES マクロを定義することにより、 7.0以前のスタイルの、関 数リターンタイプおよび構造体の要素のタイプにすることができます。このマクロは、 バージョン7.0以前の HP-UX から、標準に従った HP-UX への移行の援助のためだけに提供 されています。この機能は将来の HP-UX のリリースでは削除されますので、このマクロの 使用はお勧めできません。この機能テストマクロを使用する場合、関数プロトタイプは提 供されないことに注意してください。 参照 cc(1)、 cpp(1)、 pathconf(2)、 sysconf(2) Section 5-426 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 STRCTLSZ(5) STRCTLSZ(5) 名称 STRCTLSZ − ストリームメッセージ制御の最大サイズ (バイト) 値 フェールセーフ 1024 デフォルト 1024 許容値 0 - 2147483647 推奨値 1024 説明 STRCTLSZ は、システム上の任意のストリームメッセージの制御部分に、 putmsg() によって挿入できる制御 データの最大バイト数を制限します。この調整可能パラメータがゼロに設定された場合、メッセージの制御セ グメントに配置できるバイト数は無制限です。 送信されるバッファーが STRCTLSZ の現在の値より大きい場合は、 putmsg() が [ERANGE] を返します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 ユーザーの STREAMS モジュールまたはドライバにおいて、任意のストリームメッセージの制御部分のバイト 数を現在の値から増やす必要がある場合は、ユーザーがこの調整可能パラメータの値を大きくします。 この調整可能パラメータの値を大きくした場合の影響 カーネルのメモリー使用量が増えます。メモリー量が少ない場合は、スワップが頻繁に発生し、システムパ フォーマンスが低下する可能性があります。 この調整可能パラメータの値を小さくする場合 ユーザーの STREAMS モジュールまたはドライバにおいて、制御部分のメッセージサイズが現在の値以下でよ い場合は、ユーザーがこの調整可能パラメータの値を小さくできます。 この調整可能パラメータの値を小さくした場合の影響 いずれかの STREAMS モジュールまたはドライバで、誤動作が起こる可能性があります。パフォーマンスが低 下する可能性があります (特にネットワーク動作において)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-427 STRCTLSZ(5) STRCTLSZ(5) 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 STRCTLSZ は、HP で開発されました。 Section 5-428 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 streampipes(5) streampipes(5) 名称 streampipes − すべてのパイプの強制的な STREAMS ベース化 値 フェールセーフ 0 デフォルト 0 許容値 0 - 2147483647 推奨値 0 説明 この調整可能パラメータは、 pipe() システム呼び出しで作成されるパイプのタイプを指定します。この値をデ フォルト値のゼロに設定すると、 pipe() で作成されるすべてのパイプが通常の HP-UX ファイルシステムパイ プになります。この値をゼロでない値に設定すると、 pipe() によって STREAMS ベースのパイプが作成され、 STREAMS モジュールを結果ストリームにプッシュできます。 この調整可能パラメータをゼロでない値に設定した場合は、 pipemod モジュールと pipedev ドライバを /stand/system ファイル内で構成する必要があります。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータをオンにする場合 STREAMS ベースのパイプを必要とするアプリケーションをユーザーが使用する場合は、この調整可能パラ メータをオンにします。 この調整可能パラメータをオンにした場合の影響 STREAMS ベースのパイプのパフォーマンスが、通常のファイルシステムパイプのパフォーマンスと異なる場 合があります。 この調整可能パラメータをオフにする場合 ユーザーが STREAMS ベースのパイプを必要としない場合は、この調整可能パラメータをオフにします。 この調整可能パラメータをオフにした場合の影響 パイプに STREAMS モジュールをプッシュしようとするアプリケーションが失敗します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-429 streampipes(5) streampipes(5) 同時に変更する必要がある他の調整可能パラメータ この調整可能パラメータをゼロでない値に設定した場合は、 pipemod モジュールと pipedev ドライバを /stand/system ファイル内で構成する必要があります。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 streampipes は、HP で開発されました。 Section 5-430 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 STRMSGSZ(5) STRMSGSZ(5) 名称 STRMSGSZ − ストリームメッセージデータの最大サイズ (バイト) 値 フェールセーフ 0 デフォルト 0 許容値 0 - 2147483647 推奨値 0 説明 この調整可能パラメータは、システム上の任意のストリームメッセージのデータ部分に、 putmsg() または write() によって挿入できるメッセージデータのバイト数を制限します。この調整可能パラメータがゼロに設定 された場合、メッセージのデータセグメントに配置できるバイト数は無制限です。 送信されるバッファーが STRMSGSZ の現在の値より大きい場合は、 putmsg() が [ERANGE] を返します。 write() は、データを複数のメッセージにセグメント化します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 ユーザーの STREAMS モジュールまたはドライバにおいて、データ部分のメッセージサイズを現在の値より大 きくする必要がある場合は、ユーザーがこの調整可能パラメータの値を大きくします。 この調整可能パラメータの値を大きくした場合の影響 カーネルのメモリー使用量が増えます。メモリー量が少ない場合は、スワップが頻繁に発生し、システムパ フォーマンスが低下する可能性があります。 この調整可能パラメータの値を小さくする場合 ユーザーの STREAMS モジュールまたはドライバにおいて、データ部分のメッセージサイズが現在の値以下で よい場合は、ユーザーがこの調整可能パラメータの値を小さくできます。 この調整可能パラメータの値を小さくした場合の影響 いずれかの STREAMS モジュールまたはドライバで、誤動作が起こる可能性があります。パフォーマンスが低 下する可能性があります (特にネットワーク動作において)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-431 STRMSGSZ(5) STRMSGSZ(5) 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 STRMSGSZ は、HP で開発されました。 Section 5-432 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 st_ats_enabled(5) st_ats_enabled(5) 名称 st_ats_enabled − テープデバイスをオープン時に確保するかどうかの指定 値 フェールセーフ 0 (オフ) デフォルト 1 (オン) 許容値 0 (オフ) または 任意の正の整数 (オン) 推奨値 0 (オフ) または 1 (オン) 説明 この調整可能パラメータは、stape ドライバがテープデバイスをオープン時に確保し、その後のクローズ時に解 放することが必要かどうかを、stape ドライバに通知します。 この調整可能パラメータがオンの場合でも、 stape ドライバが、必ずいずれかのテープデバイスをオープン時に確保しようとするとは限りません。このドラ イバは、いくつかのテープデバイスに、この機能に適したデバイスであることを示すフラグを付けています。 これらのデバイスには、DLT 8000、DLT 7000、STK 9840、HP Ultrium、および STK SD-3 の各ドライブが含ま れます。 DDS ドライブには、この機能についてのフラグが付いていません。 st_ats_enabled 調整可能パラメータは、MC/ServiceGuard の Advanced Tape Services のようなマルチノード構成 でのテープデバイスの安全な共有を可能にします。確保と解放が自動的に行われるようにすると、バックアッ プが破損するおそれのある、複数ノードによるアクセスからテープデバイスを保護できます。 stape ドライバ のオープンルーチンの確保部分が失敗すると、 [EBUSY] ステータスが返されます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータをオンにする場合 システムが MC/SG Advanced Tape Services 構成で使用される場合、または、マルチモードの管理性を高めるた めに stape ドライバがオープン時およびクローズ時に、確保と解放が自動的に行われるようにする場合には、 この調整可能パラメータをオンにします。 この調整可能パラメータをオンにした場合の影響 オープン時、stape ドライバからテープデバイスに確保が指示され、クローズ時に解放が指示されます。あるイ ニシエータまたは HBA に対してテープデバイスがオープンされている間は、他のイニシエータまたは HBA は そのテープデバイスにアクセスできません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-433 st_ats_enabled(5) st_ats_enabled(5) この調整可能パラメータをオフにする場合 ATS 以外の SAN テープ共有ソリューション構成の場合は、 この調整可能パラメータをオフにすることをお勧 めします。 Omniback のような、ほとんどのマルチノードバックアップ アプリケーションは、デバイスの確保 を自前で管理するため、stape ドライバによる干渉があると、問題が発生する可能性があります。また、マルチ プラットフォーム SAN 構成の場合も、プラットフォーム全体でテープアクセスを均等に保つために、 この調 整可能パラメータをオフにする必要があります。 この調整可能パラメータをオフにした場合の影響 別のイニシエータからの不正アクセスがあると、現在のテープ動作が妨害される可能性があります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 st_ats_enabled は、HP で開発されました。 参照 scsi_tape(7) Section 5-434 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 st_fail_overruns(5) st_fail_overruns(5) 名称 st_fail_overruns − 物理レコードサイズより小さい可変ブロックモード読み取り要求が失敗するかどうかの判別 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 許容値 0 (オフ) または 非ゼロ (オン) 推奨値 0 (オフ) または 非ゼロ (オン) 説明 この調整可能パラメータは、stape ドライバからの可変ブロックモード読み取り要求が、物理レコードサイズよ り小さい場合に、エラー [EFBIG] によって失敗するかどうかを判別します。 たとえば、媒体のレコードサイズが 64K であるテープデバイスに 32K の可変ブロックモード読み取り要求を 送信すると、レコード全体のデータの一部がホストに返されます。この調整可能パラメータが 非ゼロ (オン) に設定されている場合は、読み取りが、エラー [EFBIG] によって失敗したものとして返されます。この調整可 能パラメータが 0 (オフ) に設定されている場合は、読み取り要求が、成功したものとして、読み取られたバイ ト数と等しい戻り値が返されます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータをオンにする場合 一部のアプリケーションの必要により、stape ドライバからの、テープに対する制限を超えた可変ブロックモー ド読み取りを失敗させる場合。 この調整可能パラメータをオンにした場合の影響 stape ドライバからの、レコードより小さい可変ブロックモード読み取り要求が、 [EFBIG] により失敗しま す。 この調整可能パラメータをオフにする場合 stape ドライバが制限を超えた読み取りを成功した読み取りとして処理するようにする場合。この場合は、正し い要求サイズで読み取りを再試行しなければなりません。これは、ほとんどのバックアップソフトウェアが期 待する動作です。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-435 st_fail_overruns(5) st_fail_overruns(5) この調整可能パラメータをオフにした場合の影響 すべての可変ブロックモード読み取りに対し、要求されたデータ量と読み取られたバイト数が等しいかどうか を、読み取りの戻り値で確認する必要があります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 st_fail_overruns は、HP で開発されました。 参照 scsi_tape(7) Section 5-436 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 st_large_recs(5) st_large_recs(5) 名称 st_large_recs − stape ドライバで許可される論理レコードの最大サイズの指定 値 フェールセーフ 0 (オフ) デフォルト 0 (オフ) 許容値 0 (オフ) または 非ゼロ (オン) 推奨値 0 (オフ) または 非ゼロ (オン) 説明 この調整可能パラメータは、stape ドライバで許可される、テープデバイス I/O のレコードの最大サイズを制御 します。この調整可能パラメータで指定される最大レコードサイズより大きなレコードも送信できますが、そ の場合は、I/O サブシステムが要求を、指定される最大レコードサイズの複数の要求に分割します。 たとえば、256K の MAXPHYS を持つ、システム上のテープデバイスに 512K の読み取りを送信した場合は、 2つのシナリオが存在します。 st_large_recs を任意の正の整数に設定した場合は、512K のレコードサイズを 要求する読み取りが送信されます。 st_large_recs を 0 (オフ) に設定した場合は、256K のレコードサイズの読 み取り要求が2つ送信されます。 st_large_recs を正の整数に設定した場合、stape ドライバは 16MB-1 の最大レコードサイズを許可しますが、特 定のシステムでサポートされる実際の最大レコードサイズは、テープデバイス、SCSI サブシステム、または FC や SCSI などのインタフェースでサポートされる最大 I/O サイズによって制限されます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータをオンにする場合 SCSI サブシステムおよびテープデバイスを持つシステムでサポートされるレコードサイズが MAXPHYS (512K) より大きい場合は、この調整可能パラメータを 非ゼロ (オン) に設定します。 この調整可能パラメータをオンにした場合の影響 テープデバイス、SCSI サブシステム、またはインタフェースでサポートされる I/O レコードサイズが大きくな い場合は、要求を分割したレコードが大きすぎて、 [EINVAL] エラーが返されることがあります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-437 st_large_recs(5) st_large_recs(5) この調整可能パラメータをオフにする場合 SCSI サブシステム、テープデバイス、またはインタフェースを持つシステムでサポートされる最大レコードサ イズが MAXPHYS (512K) の場合は、この調整可能パラメータを 0 (オフ) に設定します。 この調整可能パラメータをオフにした場合の影響 テープデバイス、SCSI サブシステム、およびインタフェースが MAXPHYS より大きなレコードを許可した場 合は、I/O スループットが低速になる可能性があります。これは、構成の I/O スループットの能力が完全には 使用されないためです。 同時に変更する必要がある他の調整可能パラメータ V クラスのように大きな I/O 要求をサポートするシステムでは、調整可能パラメータ scsi_maxphys が 16MB-1 より大きくなるようにすることも必要になるでしょう。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 st_large_recs は、HP で開発されました。 参照 scsi_maxphys(5)、 scsi_tape(7) Section 5-438 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 suffix(5) suffix(5) 名称 suffix − ファイル名拡張子規約 説明 以降のリストは HP-UX システムで見かけられるであろうファイル名拡張子の規約の一覧表です。これは有用な 知識、提案、説明の一部を集めたもので、標準を規定するものではありません。拡張子を使うとディレクトリ リスティングの中で関係するファイルがまとまってアルファベット順に並ぶので、プリフィックスよりもよく 用いられます。 プログラムの中には特定の拡張子を使うことが必要であったり、拡張子によって動作を変えるようなものがあ ります。そのようなプログラムには(全部ではありませんが)注意書きがあります。 .A HP64000 クロスアセンブラ記号ファイル .a ar が管理するライブラリファイル (アーカイブ)。 make が使用する。 .ad? HP Ada ソース。"?" は任意の1文字 .allow at または cron が許可するユーザーのリスト(例えば at.allow) .an nroff "man" マクロ用のソース .ASC LIF (Logical Interchange Format) type 1, ASCII形式の Pascalまたは BASIX/UX によって使われる ファイル。 lifcp とは互換性がありません。 .aux LaTeXが自動的に作るクロスリファレンス情報 .awk awk スクリプトファイル .b コンパイルされた LISP (.l) ソースファイル、またはボールドフォント ファイル .back .bak .bkup ファイルのバックアップコピー .BAD .bad 不良データを含むファイル、またはディスクの不良箇所を占めているファイル .bbl BibTeXがLaTeXドキュメントに入れるために作る文献表。 .bib 文献データファイル (例えば BibTeX 文献データベース) .blg BibTeXからのエラーの記録 .bst BibTeX 文献表スタイル定義 .B compact で圧縮したファイル、または C++言語のソースファイル、またはHP64000クロスコン パイルされたCのソースファイル HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-439 suffix(5) suffix(5) .c C言語ソースファイル。 cc と make が使用 .cas CAST 言語スクリプト .cat NLS (母国語サポート) メッセージカタログ .cf 設定ファイル (例えば 、sendmail.cf) .clu CLU ファイル .CODE Pascalワークステーション オブジェクトコード .cpio cpio -o の出力を含むファイル。すなわち cpio アーカイブ .csh Cシェル (csh) スクリプト .curr ファイルの現在のバージョン .d ディレクトリファイルまたはデータファイル .day 毎日読まれるスクリプト .deny at または cron が許可しないユーザーのリスト (例えばcron.deny) .devs デバイスのリスト .diff 2つのファイルの相違。 diff の出力 .dir DBM データベース ディレクトリファイル .doc 何かのドキュメンテーション .dvi デバイスに依存しないテキストフォーマッタ出力 .e 拡張 FORTRAN 言語 (EFL) のソースファイル。 make が使用 .el GNU Emacs Elispファイル .elc コンパイルされた GNU Emacs Elispファイル .eqn nroff 数式マクロ用のソース .err プログラムからの標準エラー出力 .errors .errs プログラムの記録したエラー .f FORTRAN 言語のソースファイル。 fc と make が使用 .f77 FORTRAN 77言語のソースファイル .fc 内部形式に変換された設定ファイル (例えば、 sendmail.fc) .full 完結したファイルまたはリスト Section 5-440 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 suffix(5) suffix(5) .gf ジェネリック フォントフォーマットのTeXフォントビットマップ .glo LaTeXの作る用語集 .h C言語ヘッダ(インクルード)ファイル。 make が使用 .help .hf .hlp プログラムのヘルプテキスト。自動的に読まれることが多い。 .hour .hr .i 1時間毎に読まれるスクリプト Cプリプロセッサ("cc -P")の出力、またはバークレーPascal言語のインクルードファイル、また は斜体のフォントファイル .icn アイコンのソースコード .idx LaTeXの生成する索引 .in プログラムへの標準入力 .INDEX notes の索引ファイル .ksh コーンシェル用スクリプトファイル .L HP64000クロスリンカの記号ファイル .l lex のソースファイル (make が使用)。または LISP のソースファイル .LIST notes のリストファイル .list 他のファイルのリストの入ったファイル .ln lint 用のライブラリ情報 .lof LaTeXの作る図のリスト .log 一般的なログファイル。またはTeXからのエラーメッセージのログ .lot LaTeXの作る表のリスト .m Modula言語ソースファイル .m2 Modula-2言語ソースファイル .make .mk make 用のMakefile .man man マクロを使った nroff または troff 用のソース .me me マクロを使った nroff または troff 用のソース HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-441 suffix(5) suffix(5) .mf TeX metafontの入力ファイル .ml Gosling/Unipress Emacs Mock Lisp ファイル .mm mm マクロを使った nroff または troff 用のソース .mon .month 毎月読まれるスクリプト .ms ms マクロを使った nroff または troff 用のソース .n nroff 用ソース .NEW .new ファイルの新しいバージョン .nro nroff 用ソース .O HP64000 リスティングファイル .o 再配置可能オブジェクトファイル (コンパイル後、リンク前)、 as、 cc、 fc、 pc、 make が使 用 .obs ファイルのもう使われないバージョン .OLD .old ファイルの古いバージョン .opt オプションのものを含むファイル。例えば、カーネルのオプション部分など .orig ファイルの元のバージョン .out プログラムからの標準出力 (場合によっては標準エラーも含みます)(例えば、 nohup.out)、ま たは ld の出力する実行可能ファイル(a.outなど)。 .P HP64000 クロスコンパイルされたPascalソースファイル .p Pascal言語のソースファイル ( pc と make が使用)、または PROLOG 言語のソースファイル .pag DBM データベース データファイル .pi PILOT 言語のソースファイル .pk Packed Font formatのTeXフォントビットマップ。GFよりも新しく高密度 .prev ファイルの前のバージョン .ps PostScriptファイル .pxl 圧縮されていないTeXフォントビットマップ。ほとんど使わない .R HP64000 再配置可能ファイル Section 5-442 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 suffix(5) .r .rc suffix(5) RatFor言語のソースファイル。 make が使用 いわゆる「run commands」ファイル。普通プログラムが実行されたときに読み込まれます (例 えば、mailx.rc)。 .real ファイルの実物バージョン。たいてい何かフロントエンドによって置き換えられているもの ( 例えば、uucico.real) .req 何か必須なものの入ったファイル。例えば、カーネルの必須の部分 .S HP64000クロスアセンブルされたソースファイル。 .s アセンブラの入力ファイル。 cc と make が使用 .safe .save 安全な、または保存されているファイルのコピー .scm スキームファイル .sh POSIX シェル スクリプトファイル。 make が使用 .shar シェルアーカイブ ファイル。 shar からの出力を含む。 .skel スケルトン、またはテンプレートファイル .sl ld(1) の作る共有ライブラリファイル。 ld(1) が使用 .st 統計情報の入ったファイル (例えば 、 /etc/mail/sendmail.st) .sty LaTeX のスタイル定義。対応する.docファイルがあります。 .SYSTM シリーズ300/400のブート ROM によってブート可能な LIF ( 『Pascal 3.2 Workstation System』第 1巻の「ライブラリアン」の章を参照) .t テキストファイル .tar ファイル (アーカイブ)。 tar の出力を含む。 .tbl nroff テーブルマクロ用のソース .temp .tmp 一時ファイル .template プロトタイプまたはテンプレートファイル .test テストの入力または出力ファイル .tex TeX のソースファイル .TEXT notes のテキストファイル、またはPascalワークステーション 「UCSD テキストフォーマッ ト」ファイル HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 5-443 suffix(5) suffix(5) .text .txt ASCII形式のテキストファイル .tfm TeXの使う文字幅情報 (TeXフォントメトリック) .toc nroff 目次マクロ用のソース、またはLaTeXの作る目次 .tro troff のソース .u1 .u2 アイコン中間コードファイル .UX HP-UX テキストまたはバイナリ ファイルフォーマット .web Webファイル(KnuthのWebシステム) .week .wk 毎週読まれるスクリプト .X HP64000 アブソリュートファイル .y yacc の入力ファイル。 make が使用 .Z compress で圧縮されたファイル .z pack で圧縮されたファイル .1 .. .8 マニュアルエントリーファイル (セクション1から8まで)。文字a..zが付くことがあります。 .<date> その日付(年、月名、YYMM、MMDD、など) に継続的に増え続けるログファイルのスナップ ショットとして保存されたファイル ,v RCS デルタファイル。 RCS プログラムが使用 著者 suffix はHPで開発されました。 Section 5-444 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 swapmem_on(5) swapmem_on(5) 名称 swapmem_on − 物理メモリーサイズを使用可能スワップスペースより大きくすることの許可 値 フェールセーフ 1 (オン) デフォルト 1 (オン) 許容値 0 (オフ) または 1 (オン) 説明 HP-UX のこれまでのバージョンでは、システム構成において、システム上で最大限の数のプロセスを稼働させ るための十分な物理スワップスペースが必要でした。これは、実行中のプロセスをスワップ不足のために抹消 しなければならない事態が絶対に起きないよう、HP-UX がプロセスの生成時にそのプロセス用のスワップス ペースを確保するためです。 これはしかし、何ギガバイトものスワップスペース (したがって何ギガバイトもの物理メモリー) を必要とし、 負荷全体が常にコア内にあるワークロードを持つシステムでは困難なことでした。この調整可能パラメータ は、コアメモリーより小さいシステムスワップスペースを可能にするために作成されました。これを実現する ために、物理メモリーの一部が「疑似スワップ」スペースとして確保されます。実際のスワップスペースは使 用可能のまま、プロセスは、fork 時または実行時に必要になるすべてのスワップを物理デバイスまたはファイ ルシステムスワップから確保します。このスワップがすべて使用されると、新しいプロセスはスワップを確保 せず、物理デバイスまたはファイルシステムへスワップするはずだった各ページがメモリー内でロックされ、 疑似スワップスペースの一部として扱われます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータをオンにする場合 この調整可能パラメータが 0 (オフ) に設定されていて、 fork() または exec() プロセスが失敗して [ENOMEM] エラーメッセージが発生し、システムメモリーが十分あるのに未確保スワップスペースが不足するとき、この 調整可能パラメータを 1 (オン) に設定することで、これらのプロセスが疑似スワップスペースにより実行でき るようになる場合。 この調整可能パラメータをオンにした場合の影響 一部の物理メモリーが疑似スワップ用に確保されますが、カーネルがロックメモリー用またはカーネルメモ リー用として必要であれば、このアロケーションからページを借用することができ、その残りのページは物理 スワップが完全に埋まっている場合のみ使用されるので、この調整可能パラメータをオンにすることはまった HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-445 swapmem_on(5) swapmem_on(5) く無害です。 この調整可能パラメータをオフにする場合 物理スワップデバイスまたはファイルシステムが十分にあって、システムワークロードがスワップを必ず確保 できるのであれば、 この調整可能パラメータをオフにできます。 ただし、この機能をオフにしても、システム としてのメリットは何もありません。 この調整可能パラメータをオフにした場合の影響 プロセスがスワップを fork() または exec() で確保することについては、物理スワップデバイスまたはファイル システムによって限界が決まります。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 swapmem_on は、HP で開発されました。 Section 5-446 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 swchunk(5) swchunk(5) 名称 swchunk − スワップチャンクサイズ (1KB ブロック数) 値 デフォルト 2048 ブロック 許容値 最小:1ブロック 最大: 65536 ブロック 説明 カーネル内のスワップスペースは、物理的装置のスペースの「チャンク」を使用して管理されます。これらの チャンクには1つまたは複数 (通常は複数) のメモリーのページが含まれますが、索引のための別の層 (ファイ ルシステムの i ノードに類似) を提供することで、スワップページにより索引が付けられた大きなテーブルと は対照的に、グローバルなスワップテーブルを比較的小さく保ちます。 swchunk は、物理ディスクブロック (1KB として定義されます) で各チャンクのサイズをコントロールしま す。システムで管理できるスワップスペースの総バイト数は、 swchunk * 1KB * 16384 (スワップテーブル内 のスワップチャンクのシステム最大数) です。 swchunk は、スワップシステムでの I/O トランザクションのサイズ (ディスクブロック数) としてではなく、( すべての優先順位が等しいと仮定して) 次のデバイスに移動する前に、あるスワップデバイス (またはファイル システム) に配置されるブロック数として考えます。 この方法は、スワップスペースをすべてのデバイスに分 散し、スワップインタリーブと呼ばれます。スワップインタリーブでは、スワップが多くのデバイスにわたっ て分散され、スワップの使用量が非常に多いときに単一のデバイスがシステム全体のボトルネックになる可能 性が減少します。 この調整可能パラメータの変更を行う対象ユーザー この調整可能パラメータを修正するのは、カーネルの動作と基盤となるデバイスハードウェアの両方について 完全な知識をもつ者のみでなければなりません。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 システムオーナがシステムにさらにスワップを追加しようとする際に、必要な追加のスワップチャンクが使用 できない場合、この調整可能パラメータの値を増やすと問題に対処できます。各チャンクのサイズを増やすこ とで、必要となるチャンクの総数が減ります。 この値を大きくした場合の影響 2番目のレベルのスワップテーブル (チャンク内のページのトラックに使用) が大きくなるため、カーネルが使 用するメモリーが増えます。より大きなスワップスペースのマッピングを可能にするために swchunk の値を増 やす場合、カーネルがスワップスペースをトラックするために使用するメモリーが増加することは避けられま HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-447 swchunk(5) swchunk(5) せん。 したがって、すべての優先順位が等しいときは、ラウンドロビン方式のインタリーブの仕組みにより、各デバ イス (または、ファイルシステム) に割り当てられるスワップが増加します。システムのスワップスペースを表 すために必要なチャンク数が 16384 より少ない場合に swchunk の値を増やすと、不要な I/O ボトルネックが発 生し、システムパフォーマンスが低下することがあります。たとえば、小さい値を用いていたため、以前は、 異なるスワップデバイス上で互いに独立してアクセスできていた、異なるチャンク内の2つのページが、(読み 取りヘッドまたはコントローラの問題に関わり無く) 同じデバイスに存在するようになったことで、同時に読 み取ることができなくなったため、2番目のページのためのアクセス時間が長くなるようなケースがあげられ ます。 この調整可能パラメータの値を小さくする場合 システムでマップできるスワップスペースの量が、システムに結び付けられている (または結び付けられる予 定の) スワップスペースの総量 (16384 * swchunk* 1KB という乗算によって計算できます) よりもかなり多い 場合、実際のスワップスペースに合わせるために swchunk を少なくしてカーネルのメモリー使用量を減らすこ とができます。 この値を小さくした場合の影響 システムに多くのスワップを追加しても、スワップテーブルには増加したスペースを受け入れるだけの十分な スペースがない場合、値を元に戻す必要があることがあります。このような状況ではない場合は、システムで のインタリーブがより細かくなり (複数のスワップデバイスがある場合)、スワップの使用量が非常に多い状況 でパフォーマンスが向上します。 同時に変更する必要がある他の調整可能パラメータ swchunk に対する変更は、他のどの調整可能パラメータとも無関係です。 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 swchunk は HP で開発されました。 Section 5-448 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sysv_hash_locks(5) sysv_hash_locks(5) 名称 sysv_hash_locks − System V IPC のハッシュされたスピンロックプールのサイズ 値 フェールセーフ 128 デフォルト 128 許容値 最小: 64 最大: 32768 または semmni のいずれか小さい方 2の累乗である必要があります。 説明 調整可能パラメータ sysv_hash_locks は、ハッシュされたスピンロック (同期のために使用されるカーネルデー タ構造) プールのサイズ (使用可能なスピンロック数) を指定します。System V IPC セマフォ機能はセマフォ ID に基づいてハッシュされたスピンロックを獲得します。スピンロックは、 semmni で指定される分のスピン ロックのために必要なメモリーユーザーを避けるけれども、1つのスピンロックのみへの競合も避けるために ハッシュされます。 System V セマフォの詳細は、 sema(5) マンページの 概要セクションを参照してください。 この調整可能パラメータの変更を行う対象ユーザー カーネルパフォーマンス解析を通じてこれらのロックに関するローカルシステムパフォーマンスの問題を識別 した者。経験上、この調整可能パラメータを調整する必要があるユーザーはほとんどいません。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 この調整可能パラメータの値を増やす必要があるのは、パフォーマンス解析でこれらのロックに競合が数多く 発生しているのが分かった場合です。これは、調整可能パラメータ semmni の値が大きく増加したことと、セ マフォ動作が過剰に使用されたことが連動した結果として発生する可能性があります。 この調整可能パラメータの値を小さくする場合 semmni がそれほど大きくなくなった場合、またはスピンロックの競合が問題にならなくなった場合。または その両方の場合です。 同時に変更する必要がある他の調整可能パラメータ System V セマフォの調整可能パラメータはすべて相互に関連しており、独立した変数として扱うことはできま せん。これらの調整可能パラメータは、アプリケーションの要件を反映させるためのシステムとして評価する 必要があります。セマフォの調整可能パラメータには、 semaem、 semmni、 semmns、 semmnu、 semmsl、 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-449 sysv_hash_locks(5) sysv_hash_locks(5) semume、 semvmx、および sysv_hash_locks があります。特に、調整可能パラメータ semmni を使用してセマ フォ ID 数を大幅に変更すると、調整可能パラメータ sysv_hash_locks を変更しなければならなくなることがあ ります。 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 sysv_hash_locks は AT&T で開発されました。 参照 sema(5)、 semaem(5)、 semmni(5)、 semmns(5)、 semmnu(5)、 semmsl(5)、 semume(5)、 semvmx(5) Section 5-450 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tcphashsz(5) tcphashsz(5) 名称 tcphashsz − ネットワーク ハッシュテーブルのサイズの決定 値 フェールセーフ 2048 デフォルト 2048 許容値 256 ∼ 65536 推奨値 2048 2の累乗を指定します。それ以外の場合、もっとも近い2の累乗に切り捨てられます。 説明 この変数は、ネットワーク ハッシュテーブルのサイズの設定に使用されます。常に多数の接続を保持する予定 のシステムでは、この値を増やすとよい場合があります。 この調整可能パラメータは2の累乗である必要があります。2の累乗を指定しない場合、もっとも近い2の累 乗に切り捨てられます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 この値を増やす必要があるのは、長時間持続する多数の接続を保持するマシンの場合です。 この値を大きくした場合の影響 この値を増やすと、より多くのメモリーが使用されます。 この調整可能パラメータの値を小さくする場合 システムのメモリーが少なく、システムでの接続があまりない場合は、この値を減らすと多少のメモリーを取 り戻せる可能性があります。 この値を小さくした場合の影響 設定値が小さすぎる場合、システムのハッシュチェーンが長くなり、処理速度が遅くなります。 同時に変更する必要がある他の調整可能パラメータ ありません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-451 tcphashsz(5) tcphashsz(5) 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 tcphashsz は HP で開発されました。 Section 5-452 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 term(5) term(5) 名称 term − ターミナル機能 説明 #include <term.h> typedef により、次のデータタイプが定義されます。 TERMINAL terminfo データベースのシングルターミナル機能に対するあいまいな表現。 <term.h> ヘッダにより、次のオブジェクトの宣言文が提供されています。 cur_term アプリケーションが set_curterm で選択した terminfo データベースの現在のターミナル レコードを表します。 <term.h> ヘッダには、terminfo(4)にある 定義済み関数 表の 変数カラムにリストされた変数が記述されていま す。 次の項目は関数として宣言されています。またマクロとして定義することもできます。 int del_curterm(TERMINAL *oterm); int putp(char *const str); int restartterm(char *term, int fildes, int *errret); TERMINAL * set_curterm(TERMINAL *nterm); int setupterm(char *term, int fildes, int *errret); int tgetent(char *bp, char *const name); int tgetflag(char id[2]); int tgetnum(char id[2]); char * char * tgetstr(char id[2], char **area); tgoto(char *const cap, int col, int row); int tigetflag(char *capname); int tigetnum(char *capname); char * tigetstr(char *capname); char * tparm(char *cap, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9); int tputs(char *const str, int affcnt, int (*putfunc)(int)); 参照 terminfo(4), printf(1), putp(3X), tigetflag(3X), tgetent(3X), <curses.h> 変更履歴 X/Open Curses, 第4版の初期リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-453 thread_safety(5) thread_safety(5) 名称 thread_safety − libc、libpthread、および libgen インタフェースのうち、非スレッドセーフ、キャンセルポイン ト、キャンセルセーフ、非同期シグナルセーフ、非同期キャンセルセーフであるもののリスト 説明 このマンページは、libc、libpthread、および libgen インタフェースを使用してスレッドセーフアプリケーショ ンを記述するときに参照してください。このマンページでは、libc、libpthread、および libgen インタフェース のうち、非スレッドセーフ、キャンセルポイント、キャンセルセーフ、非同期シグナルセーフ、非同期キャン セルセーフであるもののリストを示します。 スレッドセーフではないインタフェース 以下を除くすべてのインタフェースがスレッドセーフです。 bgets() bufsplit() copylist() dbminit() delete() endmntent() dbmclose() fattach() fdetach() fetch() firstkey() getc_unlocked() getchar_unlocked() getopt() inet_ntop() inet_pton() isastream() nextkey() putc_unlocked() putchar_unlocked() setmntent() store() strord() strtold() 注記: あるインタフェースに、 _r が付加された対応するインタフェースがある場合、 _r が付加された インタフェースはスレッドセーフであり、_r が付加されていないインタフェースはスレッドセーフで はありません。 キャンセルポイント 以下のインタフェース内でスレッドが実行されるとき、キャンセルポイントが発生する可能性があります。 _pututline() accept() aio_suspend() bgets() bwtmpname() catclose() catgets() catopen() close() closedir() closelog() confstr() connect() copylist() creat() ctermid() cuserid() dbm_close() dbm_delete() dbm_fetch() dbm_firstkey() dbm_nextkey() dbm_open() dbm_store() devnm() dial() endbwent() endgrent() endpwent() endusershell() endutent() endutsent() endutxent() fclose() fcntl() fdopen() fflush() fgetc() fgetpos() Section 5-454 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 thread_safety(5) thread_safety(5) fgetpwent() fgets() fgetwc() fgetws() fopen() fprintf() fputc() fputs() fputwc() fputws() fread() freopen() fscanf() fseek() fseeko() fsetpos() fstatvfsdev() fsync() ftell() ftello() ftw() fwprintf() fwrite() fwscanf() getbwent() getc() getc_unlocked() getchar() getchar_unlocked() getcwd() getdate() getgrent() getgrgid() getgrgid_r() getgrnam() getgrnam_r() getlogin() getlogin_r() getmsg() getpmsg() getpwent() getpwnam() getpwnam_r() getpwuid() getpwuid_r() gets() gettxt() getusershell() getutent() getutid() getutline() getutxent() getutsent() getutsid() getutsline() getutspid() getutxid() getutxline() getw() getwc() getwchar() getwd() glob() globfree() iconv() iconv_close() iconv_open() initgroups() insque() ioctl() isastream() lckpwdf() lockf() lockf64() lseek() lseek64() mkstemp() msgrcv() msgsnd() msync() nanosleep() nftw() nftw2() open() opendir() openlog() pause() pclose() perror() pfmt() poll() popen() pread() printf() pthread_cond_timedwait() pthread_cond_wait() pthread_join() pthread_testcancel() putc() putc_unlocked() putchar() putchar_unlocked() putmsg() putpmsg() putpwent() puts() pututline() pututsline() pututxline() putw() putwc() putwchar() putws() pwrite() HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-455 thread_safety(5) thread_safety(5) read() readdir() readdir_r() readv() recv() recvfrom() recvmsg() remove() remque() rename() rewind() rewinddir() scandir() scanf() seekdir() select() semop() send() sendmsg() sendto() sendfile() setbwent() setgrent() setpwent() setusershell() setutent() setutsent() setutxent() sigpause() sigsuspend() sigtimedwait() sigwait() sigwaitinfo() sleep() socket() socketpair() statvfsdev() strerror() syslog() system() tcdrain() tmpfile() tmpnam() ttyname() ttyname_r() ttyslot() ulckpwdf() undial() ungetc() ungetwc() unlink() updatebwdb() usleep() utmpname() vfprintf() vfscanf() vfwprintf() vpfmt() vprintf() vscanf() vwprintf() wait() wait3() waitid() waitpid() wordexp() wordfree() wprintf() write() writev() wscanf() キャンセルセーフ 以下のインタフェースはすべてキャンセルセーフです。 accept() bind() connect() dn_comp() dn_expand() endhostent() endnetent() endprotoent() endservent() get_resfield() gethostbyaddr() gethostbyname() gethostent() getmsg() getnetbyaddr() getnetbyname() getnetent() getpeername() getpmsg() getprotobyname() getprotobynumber() getprotoent() getservbyname() getservbyport() herror() getservent() getsockname() getsockopt() inet_addr() inet_lnaof() inet_makeaddr() inet_netof() inet_network() inet_ntoa() isastream() listen() msync() net_aton() net_ntoa() poll() Section 5-456 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 thread_safety(5) thread_safety(5) putmsg() putpmsg() rcmd() recv() recvfrom() recvmsg() res_init() res_mkquery() res_query() res_search() res_send() rexec() rresvport() ruserok() sbrk() send() sendfile() sendmsg() sendto() set_resfield() sethostent() setnetent() setprotoent() setservent() setsockopt() shutdown() socket() socketpair() 非同期シグナルセーフ 以下のインタフェースはすべて非同期シグナルセーフです。 _exit() accept() access() bind() cfgetispeed() cfgetospeed() alarm() cfsetispeed() cfsetospeed() chdir() chmod() chown() close() connect() creat() dup() dup2() execle() execve() fcntl() fpathconf() fstat() getegid() geteuid() getgid() getgroups() getmsg() getpeername() getpgrp() getpid() getpmsg() getppid() getsockname() getsockopt() getuid() isastream() kill() link() listen() lseek() mkdir() mkfifo() msync() net_aton() net_ntoa() open() pathconf() pause() pipe() poll() putmsg() putpmsg() raise() read() recv() recvfrom() recvmsg() rename() rmdir() sbrk() send() sendfile() sendmsg() sendto() setgid() setpgid() setsid() setsockopt() setuid() shutdown() sigaction() sigaddset() sigdelset() sigemptyset() sigfillset() sigismember() signal() sigpending() sigprocmask() sigqueue() sigsuspend() sleep() socket() socketpair() stat() sysconf() tcdrain() tcflow() tcflush() tcgetattr() tcgetpgrp() tcsendbreak() tcsetattr() tcsetpgrp() time() times() umask() uname() unlink() utime() wait() waitpid() write() HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-457 thread_safety(5) thread_safety(5) 非同期キャンセルセーフ 以下のインタフェースはすべて非同期キャンセルセーフです。 a64l() abs() accept() addmntent() atof() atoi() atol() bcmp() bcopy() bind() bsearch() bzero() cfgetispeed() cfgetospeed() cfsetispeed() cfsetospeed() connect() div() execv() execve() ffs() fnmatch() fsetaclentry() ftok() getclock() getmsg() getpeername() getpmsg() getrlimit() getsockname() getsockopt() getsubopt() index() insque() isalnum() isalpha() isascii() isastream() iscntrl() isdigit() isgraph() islower() isprint() ispunct() isspace() isupper() iswalnum() iswalpha() iswcntrl() iswctype() iswdigit() iswgraph() iswlower() iswprint() iswpunct() iswspace() iswupper() iswxdigit() isxdigit() l3tol() labs() ldiv() lfind() listen() lsearch() ltol3() mblen() mbstowcs() mbtowc() memccpy() memchr() memcmp() memcpy() memmove() memset() mkfifo() mktemp() msem_init() msem_lock() msgrcv() msgsnd() msync() nanosleep() net_aton() net_ntoa() pathfind() pause() poll() pstat() pstat_getlwp() pthread_cancel() pthread_setcancelstate() pthread_setcanceltype() putmsg() putpmsg() recv() recvfrom() recvmsg() remque() rindex() rmdirp() sbrk() semop() send() sendfile() Section 5-458 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 thread_safety(5) thread_safety(5) sendmsg() sendto() setaclentry() setcat() setclock() setrlimit() setsockopt() shutdown() sigsuspend() socket() socketpair() strcasecmp() strcat() strchr() strcmp() strcoll() strcpy() strcspn() strdup() strlen() strncasecmp() strncat() strncmp() strncpy() strord() strpbrk() strrchr() strrstr() strspn() strstr() strtod() strtok_r() strtol() strtold() strtoul() strxfrm() swab() tcdrain() tcflow() tcflush() tcgetattr() tcgetpgrp() tcgetsid() tcsendbreak() tcsetattr() tcsetpgrp() toascii() tolower() toupper() towlower() towupper() ulimit() wait() wait3() waitid() wcscat() wcschr() wcscmp() wcscpy() wcscspn() wcslen() wcsncat() wcsncmp() wcsncpy() wcspbrk() wcsrchr() wcsspn() wcsstr() wcstod() wcstok() wcstol() wcstombs() wcstoul() wcswcs() wctomb() wctype() 参照 intro(3C)、 pthread(3T)、 signal(5) スレッドのホワイトペーパーは、 http://www.devresource.hp.com および http://www.docs.hp.com Web サイトで 参照してください。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-459 timeslice(5) timeslice(5) 名称 timeslice − 1秒あたりの時計単位時間でのスケジューリング間隔 値 フェールセーフ (HZ/10) HZ は、構成対象システムの1秒あたりの時計単位時間数を定義します。 デフォルト (HZ/10) HZ は 100 です。 許容値 -1 ∼ 2147483647 の範囲内の任意の値。 -1 という値は、スケジューリングプリエンプションに基づいた時分割が行われないことを示しており、スレッ ドは、自発的に実行を放棄するか優先順位が高いスレッドに横取りされるまで、継続して実行されます。 推奨値 通常の場合はデフォルト値を使用してください。より速いラウンドロビン方式のスケジューリングが必要とさ れる特別な場合は、値1を使用するとよいでしょう。ただし、値を変更すると、システムパフォーマンスに直 接影響することがあります。実稼動システムで値を変更する前に、作業用環境でパフォーマンスの影響を評価 する必要があります。 説明 調整可能パラメータ timeslice は、スケジューリングの時間間隔を定義します。これは、あるスレッドが、カー ネルスケジューラによって同じ優先順位の他のスレッドを実行するためにコンテキストスイッチされるまで に、プロセッサ上で実行される時間です。プロセッサ上でスレッドが実行を開始するとき、調整可能パラメー タ timeslice に設定されている単位時間数だけ実行されるようにセットアップされます。実行中のスレッドに対 してクロック割り込みが発生するごとに、そのスレッドのタイムクォンタムバランスが減少し、バランスがゼ ロに達すると、スレッドはコンテキストスイッチされます。 timeslice の値は、オペレーティングシステムが実現するユーザープリエンプションの方法のうちの1つをコン トロールします。値が大きい場合、実行中のスレッドのプリエンプションは減少します。ただし、スレッドの ユーザープリエンプションには別の原因もあり、この場合、調整可能パラメータ timeslice ではコントロールで きません。 timeslice の値を変更すると、システムスループットおよび応答時間に直接影響することがあります。値を非常 に小さくすると、コンテキストスイッチが過剰に発生する可能性があり、値を非常に大きくすると、実行可能 スレッドが実行されずに待たされ続ける可能性があります。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 Section 5-460 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 timeslice(5) timeslice(5) 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 調整可能パラメータ timeslice は、スケジューリングポリシーおよび優先順位には関係なくシステムのすべての スレッド (sched_fifo を除く) にグローバルに適用されるので、この調整可能パラメータの値を増やすと、すべ てのスレッドの持ち時間が等しく増加します。 システムで、優先順位が高いスレッドによって、プリエンプションによるコンテキストスイッチが過剰に発生 している場合、この値を増やすことで、優先順位が低いスレッドがスケジューリングされたときの実行時間を 長くすることができます。優先順位が低いスレッドが横取りされるのは、優先順位が高いスレッドが実行可能 になったときであるためです。 この値を大きくした場合の影響 調整可能パラメータ timeslice の値を増やすと、スレッドが実行する順番を待たなければならない時間が長くな るため、いくつかのスレッドが実行されずに待たされ続けることがあります。このために、スループットに関 するパフォーマンスの問題が発生する可能性があります。 この調整可能パラメータの値を小さくする場合 調整可能パラメータ timeslice の値を減らす必要があるのは、コンテキストスイッチの発生が増加するという損 失を受け入れてでも、応答時間におけるターンアラウンドをよりよくする必要がある場合です。システムで、 計算に集中したアプリケーションがあまり実行されていない場合は、スレッドの持ち時間が完全に利用されず に、かなり頻繁にスレッドのブロックおよびプリエンプションが発生するようになります。 この値を小さくした場合の影響 調整可能パラメータ timeslice の値を減らすと、コンテキストスイッチの発生が増加するため、システム空間で 消費される時間が増加し、ユーザー空間で消費される時間が減少します。また、計算に集中したアプリケー ションでパフォーマンスが低下します。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 timeslice は HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-461 timezone(5) timezone(5) 名称 timezone, dst − 万国標準時 (グリニッジ標準時) と地域時間の差 値 デフォルト timezone = 420 dst = 1 デフォルト値の1は、調整可能パラメータ timezone のデフォルト値 (英国グリニッジの西への時差 420 分) を 夏時間の値として解釈することを示しています。 許容値 -720 ∼ 720 調整可能パラメータ timezone の値は、定義されている時間帯に対応している必要があり、少なくとも 15 分の 倍数である必要があります。より一般的には、この値は1時間または 30 分の時間帯に対応した、60 分または 30 分の倍数になります。 調整可能パラメータ dst の値は、時刻が夏時間かどうかを示します。この値が1に設定されている場合、シス テムは夏時間を使用しており、0に設定されている場合、夏時間は使用していません。 推奨値 使用可能な値であればいずれも同様に推奨できます。ただし、選択された値は、システムの場所の時間帯と夏 時間の仕組み、またはアプリケーションまたはユーザーにとって意味がある時間帯と夏時間の仕組みに対応し ている必要があります。 説明 調整可能パラメータ timezone は、グリニッジ標準時 (万国標準時) と地域時間の差であり、英国グリニッジか ら西への時間差 (分) として表現されます。調整可能パラメータ dst は、調整可能パラメータ timezone を標準 時間と夏時間のどちらの値として解釈するかを示します。 これらの調整可能パラメータを使用して、グリニッジ標準時 (または万国標準時) と地域時間との変換を行うこ とができます。 timezone は調整可能パラメータですが、システムの動作に影響を与えるためには使用されませ ん。むしろ、システムがリブートされても時間帯情報が失われないように、それを保持するために使用されま す。この情報は、HP-UX 拡張機能の gettimeofday によって返されます。調整可能パラメータ timezone は、時 間帯を示す他の方法とは独立しています。たとえば、 date は、環境変数 TZ を使用して、万国標準時または地 域時間のどちらかで時刻を取得または設定します。この場合、調整可能パラメータ timezone は影響を与えませ ん。一般に、調整可能パラメータ timezone に依存しているかどうかを調べるには、 localtime() および tzset() など、特定のシステムコールのマンページを参照するのが最良の方法です。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 Section 5-462 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 timezone(5) timezone(5) 変更に関する制限事項 これらの調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を変更する場合 これらの調整可能パラメータは、システムの地理的な時間帯またはユーザーの時間帯に合わせるために変更で きます。 同時に変更する必要がある他の調整可能パラメータ 調整可能パラメータ timezone および dst は常に1組の値として設定し解釈する必要があります。 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 timezone および dst は HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-463 types(5) types(5) 名称 types − 基本的なシステムデータ型 構文 #include <sys/types.h> 説明 特記事項 このページの例は典型的な事例を載せたにすぎません。型名は、例外 (もしあるならば) が 制約で述べられる かもしれませんが、基本的に実在すると考えてかまいません。たいていの場合、それぞれのtypedefを実現して いる基本的な型はそのtypedefを使っているソースコードに変更が必要ない限り実現方法に依存したものです。 しかし中にはそのtypedefが一般的に使われている型の略記であり、変わらない場合もあります。 インクルードファイルに定義されているデータ型は HP-UX のシステムコードで使われています。 これらの型 のデータにはユーザーのコードで使用できるものもあります。 typedef struct { int r[1]; } *physadr; typedef char *caddr_t; typedef unsigned int uint; typedef unsigned short ushort; typedef unsigned long ino_t; typedef short cnt_t; typedef long time_t; typedef long dev_t; typedef long off_t; typedef long paddr_t; typedef long key_t; typedef int32_t pid_t; typedef long uid_t; typedef long gid_t; typedef long blkcnt_t; 上で定義された名前は標準化されていますが、定義されている実際の型は HP-UX のインプリメンテーション により変わることがあることに注意してください。 型の意味は以下のとおりです。 physadr メモリへのポインタとして使用されます。ポインタはハードウェア依存の命令アドレッ シング規約に従い境界付けされます。 Section 5-464 caddr_t 型なしのポインタとして、または型なしのメモリへのポインタとして使用されます。 uint unsigned integer の省略形 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 types(5) types(5) ushort ino_t unsigned short の省略形 I-番号を指定するために使用されます。 HP-UX 11i のすべてのネイティブなファイルシス テム (HFS や VxFS 3.5 を含む) では、 32ビット以内に収まる値が使用されます。リモー トの NFS サーバーで 32ビットを越える値が使用されている場合、 32ビットアプリケー ションでは、値が切り捨てられ、ユニークな値ではなくなることがあります。 cnt_t 一部のインプリメンテーションで何らかのカーネルデータ構造への参照カウントを保持 するために使用されます。 time_t dev_t 1970年1月1日 00:00:00 GMT からの秒数で表された時間 デバイスの種類とユニット番号をメジャーとマイナーとして知られる2つからなる表現で 指定します。 off_t ファイルの先頭から測ったバイト単位のオフセット 32 ビットアプリケーションを −D_FILE_OFFSET_BITS=64 または −D_LARGEFILE64_SOURCE でコンパイルする と、 off_t は int64_t になります。 paddr_t key_t ポインタを保持するために適切な大きさをもった整数型として使用します。 メッセージ待ち行列、セマフォまたは共有メモリ識別子を得るために用いられるキーの 型です。 stdipc(3C) を参照してください。 pid_t プロセスとプロセスグループ識別子を指定するために使用します。 uid_t ユーザー識別子を指定するために使用します。 gid_t グループ識別子を指定するために使用します。 blkcnt_t ブロック単位のディスク割り当て、または転送サイズ 32 ビットアプリケーションを −D_FILE_OFFSET_BITS=64 または −D_LARGEFILE64_SOURCE でコンパイルする と、 blkcnt_t は int64_t になります。 標準準拠 <sys/types.h>: AES, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-465 unctrl(5) unctrl(5) 名称 unctrl − unctrl の定義 説明 <unctrl.h> ヘッダーは chtype 型を <curses.h> 内で定義した通りに定義します。 次のものは関数として宣言されますが、マクロとして定義される可能性もあります。 char *unctrl(chtype c); 参照 <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 5-466 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 unistd(5) unistd(5) 名称 unitsd: unistd.h − 標準構造体と記号定数 構文 #include <unistd.h> 説明 ヘッダ <unistd.h> は以降の構造体と記号定数を定義しています。 access() 関数のための記号定数 R_OK 読み取りパーミッションのテスト W_OK 書き込みパーミッションのテスト X_OK 実行 (または検索) パーミッションのテスト F_OK ファイルの存在のテスト 定数 F_OK, R_OK, W_OK, X_OK と、式 R_OK|W_OK, R_OK|X_OK, R_OK|W_OK|X_OK はすべて異なる値 です。 nullポインタを表す記号定数 NULL lseek() と fcntl() 関数用の記号定数 (以下の定数の値はそれぞれ異なっています) SEEK_SET ファイルのオフセットを "offset" に設定 SEEK_CUR ファイルのオフセットを現在のオフセットに "offset" を加えたものに設定 SEEK_END ファイルのオフセットを EOF に "offset" を加えたものに設定 記号定数 (整数値) _POSIX_VERSION 実現されている IEEE Std1003.1 標準のバージョンを表す整数値。現在の値 は199009Lで、 IEEE 標準委員会が標準を認可した (4桁の) 年と (2桁の) 月 を表します。ただし記号 _AES_SOURCE, _XPG3, または _POSIX1_1988 のどれかが <unistd.h> をインクルードする前に定義されていた場合、この 記号の値は198808Lになります。 _POSIX2_VERSION 実現されている IEEE Std1003.2 標準のバージョンを表す整数値。現在の値 は199209Lで、 IEEE 標準委員会が標準を認可した (4桁の) 年と (2桁の) 月 を表します。 _POSIX2_C_VERSION 実現されている IEEE Std1003.2 C言語バインディングオプションのバー ジョンを表す整数値。現在の値は199209Lで、 IEEE 標準委員会が標準を 認可した (4桁の) 年と (2桁の) 月を表します。 _XOPEN_VERSION 実現されているX/Open ポータビリティガイドの発行番号を表す整数値。 現在の値は4で、第4版であることを表します。ただし記号 _XPG3 が HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-467 unistd(5) unistd(5) <unistd.h> をインクルードする前に定義されていた場合、この記号の値は 3になります。 以降の記号定数は、対応するオプションや制限条項の状態がコンパイル後も変わらないものであれば、この ヘッダで定義されています。また記号がこのヘッダにないならば、対応するオプションや制限条項の値、また は存在は、 sysconf() または pathconf() を用いて実行時に決定されます。 _POSIX_CHOWN_RESTRICTED chown() の使用は適切な特権を持ったプロセスだけに制限されます。 _POSIX_JOB_CONTROL インプリメンテーションがジョブコントロールをサポートします (すべて の HP-UX インプリメンテーションで真)。 _POSIX_NO_TRUNC NAME_MAX より長いパス名構成要素はエラーを発生します。 _POSIX_REALTIME_SIGNALS インプリメンテーションがリアルタイムシグナルをサポートします (すべ ての HP-UX インプリメンテーションで真)。 _POIX_SAVED_IDS 実効ユーザーとグループは exec() コールの際に保存されます (すべての HP-UX インプリメンテーションで真)。 _POSIX_FSYNC インプリメンテーションがファイルの同期をサポートします (すべての HP-UX インプリメンテーションで真)。 open(2) を参照してください。 _POSIX_SYNCHRONIZED_IO インプリメンテーションが I/O の同期をサポートします (すべての HP-UX インプリメンテーションで真)。 open(2) を参照してください。 _POSIX_VDISABLE 端末の特殊文字はこの文字を使うことによって禁止可能です (termio(7) を 参照)。 _POSIX_THREADS _POSIX2_C_BIND インプリメンテーションがPOSIXスレッドをサポートします。 すべての POSIX.2 C言語機能が、 c89 Cコンパイラに使われるデフォルト のライブラリで与えられます (cc(1) を参照)。 _POSIX2_LOCALEDEF 新しいlocaleが localedef コマンドによって定義できます (localedef (1M) を 参照)。 _POSIX2_UPE システムは IEEE Std1003.2a (POSIX User Portability Utilities Option) をサ ポートします。 _POSIX2_CHAR_TERM POSIX.2a に要求されるコマンドすべてをサポートする端末が少なくとも1 つは存在します。 _CS, _PC, _SC で始まるすべての記号定数 (confstr(3C), pathconf (2), sysconf (2) を参照) が定義されています。 以降の記号定数がファイルストリーム用に定義されています。 Section 5-468 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 unistd(5) unistd(5) STDIN_FILENO 標準入力 (stdin) のファイル番号 STDOUT_FILENO 標準出力 (stdout) のファイル番号 STDERR_FILENO 標準エラー (stderr) のファイル番号 型 size_t, ssize_t, uid_t, gid_t, off_t, pid_t が定義されています。 また次の関数の宣言があります。 access() alarm() brk() chdir() chown() chroot() close() confstr() crypt() ctermid() cuserid() dup() dup2() encrypt() endusershell() execl() execle() execlp() execv() execve() execvp() _exit() fchown() fork() fpathconf() fsync() ftruncate() getcwd() getegid() geteuid() getgid() getgroups() gethostname() getlogin() getopt() getpass() getpgrp() getpgrp2() getppid() getuid() getusershell() initgroups() ioctl() isatty() link() lockf() getpid() logname() lseek() mkstemp() mktemp() nice() pathconf() pause() pipe() prealloc() read() readlink() rmdir() sbrk() setgid() setgroups() sethostname() setpgid() setpgrp() setpgrp2() setresgid() setresuid() setsid() setuid() setusershell() sgetl() sleep() sputl() swab() swapon() symlink() sync() sysconf() tcgetpgrp() tcsetpgrp() truncate() ttyname() ttyslot() unlink() vfork() write() 著者 unistd は、HPで開発されました。 参照 access(2)、 chown(2)、 confstr(3C)、 exit(2)、 fcntl(2)、 kill(2)、 lseek(2)、 open(2)、 pathconf(2)、 sysconf(2)、 limits(5)、 stdsyms(5)、 termio(7) 標準準拠 <unistd.h>: AES, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, POSIX.2, POSIX.4 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-469 unlockable_mem(5) unlockable_mem(5) 名称 unlockable_mem − ユーザープロセスがロックできない物理メモリーの量 値 デフォルト 0ページ 許容値 最小: 0ページ 最大: 使用可能な物理メモリーより少ない任意の値 unlockable_mem が0以下 (デフォルト値など) に設定された場合、カーネルは次の値を使用します。 (200 + UPAGES / 2) * (number-of-enabled-processors) ここで、 UPAGES はスレッドユーザー領域のためのページの最少量であり、32 ビット PA-RISC アーキテク チャでは 4、64 ビット PA-RISC では 8に設定されます。Itanium(R)ベース アーキテクチャでは、 UPAGES は、RSE スタック、従来のスタック、スタックレッドゾーン (従来のスタックと RSE スタックの間)、および 通常のユーザー領域のサイズに必要なページの総数です。 説明 特権ユーザーはメモリーロッキングを使用することで、スワップ処理に影響されず、メモリーに残しておく必 要があるページを指定できます。この機能により、メモリーアクセス時間が、メモリーのページングおよびス ワッピングによって生じる遅延の影響を受けないようにすることができます。たとえば、ロッキングは物理メ モリーが不足しているシステムの特権ユーザーが使用できる手段です。特権プロセスは、他のプロセスと同じ ようにスワップされることなく、アドレス空間の一部分をロックできます。特権プロセスのためにページが ロックされると、これらのプロセスは、メモリーの競合について心配する必要はなくなります。ただし、非特 権プロセスではメモリー獲得の競合が起こります。 unlockable_mem は、ユーザープロセスがロックできないメモリーの量を設定することで、この特権動作に対 する制限要因を提供します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 この調整可能パラメータの値を増やす必要があるのは、使用可能な物理メモリーが少ない状態で動作している システムで、特権プロセスが使用しているメモリーを、より重要であると考えられるプロセス (メモリーを ロックしていません) が使用した方がよい場合です。調整可能パラメータの値を増やすと、ロック可能で、す べてのプロセスで使用可能なページが減ります。 いずれにしても、カーネルは必要なときにはロックされたプールからページを流用できるので、カーネル自体 Section 5-470 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 unlockable_mem(5) unlockable_mem(5) にはまったく影響がないことに注意してください。 この値を大きくした場合の影響 メモリーをロックしようとするプロセスが作業するプールが小さくなるので、大量のロックされたメモリーが 要求された際に、単にページが使用中である場合、ロック動作は失敗します。プロセスがこの失敗を処理する 方法は処理系によって異なります。 この調整可能パラメータの値を小さくする場合 ロック可能なメモリープールが需要よりも小さい場合、ロックされたメモリーを要求するプロセスは失敗しま す。 unlockable_mem の値を減らすと、ロック可能なメモリーが増えます。 この値を小さくした場合の影響 特権プロセスがプール内でより多くのスペースをロックした場合、システムで一般的な使用法で使用できるメ モリーが少なくなるため、ロックされたメモリーを使用しないプロセスではスワップが発生しやすくなりま す。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 unlockable_mem は HP で開発されました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-471 unwind(5) unwind(5) 名称 unwind − スタックアンワインド ライブラリのエントリー点と便利なマクロの概要 構文 #include <unwind.h> 説明 <unwind.h> ヘッダは、Itaniumベース システム用の HP-UX で libunwind.so として提供される、スタックアン ワインド ライブラリのアプリケーション プログラム インタフェース (API) を定義します。このページでは、 スタックアンワインドに関する一般的な概念と、その用途について説明します。このページは、アンワインド ライブラリのエントリー点について説明されているセクション 3X のマンページを補完する目的で作成されま した。また、このページではアンワインドヘッダのフォーマット、および 『IA-64 ソフトウェア規則およびラ ンタイム・アーキテクチャ・ガイド』や関連するドキュメントでは触れていない Itaniumベース 実行可能ファ イル内に含まれているアンワインドテーブルの詳細についても説明します。 概念と用語の定義 アセンブリ言語とその他の高水準プログラミング言語を区別するもっとも基本的な機能は、プロシージャまた は関数呼び出しの組み込みサポートです。呼び出されたプロシージャ自体が他のプロシージャを呼び出し、プ ロシージャの 呼び出しチェーンを形成します。プロシージャ呼び出しチェーンにおけるプロシージャ間のプロ シージャ呼び出し関係を説明するために、 呼び出し側および 呼び出される側という用語が使用されます。呼び 出し側とは、呼び出される側を呼び出すプロシージャです。呼び出しチェーンに含まれるプロシージャがス テートメントの実行を完了すると、呼び出し側はその呼び出しに続く次のステートメントの実行を再開しま す。 マルチタスク オペレーティングシステムの基本的な機能の1つに、割り込みイベントがあります。割り込みイ ベントとは制御の流れに割り込みを行う行為で、ユーザー可視のプロセッサ状態のほぼ全体を保存し、 割り込 みハンドラー関数に制御を渡します。プロシージャ呼び出しチェーンにおけるプロシージャ間の割り込み関係 を説明するために、 割り込みを受けたプロシージャと ハンドラーの2つの用語を使用します。 プロシージャ呼び出しと割り込み関係は、 後続ジョブと 先行ジョブという2つの用語を使用して一般化される ことがあります。プロシージャ呼び出しの関係においては、 先行ジョブは呼び出し側を指し、 後続ジョブは呼 び出される側を指します。割り込み関係においては、 先行ジョブは割り込みを受けたプロシージャを指し、 後 続ジョブはハンドラーを指します。 考え方として、ネストした呼び出しまたは割り込みのチェーンの実行中にアクティブであるそれぞれのプロ シージャには アクティブ化レコードがあり、呼び出しまたは割り込みイベントの時点におけるそのプロシー ジャのユーザー可視のプロセッサ状態がその中に含まれています。アクティブ化レコードはプロシージャが呼 び出された時点でチェーンに作成されるリンクのようなもので、そのプロシージャが完了したときに除去され ます。アクティブ化レコードは後入れ先出しで追加および除去されるので、呼び出しチェーンを専門的に ス タックと呼ぶこともあります。 スタックアンワインドは、先行ジョブ (呼び出し側または割り込みを受けたプロシージャ) のアクティブ化レ コードを後続ジョブ (呼び出される側またはハンドラー) のアクティブ化レコードに使用させるために十分な数 Section 5-472 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) だけ復旧し、呼び出される側の呼び出しから戻されたか割り込みイベントが終了したかのように先行ジョブの アクティブ化レコード内の値を使用してプロセッサ状態を先行ジョブの状態に初期化し、プロセッサが先行 ジョブの命令の実行を継続できるようにするタスクです。 ソフトウェアアプリケーションの開発者がスタックアンワインドのタスクを実行したいと考える場合、以下に 示すものを含むいくつかの理由が考えられます。 • GNU Debugger内の bt コマンドのように、プログラム呼び出しスタックを表示するユーザー空 間デバッガのスタックバックトレース コマンドを実装するため。詳細は、 gdb(1) を参照して ください。 • 例外処理やガベージコレクション、または性能、プロファイルベースツール、その他のリソー ス解析を目的としてプログラム呼び出しスタックを調査するため。 • エラー処理ルーチンから 標準エラー出力にスタックトレースを表示し、アプリケーションの保 守やデバッグを簡単に行うため。 スタックアンワインド ライブラリでは、指定されたプロシージャのアクティブ化レコードは、そのプロシー ジャの _Unwind_Context データ構造に保存されます。プロシージャ呼び出し (メモリー) スタック内でプロ シージャに割り当てられた空間は、プロシージャの スタックフレームと呼ばれます。スタックフレームには、 上で定義したプロシージャの概念的なアクティブ化レコードに含まれる情報の多くが保存されます。このた め、スタックアンワインド ライブラリのドキュメンテーションでは、通常、 アクティブ化レコードの代わりに フレームという用語が使用されます。 unwind のマンページでは、 『IA-64 ソフトウェア規則およびランタイム・アーキテクチャ・ガイド』の内容 と、5.1 「レジスタの使用」および、11 「スタックのアンワインドと例外処理」で定義されている用語を前提 としています。 機能 スタックアンワインド ライブラリは、 『IA-64 ソフトウェア規則およびランタイム・アーキテクチャ・ガイ ド』に準拠するプログラムのスタックをアンワインドするための API を提供します。スタックアンワインド ラ イブラリは、以下の目的でプロセスによって使用されます。 • 診断の目的で、自身のスタックトレースを標準エラー出力または出力ストリームに出力しま す。 U_STACK_TRACE(3X) および _UNW_STACK_TRACE(3X) を参照してください。 • 自身のスタック、ターゲットプロセスのスタック、またはコアファイルのスタックをアンワイ ンドします。 アンワインドコンテキストに保存されたレジスタ値に対する照会は、プロシー ジャ呼び出しスタック上のほとんどのアクティブ化レコードに対して許可されます。特定のア クティブ化レコードに対しては、スクラッチレジスタ値も照会することができます。 自身以外のプロセスまたはコアファイルをアンワインドする場合、スタックアンワインド ライ ブラリはアンワインドセグメントの場所をクライアントに取得させ、他のプロセスまたはコア ファイルのメモリーに対するアクセスを読み取り関数に実行させます。これには、コールバッ ク関数が使用されます。コールバック関数は、クライアントがスタックアンワインド ライブラ HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-473 unwind(5) unwind(5) リに登録しなくてはならないものです。 • ANSI C++ 準拠の例外処理に、エンクロージング (ネストが浅い) プロシージャへの制御の移行 を含め、スタックアンワインドのサポートを提供します。詳細は、http://www.codesourcery.com/cxx-abi/abi.html の 『C++ ABI for IA-64』 (ドラフト、2000 年 11 月 17 日) を参照し てください。 リリース間の互換性を保つ目的で、データ構造の実装の詳細を非公開にするために、スタックアンワインド ラ イブラリのインタフェースは完全に設計されています。 型定義 この API 関数の戻り値は列挙型の _UNW_ReturnCode で、以下の意味を持ちます。 _UNW_STEP_KERNEL_SAVE_STATE _Unwind_Context は、 _user_sendsig() に関連付けられた以外のカーネル割り込みフレーム に属しているために、スタックアンワインド ライブラリが、処理を続行できなくなったフ レームを表しています。ユーザー空間アンワインドアプリケーションがこのリターンコー ドを受信することはありません。 _UNW_STEP_BOTTOM _Unwind_Context は、スタックアンワインド ライブラリが、これ以上ステップできないフ レームを表しています。このリターンコードは、フレームにスタックの底を示す印がつけ られた (つまり、戻るべきリンクが存在しない) プロシージャを示す _Unwind_Context に対 して _UNW_step が呼び出されたときに生成されます。(『IA-64 ソフトウェア規則およびラ ンタイム・アーキテクチャ・ガイド』の 11.1 「スタックのアンワインド」を参照してくだ さい。) _UNW_OK すべて順調です。 _UNW_STEP_ERROR ステップ中に何らかの一般的な問題が発生しました。 _UNW_STEP_INVALID_IP _Unwind_Context 内の命令ポインター値が不正であるとマークされました。 _UNW_STEP_INVALID_SP _Unwind_Context 内のスタックポインター値が不正であるとマークされました。 _UNW_STEP_INVALID_GR 不正であるとマークされた汎用レジスタ値がステップ処理中に _Unwind_Context で検出さ れました。 _UNW_STEP_INVALID_PFS _Unwind_Context 内の AR.PFS 値が不正であるとマークされました。 Section 5-474 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) _UNW_STEP_INVALID_RSC _Unwind_Context 内の AR.RSC 値が不正であるとマークされました。 _UNW_STEP_INVALID_BSP _Unwind_Context 内の AR.BSP 値が不正であるとマークされました。 _UNW_STEP_INVALID_BSPSTORE _Unwind_Context 内の AR.BSPSTORE 値が不正であるとマークされました。 _UNW_STEP_INVALID_CFM _Unwind_Context 内の AR.CFM 値が不正であるとマークされました。 _UNW_STEP_INVALID_BR 不正であるとマークされた分岐レジスタ値がステップ処理中に _Unwind_Context で検出さ れました。 _UNW_STEP_BAD_BSP_ALIGNMENT _UNW_currentContext の値 AR.BSP が整列されませんでした。 _UNW_STEP_INVALID_RNAT _Unwind_Context 内の AR.RNAT 値が不正であるとマークされました。 _UNW_STEP_NO_DESCRIPTOR_FOR_NON_LEAF スタックアンワインド ライブラリは、そのプロシージャがリーフプロシージャではないこ とを証明できるプロシージャのアンワインド記述子をみつけられませんでした。 _UNW_STEP_CORRUPT_DESCRIPTOR フレームのアンワインド記述子の形式に誤りがあります。 _UNW_STEP_RSE_NOT_FLUSHED レジスタ スタック エンジンはフラッシュされていません。 _UNW_STEP_SIGNAL_CONTEXT 割り込みの保存されたユーザーコンテキストに対する照会中にエラー値が返されました。 _UNW_STEP_NOT_ALLOWED_IN_STATE _UNW_step に対する呼び出しが、 Start、 Bad、 Kernel_Bottom_Frame のいずれかの状態で 行われました。以下の 「状態」を参照してください。 _UNW_INITIALIZATION_RANGE_ERROR クライアントは許可されているレジスタのセットの範囲外で初期化を行いました。 _UNW_QUERY_RANGE_ERROR クライアントは許可されているレジスタのセットの範囲外で照会を行いました。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-475 unwind(5) unwind(5) _UNW_QUERY_INVALID_ERROR クライアントは _Unwind_Context 内で不正であるとマークされたレジスタを照会しまし た。 _UNW_SET_NOT_ALLOWED_IN_STATE クライアントは _Unwind_Context が Init 状態ではない間、値を初期化しようと試みまし た。 _UNW_CURRENT_CONTEXT_FAILED _UNW_currentContext の呼び出し中に一般的な問題が発生しました。 _UNW_CURRENT_CONTEXT_NOT_ALLOWED_IN_STATE クライアントは Start、 Bad、 Stop、 Frame のいずれかの状態で _UNW_currentContext を 呼び出しました。 _UNW_MEMORY_ALLOCATION_ERROR スタックアンワインド ライブラリは、要求された関数を実行するための十分なメモリーを 割り当てることができません。 _UNW_CLEAR_NOT_ALLOWED_IN_STATE クライアントは、 Start、 Bad、 Stop のいずれかの状態で _UNW_clear を呼び出しました。 _UNW_QUERY_NOT_ALLOWED_IN_STATE クライアントは、 Kernel_Bottom_Frame の状態ではない間に _UNW_getKernelSavedContext を呼び出しました。 _UNW_INTERNAL_ERROR ロジックの問題が発生しました。当社サポート担当者に問い合わせてください。 _UNW_STEP_INTERRUPTION_ABI_MISMATCH スタックアンワインド ライブラリは、フォーマット P10 アンワインド記述子の不正な abi フィールドを検出しました。 『IA-64 ソフトウェア規則およびランタイム・アーキテク チャ・ガイド』の B.3「プロローグ領域の記述子レコード」を参照してください。 TRUE や FALSE は、列挙子 _UNW_FALSE および _UNW_TRUE を持つ列挙型 _UNW_Boolean を使用して表 します。 _UNW_FALSE は0の値を持ちます。 整数値は、以下のように定義された型を使用して受け渡されます。 uint32_t は、符号なしの 32 ビット整数です。 uint64_t は、符号付きの 64 ビット整数です。 int32_t は、符号付きの 32 ビット整数です。 int64_t は、符号なしの 64 ビット整数です。 値を照会する関数と初期化関数は、値の受け渡しをするためにいくつかの構造体を使用します。それらの構造 Section 5-476 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) 体を以下に示します。 構造体 _UNW_KernelSavedContext には、 uint32_t 型の2つのフィールド p10_abi_value および p10_context_value があります。 構造体 _UNW_FR_Value には、 uint64_t 型の2つのフィールド first_container および second_container があります。 構造体 _UNW_GR_Value には、 uint64_t 型のフィールド value と、 _UNW_Boolean 型のフィールド NaT があります。 列挙型 _UNW_AppReg は、関数 _UNW_getAR および _UNW_setAR によって、アプリケーションレジスタの 値の照会および設定を行うときに使用されます。 _UNW_AppReg の列挙子には、 _UNW_AR_RSC、 _UNW_AR_BSP、 _UNW_AR_BSPSTORE、 _UNW_AR_RNAT、 _UNW_AR_CCV、 _UNW_AR_UNAT、 _UNW_AR_FPSR、 _UNW_AR_ITC、 _UNW_AR_PFS、 _UNW_AR_LC、 _UNW_AR_EC、および _UNW_AR_LIST_COUNT があります。 _UNW_AR_FIRST_REG は _UNW_AR_RSC と同じです。 アンワインド情報の受け渡しと検索 Itaniumベース アンワインドアーキテクチャの定義は、 『IA-64 ソフトウェア規則およびランタイム・アーキテ クチャ・ガイド』の 11 章に記述されています。このマニュアルでは、アンワインドの機構と準じるべきラン タイムアーキテクチャの規約の必要性について説明し、アンワインド情報ブロックのレイアウトとセマン ティックに関する詳細を記述しています。しかしここでは、アンワインドテーブルの検索方法などのオペレー ティングシステム環境によって定義および処理されるべき、環境に依存する詳細については触れていません。 スタックアンワインド ライブラリでは、クライアントのためのこのような環境に依存する詳細を処理します。 アンワインド情報の、環境に依存する詳細を習得したいユーザーは、 『IA-64 Runtime Architecture Supplement』 シリーズの 『Processor-Specific ELF Supplement for IA-64』というタイトルのドキュメントを参照してくださ い。 コールバック スタックアンワインドのタスクを実行するために、スタックアンワインド ライブラリは、指定されたロードモ ジュール (ロードモジュール内の任意の有効な命令アドレスによって識別されます) の text のベースアドレス、 アンワインドヘッダーの場所、およびグローバルデータポインター (汎用レジスタ GP) の値を決定する必要が あります。 U_STACK_TRACE() などのアンワインド関数およびスタックアンワインド ライブラリの例外処理 では、 dlmodinfo(3C) を利用してこれらの値を取得することがサポートされています。スタックアンワインド ライブラリを使用してプロセス間のアンワインドを実行するクライアント (デバッガなど) は、 dlmodinfo の代 わりにこの検索タスクを実行するために、スタックアンワインド ライブラリのデータ構造の構築中に関数を登 録する必要があります。この関数の型は _UNW_LoadMapFromIP です。この検索関数のセマンティックとイ ンタフェースは、 _UNW_createContext(3X) で定義されます。 さらに、スタックアンワインド ライブラリには、ターゲットプロセスのメモリー (プロセスが異常終了してい る場合はメモリーイメージ) から値を読み込む機能が必要です。スタックアンワインド ライブラリを使用して プロセス間のアンワインドを実行するクライアントは、(直接メモリー参照の代わりに) メモリー読み取りタス HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 5-477 unwind(5) unwind(5) クを実行するために、データ構造の構築中に関数を登録する必要があります。この関数の型は _UNW_ReadTargetMem です。メモリー読み取り関数のセマンティックとインタフェースは、 _UNW_createContext(3X) で 定義されます。 クライアント/ライブラリ相互作用 クライアントがスタックアンワインドを操作するための手順は以下の通りです。 • _Unwind_Context データ構造の構築 • _Unwind_Context の初期化 • _Unwind_Context のステップ • _Unwind_Context の照会 • 場合により、 _Unwind_Context のクリアと再初期化 • 最後に _Unwind_Context の破壊 注記:例外を生成するクライアントは、aCC 標準化委員会によって管理される言語に依存しない API を使用し ます。詳細は、http://www.codesourcery.com/cxx-abi/abi.html を参照してください。 状態 ステートマシンを利用して、スタックアンワインド操作のタスクの正当な順序付けを定義し、クライアントか らの呼び出しに対するスタックアンワインド ライブラリの応答を表現することができます。ステートマシン は、8個の状態と、スタックアンワインド ライブラリの API 関数に対する呼び出しや場合によってはメモリー 不足状態などのシステム状態によって起こる状態間の遷移によって定義されます。状態および想定される遷移 には、以下のものがあります。 Start _Unwind_Context オブジェクトの構築前です。 クライアントは、 Start から _UNW_createContextForSelf および _UNW_createContext を呼 び出します。これらは _Unwind_Context を Init 状態または Bad 状態に遷移させます。 Bad _Unwind_Context が使用できないことを表す状態です。この状態になるのは、構築時に障 害 (メモリーの割り当てエラーが原因である場合が多い) が発生した場合です。また、アン ワインドライブラリがアンワインド中に見つからなくなってしまい、見つかる見込みがな い場合 (例えば、正しく初期化されていないコンテキストから不正なポインター値が検出さ れた場合など) にもこの状態になります。 _UNW_destroyContext を除き、 Bad 状態にあるスタックアンワインド ライブラリの動作は 定義されていません。 Bad 状態になった場合、クライアントの最も安全な手段は、 _Unwind_Context を Stop 状態に遷移させる _UNW_destroyContext への呼び出しを使用し て _Unwind_Context オブジェクトを破壊することです。 Init 特定のプログラム実行状態のスナップショットを表す適切なユーザー可視のプロセッサ状 態を使用して _Unwind_Context を初期化することが許可される状態です。 Section 5-478 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) Init 状態では、クライアントは、状態遷移の原因にならない _UNW_setGR、 _UNW_setGR_NaT、 _UNW_setFR、 _UNW_setBR、 _UNW_setIP、 _UNW_setAR、 _UNW_setPR、 _UNW_setPreds、 _UNW_setCFM、 _UNW_jmpbufContext および _UNW_clear を呼び出せます。また、クライアントは _Unwind_Context を Frame 状態また は Bad 状態に遷移させる _UNW_step または _UNW_currentContext を呼び出すこともでき ます。この他、クライアントは _UNW_destroyContext を呼び出して _Unwind_Context を Stop 状態に遷移させることもできます。 Frame スタックアンワインド ライブラリが _UNW_step または _UNW_currentContext を使用して _Unwind_Context のプロセッサ状態の記録を生成または操作した状態です。クライアント は保存されていたレジスタ値のほとんどに対して有効な値を照会および取得します。 Frame 状態では、ほとんどのスクラッチレジスタ値は正しくありません。照会関数の使用 は、いかなる状態でも許可されますが、返された値の妥当性が保障されるのは、以下の 「照会」にリストされている状態のときのみであることに注意してください。 Frame 状態では、クライアントは _Unwind_Context の状態を Frame 状態または Bad 状態に する _UNW_currentContext を呼び出せます。また、クライアントは _Unwind_Context の 状態を Frame、 Bad、 Kernel_Bottom_Frame、または User_Sendsig_Frame に遷移させる _UNW_step を呼び出すこともできます。さらに、クライアントは _UNW_clear を呼び出す ことで _Unwind_Context を Init 状態に遷移させます。この他、クライアントは _UNW_destroyContext を呼び出して _Unwind_Context を Stop 状態に遷移させることもで きます。 User_Sendsig_Frame _Unwind_Context がラッパー関数のプロセッサ状態を示す状態です。ラッパー関数は、 ユーザーのシグナルハンドラーを呼び出すためにカーネルによって使用されます。 『Itanium Processor Family Runtime Architecture Supplement』の 「Signal Handling on HP-UX」を参 照してください。 User_Sendsig_Frame 状態では、クライアントは _Unwind_Context を Frame 状態または Bad 状態に遷移させる _UNW_currentContext を呼び出せます。また、ク ライアントは _Unwind_Context の状態を User_Interrupted_Frame 状態または Bad 状態に遷 移させる _UNW_step を呼び出すこともできます。さらに、クライアントは _UNW_clear を呼び出すことで _Unwind_Context を Init 状態に遷移させます。この他、クライアントは _UNW_destroyContext を呼び出して _Unwind_Context を Stop 状態に遷移させることもで きます。 User_Interrupted_Frame _Unwind_Context がシグナルによって割り込みを受けたユーザーコードを示す状態です。 この状態には、クライアントが保存されたレジスタだけでなく、スクラッチ分岐、スク ラッチ述部、スクラッチ浮動小数点、およびスクラッチ汎用レジスタの有効な値について も照会および取得を行うという独自の特性があります。 _UNW_step に対する一連の呼び出 しの間、 User_Interrupted_Frame 状態に関連付けられているフレームは User_Sendsig_Frame HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 5-479 unwind(5) unwind(5) 状態に関連付けられているフレームに追従します。 User_Interrupted_Frame 状態では、クライアントは _Unwind_Context を Frame 状態または Bad 状態に遷移させる _UNW_currentContext または _UNW_step を呼び出せます。さら に、クライアントは _UNW_clear を呼び出すことで _Unwind_Context を Init 状態に遷移さ せます。この他、クライアントは _UNW_destroyContext を呼び出して _Unwind_Context を Stop 状態に遷移させることもできます。 Kernel_Bottom_Frame カーネル呼び出しスタックの底を示す状態です。この状態にある間、クライアントは _UNW_getKernelSavedContext を使用できます。 _UNW_getKernelSavedContext(3X) を参照 してください。 Kernel_Bottom_Frame 状態では、クライアントは _Unwind_Context を Frame 状態または Bad 状態に遷移させる _UNW_currentContext または _UNW_step を呼び出せます。さら に、クライアントは _UNW_clear を呼び出すことで _Unwind_Context を Init 状態に遷移さ せます。この他、クライアントは _UNW_destroyContext を呼び出して _Unwind_Context を Stop 状態に遷移させることもできます。 Stop _Unwind_Context は破棄されました。 構築 構築は、 _UNW_createContextForSelf または、 _UNW_createContext を呼び出すことによって行われます。 _UNW_createContextForSelf は、プロセスが自身のスタックをアンワインドしようとする場合に使用されま す。 _UNW_createContext は、プロセスが別のプロセスのスタックまたはコアファイル内に保存されている異 常終了したプロセスのスタックをアンワインドする場合に使用されます。 _UNW_createContext(3X)、 _UNW_createContextForSelf (3X) および前述の 「アンワインド情報の受け渡しと検索」の 「コールバック」を 参照してください。 初期化 _Unwind_Context が Init 状態であるとき、クライアントの目的は、特定の時刻におけるプロセッサ状態のス ナップショットを _Unwind_Context に保存することです。スナップショットは、必要なレジスタ値のセットで 構成されています。レジスタ スタック エンジン (RSE) は、スナップショットが取られた時点でフラッシュさ れなくてはなりません。プロセッサの仕様の flushrs 命令を参照してください。 初期化は、 _Unwind_Context が Init 状態である間のみ許可されます。 書き込みは、汎用レジスタ 1−31、浮動小数点レジスタ、述部レジスタ、分岐レジスタ、 カレント フレーム マーカー (CFM)、 命令ポインター (IP)、および、一連のアプリケーションレジスタ、 _UNW_AR_RSC、 _UNW_AR_BSP、 _UNW_AR_BSPSTORE、 _UNW_AR_RNAT、 _UNW_AR_CCV、 _UNW_AR_UNAT、 _UNW_AR_FPSR、 _UNW_AR_ITC、 _UNW_AR_PFS、 _UNW_AR_LC に対して許可されています。特定の レジスタへの書き込みを行うことにより、 _Unwind_Context 内のその値の妥当性をチェックすることができま す。カレント フレーム マーカー (CFM) の値が妥当であれば、GR32 から GR32 + CFM.sof の範囲で、汎用レジ スタに対する書き込みも許可されます (目的がスナップショットプロシージャの RSE フレーム内の Itanium Section 5-480 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) ベース システム RSE のスタックされた汎用レジスタの初期化である場合)。 CFM へのセットは、GR32 から GR127 までの範囲の汎用レジスタを無効にします。 直後の _UNW_step() への呼び出しを成功させるには、上記の内、以下の値を初期化 (し、有効な値に) する必 要があります。 • 命令ポインター (IP)。 _UNW_setIP(3X) を参照してください。 • BR0 ∼ BR7 までの保存された分岐レジスタおよびスクラッチ分岐レジスタ。 • 保存された述部レジスタおよびスクラッチ述部レジスタ (PR1 ∼ PR63)。 • 一連のアプリケーションレジスタ、 _UNW_AR_RSC、 _UNW_AR_BSP、 _UNW_AR_BSPSTORE、 _UNW_AR_RNAT、および _UNW_AR_PFS 。 • GR1 ∼ GR31 までの範囲の汎用レジスタ。多くの汎用レジスタが「スクラッチ」汎用レジスタ であると考えられることに注意してください。スクラッチ汎用レジスタがクライアントによっ て初期化されていない場合でも、ほとんどのプロシージャはスクラッチレジスタに値を保存し ないので、直後の _UNW_step() 呼び出しは成功することが多くなります (が、保証はされませ ん)。 『IA-64 ソフトウェア規則およびランタイム・アーキテクチャ・ガイド』の表 11-13 で定 義されている汎用アンワインド記述子は、スクラッチレジスタ内に値を保存することをプロ シージャに対して許可しており、そのため、スクラッチ汎用レジスタであっても初期化する必 要があります。同じことがスクラッチ分岐、述部、および浮動小数点レジスタの場合にも当て はまります。 • 保存された浮動小数点レジスタおよびスクラッチ浮動小数点レジスタ。 • カレント フレーム マーカー (CFM)。 _UNW_setCFM(3X) を参照してください。 • カレント フレーム マーカーによって定義されるとおり、スナップショットプロシージャのフ レーム内のスタック汎用レジスタ。直前のバレットおよび _UNW_setCFM(3X) を参照してくだ さい。 ステップ _Unwind_Context は、初期化が完了すると、スナップショットプロシージャのプロセッサ状態を表します。ク ライアントは 先行ジョブのプロセッサ状態を表すために _Unwind_Context を修正する _UNW_step() を呼び出 します。 _UNW_step(3X) を参照してください。 照会 クライアントによるレジスタ値の照会は、すべての状態において許可されています。しかし、先に述べたよう に、戻り値の妥当性は特定のアクションの後でのみ保証されます。初期化されていないレジスタや不正である とマークされたレジスタを読み取ると、ゼロと同等の値 (浮動小数点レジスタの場合は 0.0、述部レジスタの場 合は列挙型 _UNW_Boolean の _UNW_FALSE) が返され、 _Unwind_Context の AlertCode は、 _UNW_QUERY_INVALID_ERROR に設定されます。 「エラー状態と復旧」を参照してください。汎用レジス タ、浮動小数点レジスタ、分岐レジスタ、アプリケーションレジスタ、または述部レジスタを定められた範囲 外の数で要求すると、ゼロに相当する値が返され、 _Unwind_Context の AlertCode は、 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 5-481 unwind(5) unwind(5) _UNW_QUERY_RANGE_ERROR に設定されます。 以下のリストは、それぞれのレジスタ値がどの API 呼び出しの後に有効であるかを示したものです。この「有 効性リスト」では、初期化のフェーズ (つまり、スタックアンワインド ライブラリが Init 状態であるとき) を 対象としていません。このフェースでは、クライアントが初期化した値のみが有効です。レジスタは、 『 IA-64 ソフトウェア規則およびランタイム・アーキテクチャ・ガイド』の5章で定義されているレジスタクラ ス別にリストされています。 constant GR0 常に有効です。 special GR1 (グローバルポインター) _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 scratch GR2−GR3、GR8−11 および GR14−GR31 シグナルハンドラーなどのユーザー空間における割り込み中の _UNW_step() の後にのみ有 効です。 preserved GR4−GR7 _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 special GR12 (スタックポインター) _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 special GR13 (スレッドポインター) _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 stacked GR32−127 (自動 RSE レジスタ) _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。注 記:カレントフレーム (CFM 値によって表されるもの) 内に存在する値のみが有効です。カ レントフレームの外部の値が照会されると、アラートコード _UNW_QUERY_RANGE_ERROR が設定されます。 constant FR0 および FR1 常に有効です。 preserved FR2−FR5 および FR16−FR31 _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 scratch FR6−FR15 および FR32−FR127 シグナルハンドラーなどのユーザー空間における割り込み中の _UNW_step() の後の User_Interrupted_Frame 状態の間のみ有効です。 constant P0 常に有効です。 Section 5-482 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) preserved PR1−PR5 および PR16−PR63 _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 scratch PR6−PR15 シグナルハンドラーなどのユーザー空間における割り込み中の _UNW_step() の後の User_Interrupted_Frame 状態の間のみ有効です。 scratch BR0 (リターンリンク) シグナルハンドラーなどのユーザー空間における割り込み中の _UNW_step() の後にのみ有 効です。 先行ジョブの命令ポインターは、BR0 から推測することはできません。 _UNW_step() を呼 び出して先行ジョブのフレームの _Unwind_Context を取得してから _UNW_getIP を使用し てください。 preserved BR1−BR5 _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 scratch BR6−BR7 シグナルハンドラーなどのユーザー空間における割り込み中の _UNW_step() の後の User_Interrupted_Frame 状態の間のみ有効です。 application register FPSR _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 automatic application register _UNW_AR_RNAT _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 preserved application register _UNW_AR_UNAT _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 special application register _UNW_AR_PFS _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 read-only application register _UNW_AR_BSP _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 special application register _UNW_AR_BSPSTORE _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 application register _UNW_AR_RSC _UNW_AR_RSC アプリケーションレジスタは、特殊なケースです。 _UNW_step() の実行 中、有効であるとマークされますが、更新は行われません。これは、この値がスクラッチ のみであり、読み取り専用であるためです。 HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 5-483 unwind(5) unwind(5) preserved application register _UNW_AR_LC _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。 scratch application register _UNW_AR_CCV シグナルハンドラーなどのユーザー空間における割り込み中の _UNW_step() の後にのみ有 効です。 Convenience value CFM _UNW_step および _UNW_currentContext からの戻りが正常であった後に有効です。ヒン ト:CFM (カレント フレーム マーカー) は、アーキテクチャ上は不可視です。スタックア ンワインド ライブラリは、この値にアプリケーションレジスタ AR.PFS と同一のレジスタ レイアウトを使用します。 再初期化のためのクリア クライアントは、 Bad、 Start、および Stop 以外のすべての状態から _UNW_clear() を呼び出せます。 _UNW_clear が正常終了すると、 _Unwind_Context オブジェクトは「構築直後」の状態であるように見えま す。 _Unwind_Context オブジェクト内のすべてのレジスタ値は無効になり、 Init 状態になります。 エラー状態と復旧 クライアントに _Unwind_Context の初期化中の範囲エラー、または _Unwind_Context オブジェクトに対して いくつかのアクションを実行した後のエラー状態発生の有無のチェックを簡単に実行させるため、2つの API 関数 _UNW_getAlertCode および _UNW_clearAlertCode が用意されています。 _UNW_getAlertCode() を使用すると、クライアントは、最後に Alert Code をクリアした後にインタフェース関 数によって返された (照会関数の場合は「検出された」)、最新の「クライアントが必要とする」 _UNW_ReturnCode を取得することができます。 「クライアントが必要とする」リターンコードは、列挙型 _UNW_ReturnCode の _UNW_OK を除くすべての 列挙子で表されています。 _UNW_clearAlertCode、 _UNW_clear、 _UNW_createContextForSelf()、および _UNW_createContext() はそれ ぞれ Alert Code を _UNW_OK にリセットしますが、 _UNW_clear、 _UNW_createContextForSelf()、および _UNW_createContext() は低メモリー状態の場合、Alert Code を _UNW_MEMORY_ALLOCATION_ERROR に 設定できます。 低メモリー状態 ほとんどの場合、 _Unwind_Context の構築に失敗すると、構築が失敗した場合に _UNW_MEMORY_ALLOCATION_ERROR を返す関数 _UNW_getAlertCode() への呼び出しをサポートするために十分な _Unwind_Context オブジェクトがクライアントに残されます。構築が正常終了すると、 _UNW_getAlertCode() は _UNW_OK を返します。構築の失敗は、 _Unwind_Context ポインターを NULL に設定することによって通 知される場合があります。 _Unwind_Context ポインターが NULL である場合、スタックアンワインド ライブ ラリのインタフェース関数のその後の呼び出しに対しては、 _UNW_MEMORY_ALLOCATION_ERROR が返 されます。 Section 5-484 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 unwind(5) unwind(5) _UWN_step() などのアクションの実行中にメモリーの割り当てに失敗すると、 _UNW_MEMORY_ALLOCATION_ERROR リターンコードが返され、 _Unwind_Context Alert Code が設定されます。 _Unwind_Context の 残りの状態は定義されていません。 リターンコードのセマンティック 列挙型 _UNW_ReturnCode にはいくつかのセマンティックが含まれています。 _UNW_OK の値は0です。ス タックアンワインド ライブラリがこれ以上ステップできないというスタックフレームを表すスタック境界に関 する状態には、負の値が割り当てられます。例えば、 _UNW_STEP_BOTTOM および _UNW_STEP_KERNEL_SAVE_STATE の値は負です。この列挙型に含まれるその他のすべての戻り値は正です。 HP 社は、この 列挙型にリターンコードを追加する権利を保有します。ただし、互換性を維持するため、将来のリリースにお いてもリターンコードの削除、および既存のリターンコードに割り当てられた値の変更は行われません。 参照 _UNW_createContextForSelf(3X)、 U_STACK_TRACE(3X)、 _UNW_getGR(3X)、 _UNW_currentContext(3X) HP-UX 11i Version 2: August 2003 − 14 − Hewlett-Packard Company Section 5-485 values(5) values(5) 名称 values − 機種に依存した 値 構文 #include <values.h> 説明 このファイルには特定のプロセッサアーキテクチャによって定義の異なる定数のうち、ユーザーに関係のある ものを収録しています。 ここで整数のモデルとしてはバイナリ表現 (つまり1または2の補数表現) を仮定します。この表現では符号は 最上位ビットの値によって表されます。 BITS(type) HIBITS 指定された型(例えば int)のビット数 最上位ビットだけがセットされたshort整数の値(大部分のインプリメン テーションでは0x8000) HIBITL 最上位ビットだけがセットされたlong整数 の値 (大部分のインプリメン テーションでは0x80000000) HIBITI 最上位ビットだけがセットされた普通の整数の値 (通常、HIBITS または HIBITL のどちらかと同じ値) MAXSHORT 符号付きの short整数の最大値 (大部分のインプリメンテーションでは 0x7FFF ≡ 32767) MAXLONG 符号付きの long整数の最大値 (大部分の インプリメンテーションでは, 0x7FFFFFFF ≡ 2147483647) MAXINT 符号付きの 普通の整数の最大値 (通常 MAXSHORT または MAXLONG の どちらかと同じ値) MAXFLOAT, LN_MAXFLOAT 単精度浮動小数点数の最大値と、その自然対数の値 MAXDOUBLE, LN_MAXDOUBLE 倍精度 浮動小数点 の最大値と、その自然対数の値 MINFLOAT, LN_MINFLOAT 単精度浮動小数点数の正の最小値とその自然対数の値 MINDOUBLE, LN_MINDOUBLE 倍精度浮動小数点数の正の最小値と、その自然対数の値 Section 5-486 FSIGNIF 単精度浮動小数点数の仮数部の有効ビット数 DSIGNIF 倍精度 浮動小数点数の仮数部の有効ビット数 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 values(5) values(5) ファイル /usr/include/values.h 参照 intro(3), math(5) 標準準拠 <values.h>: XPG2 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-487 varargs(5) varargs(5) 名称 varargs − 可変個の引き数リストの取り扱い 構文 #include <varargs.h> va_alist va_dcl void va_start(pvar) va_list pvar; type va_arg(pvar, type) va_list pvar; void va_end(pvar) va_list pvar; 説明 この一連のマクロはプログラマに移植可能な可変個の引き数リストを受け付けるプロシージャを書くことを可 能にします。可変個の引き数を持つ定期的な (例えば printf()) で varargs を使わないものは、異なったマシン では異なった引き数渡し規約を使っているため、本来移植不可能です ( printf (3S) を参照してください)。 va_alist は関数ヘッダでパラメータリストとして使われます。 va_dcl は va_alist の宣言です。 va_dcl の後にはセミコロンを付けてはいけません。 va_list はリストを走査していくために使われる変数用に定義された型です。 va_start は pvar を初期化するために、リストの最初で呼び出されます。 argN の型は、関数の引き数リストの 可変部分の直前の引き数と同じでなければなりません。 va_arg は pvar の指し示すリストの次の引き数を返します。 type は引き数に期待される型です。異なった型を 混ぜてもかまいませんが、どういう型の引き数が期待されているかを実行時に判別することはできませんの で、それを知ることはルーチンの責任です。 va_end は終了処理を行います。 va_start ... va_end, で囲って複数の操作を行うこともできます。 注記: <varargs.h> ヘッダーファイルは、ANSI 以前のコンパイラおよび HP C/HP-UX の以前のリリースとの互 換性を保つために提供されています。このファイルは、 varargs マクロをすべて含む <stdarg.h> に置き換えら れています。 例 次の 例は execl() の実現方法です (exec(2) を参照してください)。 #include <varargs.h> Section 5-488 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 varargs(5) varargs(5) #define MAXARGS 100 /* execl is called by execl(file, arg1, arg2, ..., (char *)0); */ execl(va_alist) va_dcl { va_list ap; char *file; char *args[MAXARGS]; int argno = 0; va_start(ap); file = va_arg(ap, char *); while ((args[argno++] = va_arg(ap, char *)) != (char *)0); va_end(ap); return execv(file, args); } 次の例は可変個の引き数を受け取る関数が、その引き数をどのように他の関数に渡すことができるかを示して います。これを実現するために、可変個の引き数リストを受け取る最初のルーチン(この例の log_errors()) が、 va_start() の返り値であるアドレスポインタを、同じ可変個の引き数リストにアクセスする必要のあるそれ以 降の呼び出しに渡してやることが必要です。このアドレスポインタを受け取るすべてのルーチン (この例では v_print_log()) は単に va_arg() を使えば、そのルーチンがあたかも可変個の引き数を渡された元のルーチンであ るかのように元の可変個の引き数リストにアクセスできます。 次の例では、他に同様のルーチン(例えば log_warning() や log_message()) があり、それらもまた v_print_log() 関数を呼び出しているという状況を想像することができます。 #include <stdio.h> #include <varargs.h> #include <unistd.h> int error_count; /* VARARGS4 -- for lint */ int log_errors(log_fp, func_name, err_num, msg_fmt, va_alist) FILE *log_fp; HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-489 varargs(5) varargs(5) char *func_name; int err_num; char *msg_fmt; va_dcl { va_list ap; /* Print error header information */ (void) fprintf(log_fp, "\nERROR in process %d\n", getpid()); (void) fprintf(log_fp, " function \"%s\": ", func_name); switch(err_num) { case ILLEGAL_OPTION: (void) fprintf(log_fp, "illegal option\n"); break; case CANNOT_PARSE: (void) fprintf(log_fp, "cannot parse input file\n"); break; ... } /* * Get pointer to first variable argument so that we can * pass it on to v_print_log(). We do this so that * v_print_log() can access the variable arguments passed * to this routine. */ va_start(ap); v_print_log(log_fp, msg_fmt, ap); va_end(ap); } /* VARARGS2 -- for lint */ int v_print_log(log_fp, fmt, ap) FILE *log_fp; Section 5-490 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 varargs(5) varargs(5) char *fmt; va_list ap; { /* * If "%Y" is the first two characters in the format string, * a second file pointer has been passed in to print general * message information to. The rest of the format string is * a standard printf(3S) format string. */ if ((*fmt == ’%’) && (*(fmt + 1) == ’Y’)) { FILE *other_fp; fmt += 2; other_fp = (FILE *) va_arg(ap, char *); if (other_fp != (FILE *) NULL) { /* * Print general message information to additional stream. */ (void) vfprintf(other_fp, fmt, ap); (void) fflush(other_fp); } } /* * Now print it to the log file. */ (void) vfprintf(log_fp, fmt, ap); } 警告 スタックフレームから引き数の個数を知ることは必ずしもできないため、それを指定するのは呼び出す側の ルーチンの責任です。例えば、 execl() ではリストの最後を知らせるためにゼロポインタが渡されています。 printf() はそのフォーマットからいくつの引き数があるかを判定することができます。 va_arg の引き数として char, short, や float を指定するのは移植性がよくありません。これは呼び出された関数 には引き数が char、 short、や float としては見えないからです。 C は関数に渡す前に char と short の引き数 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 5-491 varargs(5) varargs(5) を int に変換し、 float の引き数を double, に変換してしまいます。 参照 exec(2)、 vprintf(3S)、 stdarg(5) 標準準拠 va_alist: AES, SVID2, SVID3, XPG2, XPG3, XPG4 va_arg: SVID2, SVID3, XPG2, XPG3, XPG4 va_dcl: SVID2, SVID3, XPG2, XPG3, XPG4 va_end: SVID2, SVID3, XPG2, XPG3, XPG4 va_list: SVID2, SVID3, XPG2, XPG3, XPG4 va_start: SVID2, SVID3, XPG2, XPG3, XPG4 <varargs.h>: AES, SVID3, XPG2, XPG3, XPG4 Section 5-492 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 vps_ceiling(5) vps_ceiling(5) 名称 vps_ceiling − システムが選択できる最大ページサイズ (キロバイト) 値 デフォルト 16 KB 許容値 最小: 4KB 最大: 65536 KB 説明 TLB (Translation Lookaside Buffer) は、仮想メモリーのためのマイクロプロセッサの機能であり、物理アドレス から仮想アドレスへの変換で最新のものがすぐに再度必要になることが多いという予想の下に、これらの変換 がキャッシュされます。これは、プログラムでのアドレス参照の空間的および時間的な局所性の原則に基づく ものです。従来、TLB は完全にハードウェア内で管理され、処理速度が最適化されていましたが、その一方 で、ソフトウェアによる実現の柔軟性が犠牲になっていました。たとえば、アルゴリズムまたはテーブルの実 現方法は容易に変更できます。 近年、TLB をソフトウェアで実現することの柔軟性が、純粋なハードウェア処理速度よりも重視されるように なりました。特に、物理フレーム (そのサイズはハードウェアで固定されています) を「スーパーページ」また は「ラージページ」に論理的にグループ化するという考え方があります。これは、多くの物理フレームに対し て単一のベースアドレス変換を使用するソフトウェア TLB アルゴリズムで表現でき、ページフォルトによるサ イクル時間の損失が大幅に減少します (適度な空間的および時間的な局所性がある場合)。たとえば、各要素が 1KB のメモリーを必要とする配列を使用して動作する科学的アプリケーションを考えてみましょう。通常の 4KB の物理フレームサイズを使用して配列を順次参照すると、5番目の要素ごとにページフォルトが発生し ます。ページフォルトによって、ディスクまたはスワップからのページの読み込みが要求され、フレームベー スアドレス変換により TLB がロードされます。 ユーザーアプリケーションで、 chatr コマンドを使用してプログラムのテキストおよびデータセグメントの ページサイズを指定しない場合、カーネルはシステム構成およびオブジェクトサイズに基づいて自動的にペー ジサイズを選択します。次に、選択されたこのサイズは調整可能パラメータ vps_ceiling で定義されている最大 ページサイズと比較され、選択されたサイズの方が大きい場合は代わりに vps_ceiling が使用されます。次に、 この値は vps_pagesize で設定されている最小ページサイズと比較され、2つの値のうちの大きい方が使用され ます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-493 vps_ceiling(5) vps_ceiling(5) この調整可能パラメータの値を大きくする場合 この調整可能パラメータの値を増やすことができるのは、システムのプロセスが、通常の方法で、現在の値よ りも大きなデータ範囲にわたってテキストおよびデータにアクセスする場合です。たとえば、この調整可能パ ラメータが 16 KB に設定されているけれども、システムのほとんどすべてのプロセスが4つまたは5つの別個 の 256 KB のデータセットを使用して繰り返し作業する場合、調整可能パラメータの値を 256 に増やすと、こ れまでの 16 KB ページ 16 個分が1回の 256 KB の変換でアドレスできるため、これらのプロセスに関する ページフォルトが減少します。 平均的なシステムの動作で均一なメモリーアクセスが見られることはあまりなく、最適値の決定は容易ではな いため、この調整可能パラメータはカーネルヒューリスティックの上限値を表すにすぎず、実際のシステムの 動作は変化しない場合があります。 この値を大きくした場合の影響 vps_pagesize の値も増やした場合、またはカーネルヒューリスティックにより大きな値が選択された場合、メ モリーの割り当てには、より大きい、連続したページのグループが必要になります。これにより、望ましくな い動作が発生する可能性があります。たとえば、デフォルト値の場合、プログラムがディスクからコードの最 後の4KB を読み込むとき、実際はそこに4KB のデータのみがある場合であっても、16 KB の連続した物理メ モリーを見つけて、適切な仮想変換によってセットアップする必要があることになります。最大値の場合は、 プログラムが使用する新しい仮想ページごとに 64 メガバイトの連続した物理メモリーが割り当てられます。 これは、実際に使用されるのがそのうちの4KB のみであっても同様です。この場合、物理メモリーが無駄に なるだけでなく、断片化による遅延の問題も発生します。つまり、プロセスが実際に必要とするメモリー量が 使用可能であるときに、多数の連続したフレームの物理メモリーを使用できず、この割り当てを待ってプロセ スが停止するような場合です。 したがって、この調整可能パラメータの値を増やすのは、システムのメモリーの使用状況を正確に把握してい る場合のみにするのが最良です。一般に、1回のページフォルトのみで大量のデータをスキャンするデータ ベースなど、既知のアプリケーションについてアプリケーション単位で可変ページサイズを増やすのがよい方 法です。 この調整可能パラメータの値を小さくする場合 調整可能パラメータの値を減らす必要があるのは、物理メモリーの断片化によって、小さなメモリープロセス がメモリーの連続したチャンクを待つために実行が妨げられる場合、またはシステム全体のメモリーの使用状 況で空間的な位置取りが悪い (仮想アクセスが互いに近くない) ために物理フレームを無駄にしている場合で す。 この値を小さくした場合の影響 データベースなどのアプリケーションで、作業セットをメモリーに読み込むためにページフォルトが多く発生 するようになりますが、これは適切なアプリケーションで chatr を使用することにより処理できます。 同時に変更する必要がある他の調整可能パラメータ カーネルヒューリスティックの範囲の下限である vps_pagesize を考慮する必要があります。 Section 5-494 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 vps_ceiling(5) vps_ceiling(5) 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 vps_ceiling は HP で開発されました。 参照 vps_pagesize(5) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 5-495 vps_chatr_ceiling(5) vps_chatr_ceiling(5) 名称 vps_chatr_ceiling − ユーザーが選択できる最大ページサイズ (キロバイト) 値 デフォルト 1048576 (KB) 許容値 最小: 4(KB) 最大: 4194304 (KB) 説明 TLB (Translation Lookaside Buffer) は、仮想メモリーのためのマイクロプロセッサの機能であり、物理アドレス から仮想アドレスへの変換で最新のものがすぐに再度必要になることが多いという予想の下に、これらの変換 がキャッシュされます。これは、プログラムでのアドレス参照の空間的および時間的な局所性の原則に基づく ものです。従来、TLB は完全にハードウェア内で管理され、処理速度が最適化されていましたが、その一方 で、ソフトウェアによる実現の柔軟性が犠牲になっていました。たとえば、アルゴリズムまたはテーブルの実 現方法は容易に変更できます。 近年、TLB をソフトウェアで実現することの柔軟性が、純粋なハードウェア処理速度よりも重視されるように なりました。特に、物理フレーム (そのサイズはハードウェアで固定されています) を「スーパーページ」また は「ラージページ」に論理的にグループ化するという考え方があります。これは、多くの物理フレームに対し て単一のベースアドレス変換を使用するソフトウェア TLB アルゴリズムで表現でき、適度な空間的および時間 的な局所性がある場合はページフォルトによるサイクル時間の損失が大幅に減少します。たとえば、各要素が 1KB のメモリーを必要とする配列を使用して動作する科学的アプリケーションを考えてみましょう。通常の 4KB の物理フレームサイズを使用して配列を順次参照すると、5番目の要素ごとにページフォルトが発生し ます。ページフォルトによって、ディスクまたはスワップからのページの読み込みが要求され、フレームベー スアドレス変換により TLB がロードされます。 この調整可能パラメータは、バイナリ上で chatr コマンドを使用して設定するのと同様に、ユーザーアプリ ケーションが要求する仮想ページサイズの上限を設定します。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 この調整可能パラメータの値を大きくする場合 この調整可能パラメータの値を増やす必要があるのは、大きなメモリーセットを使用することが分かっている ユーザーアプリケーション (データベースなど) が、現在値で許容されるよりも大きいページを必要とすること が予想される場合です。 Section 5-496 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vps_chatr_ceiling(5) vps_chatr_ceiling(5) この値を大きくした場合の影響 副作用は、chatr を実行したアプリケーションの実際のメモリー使用状況や、システムの多くのユーザーが適切 な理由なしにアプリケーションで chatr を実行しているかどうかに依存します。最初のケースは、アプリケー ションがメモリーをまばらなパターンで使用する場合や、一般にはかなり小さい作業セットを使用する場合 に、誤ってアプリケーションが大きなページサイズ (512 MB 以上) を使用するように chatr を実行したケース です。たとえば、アプリケーションが合計で 64KB のメモリーのみを必要とするシェルスクリプトを使用する 場合や、アプリケーションが使用する科学的なスパース配列解析プログラムが、大きなデータセットを作業対 象としていても、そのデータの非常に小さい部分でのみ作業し、残りの部分はスワップアウトするか割り当て なくてもよいような場合です。このアプリケーションのためにこのような値を設定すると、大きな仮想ページ のいずれかがコアメモリーにあり、そのすべてがそこに存在しなければならない場合、物理メモリーの複数の フレームが無駄になります。これは、大きな仮想ページは連続した物理フレームで構成される必要があり、常 に希望の量が使用可能であるとは限らず、不要な割り当てによる遅延が発生することがあるためです。 2つめのケースは、複数のユーザーが適切な理由なしにアプリケーションで chatr を実行しているケースで す。この調整可能パラメータを小さくしておくと、システムの他の部分でのヒットのパフォーマンスが最小に なります。 この調整可能パラメータの値を小さくする場合 どのユーザーアプリケーションも現在の調整可能パラメータの値のサイズの大きなページを実際には必要とし ない場合に、誤りまたは悪意のあるユーザーによってアプリケーションで chatr が使用されたときに物理フ レームが無駄になる可能性を最小にするために、この調整可能パラメータの値を減らす必要があります。 この値を小さくした場合の影響 唯一の影響は、アプリケーションが小さなページサイズを使用して実行しなければならないことです。 同時に変更する必要がある他の調整可能パラメータ ありません。 警告 HP-UX の調整可能なカーネルパラメータはすべてリリースに固有です。このパラメータは将来の HP-UX リ リースで削除されるか、意味が変更される場合があります。 著者 vps_chatr_ceiling は HP で開発されました。 参照 chatr(1) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-497 vps_pagesize(5) vps_pagesize(5) 名称 vps_pagesize − システムによって選択されるページサイズの最小値 (キロバイト) 値 デフォルト 4 (KB) 許容値 最小値: 4 (KB) 最大値: 65536 (KB) 説明 TLB (Translation Lookaside Buffer) は、仮想メモリーのためのマイクロプロセッサの機能であり、物理アドレス から仮想アドレスへの変換で最新のものがすぐに再度必要になることが多いという予想の下に、これらの変換 がキャッシュされます。これは、プログラムでのアドレス参照の空間的および時間的な局所性の原則に基づく ものです。従来、TLB は完全にハードウェア内で管理され、処理速度が最適化されていましたが、その一方 で、ソフトウェアによる実現の柔軟性が犠牲になっていました。たとえば、アルゴリズムまたはテーブルの実 現方法は容易に変更できます。 近年、TLB をソフトウェアで実現することの柔軟性が、純粋なハードウェア処理速度よりも重視されるように なりました。特に、物理フレーム (そのサイズはハードウェアで固定されています) を「スーパーページ」また は「ラージページ」に論理的にグループ化するという考え方があります。これは、多くの物理フレームに対し て単一のベースアドレス変換を使用するソフトウェア TLB アルゴリズムで表現でき、適度な空間的および時間 的な局所性がある場合はページフォルトによるサイクル時間の損失が大幅に減少します。たとえば、各要素が 1KB のメモリーを必要とする配列を使用して動作する科学的アプリケーションを考えてみましょう。通常の 4KB の物理フレームサイズを使用して配列を順次参照すると、ページフォルトによって、ディスクまたはス ワップからのページの読み込みが要求され、フレームベースアドレス変換により TLB が5要素ごとにロードさ れます。 ユーザーアプリケーションで、 chatr コマンドを使用してプログラムのテキストおよびデータセグメントの ページサイズを指定しない場合、カーネルはシステム構成およびオブジェクトサイズに基づいて自動的にペー ジサイズを選択します。次に、選択されたこのサイズは調整可能パラメータ vps_ceiling で定義されている最大 ページサイズと比較され、選択されたサイズの方が大きい場合は代わりに vps_ceiling が使用されます。次に、 この値は vps_pagesize で設定されている最小ページサイズと比較され、2つの値のうちの大きい方が使用され ます。 この調整可能パラメータの変更を行う対象ユーザー すべてのユーザー。 変更に関する制限事項 この調整可能パラメータの変更は、次回リブート時に有効になります。 Section 5-498 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vps_pagesize(5) vps_pagesize(5) この調整可能パラメータの値を大きくする場合 この調整可能パラメータの値を増やすことができるのは、システムのプロセスが、通常の方法で、現在の値よ りも大きなデータ範囲にわたってテキストおよびデータにアクセスする場合です。たとえば、この調整可能パ ラメータが 16 KB に設定されているけれども、システムのほとんどすべてのプロセスが4つまたは5つの別個 の 256 KB のデータセットを使用して繰り返し作業する場合、調整可能パラメータの値を 256 に増やすと、こ れまでの 16 KB ページ 16 個分が1回の 256 KB の変換でアドレスできるため、これらのプロセスに関する ページフォルトが減少します。 平均的なシステムの動作で均一なメモリーアクセスが見られることはあまりなく、最適値の決定は容易ではな いため、この調整可能パラメータはカーネルヒューリスティック用の低い値を表すにすぎず、実際のシステム の動作は変化しない場合があります。 この値を大きくした場合の影響 カーネルヒューリスティックがより大きな値をまだ選択していないため、メモリーアロケーションには隣接 ページの大きなグループが必要になります。 大きな仮想ページを要求すると、システムが誤動作するおそれがあります。これは特に、データやコードの小 さな、あるいは断片的なセットを持つ多数のプロセスがアクティブな場合にあてはまります。アプリケーショ ンで参照されるすべての仮想ページが、そのページの実際の使い方に関係なく、メモリーの隣接した物理フ レームの全体的なページ動作を必要とします。たとえば、大きな仮想ページの半分だけをスワップアウトする ことはできません。多数のフレームを連続させることは、常に可能とは限らず、必要性の低いアロケーション ではメモリーストールが発生する可能性があります。さらに、このような場合に物理フレームを浪費すると、 スワップの使用量が増え、さらにはシステムパフォーマンスが低下する可能性があります。 この調整可能パラメータの値を小さくする場合 調整可能パラメータの値を減らす必要があるのは、物理メモリーの断片化によって、小さなメモリープロセス がメモリーの連続したチャンクを待つために実行が妨げられる場合、またはシステム全体でのメモリーの使い 方に空間的局所性が乏しい (仮想アクセスが互いに近接していない) ために物理フレームを浪費している場合で す。 この値を小さくした場合の影響 vps_ceiling の値も同様に小さくすると、大きなデータセットを持つアプリケーション (たとえば、データベー ス) において、ページフォルトが増えるためにパフォーマンスが低下する可能性があります。これは、該当す るアプリケーションに対して chatr を使用することによって解決できます。 vps_ceiling を変更しない場合、 カーネルが個々の chatr を行っていないアプリケーションの適切なページサイズを選択する範囲が広がるた め、影響は最小限にとどまります。 同時に変更する必要がある他の調整可能パラメータ カーネルヒューリスティックの範囲の下限である vps_ceiling について、変更を検討する必要があります。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-499 vps_pagesize(5) vps_pagesize(5) 著者 vps_pagesize は、HP で開発されました。 参照 vps_ceiling(5) Section 5-500 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 vxfs_bc_bufhwm(5) vxfs_bc_bufhwm(5) 名称 vxfs_bc_bufhwm − VxFS バッファーキャッシュの上限値 (VxFS バッファーキャッシュサイズの指定) 構文 /usr/bin/kctune -s vxfs_bc_bufhwm={maximum size of buffer cache} 値 整数値を指定します。 最小値 6144 KB 最大値 None デフォルト 0 説明 ファイルデータをキャッシュする HP-UX カーネルのバッファーキャッシュに加えて、VxFS は頻繁にアクセス されるファイルシステムのメタデータのためにバッファーキャッシュをカーネル内に保持します。調整パラ メータ vxfs_bc_bufhwm は、VxFS バッファーキャッシュのサイズ、すなわち、VxFS メタデータのキャッシュ に使用されるメモリの最大値を指定します。 システムメモリー量をもとに計算されたデフォルト値により、多様なアプリケーションが縦断するシステムの 優れたパフォーマンスが保証されます。 vxfs_bc_bufhwm の値は KB 単位で表されます。システム上のファイルシステムメタデータを頻繁に変更する アプリケーションの負荷を改善するために (例えば、頻繁にファイルを作成したり削除したりする場合や大規 模なディレクトリにアクセスする場合)、 vxfs_bc_bufhwm の値を変更します。 注記 バッファーキャッシュの統計値や iノードキャッシュの使用状況をモニターするために vxfsstat コマンドを使 用します。 例 バッファーキャッシュの最大値を 300000 に設定します。 # kctune -s vxfs_bc_bufhwm=300000 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 参照 kctune(1M), vxfsstat(1M), vx_maxlink(5), vx_ninode(5), vxfs_ifree_timelag(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-501 vxfs_ifree_timelag(5) vxfs_ifree_timelag(5) 名称 vxfs_ifree_timelag − VxFS の iノードが開放されるまでのタイムラグ (freelist に iノードが残存する時間の下限値 を指定) 構文 /usr/bin/kctune -s vxfs_ifree_timelag={value} 値 整数値を指定します。 最小値 None 最大値 None デフォルト 0 説明 VxFS では、未使用の iノードは freelist に加えられ、一定時間が経過すると、その未使用のメモリースペース は開放されます。すなわち、調整パラメータ vxfs_ifree_timelag で設定した時間が経過すると、freelist に含ま れる iノードのメモリースペースは開放される可能性があるということです。時間は秒単位で表されます。 vxfs_ifree_timelag は、動的な調整パラメータなので、いかなる変更も即時に有効になります。 例 vxfs_ifree_timelag の値を 2400 秒に変更します。 # kctune -s vxfs_ifree_timelag=2400 警告 vxfs_ifree_timelag の調整が正しくない場合はシステムパフォーマンスに悪影響を及ぼすことがあります。 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 参照 kctune(1M), vx_maxlink(5), vx_ninode(5), vxfs_bc_bufhwm(5) Section 5-502 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vxfs_max_ra_kbytes(5) vxfs_max_ra_kbytes(5) 名称 vxfs_max_ra_kbytes − 単一 VxFS ファイルシステムにおいてカーネルが未処理のままにしておける先読みデータ の最大量 (KB) 説明 この調整パラメータ vxfs_max_ra_kbytes は、他の "先読み" 調整パラメータ vxfs_ra_per_disk や vx_fancyra_enable と共に、HP-UX 11i Version 2 で廃止され、代わりにファイルシステムの調整パラメータ read_ahead が使用されるようになりました。 VxFS ファイルシステムの調整パラメータの詳細については、 vxtunefs(1M) を参照してください。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 vxfs_max_ra_kbytes は、HP で開発されました。 参照 hfs_max_ra_blocks(5)、 hfs_max_revra_blocks(5)、 hfs_ra_per_disk(5)、 hfs_revra_per_disk(5)、 vxfs_max_ra_kbytes(5)、 vxfs_ra_per_disk(5) VERITAS File System 3.5 Release Notes HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-503 vxfs_ra_per_disk(5) vxfs_ra_per_disk(5) 名称 vxfs_ra_per_disk − VxFS ファイルシステムのディスクごとの先読み量 (KB) 説明 この調整パラメータ vxfs_ra_per_disk, は、他の "先読み" 調整パラメータ vxfs_max_ra_kbytes や vx_fancyra_enable と共に、HP-UX 11i Version 2 で廃止され、代わりにファイルシステムの調整パラメータ read_ahead が使用されるようになりました。 VxFS ファイルシステムの調整パラメータの詳細については、 vxtunefs(1M) を参照してください。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 vxfs_ra_per_disk は、HP で開発されました。 参照 hfs_max_ra_blocks(5)、 hfs_max_revra_blocks(5)、 hfs_ra_per_disk(5)、 hfs_revra_per_disk(5)、 vxfs_max_ra_kbytes(5)、 vxfs_ra_per_disk(5) VERITAS File System 3.5 Release Notes Section 5-504 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vx_maxlink(5) vx_maxlink(5) 名称 vx_maxlink − ファイルのリンク数を設定 構文 /usr/bin/kctune -s vx_maxlink={maximum number of links to a file} 値 整数値を指定します。 最小値 0 最大値 65534 デフォルト 32767 説明 調整パラメータ vx_maxlink は、VxFS ファイルシステムにおけるファイルのリンク数を設定します。 vx_maxlink は、システムのブート時に初期化されるので、この調整パラメータの変更は、次回リブート時から 有効になります。 例 ファイルのリンク数の最大値を 40000 に設定します。 # kctune -s vx_maxlink=40000 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 参照 kctune(1M), vx_ninode(5), vxfs_bc_bufhwm(5), vxfs_ifree_timelag(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-505 vx_ncsize(5) vx_ncsize(5) 名称 vx_ncsize − VxFS ファイルシステムが使用するディレクトリパス名キャッシュのために確保されるバイト数 説明 この調整パラメータ vx_ncsize は、HP-UX 11i Version 2 以降のリリースで廃止されました。 VxFS/JFS 3.5 で は、DNLC (Directory Name Lookup Cache) の実装が変更され、独自の DNLC を使用するようになりました。 カーネル調整パラメータ ncsize は、VxFS/JFS 3.5 の DNLC には影響しません。詳細については、リリースノー トを参照してください。 警告 HP-UX のすべての調整可能カーネルパラメータは、リリースごとに異なります。このパラメータは、HP-UX の今後のリリースにおいて、削除されるか、意味が変わる可能性があります。 著者 vx_ncsize は、HP で開発されました。 SEE ALSO VERITAS File System 3.5 Release Notes Section 5-506 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vx_ninode(5) vx_ninode(5) 名称 vx_ninode − 内部ノードのテーブルサイズの指定 構文 /usr/bin/kctune -s vx_ninode={size} 値 整数値を指定します。 最小値 0 最大値 None デフォルト 1024 説明 VxFS ファイルシステムは、iノードテーブルに iノードをキャッシュします。調整パラメータ vx_ninode は、 VxFS のキャッシュに利用される iノードテーブル内の iノード数を指定します。この静的な調整パラメータ vx_ninode は、システムのブート時に初期化されます。したがって、この調整パラメータの変更は次回ブート 時の間にしか有効になりません。 例 vx_ninode の値を 1000000 に変更します。 # kctune -s vx_ninode=1000000 警告 HP-UX のカーネル調整パラメータはすべて、リリースごとに異なります。このパラメータは、HP-UX の今後 のリリースにおいて、削除されたり機能が変更される可能性があります。 参照 kctune(1M), vx_maxlink(5), vxfs_bc_bufhwm(5), vxfs_ifree_timelag(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 5-507 xferlog(5) xferlog(5) 名称 xferlog − FTP サーバのログファイル 構文 /var/adm/syslog/xferlog 説明 xferlog ファイルには、FTP サーバデーモン ftpd ( ftpd(1M) を参照) のログ情報が格納されます。このファイル は /var/adm/syslog にあります。各サーバエントリーは次の形式の 1 行で構成され、各フィールドは空白で区切 られています。 current-time transfer-time remote-host file-size filename transfer-type special-action-flag direction access-mode username service-name authentication-method authenticated-user-id completion-status "DDD MMM dd hh:mm:ss YYYY" の形式の現在のローカル時刻。 DDD は曜日、MMM current-time は月、dd は日、hh は時、mm は分、ss は秒、YYYY は年を表します。 transfer-time 転送の総秒数。 remote-host リモートホスト名。 file-size 転送されたファイルのサイズ (バイト数)。 filename 転送されたファイルの名前。 転送のタイプを示す1文字。次のいずれかになります。 transfer-type special-action-flag a ASCII 転送 b バイナリ転送 特殊な動作の実行を示す 1 つ以上の文字。次のいずれかになります。 C direction access-mode ファイルは圧縮された U ファイルは圧縮解除された T ファイルは tar でアーカイブされた _ 動作は行われていない 転送の方向。次のいずれかになります。 o 送信 i 受信 ユーザーがログインした方法。次のいずれかになります。 a g (anonymous) 匿名ゲストユーザー (guest) パスワードで保護されたゲストユーザー ( ftpaccess(4) の guestgroup コ マンドを参照)。 r username Section 5-508 (real) 認証されたローカルユーザー ローカルなユーザー名、または付与された ID 文字列 (ゲストの場合)。 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 xferlog(5) service-name xferlog(5) 起動されたサービス名。通常は FTP です。 authentication-method 使用された認証方式。次のいずれかになります。 authenticated-user-id 0 なし 1 RFC931 認証 認証システムから返されたユーザー ID。認証されたユーザー ID が使用できない場 合、* が使用されます。 completion-status 転送のステータスを示す1文字。次のいずれかになります。 c 完全な転送 i 不完全な転送 ファイル /usr/adm/syslog/xferlog 著者 xferlog はミズーリ州セントルイスのワシントン大学で開発されました。 参照 ftpd(1M), ftpaccess(4), syslog(3C) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 5-509 ノート Section 5-510 Hewlett-Packard Company HP-UX 11i Version 2: August 2003 セクション 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: August 2003 −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: August 2003 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: August 2003 /* 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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 クローンアクセス 119 0xX 非クローンアクセス /dev/dlpiX c デバイスドライバ向けの注意事項 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 には ATM、Hyper Fabric などの特殊なテクノロジでの使用を目的としてさまざまな DLPI インプリメン テーションが存在しますが、LAN クラスドライバ (密結合) をサポートする DLPI は、このマンページで説明 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-35 dlpi(7) dlpi(7) したものです。 著者 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 gang_sched(7) • gang_sched(7) 新しいギャングが、子プロセスのために形成されます。子プロセスは親プロセスのギャングの一部 にはなりません。 ギャングスケジューラが動作するのは、ギャングが複数のスレッドから成るときだけです。 pthread アプリ ケーションに対しては、2 番目のスレッドが作成されたときに動作します。 MPI アプリケーションに対して は、2 番目のプロセスが追加されたときに動作します。 プロセスによりスレッドが作成されたとき、そのプロセスにギャングスケジューリングが可能であれば、新し いスレッドはプロセスのギャングに追加されます。しかし、ギャングのサイズがシステムのプロセッサの数と 等しくなると、以下のことが生じます。 • 新しいスレッドあるいはプロセスは、ギャングに追加されません。 • ギャングはそのままで、ギャングスケジューリングが継続されます。 • 過剰なスレッドは通常のタイムシェアリング方式でスケジュールされます。 • ギャング内のスレッドが終了しても (従って空き領域ができても)、過剰なスレッドはギャングに追 加されません。しかし、空き領域が作成された時に、新しく作成されたスレッドが追加されます。 MPI プロセスは、実行初期に静的に割り当てられます。 MP_GANG が ON に設定された場合、MPI アプリ ケーション内のプロセスすべてが同じギャングの一部になります。 ギャングのスレッドとプロセスの優先順位は、タイムシェアリング方式で等しく管理されます。タイムシェア リング優先順位スケジューラは、いつギャングをスケジュールするかを決定し、タイムシェアリング方式を遵 守します。 ギャングをスケジュールすると、複数の、より高い優先順位のタイムシェアスレッドを処理するように見えま すが、結局はギャングスケジューラの方式はおおむね公平です。ギャングのスレッドはすべて、ギャングがス ケジュールされるまでは、最も高いプライオリティにあります。ギャングのスレッドはすべて同時に実行され る必要があるため、最も高いプライオリティを持つ場合、いくつかのスレッドは実行されません ( スレッド は、他のすべてのスレッドが選択されるまで待ち、他のプロセスを先に実行させなければなりません)。 ギャングは、1つのタイムスライスに対しスケジュールされます。タイムスライスは、ギャングスケジュール されているかどうかにかかわらず、すべてのスレッドに対して同じです。 システムでひとつのギャングが実行されたとき、ギャングのスレッドはシステムのプロセッサに割り当てられ ますが、別のプロセッサに移行されることはありません。 複数のギャングを持ち、利用者が過剰なシステムでは、それぞれ異なるスレッドの CPU 時間を同じ割合にす るために、すべてのギャングが定期的に移動します。この再平均化は、数秒ごとに生じます。 多言語化対応 環境変数 以下の環境変数はプロセスのギャングスケジュールに作用します。 HP-UX 11i Version 2: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 iomap(7) iomap(7) ここで fildes はデバイス特殊ファイルの開いているファイル記述子で、 REQUESTED_ADDRESS は最初にプ ログラムで要求されたアドレスです。 addr がnull ポインターである場合、システムは適切なアドレスを選択し、それから選択したアドレスを addr に返します。 addr の値がnullポインターではない場合、それはメモリを割り当てるための指定されたアドレスとして使用さ れます。指定されたアドレスが使用不可能な場合、エラーが返されます( 「エラー」を参照)。 参照 mknod(1M) HP-UX 11i Version 2: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −2− InBuffer; InBufferLength; OutBuffer; Hewlett-Packard Company Section 7-79 ipmi(7) ipmi(7) DWORD ptr32_t ptr32_t int OutBufferLength; BytesReturned; 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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 の各ビットは次のモデム回線のどれかに相当します。 lf4 l l . MRTS Ready Request to Send inbound MDCD MRI outbound MCTS Data Carrier Detect Ring Indicator inbound MDRS Clear to Send inbound MDTR Data Rate Select inbound MDSR Data Set Data Terminal Ready outbound outbound タイマの値は、配列m_timersで定義されています。タイマの相対的な位置、デフォルトの初期値、および各タ イマの単位は次の通りです。 lll. 0 ITY MTCONNECT 0 min 3 25 s 1 MTHANGUP MTCARRIER 250 ms 4 400 ms 2 Reserved 5 MTNOACTIVReserved どのタイマでも、値を0にするとそのタイマは使用不能にになります。 モデム回線 ioctl システムコールは次の形式をしています。 int ioctl(int fildes, int command, mflag *arg); この形式で使用されるコマンドは以下のとおりです。 MCGETA 着信したモデム回線、発信したモデム回線両方の現在の状態を取得し、 arg の参照し ているlong型 mflag に格納します。上げられた回線は、適当な位置にある1ビットで 示されます。 MCSETA arg の参照しているlong型 mflag から発信したモデム回線を設定します。発信した ビットを1にセットするとその回線は上げられ、 0にセットするとその回線は下げら れます。着信した回線のビットをセットしても影響はありません。 CCITTモードでど HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 7-107 modem(7) modem(7) のビットをセットしても影響はありません。モデム回線に対する変更はすぐに行わ れ、文字がまだ出力されている間にこの形式を使用すると、思いがけない結果が生じ ることがあります。 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 は、正数の引き数を渡し、その正数の各ビットの定義がモデム回線のひとつに、以下のように対応しま す。 lf4 l l l. TIOCM_RTS Send TIOCM_CAR Ready Request to Send inbound TIOCM_DSR Data Carrier Detect outbound TIOCM_CTS Data Set Ready inbound TIOCM_DTR outbound TIOCM_RNG Ring Indicator Clear to inbound Data Terminal inbound さらに、 TIOCM_CD は TIOCM_CAR と同等で、 TIOCM_RI は TIOCM_RNG と同等です。 モデム回線の ioctl システムコールは次の形式を持っています。 int ioctl(int fildes, int command, int *arg); この形式を使うコマンドは、以下のとおりです。 TIOCMGET インバウンドとアウトバウンドの両方のモデム回線の現在の状態を獲得し、それを arg で参照される int に入れます。レイズされた回線は、所定の位置にある1ビットに よって示されます。 Section 7-108 TIOCMSET アウトバンドのモデム回線を arg で参照される int に従って設定します。 TIOCMBIS arg で参照される int の対応するビット位置により指定される制御回線を上げます。 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 modem(7) modem(7) 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 カードはまだ内部バッファに文字を蓄えていることがあり、それを転送しようとします。 著者 modem はHPおよびAT&Tで開発されました。 ファイル /dev/cua* /dev/cul* /dev/tty* /dev/ttyd* 参照 stty(1)、 mknod(1M)、 ioctl(2)、 open(2)、 termio(7) HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 7-109 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 に固有のオプションは、後述の「制約」の項にまとめてあります。 Section 7-110 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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 にしたときにの み、圧縮が可能です。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-111 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あるいはファ イルマークにすでに到達していなければ)。バークレースタイルのデバイスでは、いずれにしてもテープの再移 動は行われません。 Section 7-112 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 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> に、テープ操作に関する有用な情報が入っています。下のリストは、 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 7-113 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 */ Section 7-114 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 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) GMT_EOD(x) テープの先頭でTRUEを戻します。 DDS、QICあるいは8MMに対して、End-of-Dataに出会ったときに TRUEを戻します。 GMT_EOF(x) HP-UX 11i Version 2: August 2003 End-of-FileマークでTRUEを戻します。 −6− Hewlett-Packard Company Section 7-115 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を戻します。 Section 7-116 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 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を戻します。 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 7-117 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バイト以上) ですから、通常は問題になりません。 Section 7-118 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 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 */ } HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 7-119 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) コマンドを使ってください。そうしないと、属性 Section 7-120 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 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として参照されます。 HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 7-121 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 Section 7-122 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 ndp(7P) ndp(7P) 名称 NDP − 近隣探索プロトコル 説明 NDP (Neighbor Discovery Protocol) は、以下の目的でホストおよびルーターによって使用されます。 1. 同一のリンクに接続されていることが既知である近隣のリンク層アドレスを検索します。 2. 自身の代わりにパケットを転送してくれる近隣のルーターを検索します。 3. 近隣が到達可能であるか不可能であるかを常にトラッキングします。 4. ルーターへのパスに障害が発生したとき、代替ルーターを検索します。 上記のタスクを遂行するため、 NDP では以下の処理を定義しています。 1. ルーターおよびプレフィックスの探索 ルーターの探索は、ホストが近隣のルーターを探し、プレフィックスや、アドレスの自動構成に必要なその 他のパラメータを取得するプロセスです。 プレフィックスの探索は、リンク上に存在し、ルーターを経由せずに到達可能な IPv6 アドレスの範囲をホ ストが取得するプロセスです。 ルーターはルーター通知を送信して、ホストにデフォルトルーターとして認識させます。また、ルーター通 知には、オンリンクの IPv6 アドレス (サブネットプレフィックス) の範囲を識別するプレフィックス情報オ プションが含まれています。 2. ルーターおよびホストの要件 NDP におけるルーターの要件には、ホストをルーターとして動作させるための以下のような一連の規則が 指定されています。 • ルーター構成変数 これらの構成変数には、連続的な非送信請求ルーター通知の再送間隔などが含まれます。 • インタフェース、通知インタフェースの作成方法 インタフェースを通知インタフェースにすると、そのノードは定期的にルーター通知を送信し、リンク 上のホストの代わりにパケットを転送することになります。 • ルーター通知のメッセージコンテンツ ルーターは、通知インタフェースを使用して送信請求のみでなく定期的なルーター通知を送信します。 NDP では、これらのメッセージの形式を指定しています。 • 非送信請求ルーター通知の送信 ルーター送信請求に対する応答としてのルーター通知とは別に、ルーターは非送信請求ルーター通知を 送信することができます。例えば、非送信請求ルーター通知は、プレフィックスを期限切れにしたり、 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 7-123 ndp(7P) ndp(7P) 新しいプレフィックスを通知するためなどに送信されます。 • インタフェース上のルーター通知の停止 ルーターは、インタフェース上でプレフィックスの通知を停止することができます。ルーターがルー ターとしての機能を停止するときに、システム管理上の判断としてこのような場合がありえます。 NDP では、このような場合にルーターが実行すべき事柄が指定されています。 • ルーター要請メッセージの処理 ステートレス自動構成プロセスの一部として、ホストはルーター要請を送信します。ルーターはこのよ うな請求に対して、ルーター通知で応答します。 • ルーターのリンクローカルアドレスを変更する場合の手順 通常、ルーターのリンクローカルアドレスは変更しません。しかし NDP では、ルーターのインタ フェースのいずれかのリンクローカルアドレスを変更する場合に、ルーターで行わなければならない手 順が定義されています。 ホストの要件は、IPv6 ホストに適用される以下のような一連の規則です。 • 保守する必要がある IPv6 変数 保守する必要がある IPv6 変数には、近隣請求の再送の間隔、各インタフェースのリンク MTU などがあ ります。 • ルーター通知の処理 この規則では、ルーター通知を受信した場合に行うべきアクションについて記述されています。 • 存続期間を超過するプレフィックスとデフォルトルーター ルーターが送信するルーター通知には、ルーターとルーターが通知するプレフィックスの存続期間が常 に含まれています。 NDP では、このような存続期間を超過したときにホストが実行すべきアクション を指定しています。 • デフォルトルーターの選択 リンク内に複数のルーターが存在する場合、デフォルトルーター選択アルゴリズムが重要になります。 このアルゴリズムでは、到達性などの要因に基づいてデフォルトルーターを選択します。 • ルーター要請の送信 インタフェースを有効にするとき、ホストは非送信請求ルーター通知を待機する必要はありません。ホ ストはルーター要請を送信し、応答としてルーター通知を受信します。これにより、インタフェースが 有効になるとすぐにデフォルトルーターおよびプレフィックスの情報を受信することができます。 3. パケット送信のアルゴリズム Section 7-124 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ndp(7P) ndp(7P) すべての IPv6 ホストは、パケットを送信するためのアルゴリズムで使用される特定のデータ構造を保守し なくてはなりません。このようなデータ構造には、以下のものがあります。 近隣キャッシュ 最近パケットの送信先となった近隣の IPv6 アドレスとリンク層アドレスのマッピングを保守するエント リーのセットです。また、到達性の状態など、近隣到達不能検知に必要な情報も保守します。 宛先キャッシュ 最近パケットの送信先となったホストのエントリーのセットです。オンリンクのホストとオフリンクの ホストの両方が含まれます。近隣キャッシュへの間接参照のレベルも含まれます。 プレフィックスリスト オンリンクの IPv6 アドレスのセットを定義するプレフィックスのリストです。この情報は、インタ フェース別に保守されます。このリストは、通常、ルーターから受信したルーター通知から作られま す。 デフォルトルーターリスト このホストの代わりにパケットを転送するルーターのリストです。このリストにもそれぞれのルーター の近隣キャッシュエントリーへのポインターがあります。 ホストはホストへのパケット送信時に上記のデータ構造を使用します。以下は、ユニキャストの宛先に対す るパケット送信の概念的なアルゴリズムです。 a. パケットが送出される前に、次ホップを決定しなくてはなりません。通常、次ホップの決定はすべての パケットで行われるわけではありません。次ホップを決定した結果は宛先キャッシュに保存されます。 ホストはまず宛先キャッシュに現在の宛先アドレスに一致するエントリーがないかチェックします。一 致した場合は「c」に進みます。 b. 宛先キャッシュに宛先のエントリーがない場合は、プレフィックスリスト内のすべてのプレフィックス から最も長く一致するものを検索します。一致するものがあれば宛先はオンリンクであるとされ、宛先 アドレスが次ホップであるとみなされます。一致するものがなければ、次ホップは経路指定テーブルか ら決定されます。 c. 次ホップが決定されると、次ホップのアドレス解決プロセスと近隣到達不能検知が行われます。このプ ロセスについては次のセクションで説明します。 d. 近隣が到達可能であることがわかると、その宛先に対してパケットが送信されます。 4. アドレス解決と近隣到達不能検知 アドレス解決は、近隣のリンク層アドレスを決定するために使用されるプロセスです。このプロセスで検索 された IPv6 アドレスとリンク層アドレスのマッピングは近隣キャッシュにキャッシュされます。以下はア ドレス解決に関連する手順です。 a. まず、近隣キャッシュがチェックされて、現在の宛先アドレスに一致するエントリーが検索されます。 エントリーが存在しない場合、ホストは請求したノードのマルチキャストグループに対して近隣請求 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 7-125 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 に 設定されます。この請求は繰り返し送信され、その回数の最大値を構成することができます。最大回数 まで請求しても到達性確認を受信できないと、エントリーは近隣キャッシュから削除され、再度アドレ ス解決が実行されます。 Section 7-126 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 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 近隣探索プロトコル HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 7-127 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. を受け取ります。 クライアントは、サーバから受取り通知が返ってくるまで要求を再送し続けます。そのため、クライアントが Section 7-128 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-129 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 Section 7-130 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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 メッセージを送信します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 7-131 pckt(7) pckt(7) 著者 pckt(7) はHPおよびOSFが開発しました。 参照 getmsg(2), ioctl(2), ptm(7), pts(7), ldterm(7), ptem(7), streamio(7). Section 7-132 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 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) マンペー HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 7-133 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 */ } Section 7-134 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 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 を返します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 7-135 poll(7) poll(7) ioctl(DP_ISPOLLED) はファイル記述子が登録されていない場合やクローズされている場合に 0 を返します。 ioctl() が -1 を返すと errno にエラー状態がセットされます。 エラー 以下は、イベントポートドライバが返すエラーです。 open() が異常終了すると、 errno は以下の値のいずれかにセットされます。 [EACCES] [EAGAIN] open() に渡したデバイスファイル名のマイナー番号は 0 ではありません。 一時的な状態によって、内部データ構造体の割当てが異常終了しました。 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, ®pfd, sizeof(regpfd)); Section 7-136 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 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, ®pfd, 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; HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 7-137 poll(7) poll(7) regpfd[0].events = POLLREMOVE; regpfd[1].fd = sd; err = ioctl(evpfd, DP_ISPOLLED, ®pfd[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). Section 7-138 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 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プログ ラミング環境を使用してください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 7-139 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) 参照)。 Section 7-140 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 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 これがセットされると、ポートは、ドラ イバによって最初に検出されたマウスに 接続されます。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 7-141 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を選択します。 Section 7-142 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 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 個々のキーにタイプマティック動作をセットします。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 7-143 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 (最上位ビット) は使用しないので、ゼロにセットしておきます。ミリ秒単位で Section 7-144 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 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 パラメーターは使用し ません。 HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 7-145 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 パラメーターは使用しません。 Section 7-146 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 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未満の場合は、非線形で新しい値に 変換されます。下記の表に変換の様子を示します。 マウスの間隔値 HP-UX 11i Version 2: August 2003 変換される値 −9− Hewlett-Packard Company Section 7-147 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] [EFAULT] 指定されたPS/2 デバイスがすでにオープンされています。 システムコールに対する引き数を使用するときに、使われたアドレスが適当ではあり ません。 [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 */ Section 7-148 Hewlett-Packard Company − 10 − HP-UX 11i Version 2: August 2003 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); } HP-UX 11i Version 2: August 2003 − 11 − Hewlett-Packard Company Section 7-149 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){ Section 7-150 Hewlett-Packard Company − 12 − HP-UX 11i Version 2: August 2003 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 HP-UX 11i Version 2: August 2003 − 13 − Hewlett-Packard Company Section 7-151 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ヘッドへ送信します。 Section 7-152 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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が開発しました。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-153 ptem(7) ptem(7) 参照 ioctl(2), streamio(7), ptm(7), pts(7), ldterm(7). Section 7-154 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 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回しか許 されないのに対し、スレーブデバイスは複数回オープンすることができます。マスターデバイスがオープンさ れたとき、対応するスレーブデバイスは自動的にロックされます(スレーブのロック解除とスレーブデバイス名 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 7-155 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) Section 7-156 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ptm(7) UNLKPT ptm(7) マスターおよび対応するスレーブデバイスのロックを解除します。正常終了時は0を戻しま す。異常終了時は −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) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 7-157 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 お Section 7-158 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-159 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() 要求を使って調べることができます。 Section 7-160 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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) 参照)、読み出し要求はブロックされます。データが読み込み可 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-161 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行としてデータをタイプするように処理され Section 7-162 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 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 のスレーブ側でブレーク操作を行ないます。あたかもユーザーがブレークキーを実際の ターミナルで押したかのようになります。パラメータはありません。 TIOCSTOP pty のスレーブ側からマスター側へのデータの流れを (ˆS をタイプするのと同じように) 停止 します。パラメータはありません。 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 パケットに続 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 7-163 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 を使います。 Section 7-164 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 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に初期化される)。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 7-165 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 にはエラーをサーバに返させません。 Section 7-166 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 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() 呼び出しによって、見えない操作をできるように するためです。 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 7-167 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() を使ってブロックしたシグナルはブ ロックされつづけます。 Section 7-168 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 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() の説明を参照してくだ さい。 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 7-169 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) Section 7-170 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 pty(7) HP-UX 11i Version 2: August 2003 pty(7) − 12 − 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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 UH ローカルホストからリモートホストへの直接経路 >0 host UGH リモートホスト ゲートウェイを介したリモートホスト =0 default default U ローカルホストからのワイルドカード経路 UG リモートホスト ゲートウェイを介したワイルドカード ローカルホスト自身のゲートウェイを経由するあるネッ トワークへの経路 リモートホスト ゲートウェイを介したネットワーク経 路 への経路 >0 経路 サブネット ネットワーク機能は、可変長サブネッティングをサポートします。インターネットアドレスは、次の形式の ネットワークアドレスと ホストアドレスで構成されます。 192.34.17.0 サブネットアドレスはネットワークのインターネットアドレスの一部として定義されます。形式は次のとおり です。 • 物理的に異なるネットワークを識別するネットワークアドレス。 • 同じネットワーク上の物理的に異なるサブネットワークを識別するサブネットアドレス。 ネットワーク管理者は、ホスト番号のスペースを使用して、ローカルネットワークのインターネットアドレス をサブネットに分割することができます。この機能により、複数の物理ネットワークが 1つのインターネット アドレスを共有できるようになります。 これを行うには、 3つのインターネットクラスを定義して、各ネットワークアドレスとホストアドレスをそれ ぞれ対応させる必要があります。アドレスクラスは、アドレスのバイナリ形式の最上位ビットで定義されま す。 Section 7-178 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 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 です。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 7-179 routing(7) routing(7) サブネットが使われて、8 ビットのホストフィールドが上の例のように 3 ビットのサブネットと 5 ビットのホ ストに分割されている場合は、サブネットマスクが 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) を持つホストルートエントリーは、 Section 7-180 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 routing(7) routing(7) 宛先/ネットマスクの組み合わせ (147.253.56.1, 0xFFFFFE00) を持つネットワーク ルートエントリーより限定的 であるため、ネットワーク機能はホスト ルートエントリーを選びます。デフォルトのデフォルトルートは、宛 先/ネットマスクの組み合わせ(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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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-2" を参照) 上の 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: August 2003 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 unsigned char added_len; 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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) disc3 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 − 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] [ETIME] fildes パラメーターが指定するストリーム上で、ハングアップが受信されました。 ストリームヘッドで肯定応答メッセージを受信する前に、タイムアウトが発生しまし た。 [EAGAIN] リンクオペレーションを実行するための記憶領域割り当てが、一時的に不可能です。 [EBADF] arg で指定されたオープンしているファイル記述子は無効です。 [EINVAL] fildes で指定されたストリームは、多重化をサポートしていません。 [EINVAL] arg で指定されたファイルがストリームでないか、またはすでに多重化ドライバーの 下にリンクされています。 Section 7-232 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 streamio(7) streamio(7) [EINVAL] このリンクオペレーションは、多重化構成の結果、 「ループ」を生じる可能性があります。つまり、 arg で指定されたドライバーは、複 数箇所でこの構成にリンクされています。 I_POP [EINVAL] ストリーム中にモジュールが存在しません。 [ENXIO] ポップ中のモジュールからエラー値が戻されました。 [ENXIO] fildes 上でハングアップが受信されました。 I_PUNLINK [ENXIO] [ETIME] fildes 上でハングアップが受信されました。 ストリームヘッドで肯定応答メッセージを受信する前に、タイムアウトが発生しまし た。 [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] [EBADMSG] arg パラメーターは割り当てられたアドレス空間外を指しています。 ストリームヘッド読み取り待ち行列に存在するメッセージには、渡されたファイル記 述子が格納されていません。 HP-UX 11i Version 2: August 2003 − 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 の値が不当です。 I_STR [EINVAL] ic_len フィールドが表すバイト数が、0(ゼロ)未満か、またはメッセージのデータ部 (ic_dp) の最大許容サイズより大きい値です。 [EINVAL] [EFAULT] ic_timeout フィールドの値が−1未満です。 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: August 2003 streamio(7) streamio(7) M_IOCNAK メッセージの中にエラーが戻されることもあります。このような場合、 ioctl は異常終了 し、 errno をメッセージ中の値に設定します。 I_SWROPT [EINVAL] arg パラメーターの値が不当です。 I_UNLINK [ENXIO] [ETIME] fildes 上でハングアップが受信されました。 ストリームヘッドで肯定応答メッセージを受信する前に、タイムアウトが発生しまし た。 [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: August 2003 − 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: August 2003 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 HP-UX 11i Version 2: August 2003 エラーログ プロセスであることを示します。 trace_ids データは不要です。 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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 /dev/pts/tN Streams Telnet マスター クローンデバイス 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 − 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: August 2003 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 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 Character size: CBAUD ビットはボーレートを指定します。ボーレート 0 を表す B0 は、連結をハングアップするのに使用さ れます。 B0 が指定されている場合、これはモデム制御回線 (modem(7) を参照) の終了を意味し、通常、回線は 切断されます。ある特定のハードウェアでは、ボーレートを変更できない場合もあります。 CBAUD は termio HP-UX 11i Version 2: August 2003 − 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 フィールドはターミナルの制御に使用されます。 ISIG Section 7-268 シグナルを使用可能にします。 ICANON 正規入力 (削除と抹消の処理を行います) XCASE 正規入力での大文字 / 小文字表現 ECHO エコーを可能にします。 Hewlett-Packard Company − 16 − HP-UX 11i Version 2: August 2003 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: August 2003 − 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: August 2003 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 文字 VEOL2 EOL2 文字 ERASE 文字 VERASE WERASE 文字 VWERASE VINTR INTR 文字 VINTR KILL 文字 VKILL VMIN 1MIN 値 VQUIT VQUIT QUIT 文字 VSTART VSTART START 文字 VSTOP VSTOP STOP 文字 SUSP 文字 VSUSP VSUSP VDSUSP VDSUSP VLNEXT VLNEXT DSUSP 文字 TIME 値 VTIME LNEXT 文字 termios 構造体関連の関数 以降の関数は termios 構造体を使用するときに使われる関数です。関数 cfsetispeed() および cfsetospeed() の ターミナルデバイスへの効果は、 tcsetattr() 関数が正常に呼び出されるまで有効になりません。これらの関数 についての詳細はマニュアルの各エントリを参照してください。 HP-UX 11i Version 2: August 2003 − 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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 − 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: August 2003 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: August 2003 − 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 の中の残りのデータが転送されるた めに、フロー制御の応答性は悪くなります。フロー制御の後のデータの受信量の許容量が小さなデバイスを用 いて通信を行う場合は、適切な転送リミットを設定する必要があります。 デバイスファイルのマイナー番号 ワークステーションのデバイスファイル番号は次の形式になります。 0x IIC 0 HM ここで、 II = 2 桁 (8 ビット) の 16 進数でシリアルインタフェースのインスタンスを示します。 C = FIFO 制御用の 1 桁の 16 進数 (4 ビット)。各ビットの値は以下の通りです。 受信 FIFO トリガレベル H = Section 7-282 転送リミット c3 c2 レベル c 1 c0 リミット 0 0 1 0 0 1 0 1 4 0 1 4 1 0 8 1 0 8 1 1 14 1 1 12 1 桁の 16 進数 (4 ビット) で、診断アクセスとハードウェアフローを制御します。 Hewlett-Packard Company − 30 − HP-UX 11i Version 2: August 2003 termio(7) termio(7) ビット h3 診断用電話アクセス h2 予約 h 1 h0 M = 値 予約 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: August 2003 − 31 − Hewlett-Packard Company Section 7-283 termio(7) termio(7) 0x IIPPHM ただし II = PP = 2 桁の 16 進数 (8 ビット) で、シリアルインタフェースの実例を示します。 2 桁の 16 進数 (8 ビット) で、シリアルインタフェース上のこのデバイスのポート番号を示し ます。 H = 1 桁の 16 進数 (4 ビット) で、診断アクセスおよびハードウェアフローを制御します。 (HP J2094A 専用) ビット h3 カードの診断 h2 ポートの診断 h1 h0 M = 値 予約 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* 参照 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), Section 7-284 Hewlett-Packard Company − 32 − HP-UX 11i Version 2: August 2003 termio(7) termio(7) 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: August 2003 − 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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 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: August 2003 −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: August 2003 UNIX(7P) UNIX(7P) 著者 AF_UNIX はカリフォルニア大学バークレー校で開発されました。 参照 getsockopt(2), socket(2) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 7-297 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-298 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 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: August 2003 −2− Hewlett-Packard Company Section 7-299 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-300 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 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: August 2003 −4− Hewlett-Packard Company Section 7-301 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-302 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 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: August 2003 −6− Hewlett-Packard Company Section 7-303 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-304 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 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: August 2003 −8− Hewlett-Packard Company Section 7-305 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-306 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 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アドレス分解能インタフェース : HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 7-307 xopen_networking(7) xopen_networking(7) endhostent(3N)、endnetent(3N)、endprotoent(3N)、endservent(3N)、gethostbyaddr(3N)、gethostname(3N)、 getnetbyaddr(3N)、getprotobynumber(3N)、getservbyport(3N)、htonl(3N)、inet_addr(3N)、ntohl(3N)、 sethostent(3N)、setnetent(3N)、setprotoent(3N)、setservent(3N) Section 7-308 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 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: August 2003 −1− Hewlett-Packard Company Section 7-309 ノート Section 7-310 Hewlett-Packard Company HP-UX 11i Version 2: August 2003 セクション 9 用語集 セクション 9 用語集 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://www.hp.com/jp/manual (日本語) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 9-1 glossary(9) glossary(9) 名称 glossary − 一般的なHP-UXの用語説明 説明 HP-UXをはじめ、HP-UXライクなシステムでは、きわめて特殊な意味を持つ専門用語を使用します。この用語 集は、HP-UX以外の環境で使用する場合とは意味の異なる専門用語を正確に定義するものです。 用語エントリー 「現在のディレクトリ」を指す特殊ファイル名です。これは単独で使用することも、またディ . (ドット) レクトリのパス名の先頭に指定することもできます。 パス名決定を参照してください。 ドッ トは、ボーンシェル、およびコーンシェルの特殊コマンドとしても使用できます。テキストエ ディタやフォーマッタで、正規表現を解析するとき、あるいはファイル名を指定するときに特 殊な意味を持ちます。 .. (ドットドット) 「親ディレクトリ」を指す特殊ファイル名です。 ドットドットが 「パス名」の先頭にある場 合は、現在のディレクトリの親を指します。また、 ドットドットがパス名の中にある場合 は、パス名の文字列中にある ドットドットの前にあるディレクトリの親ディレクトリを指し ます。特殊なケースとして ドットドットは、親のない任意のディレクトリの現在のディレク トリ (通常は ルートディレクトリ )を指します。 パス名決定を参照してください。 .o (ドットオー) このサフィックスは、慣例的に再配置可能オブジェクトファイルに付けられます。 「ドット オー ファイル」という用語が、再配置可能オブジェクトファイルを表す場合もあります。こ のようなファイル形式を 「ドットオー フォーマット」と呼ぶこともあります。 a.out(4) を参 照してください。 2次プロンプト シェルがディスプレイに表示し、さらに入力が必要なことを示す1つ以上の文字。このプロン プトは、シェルの1 次プロンプトほど頻繁には現れません ( プロンプト参照)。これが表示さ れた場合、通常は、文字列の正しい引用を省略したか (シェルに混乱を引き起こす原因)、コ マンド行からシェルプログラミング言語のフロー制御構成体 ( for 構成体など) を入力したこ とが原因です。デフォルトでは、シェルの2次プロンプトは不等号 (>) ですが、各自の .profile ファイルでシェル変数 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進数値で表されます。 Section 9-2 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) 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) を参照してください。 ITE 内蔵ターミナルエミュレータを参照してください。 iノード iノードはファイルを記述する構造体で、システム内では ファイル シリアルナンバーによって 識別されます。すべてのファイルやディレクトリには対応する iノードがあります。だれがど のようにファイルにアクセスできるかを指定するパーミッションは、 iノードの一部である9 ビットフィールドに保存されています。 iノードには、ファイルサイズ、ファイルのユーザー ID とグループ ID、リンク数、ファイル内容があるディスクブロックへのポインタもありま す。 iノードと、1つ以上のディレクトリにあるiノードのエントリーとの連結を、 リンクとい います。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 9-3 glossary(9) glossary(9) ファイル シリアルナンバーを参照してください。 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 を参照してください。 アーカイブ オブジェクトファイル (リンカ ld(1) で使われる .o ファイル) のグループなどといった、別の ファイルの内容を含むファイル。アーカイブファイルは、 ar(1) またはそれと同じような tar(1)、 cpio(1) などのプログラムで作成、管理します。 アーカイブは、 ライブラリと呼ぶこ ともあります。 アクセス ストレージからデータを読み取ったり、データを書き込んだりするプロセス、あるいはシステ ムリソースを使用する権利のことです。アクセス権は、実効ユーザーID、実効グループID、 およびグループアクセスリストの3 つのプロセス特性によって管理されます。 access(2) シス テムコールは、ファイルのアクセス権を、 amode パラメータのビットパターンに従って判断 して、ファイルの読み取り、書き込み、実行、存在確認を示します。 access(2) システムコー Section 9-4 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) ルは、ファイルのアクセス権を、 amode パラメータのビットパターンに従って、ファイルの 読み取り、書き込み、実行、存在確認を示します。 access(2) システムコールは、 実効ユー ザーID の代わりに 実ユーザーID を、 実効グループID の代わりに 実グループID を使いま す。 アクセスグループ グループアクセスリストは、リソースのアクセス権を判断するために使われる 補助グループ ID のセットです。アクセスのチェックは、以下の「 ファイルアクセス パーミッション」で説 明する方法で実行されます。 アクセスモード アクセスモードは、特定のファイルに対して許可されるアクセスの形式です。各インプリメン テーションごとに、読み取り、書き込み、実行/ 検索のアクセスモードがそれぞれ異なりま す。 アドレス 情報の格納や取出しの際に、メモリ位置の指定と識別のために使われる番号。 アドレスは、 宛先のマークや指示、コンピュータの各要素への命令、通信などの目的で使用されます。 メールでいう アドレスとは、情報転送にかかわるすべての要素が認識できる形式のデータ構 造のことです。ローカルシステムでは、単にユーザーの login 名を指す場合もあります。また ネットワークシステムの場合の アドレスはネットワークソフトウェアに対するリソースの位 置を表します。 テキストエディタ ( vi, ex, ed, sed など) では、 アドレスは、与えられた命令の対象となるファ イル内の行位置を指定します。 adb では、 アドレスは、特定のコマンドを実行するアセンブリ言語の命令を指定します。 fsdb などのディスクユーティリティでは、 アドレスは raw 型、あるいは ブロック型スペシャ ルファイル 、 inode 番号、 ボリュームヘッダ、その他のファイル属性を指す場合がありま す。 周辺装置に場合、 アドレスとは、コンピュータのI/Oデバイスの位置を指定する一連の値を表 します。アドレスの詳細な構成は各システムによって違います。シリーズ 700システムでは、 アドレスは最大2つの要素 ( 選択コード 、 機能番号 ) で構成されます。 アドレス空間 プロセスが参照できるメモリ位置の範囲 アフィリエーション 「 ターミナルアフィリエーション」を参照してください。 移植可能なファイル名文字セット 次の図形的文字セットは、 IEEE 規格P1003.1に準拠するすべてのインプリメンテーションの 間で移植可能なものです。 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 9-5 glossary(9) glossary(9) 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 (4) read(2) で、データの終了を示す戻り値 大文字変換 小文字から大文字表記への変換 親ディレクトリ ファイル階層構造であるディレクトリの1つ上のディレクトリを指します。 ルートディレクト リ (/) を除くすべてのディレクトリには、1つ (1つのみ) の親ディレクトリがあります。 ルー トディレクトリには親はありません。 ドットおよび ドットドットを参照してください。 親なしプロセス 親プロセスが何らかの理由で終了したときに残される 子プロセスのこと。 init ( init(1M) 参照) は、すべての親なしプロセスを引き継ぎ、有効な親プロセスになります。 Section 9-6 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) 親なしプロセスグループ すべてのプロセスの親プロセスが、それ自体グループの一部であるか、グループのセッション の一部ではないプロセスグループ 親プロセス 既存のプロセスが、 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 のどれかを実行することにより、デフォルトに設定さ れます。 機能番号 シリーズ700 システムでは、1 つのインタフェースカードに複数のインタフェースがある場 合、各インタフェースは別の 機能として扱われ、それぞれに対応する唯一の機能番号を割り 当てられます。 キャラクタ型スペシャルファイル データを1 バイト単位で転送するI/O デバイスに対応するスペシャルファイル。その他のバイ トモードのI/Oデバイスには、プリンタ、9トラック磁気テープドライブ、 "raw"モードでアク セスする場合のディスクドライブ ( raw ディスク参照) などがあります。 キャラクタ型スペ シャルファイルの構造は特に定義されていません。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 9-7 glossary(9) 行 glossary(9) 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; /* r/w permission */ 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) の実 行パーミッションを持っているかどうかは、以下のように、そのオブジェクトのパーミッショ Section 9-8 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) ンモードビットによって判断します。 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 コードセットの空白文字は、スペース、タブ、ニューライ ン、紙送り、キャリッジリターン、垂直タブです。空白文字の一部 ( すべてとは限らない ) を、フィールド、ワード、コマンドオプションを区切るものと解釈するコマンドやルーチンも あります。 クラッシュ プログラムまたはシステムの予想外のシャットダウン。オペレーティングシステムがクラッ シュした場合を「システムクラッシュ」といい、システムをリブートする必要があります。 グループ グループID グループID を参照してください。 全員が同じファイルセットへのアクセスを許可される必要のある0 人以上のユーザーの集ま り。グループのメンバは、 /etc/passwd ファイルと /etc/logingroup ファイル(存在する場合) の HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 9-9 glossary(9) glossary(9) 中で、グループ 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 を参照してください。 コマンド 特定の作業を実行させるための指令。 HP-UX のコマンドは、 シェルという コマンドインタ プリタを通じて実行されます。 HP-UX は、 POSIXシェル (sh-posix(1)), Cシェル (csh(1)), およ びコーンシェル (ksh(1)) の各種シェルをサポートしています。サポートされる各シェルの詳細 については、 sh(1) を参照してください。ほとんどのコマンドは、 ユーティリティという実行 可能ファイルによって実行されます。ユーティリティは、独立した実行可能オブジェクトコー ド (プログラム) 、または、決められた順に実行する他のプログラムのリストを格納したファ イル (シェルスクリプト) の形をとります。スクリプトには、他のスクリプトやオブジェクト コード プログラムへの参照が記述されます。標準的な コマンドは、ユーティリティ名の後ろ に、ユーティリティに渡される引き数を付けて表します。例えば、 "ls mydirectory" というコ Section 9-10 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) マンドでは、 "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オペレーティングシステムのことです。 カーネルを参照してください。 システムコール 高水準言語 (FORTRAN, Pascal, Cなど) を通じてユーザーに提供される HP-UXオペレーティン グシステムのカーネル機能。「イントリンシック」、または「システム イントリンシック」 ともいいます。提供されているシステムコールの説明は、『 『HP-UX リファレンス』の第2 章にあります。 システムコンソール HP-UX によってユニークなステータスを与えられた、スペシャルファイル /dev/console に対 応するキーボードとディスプレイ (あるいはターミナル)。すべてのブートROMエラーのメッ HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 9-11 glossary(9) glossary(9) セージ、 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と同じに設定されます。これによって、そのプロセスはファイルのグループに属し たようになり、プログラムを正常に実行するためにアクセスする必要のあるファイルに、プロ セスがアクセスできるようになります。ファイルのグループID設定ビットが設定されていな い場合、プロセスの 実効グループID は、そのプロセスの上位のプロセスから引き継がれま す。プロセスの 実効グループID の設定は、プログラムの実行中は維持され、その後プロセス の実効グループIDは実グループIDと同じに設定されます。 グループ , 実グループID , および グループID設定ビットを参照してください。 実効ユーザーID プロセスには、 ファイルアクセス パーミッション (実効ユーザーIDが0、つまりスーパーユー ザーの場合には、システムコールに関する他のパーミッションも) を判断するために使われる Section 9-12 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) 実効ユーザー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)で す。このシグナルは、通常は実行中のプログラムを終了させ、終了したプロセスの『コアイ メージ』の入ったファイルを作成します。コアイメージは、デバッグに便利です。コアイメー ジをサポートしていないシステムもあるため、そのようなシステムではこのファイルは作成さ れません。 上位ディレクトリ 親ディレクトリを参照してください。 照合 優先順により設定されたルールに従った定義済みの順序による文字列の論理順序付け。これら のルールは、照合要素間の照合順序を決め、母国語に対応して、複数の照合要素で構成される 文字列の順序を管理するものです。 照合順序 照合要素をソートするときに適用される順序。母国語に対応するため、 照合順序は、現在の LANG 環境変数の値で設定される 照合要素の相対順序と考えることができます。照合順序か ら文字を省略したり、複数の照合要素に同じ相対順序を適用することができます ( string(3C) 参照)。 照合要素 文字列の論理順序 ( 照合順序 ) を決定するための照合に使われる最小単位。照合要素は、母国 語に合わせて、 1単位として照合を行う1文字または複数文字で構成されます。現在の LANG 環境変数の値で、現在の照合要素のセットを決定します。 HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 9-13 glossary(9) glossary(9) 小数点キャラクタ 数値の整数部分と端数部分を分ける文字。例えば、米国式の使用法では 小数点キャラクタと して小数点を、ヨーロッパ式ではカンマを使います。 ジョブコントロール ジョブコントロールは、ユーザーが特定のプロセスの実行を停止 (一時停止) したり、後で実 行を再開できるようにします。 ユーザーは、システムのターミナルドライバと、特定のシェル ( sh(1) 参照) を併せて提供され る対話型インタフェースによって、この機能を使います。ターミナルドライバは、現在のフォ アグラウンド プロセスグループを停止させ、ユーザーのジョブコントロールシェルに再開さ せるユーザー定義の「一時停止文字」を認識します。ジョブコントロール シェルには、フォ アグランドまたはバックグランドで停止したプロセスグループを継続させるコマンドがありま す。ターミナルドライバは、バックグラウンド プロセスグループのメンバがユーザーのター ミナルに対して読み取り/書き込みを行おうとした場合に、バックグラウンド プロセスグルー プも停止することができます。これによって、ユーザーは フォアグラウンド プロセスグルー プを割込みなく終了または一時停止し、停止した バックグラウンド プロセスグループを好き なときに継続することができます。 使用法とインスタレーションについての詳細は stty(1), sh(1), および関連するシェルエント リー、またインプリメンテーションについての詳細は signal(2) および termio(7) を参照してく ださい。 所有者 ファイルの所有者は、通常はそのファイルの作成者です。しかし、ファイルの所有権は、スー パーユーザーか現在の所有者が chown(1) コマンドか chown(2) システムコールを使って変更で きます。ファイル所有者は、削除、コピー、移動、内容変更など、自分のファイルを自由に操 作できます。所有者はファイルのモードを変更することもできます。 シングルユーザー状態 HP-UX オペレーティングシステムで、システムコンソールがシステムとユーザーの間で唯一 の通信メカニズムである状態。慣例的に、シングルユーザー状態は通常、 init(1M) によって 実行レベル S または s に指定されます。 シングルユーザー状態とシングルユーザーシステム を混同しないよう注意してください。シングルユーザー状態は、マルチユーザーシステムをソ フトウェアでシングルユーザー通信に制限するもので、シングルユーザーシステムは、複数の 固定ターミナルとは通信できません ( マルチユーザー状態を参照)。 シンボリックリンク 間接的にパス名を参照するファイルの1種。 symlink(4) を参照してください。 スーパーブロック 各ファイルシステムの大容量記憶媒体で、そのファイルシステムを記述しているブロック。 スーパーブロックの内容はインプリメンテーションによって違います。詳しくは、システムに 付属の『システム管理者』マニュアルと、該当する fs(4) エントリーを参照してください。 Section 9-14 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) スーパーユーザー 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は、プロセス構造の制御に使われます。仮想メモリ、仮想記憶のページングシステムで は、プロセス2はページングデーモンです。 スラッシュ リテラル文字 / を表します。スラッシュが1つだけの パス名は、そのプロセスの ルートディレ クトリを表します。 パス名決定を参照してください。 正規表現 テキストを選択する0 文字以上の文字列。この文字列に含まれる文字は、すべてリテラルで あっても ( つまり、正規表現が一致する対象が唯一であっても)、1 つ以上の文字が メタキャラクタで あっても (つまり、1つの正規表現が複数のリテラル文字列に一致しても) かまいません。正規 表現は、指定したテキストに対して検索を実行するテキストエディタ ( ed(1), ex(1), vi(1) など) HP-UX 11i Version 2: August 2003 − 14 − Hewlett-Packard Company Section 9-15 glossary(9) glossary(9) や、ファイルの中で特定の文字列を検索するために作成されたコマンド ( 代表的なものは grep(1)) で特に頻繁に使われます。シェルでも、コマンド行のファイル名を参照する場合など に正規表現を使います。 制御ターミナル セッションに対応するターミナル。各セッションに対応する制御ターミナルは多くとも1 つ で、制御ターミナルは1つのセッションのみに対応します。制御ターミナルから入力を行うこ とにより、その制御ターミナルに対応するフォアグラウンド プロセスグループの全プロセス にシグナルを送信できます。 制御プロセス 制御ターミナルとの接続を設定するセッションリーダ。その後、ターミナルがそのセッション の制御ターミナルではなくなった場合、セッションリーダは制御プロセスではなくなります。 制御文字 テキストの記録、処理、転送、解釈に影響を与える表示可能文字以外の文字。 ASCII 文字 セットでは、 制御文字は0 ∼31 と127 です。制御文字は、CTRL, CONTROL, または CNTL な どのキー (ターミナルのコントロールキーのラベルに対応) を押さえながら文字キー (場合に よりSHIFTを使用) を押して生成します。このような2つのキーによる操作を、 Control-D, CtrlD, または ˆD などと表します。ここで ˆ はコントロールキーを表します。 セッション 各プロセスグループは、セッションの要素です。プロセスは、そのプロセスのプロセスグルー プが属しているセッションの要素とみなされます。新規作成されたプロセスは、それを作成し たプロセスと同じセッションに加わります。プロセスは、属するセッションを変更できます ( setsid(2) 参照 ) 。 1 つのセッションに複数のプロセスグループがあってもかまいません ( setpgid(2) 参照)。 セッションの寿命 セッションが作成されてから、そのセッションの要素として残っているすべてのプロセスグ ループの寿命が終了するまでの期間 セッションリーダー セッションを作成したプロセス ( setsid(2) 参照) 絶対パス名 スラッシュ (/) で始まるパス名です。ファイルの位置を 「ルートディレクトリ」 (/) との相対 位置で示し、そこから検索を始めることを表します。 セマフォ識別子 (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 */ Section 9-16 Hewlett-Packard Company − 15 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) /* 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) システムコールの説明では、操作に必要なパーミッションは操作ごとに 示されています。あるオブジェクトについて、特定のプロセスに、これらのパーミッションが あるかどうかは、以下のように、そのオブジェクトのパーミッションモードビットによって判 断します。 00400 ユーザーによる読み取り 00200 ユーザーによる変更 00060 グループによる読み取りと変更 00006 その他による読み取りと変更 次の条件のうち1つ以上に該当すれば、 semid についての読み取り/変更パーミッションは与 えられます。 • プロセスの実効ユーザーIDが、スーパーユーザーであること HP-UX 11i Version 2: August 2003 − 16 − Hewlett-Packard Company Section 9-17 glossary(9) glossary(9) • プロセスの実効ユーザー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) です。 相対パス名 スラッシュ (/) で始まらない パス名 。ファイルの位置が現在の ワークディレクトリからの相 対位置であり、 ルートディレクトリではなくワークディレクトリからサーチを開始すること を示します。例えば、 dir1/file2 とした場合、現在のワークディレクトリの中で dir1 ディレク トリをサーチします。次に、 dir1 の中で file2 ファイルをサーチします。 ソリダス スラッシュを参照してください。 ゾンビプロセス 何らかの理由で終了したのに、親プロセスが wait(2) によってまだ終了待ちの状態 になってい ないプロセス。終了したプロセスは、親プロセスが終了待ちの状態になるまで、引き続きプロ セスのスロットを占有します。しかし、終了はしているため、ユーザー領域とカーネル領域の どちらも、新たにそのプロセスに割り当てられることはありません。したがって、親プロセス が終了待ち状態になったときに自動的に修正される比較的無害な現象です。 ps(1) コマンドを Section 9-18 Hewlett-Packard Company − 17 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) 使うと、ゾンビプロセスは 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) を参照 してください。 ターミナル装置 ターミナルを参照してください。 ダイナミックローダ プロセス開始時に実行され、共有ライブラリをプロセスのアドレス空間にロードするルーチ ン。ダイナミックローダには、参照する符号をプログラムと共有ライブラリに分解し、共有ラ イブラリのリンクテーブルを初期化する役割もあります。詳しくは dld.sl(5) (PA-RISC システ ムの場合) または dld.so(5) (Itanium(R)ベース システムの場合) を参照してください。 ダウンシフト 多言語化対応 大文字から小文字への変換 ユーザーの 母国語 、 地域習慣 、 コード文字セットをサポートできるソフトウェアを提供す るという概念 地域習慣 日付、時間、通貨の形式などの事項に関する地域や領域ごとの規約 HP-UX 11i Version 2: August 2003 − 18 − Hewlett-Packard Company Section 9-19 glossary(9) glossary(9) 通常ファイル ファイルの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つのリンク があります。 ドットはそのディレクトリ自体を、 ドットドットはその 親ディレクトリを指し ます。 . と .. しかないディレクトリは、空とみなされます。 テキストファイル 単数または複数の行に組織された文字からなるファイル。行は、 NULL 文字を含んでいては ならず、行末のニューライン文字を含めて、長さが LINE_MAX バイトを超えてはなりませ ん。カーネルとC 言語のインプリメンテーションは、どちらもテキストファイルとバイナリ ファイルを区別しませんが ( ANSI C 基準X3-159-19xx を参照)、多くのユーティリティは、テ キストファイルを処理するときのみ、正常に動作します。 適切な特権 各インプリメンテーションには、特別な特権を必要とする関数呼び出しや関数呼び出しオプ ションについて、特権をプロセスと関連付ける手段があります。 HP-UX では、 適切な特権と は、スーパーユーザーのステータスか、特権グループに対応する特権をいいます ( setprivgrp(1M) 参照)。 デバイス コンピュータの周辺装置、またはアプリケーションに対して周辺装置として表されるオブジェ クト Section 9-20 Hewlett-Packard Company − 19 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) デバイスアドレス バスアドレスを参照してください。 デバイスファイル スペシャルファイルを参照してください。 デフォルトの捜索パス 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 でした。 特権グループ 特権グループは、通常はスーパーユーザーのみが使用できる一部のシステムコールにアクセス する権利を与える setprivgrp 処理を受けたグループです ( getprivgrp(2) 参照)。 適切な特権を 参照してください。 ドット . (ドット) を参照してください。 ドットオー .o (ドットオー) を参照してください。 ドットオー ファイル .o (ドットオー) を参照してください。 ドットオー フォーマット .o (ドットオー) を参照してください。 ドットドット .. (ドットドット) を参照してください。 HP-UX 11i Version 2: August 2003 − 20 − Hewlett-Packard Company Section 9-21 glossary(9) glossary(9) 内蔵ターミナルエミュレータ (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) で 説明するとおり、ファイルモードに格納されています。アクセス決定の際のファイル パー ミッションビットの詳しい使用法については、 ファイル アクセスパーミッションを参照して ください。 パイプ 2つのプロセスの間でデータを渡すために使われるプロセス間 I/Oチャネル。 シェルが、ある プロセスの標準出力から別のプロセスの標準入力にデータを転送するために使います。コマン ド行では、パイプは縦線 (|) によって表されます。この縦線の左に記述されるコマンドからの 出力が、右側のコマンドの標準入力に直接渡されます。 バスアドレス アドレスの中で、 HP-UXが特定の装置を探すために使う部分を構成する番号。 バスアドレス は、同じインタフェースに接続されている装置をコンピュータが区別できるようにする周辺装 置のスイッチの設定によって決定されます。 バスアドレスを「デバイスアドレス」と呼ぶ場 合もあります。 Section 9-22 Hewlett-Packard Company − 21 − HP-UX 11i Version 2: August 2003 glossary(9) パス名 glossary(9) ディレクトリ名をスラッシュで区切って続け、最後にファイル名を記述したもの。最後のファ イル名以外は、すべて ディレクトリでなければなりません。パス名が スラッシュ (/) で始ま る場合は、絶対パス名です ( 絶対パス名参照)。それ以外の場合は、 相対パス名になります。 パス名は、特定のファイルを見つけるため、階層ファイルシステム全体の中で追尾すべきパス を定義します。 さらに厳密にいうと、パス名は、以下のように構築され、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 という部分がある場合、ファイルは a ディレクトリに あります。これができなかった場合、 パス名決定は失敗となります。 パス名がスラッシュで始まる場合、パス名の最初のファイル名の上位にあるのは、そのプロセ スの ルートディレクトリとみなされ、そのパス名を 絶対パス名といいます。パス名がスラッ シュで始まらない場合、パス名の最初のファイル名の上位にあるのは、そのプロセスの現在の ワークディレクトリとみなされ、そのパス名を 相対パス名といいます。 1つのスラッシュだ けで構成されるパス名は、そのプロセスのルートディレクトリに決定されます。 パスプリフィックス オプションで ディレクトリを参照する スラッシュを末尾に付けた パス名です。 パスワード ユーザーの同一性を確認するために使われる ASCII 文字列。パスワードは、ユーザーとグ ループについて指定できます。ユーザーにパスワードがある場合、パスワードは自動的に暗号 化され、 /etc/passwd ファイル中の該当ユーザーの行の第2 フィールドに入力されます。ユー ザーは、 passwd(1) コマンドを使ってパスワードを作成、変更できます。 バックアップ システムクラッシュ (通常は電源障害、ハードウェアエラーなどが原因) に備えてファイルシ ステムを保護するため、その全体または一部のコピーを作成する作業。この作業は必ず行うこ HP-UX 11i Version 2: August 2003 − 22 − Hewlett-Packard Company Section 9-23 glossary(9) glossary(9) とをお勧めします。. バックグラウンド プロセスグループ 制御ターミナルと接続されているセッションで、フォアグラウンド プロセスグループにない プロセスグループ 表示可能文字 標準エラー 手書き、印刷、または表示した場合に可視表示される制御文字以外の文字。 診断メッセージ用としてプログラムから出力されるエラーメッセージや特殊なメッセージの出 力先。標準エラー出力は、 stderr とも呼ばれ、コマンドが実行されるたびに、ファイル記述 子2の書き込み用として、自動的にオープンされます。デフォルトでは、 stderr に書き込まれ る全データの出力先はユーザーのターミナルですが、その他に入出力先を変更できます。逆方 向へのデータ転送に使われることのない標準入力や標準出力とは違い、標準エラーは読み取ら れる場合があります。 I/O リダイレクションが、このような作業を行うプログラムを停止させ る可能性があるため、これはお勧めできません。 標準出力 プログラムの出力データの宛先。標準出力ファイルは stdout とも呼ばれ、コマンドが実行さ れるたびに、ファイル記述子1に書き込み用として、自動的にオープンされます。デフォルト では、 stdout に書き込まれる全データの出力先はユーザーのターミナルですが、その他の宛 先に入出力先を変更できます。 標準入力 プログラムの入力データのソース。標準入力ファイルは stdin とも呼ばれ、コマンドが実行さ れるたびに、ファイル記述子ゼロに読み取り用として、自動的にオープンされます。デフォル トでは、 stdin から読み取られる全データのソースはユーザーのターミナルですが、その他の ソースに入出力先を変更できます。 開いているファイル ファイル記述子に現在対応するファイル 開いているファイルの記述 プロセスまたはプロセスのグループがファイルにアクセスする方法を記録します。各 ファイ ル記述子は1つの 開いているファイルの記述を参照しますが、 開いているファイルの記述は 複数のファイル記述子で参照できます。 ファイルオフセット 、 ファイル状態フラグ 、および ファイル アクセスモードは、 開いているファイルの記述の属性です。 ブートROM ROM (リードオンリーメモリ) 内にあってコンピュータの電源を入れるたびに実行され、自動 的にコンピュータを希望どおりの状態にするためのプログラム。ブートストラップ プログラ ムの最初の数個の命令だけで、プログラムの残りの部分を入力装置からコンピュータに読み込 み、計算に必要な機能を開始することができます。ブートROM の機能は、コンピュータの ハードウェアのテストを実行し、コンピュータを通じてアクセス可能なデバイスをすべて認識 し、指定されたオペレーティングシステムか、特定の検索アルゴリズムに従って最初に発見さ れるオペレーティングシステムをロードすることです。 Section 9-24 Hewlett-Packard Company − 23 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) ブート または ブートアップ オペレーティングシステムをロード、初期化、実行するプロセス ブート領域 大容量記憶媒体の中で、ボリュームヘッダと、オペレーティングシステムのブートに使われる 「ブートストラップ」プログラムがある領域。 ブート領域は、 HP-UX専用に確保されていま す。 ファイル 書き込み/読み取り可能なバイトの連続。 ファイルには、パーミッションや種類などの属性が あります。ファイルの種類には、 通常のファイル 、 キャラクタ型スペシャルファイル 、 ブ ロック型スペシャルファイル 、 FIFOスペシャルファイル 、ネットワーク スペシャルファイ ル、 ディレクトリ、および シンボリックリンクがあります。すべてのファイルには、ユー ザーや多くの HP-UX コマンドがファイル内容を参照するための ファイル名が必要です。シス テムは、ファイル内容について特定の構造を必要としませんが、一部のプログラムはこれを必 要とします。ファイルは、シリアルにもランダムにもアクセスできます (バイトオフセットによりインデックスが付けられています)。ファイル内容とファイル構造 体の解釈は、そのファイルにアクセスするプログラムが行います。 ファイル アクセスパーミッション ファイル階層構造内のすべてのファイルには、アクセスパーミッションがあります。これらの パーミッションは、プロセスがファイルに対して要求された操作 ( 書き込み用にファイルを オープンするなど) を実行できるかどうかを判断するために使われます。アクセスパーミッ ションは、 open(2) または creat(2) システムコールによってファイルを作成する際に設定さ れ、後で chmod(2) コールによって変更できます。これらのパーミッションは、 stat(2) または fstat(2) によって読み取ることができます。 ファイルアクセスは、ファイルの読み取り、書き込み、または実行の可否を制御します。ディ レクトリファイルは、実行パーミッションを使って、ディレクトリ検索の可否を制御します。 ファイル アクセスパーミッションを、ファイルの 所有者 、そのファイルの グループのユー ザー、その他 ("other") の3クラスのユーザーに適用します。各ファイルには、これらの各クラ スに対して別々のアクセスパーミッションがあります。アクセスのチェックが行われると、シ ステムは、ファイルを呼び出したユーザーに適用されるアクセス情報をチェックし、パーミッ ションを与えるべきかどうかを判断します。 次の条件のどれかが満たされた場合、プロセスに対してファイルの読み取り、書き込み、実行 /検索パーミッションが与えられます。 • プロセスの 実効ユーザーID が、スーパーユーザーであること • プロセスの 実効ユーザーID が、ファイル所有者のユーザー ID と一致し、ファイル モードの owner の部分 (0700) に適切なアクセスビットが設定されていること • プロセスの 実効ユーザーID が、ファイル所有者のユーザー ID と一致せず、プロセス の 実効グループID がファイルのグループ ID と一致するか、ファイルのグループ ID HP-UX 11i Version 2: August 2003 − 24 − Hewlett-Packard Company Section 9-25 glossary(9) glossary(9) がプロセスのグループアクセスリストにあり、ファイルモードの group の部分 (070) に 適切なアクセスビットが設定されていること • プロセスの 実効ユーザーID が、ファイル所有者のユーザー ID と一致せず、プロセス の 実効グループID がファイルのグループ ID と一致せず、ファイルのグループ ID が プロセスのグループアクセスリストになく、ファイルモードの "other" の部分 (07) に適 切なアクセスビットが設定されていること 上記以外の場合、対応するパーミッションは拒否されます。 ファイル アクセスモード 開いているファイル記述の特性が読み取り、書き込み、あるいはその両方が可能なように開い ているかどうかを決定します( open(2) 参照)。 ファイルオフセット ファイルオフセットは、ファイル中で次のI/O処理を開始する位置を指定します。通常のファ イルまたはスペシャルファイルに対応する各 開いているファイル記述には、 ファイルオフ セットがあります。 パイプや FIFO については、ファイルオフセットは指定されません。 ファイル階層構造 システムで使用可能な1つ以上の ファイルシステム 。これらの ファイルシステムにおけるす べての ファイルは、1つの階層構造に組織化され、その中ではすべての非ターミナルノードが ディレクトリとなります。複数の リンクで同一の ファイルを参照できるため、ディレクトリ は指示された図のように適切に記述されます。 ファイル記述子 読み取りまたは書き込み、あるいはその両方のために開かれたファイルを参照するために用い る、プロセスごとのユニークな、負でない小さい整数の識別子。各 ファイル記述子は、1つの 開いているファイル記述を参照します。 ファイル記述子は、 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> に記述さ れるファイル特性構造体に返されます。ファイルデータの読み取りまたは書き込み、ファイル Section 9-26 Hewlett-Packard Company − 25 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) 状態の変更を行う HP-UX の各機能に関して、各機能に対応した時間値を持つファイルを 「マークフォーアップデート」といいます。アップデートポイントがくると、マークされた フィールドは現在の時間に設定され、アップデートマークはクリアされます。このようなアッ プデートポイントの1 つは、あるプロセスにおいてファイルを閉じる時です。 読み取り専用 ファイルシステムのファイルに対しては、アップデートは行われません。 ファイルシステム 大容量記憶装置ボリュームにある ファイルと、それをサポートするデータ構造体の集合。 ファイルシステムには、これらのファイルを参照する ファイル シリアルナンバーのための ネームスペースがあります。ファイルシステムのインプリメンテーションと保守については、 システムに提供されているシステム管理者マニュアルを参照して下さい。 ファイル状態フラグ 開いているファイル記述の特性。これらのフラグは、 開いているファイル記述で記述される ファイルにアクセスするシステムコールの動作を変更するために使うことができます。 ファイル所有者クラス プロセスの 実効ユーザー ID がファイルのユーザー ID と一致する場合、そのプロセスは、 ファイル所有者クラスにあたります。 ファイル シリアルナンバー 特定のファイルに対するユニークな識別子で、ファイルの i ノード番号とも呼ばれます。各 ファイル シリアルナンバーは、1つの iノードのみを識別します。 ファイル シリアルナンバー は、 ファイル階層構造内の ファイルシステム全体でユニークなものであるとは限りません。 ファイルのその他のクラス プロセスが、 ファイル所有者クラスや ファイルグループ クラスではない場合、そのプロセス は、そのファイルの ファイルのその他のクラスにあたります。 ファイル パーミッションビット パーミッションビットを参照してください。 ファイルポインタ 読み取りまたは書き込み、あるいはその両方のために開かれたファイルを「指す」 ( 参照す る) fopen(3S) 標準 I/O ライブラリルーチンによって得られるデータ要素。ファイル内で、次の I/O 操作が行われる位置を、ファイル先頭からのバイトオフセットの形式でトラックします。 ファイルポインタを得た後は、標準 I/O ライブラリルーチンを使う場合、このポインタを使っ て開いているファイルを参照する必要があります ( これらのルーチンのリストについては、 stdio(3S) を参照してください)。 ファイル名 通常ファイル、スペシャルファイル、ディレクトリを参照するために使われる最大14バイト ( ロングファイル名型式をサポートするよう設定されたファイルシステムでは255バイト) の文 字列。 NULL (null) とスラッシュ (/) のバイト値はファイル名の文字としては使えません。な お *, ?, ,, [, または ] の各文字は、シェルにおいて特別な意味をもっているため、一般的にファ HP-UX 11i Version 2: August 2003 − 26 − Hewlett-Packard Company Section 9-27 glossary(9) glossary(9) イル名の一部に使わないほうがよいでしょう ( sh(1), csh(1), または ksh(1) 参照)。また、 -, +, または =, の各文字は、一部のプログラムでは後にコマンドの引き数が続くことを表すために 使われるため、ファイル名の先頭に使わないでください。ファイル名をパス名構成要素と呼ぶ 場合もあります。通常使用しているハードウェアで出力できないグラフィックを含む文字や、 ターミナルに混乱を生じさせるおそれのある文字は、使うことはできますが、なるべく使わな いことをお勧めします。 ファイル名の移植性 ファイル名は、 移植可能なファイル名文字セットで構成する必要があります。その他の文字 を使用すると、コンテクストによっては混乱が生じたり、あいまいになる可能性があるためで す。 フィルタ 標準入力からデータを読み取り、そのデータを変換し、標準出力に書き込むコマンド フォアグラウンド プロセスグループ 制御ターミナルとの連結を設定する各セッションには、その制御ターミナルのフォアグラウン ド プロセスグループとなるセッションのプロセスグループが1つあります。フォアグラウンド プロセスグループには、制御ターミナルにアクセスするときに、バックグラウンド プロセス グループには与えられない特定の特権があります。 read(2) と write(2) を参照してください。 フォアグラウンド プロセスグループID フォアグラウンド プロセスグループのプロセスグループID 複合グラフィック記号 分音符号と基本文字など、複数の異なるグラフィック記号を1つの文字位置に合わせてできた グラフィック記号 プログラム (プログラムソースをアセンブルまたはコンパイルすることで得られる)バイナリコードのコン ピュータへの一連の命令 プロセス プログラムやイメージの実行 ( イメージ参照)。コマンドやユーティリティは、すべてプロセ スの中で実行されますが、すべてのコマンドやユーティリティが1対1でプロセスに対応する わけではありません。 cd などのように、プロセス内で実行されても、新しいプロセスを作成 しないコマンドもあります。 ls | wc -l) などのように、複数のプロセスを作成する場合もあり ます。同じプログラムの中で複数のプロセスが実行される場合もありますが、それぞれが異な るデータを持ち、実行中の別々の段階にある必要があります。プロセスは、 アドレス空間 と、そのアドレス空間と必要なシステムリソースの範囲内で実行されるシングルスレッドの制 御であるとも考えられます。 プロセスは、 fork(2) 関数を発行する別のプロセスによって作成 されます。 fork(2) を発行するプロセスを 親プロセスといい、 fork(2) によって作成される新 規プロセスを 子プロセスといいます。 プロセス1 Section 9-28 init を参照してください。 Hewlett-Packard Company − 27 − HP-UX 11i Version 2: August 2003 glossary(9) プロセスID glossary(9) システム内の各アクティブプロセスは、存続する間、 プロセス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です。この時点 で、プロセスの寿命は終了します。 ブロック (1) HP-UX が大容量記憶媒体へのアクセスや記憶領域割当てに使う情報の基本単位。ブロック のサイズはインプリメンテーションによって、またファイルシステムによって違います。ユー ザーに一貫したインタフェースを提供するため、ほとんどのシステムコールやユーティリティ は、記憶媒体の実際のブロックサイズに関係なく、512 バイト単位の ブロックを使っていま す。特に指定のないかぎり、 ブロックとはこの意味で使います。 (2) 9トラックテープなど、可変長ストリングのデータを書き込む媒体で、そのストリングのサ イズ。 レコードと区別するために ブロックという用語が使われる場合もあります。ブロック にはいくつかのレコードが含まれ、レコード数がブロック化係数を表します。 HP-UX 11i Version 2: August 2003 − 28 − Hewlett-Packard Company Section 9-29 glossary(9) glossary(9) ブロック型スペシャルファイル 個々のバイトの連続ではなく、複数バイトのブロックごとにデータを転送する大容量記憶装置 (ハードディスク、テープカートリッジ ドライブなど) に対応するスペシャルファイル ( キャ ラクタ型スペシャルファイル参照)。 ブロック型スペシャルファイルはマウント可能です。 ブ ロック型スペシャルファイルによって、装置のハードウェア特性が不可視の装置にアクセスで きます。 プロンプト システムがコマンド入力可能な状態であることを示すため、 シェルがディスプレイに表示す る文字。通常のユーザーに対するプロンプトにはドル符号 ($) スーパーユーザーに対するプロ ンプトにはシャープ (#) が通常使われますが、独自のシェル変数 ( sh(1) および関連するエン トリーを参照) を設定することにより、自由に再定義できます。 2次プロンプトを参照してく ださい。 ホームディレクトリ シェル変数 HOME の値によって与えられるディレクトリ名。最初にログインすると、 login(1) が自動的に、 HOME を ログインディレクトリに設定します。この値はいつでも変更 できます。変更は、通常、 ログインディレクトリにある .profile ファイルで行います。 HOME を設定しても ログインディレクトリには何ら影響はありませんが、特によく使うディ レクトリを参照する際に便利です。 母国語 中国語、オランダ語、英語、フランス語、ドイツ語、ギリシャ語、イタリア語、片仮名、韓国 語、スペイン語、スウェーデン語、トルコ語などコンピュータユーザーが話したり書いたりす る言語 母国語サポート (NLS) ユーザーに、国際化されたソフトウェアを、アプリケーションプログラマに、このようなソフ トウェアを開発するツールを提供する HP-UXの機能 補助グループID 1つのプロセスには、実効グループIDに加え、最大 NGROUPS_MAX 個の補助グループIDが あり、ファイル アクセスパーミッションの決定に使われます。プロセスの補助グループID は、プロセスの作成時に親プロセスの補助グループIDに設定されます。 ホスト名 uucp(1) ネットワークで HP-UX を一意に識別する最大8文字の ASCII 文字列 (各種メーカーの UNIX ライクなオペレーティングシステムのすべてでサポートされているのは6文字のみ)。シ ステムの ホスト名は、 hostname(1) コマンドで表示/設定できます。ホスト名が未定義のシス テムは、 uucp(1) ネットワークでは『unknown』と記述されます。ホスト名を ノード名と混同 しないように注意してください。ノード名は、ローカルエリアネットワーク (LAN) 上で HPUX システムを一意に識別する文字列です。ホスト名とノード名が同じ場合もありますが、 まったく別のソフトウェアで設定、使用されるものです。 ノード名を参照してください。 Section 9-30 Hewlett-Packard Company − 29 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) 保存グループ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: August 2003 − 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), Ýnd(1), および grep(1) 参照) などの コマンドに対しても、特別な意味をもつ文字。メタキャラクタには、 !, ", &, ’, *, ;, <, >, ?, [, ], ‘, および | があります。それぞれに対応する意味については、 sh(1) および関連するシェルの マニュアルを参照してください。また、 正規表現も参照してください。 メッセージカタログ プログラムメッセージやプロンプトなどのプログラム文字列は、特定の地域に対応する メッ セージカタログに格納されています。 メッセージカタログからの文字列検索は、ユーザーの LANG 環境変数の値にもとづいています (「 LANG 」参照)。 メッセージ操作パーミッション msgop(2) 、および msgctl(2) システムコールの説明では、操作に必要なパーミッションは、操 作ごとに示されています。あるオブジェクトについて、特定のプロセスにこれらのパーミッ Section 9-32 Hewlett-Packard Company − 31 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) ションがあるかどうかは、以下のように、そのオブジェクトのパーミッションモードビットに よって判断します。 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 */ 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 */ HP-UX 11i Version 2: August 2003 − 32 − Hewlett-Packard Company Section 9-33 glossary(9) glossary(9) /* 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 という場合があります。 ユーザーID設定ビット ファイルシステムのすべてのファイルのモードにあるシングルビット。 ユーザーID設定ビッ トが設定されているファイルが実行されると、ファイルを実行したプロセスの 実効ユーザー ID は、ファイル所有者の 実ユーザーID と同じに設定されます。 ユーティリティ 実行可能ファイルのオブジェクトコード ( プログラム )、または特定の順序で実行すべき コマ ンド ( シェルスクリプト ) を格納した実行可能ファイル。実行可能ファイルまたはシェルスク Section 9-34 Hewlett-Packard Company − 33 − HP-UX 11i Version 2: August 2003 glossary(9) glossary(9) リプト (シェルプログラミング言語で作成) として、独自のユーティリティを作成できます。 読み取り専用ファイルシステム ファイルシステムの変更を防止する ファイルシステムの特性 ライブラリ ユーザープログラムからアクセスできるいくつかのサブルーチンと変数を含むファイル。ライ ブラリは、アーカイブの場合も、共有ライブラリの場合もあります。例えば、 /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 の場合、 スラッシュ (/) 文字が ルートディレクトリを表します。ルートディレ クトリは、ファイルシステムの中で唯一、自らの 親ディレクトリであるディレクトリです。 (2) 各プロセスは、 スラッシュ (/) で始まるパスのパス名決定のため、ルートディレクトリの 概念をプロセスと結び付けています。プロセスのルートディレクトリは、ルートファイルシス テムのルートディレクトリである必要はなく、 chroot(1) コマンドか chroot(2) システムコール によって変更できます。このようなディレクトリは、関連するプロセスには、独自の親を指し ているように扱われます。 HP-UX 11i Version 2: August 2003 − 34 − Hewlett-Packard Company Section 9-35 glossary(9) glossary(9) ルートボリューム 大容量記憶装置の中で、ブート領域 ( 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 が使われる場合もあります。 Section 9-36 Hewlett-Packard Company − 35 − HP-UX 11i Version 2: August 2003 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 』、指導マニュアル、その他の学習用文書を参照してください。これらの文書 はシステムと共に提供されるか、または個別に入手できます。システムの実現と保守についての詳細は、『シ ステム/ワークグループの管理』マニュアルで説明されています。 マンページの編成 『HP-UX リファレンス』およびそのオンライン上の対応するものの内容は、 マンページと呼ぶいくつかの独 立したエントリーです。これは、 「マニュアルエントリー」または 「リファレンスページ」とも呼ばれます。 参照しやすいように、マンページは 8つの特殊化したセクションに分かれています。プリントされたマニュア ルには、それぞれのボリュームのための目次や合成インデックスもあります。 それぞれのマンページは、プリントされた 1 または複数のページで構成され、そのマンページの名前とセク ション番号が上部の隅にプリントされています。マンページは、リファレンスの各セクション内で、先頭に intro ページがあることを除いてアルファベット順に並んでいます。マンページは、 pagename(section) という形 式の名前とセクション番号で参照されます。 マンページは、そのマンページがシステム上にある場合、 man コマンドによりオンラインで使用可能です。詳 細は、セクション 1 の man(1) マンページを参照してください。 プリントされたマニュアルのそれぞれのページには、2つのページ番号がページの下部にプリントされていま す。中央のページ番号はそれぞれの新しいマンページの先頭でページ 1 から始まります。これは通常の書体で HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 9-37 introduction(9) introduction(9) 2つのダッシュに挟まれています。それぞれのページの外側の隅にプリントされている番号は、セクション内 でプリントされるページの連番になります。ユーザーがマンページを探すときは、通常、辞書を読むときのよ うにページの上部のアルファベット順の見出しを使用します。 マンページの中には、2 つ以上のコマンドまたはルーチンを説明しているものがあります。この場合、マン ページには、通常「名称」の項に示される最初のコマンドまたは関数の名前が付けられます。場合によって は、マンページの名前は「名称」の項に対する接頭辞として示されます。このような場合、その名前はコマン ドまたは関数をより一般的な用語で表します。例えば、 acct(1M) マンページは acctdisk 、 acctdusg 、 accton 、 acctwtmp といったコマンドを記述しており、 string(3C) マンページは多くの文字列関数を記述していま す。 以下のような、さまざまなセクションが記述されています。 ボリューム目次 (プリントされたマニュアル) すべてのマンページの、各セクションで記述されている順序での完全なリストです。コマンド、関 数、機能の名前で、それ自体が記述されているマンページとは異なるような名前をすべてアルファ ベット順に混在させたリストも含まれます。 セクション 1: ユーザーコマンド 通常、ユーザーが直接呼び出すか、またはコマンド言語手続き (スクリプト) から呼び出されるプログ ラムです。 セクション 1M: システム管理コマンド システムのインストールや保守のために使用するコマンドです。ブートプロセス、クラッシュの回 復、システムの完全性の検査、およびその他の必要な処理が含まれます。このセクションのほとんど のコマンドがスーパーユーザー特権を必要とします。 セクション 2: システムコール HP-UX カーネルへの入り口であり、C 言語インタフェースが含まれます。ここのトピックは主にプロ グラマにとって関心があるものです。 セクション 3: ライブラリ関数 さまざまなシステムライブラリに (バイナリ形式で) 存在する、使用可能なサブルーチンです。ここの トピックは主にプログラマにとって関心があるものです。 セクション 4: ファイルフォーマット さまざまなタイプのファイルの構造であり、主に管理者とプログラマにとって関心があるものです。 例えば、リンクエディタの出力ファイルフォーマットは、 a.out(4) で記述されています。単一のコマン ドだけで使用されるファイル (アセンブラが使用する中間ファイルなど) は記述されません。セクショ ン 4 のフォーマットに対応した C 言語の宣言は、ディレクトリ /usr/include と /usr/include/sys にあり ます。 Section 9-38 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 introduction(9) introduction(9) セクション 5: 各種情報 ヘッダファイル、キャラクタセット、マクロパッケージ、その他のトピックの説明などのさまざま情 報です。 セクション 7: デバイス特殊ファイル HP-UX と システム I/O デバイス間のリンクを提供する特殊 (デバイス) ファイルの特性です。それぞ れのトピックの名前は、通常、個々の特殊ファイルの名前ではなく I/O デバイスのタイプを参照しま す。 セクション 9: 概要説明および用語集 一般的な概要説明 (本項) および HP-UX 環境で使用する用語の定義です。 合成インデックス (プリントされたマニュアル) それぞれのマンページの先頭あたりにある「名称」の項に基づいたキーワードやトピック、およびそ の他の情報のアルファベット順のリストです。マンページの名前とセクションに対して相互参照され ます。インデックスには、さまざまなコマンドインタプリタ (「シェル」) の組み込み機能への参照も 含まれます。 マンページの形式 すべてのマンページは、設定されているセクション見出しの形式に従いますが、すべてのセクション見出しが それぞれのマンページに含まれるわけではありません。いくつかのマンページは自明の特殊な見出しを持ちま す。 名称 コマンド、関数、または機能の名前を提供し、その目的を簡潔に述べます。 構文 コマンドやプログラムの実体の構文を要約します。以下のようないくつかの規約が使用されます。 一定幅の文字は、この表示通りに入力しなければならないリテラル文字を示します。これらの文字 は、オンラインマンページではボールド体で表示されます。 イタリック体の文字列は、適切な値で置き換えなければならない変数要素を表します。 ローマン体の角かっこ ([ ]) は、その内容の指定が任意であることを示します。 ローマン体の中かっこ ({ }) は、必須の要素を示します。通常は選択を示します。 省略符号 (...) は、直前の要素を繰り返せることを示します。 注意:ダッシュ (−) 、プラス符号 (+) 、等号 (=) で始まる引き数は、これがファイル名を指定する位置 にある場合であっても、多くの場合コマンドオプションとして定義されます。従って、ファイル名の 先頭を − 、 + 、 = にするのはよくありません。 説明 それぞれのエントリーの機能と動作を説明します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 9-39 introduction(9) introduction(9) 多言語化対応 この見出しの下の情報は、さまざまな国の言語のためのプログラミングに関係します。一般的なエン トリーは、1バイト文字または複数バイト文字のサポート、システムの動作への言語関連の環境変数の 効果、その他の関連情報を示します。 ネットワーク機能 この見出しの下の情報は、そこに記述されているネットワーク機能 (NFS など) を使用している場合の み適用できます。 戻り値 関数呼び出しで戻される値、またはコマンドの戻りコードの値を説明します。 診断 作成される可能性がある診断情報を説明します。自明のメッセージはリストしません。 エラー 関数のエラー条件 ( errno に設定されます) と、これに対応するエラーメッセージをリストします。 例 一般的な使用例を示します。 警告 問題や欠陥となり得る状況を説明します。 制約 特定のハードウェア、またはハードウェアの組み合わせの使用に関連した、HP-UX 操作におけるバリ エーションを記述します。 著者 このマンページで説明するソフトウェアの出所を示します。特に記述がない場合、エントリーのソー スは System V です。 ファイル プログラムまたはコマンドが使用するファイルや影響を与えるファイルの名前をリストします。 参照 関連するマンページおよび他のマニュアルの参照箇所を示します。 標準準拠 この項では、以下の業界標準の 1 つまたは複数により対象とされるそれぞれのコマンドまたはサブ ルーチンのエントリーポイントについて、該当する HP-UX 構成要素が準拠する標準仕様をリストしま す。 以下のさまざまな標準があります。 AES OSF Application Environment Specification ANSI C ANSI X3.159-1989 POSIX.1 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) Section 9-40 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 introduction(9) introduction(9) 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 シェル) はデフォルトのプロンプ トとして $ を使用します。C シェルは % を使用します。 ログインについての詳細は login(1) を、パスワードの変更については passwd(1) を、ログインシェルの変更に ついては chsh(1) を参照してください。 ログアウト シェルからのログアウトは、 exit コマンドまたは eof (ファイル終了) 文字 (後述の「特殊対話文字」のサブセ クションを参照 ) を入力して行えます。シェルは終了し、もう一度 login: プロンプトが表示されます ( ignoreeof 特殊コマンドについての詳細は、使用しているシェルが C, Korn, POSIX である場合、それぞれ csh(1) 、 ksh(1) 、 sh-posix(1) を参照してください。) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 9-41 introduction(9) introduction(9) 端末を介した通信方法 HP-UX はキーボード入力文字を集めてバッファに保存します。累積された文字は、ユーザーが Return を入力 するまでシェルや他のプログラムには渡されません。 HP-UX 端末入出力は全二重であり、完全な先読みを行います。つまり、プログラムがディスプレイや端末に表 示を行っている間でも、任意の時点で入力できます。もちろん、出力中に入力する場合は、出力ディスプレイ の中に入力文字が混在します。ただし、何を入力しても正しい並びで保存され、解釈されます。先読みの量に は限界がありますが、これには余裕があり、システムの負荷が非常に過多になったりシステムの操作が異常に ならない限り、超過することはほとんどありません。先読みの限界を超えた場合、システムは すべての保存し た文字を捨てます。 stty(1) は、ユーザーの端末の特性をシステムに対して説明する方法を説明しています。 proÝle(4) は、ユーザー がログインするたびに自動的にこの作業を行う方法を説明しています。 特殊対話文字 端末の入力と出力を制御するために、いくつかの特殊文字が使用されます。これらの文字にはデフォルトがあ りますが、 stty コマンド ( stty(1) を参照) で再定義できます。 stty ログイン時のデフォルト 名 文字 (ASCII 名 ; キー名) eof erase kill ˆD (EOT) # @ intr quit ˆ? (DEL; Delete, Rub, Rubout) ˆ\ (FS) start stop ˆQ (DC1; X-ON) ˆS (DC3; X-OFF) 共通 再定義 ˆH (BS; Backspace) ˆU (NAK), ˆX (CAN) ˆC (ETX) eof 文字は、プログラムやスクリプトによって読み取られたときに端末からの「ファイル」入力を終了しま す。拡張機能により、 eof はシェルも終了できます (前述の「ログアウト」のサブセクションを参照)。 kill 文字は、端末の入力行上のその前に入力されたすべての文字を削除します。 erase 文字は最後に入力され た文字を消去します。 erase を連続して使用すると、入力行の先頭方向へと文字を消去していきます (先頭は 越えません)。 intr 文字は、入力バッファを迂回する割り込みシグナルを生成します。このシグナルにより、一般的に実行中 のどのようなプログラムも終了します。このシグナルを使用して、必要のない長いプリントアウトを中止でき ます。ただし、プログラムがこのシグナルを全く無視するように、またはシグナルが発生したときにプログラ ムが (終了する代わりに) 通知を受けるように、取り決めることができます。例えば、 vi エディタは割り込み を捉えると、終了する代わりに実行中の処理を中止するので、割り込みを使用することで、編集中のファイル Section 9-42 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 introduction(9) introduction(9) を失わずに編集操作を停止できます。 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 へのログインが成功すると、シェルはユーザーの端末からの入力をモニターします。シェルは端末から 入力された行を受け付け、これをコマンド名と引き数に分離し、そのコマンドを実行します。コマンドとし て、組み込まれたシェルの名前や、コマンドの実行可能スクリプト、実行可能プログラムを指定できます。シ ステム提供コマンドについては、シェルが見つけることができるディレクトリにこれらのコマンドが入れてあ ること以外は、特筆すべきことはありません。コマンドをユーザー固有のディレクトリに入れておき、シェル がここでコマンドを見つけるようにすることもできます。 コマンド名はシェルに対する入力行の最初の語です。コマンドとその引き数は、互いに空白 (1つ以上のスペー スかタブ文字、またはその両方) で区切ります。 プログラムが終了すると、通常、シェルは制御を取り戻し、ユーザーにプロンプトを表示して、次のコマンド を受け付けられる状態であることを示します。シェルには他に多くの機能があります。詳細は、該当するマン ページで記述されています。POSIX シェルについては sh-posix(1) 、Korn シェルは ksh(1) 、C シェルは csh(1) です。 HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 9-43 introduction(9) introduction(9) 現在のディレクトリ 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) を参照)。 プログラムの記述 ソースプログラムのテキストを 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 はリンカを自動的に呼び出します。 これまでの過程全体を何の診断も表示されずに通過した場合、プロンプトに応答してシェルにそのプログラム の名前を指定すれば、結果のプログラムを実行できます。 Section 9-44 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 introduction(9) introduction(9) ユーザーのプログラムは、システムプログラムが 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) を参照してください。 許諾 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 (和文) HP-UX 11i Version 2: August 2003 −9− Hewlett-Packard Company Section 9-45
© Copyright 2024 Paperzz