HP-UX リファレンス セクション 3 : ライブラリ (N~Z) HP-UX 11i バージョン 2 Vol. 7 / 9 Manufacturing Part Number : B2355-90821 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 3 : Library Functions(N~Z) HP-UX 11i Version 2, Volume 7 of 9』(HP Part No. B2355-90785) を翻訳したものです。 表記規約 本書では、次の表記規約を使用します。 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. 7 目次 セクション 3 Vol. 7 目次 セクション 3 目次 Vol. 6&7 セクション 3: ライブラリ エントリ 名(セクション): 名称 説明 intro(3C): intro…………………………………………………………………………サブルーチンおよびライブラリの概要 a64l(3C): a64l(), l64a()…………………………………………………long 整数と 64 進の ASCII 文字列間の変換 abort(3C): abort()……………………………………………………………………ソフトウェア アボートフォルトの生成 abs(3C): abs(), labs()……………………………………………………………………………整数の絶対値のリターン aclentrystart(): 文字列形式からアクセス制御リスト (ACL) 構造体への変換………………………strtoacl(3C)参照 aclsort(3C): aclsort()……………………………………………アクセス制御リストのソート(JFSファイルシステムのみ) acltostr(3C): acltostr()………………………………………アクセス制御リスト (ACL) 構造体の文字列形式への変換 acos(3M): acos(), acosf(), acosl(), acosw(), acosq()…………………………………………………逆余弦関数 acosd(3M): acosd(), acosdf(), acosdl(), acosdw(), acosdq()…………………………………度による逆余弦関数 acosdf(): 度による逆余弦関数 (float) ……………………………………………………………………acosd(3M)参照参照 acosdl(): 度による逆余弦関数 (long double) …………………………………………………………………acosd(3M)参照 acosdq(): 度による逆余弦関数 (quad) ………………………………………………………………………acosd(3M)参照 acosdw(): 度による逆余弦関数 (extended) ……………………………………………………………………acosd(3M)参照 acosf(): 逆余弦関数 (float) ………………………………………………………………………………………acos(3M)参照 acosh(3M): acosh(), acoshf(), acoshl(), acoshw(), acoshq()……………………………………逆双曲線余弦関数 acoshf(): 複素数の逆余弦関数 (float) …………………………………………………………………………acosh(3M)参照 acoshl(): 複素数の逆余弦関数 (long double) .…………………………………………………………………acosh(3M)参照 acoshq(): 複素数の逆余弦関数 (quad) …………………………………………………………………………acosh(3M)参照 acoshw(): 複素数の逆余弦関数 (extended) ……………………………………………………………………acosh(3M)参照 acosl(): 逆余弦関数 (long double) ………………………………………………………………………………acos(3M)参照 acosq(): 逆余弦関数 (quad) ………………………………………………………………………………acos(3M)参照 acosw(): 逆余弦関数 (extended) ………………………………………………………………………………acos(3M)参照 addch(3X): addch, mvaddch, mvwaddch, waddch………………………………………………………………… ……………………………………………1バイト文字と修飾情報をウィンドウに追加して、カーソルを進める addchnstr(3X): addchnstr, mvaddchnstr, mvwaddchnstr, waddchnstr………………………………………………… ……………………………… 1バイト文字からなる長さが制限された文字列と修飾情報のウィンドウへの追加 addchstr(3X): addchstr, mvaddchstr, mvwaddchstr, waddchstr………………………………………………………… …………………………………………………… 1バイト文字からなる文字列と修飾情報のウィンドウへの追加 addmntent(): 開いているファイルシステム記述子ファイルへのエントリーの追加…………………getmntent(3X)参照 addnstr(3X): addnstr, addstr, mvaddnstr, mvaddstr, mvwaddnstr, mvwaddstr, waddnstr, waddstr…………… …………………修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める addnwstr(3X): addnwstr, addwstr, mvaddnwstr, mvaddwstr, mvwaddnwstr, mvwaddwstr, waddnwstr, waddwstr………………………ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める addsev(3C): addsev()………………………………………………………フォーマットルーチンに対する重大度の強化 addstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを ¥n 進める………… …………………………………………………………………………………………………………addnstr(3X)参照 addwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める…………addnwstr(3X)参照 add_wch(3X): add_wch, mvadd_wch, mvwadd_wch, wadd_wch………情報文字および修飾情報のウィンドウへの追加 add_wchnstr(3X): add_wchnstr, add_wchstr, mvadd_wchnstr, mvadd_wchstr, mvwadd_wchnstr, mvwadd_wchstr, wadd_wchnstr,wadd_wchstr………………………………………………………………… …………………………………………………………複情報文字および修飾情報の配列のウィンドウへの追加 add_wchstr(): 複情報文字および修飾情報の配列のウィンドウへの追加…………………………add_wchnstr(3X)参照 ADVANCE(): 16ビット文字処理用ツール…………………………………………………………………nl_tools_16(3X)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company i 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 advance(): 正規表現 サブストリングの比較ルーチン………………………………………………………regexp(3X)参照 alloca(): メインメモリー割り当て………………………………………………………………………malloc(3C)参照 alphasort(): ディレクトリへのポインターの配列をソート………………………………………………scandir(3C)参照 annuity(3M): annuity(), annuityf(), annuityl(), annuityw(), annuityq()……年金の現在の評価ファクター annuityf(): 年金の現在の評価ファクター (float) …………………………………………………………annuity(3M)参照 annuityl(): 年金の現在の評価ファクター (long double) …………………………………………………annuity(3M)参照 annuityq(): 年金の現在の評価ファクター (quad) ………………………………………………………annuity(3M)参照 annuityw(): 年金の現在の評価ファクター (extended) ……………………………………………………annuity(3M)参照 asctime(): 日付と時刻の文字列への変換……………………………………………………………………ctime(3C)参照 asctime_r(): 日付と時刻の文字列への変換 ……………………………………………………………………ctime(3C)参照 asin(3M): asin(), asinf(), asinl(), asinw(), asinq()………………………………………………………逆正弦関数 asind(3M): asind(), asindf(), asindl(), asindw(), asindq()…………………………………度による逆正弦関数 asindf(): 度による逆正弦関数 (float) ………………………………………………………………………asind(3M)参照 asindl(): 度による逆正弦関数 (long double) …………………………………………………………………asind(3M)参照 asindq(): 度による逆正弦関数 (quad) …………………………………………………………………………asind(3M)参照 asindw(): 度による逆正弦関数 (extended) ………………………………………………………………………asind(3M)参照 asinf(): 逆正弦関数 (float) ………………………………………………………………………………asin(3M)参照 asinh(3M): asinh(), asinhf(), asinhl(), asinhw(), asinhq()……………………………………逆双曲線正弦関数 asinhf(): 逆双曲線正弦関数 (float) ……………………………………………………………………………asinh(3M)参照 asinhl(): 逆双曲線正弦関数 (long double) ……………………………………………………………………asinh(3M)参照 asinhq(): 逆双曲線正弦関数 (quad) …………………………………………………………………………asinh(3M)参照 asinhw(): 逆双曲線正弦関数 (extended) …………………………………………………………………………asinh(3M)参照 asinl(): 逆正弦関数(long double) …………………………………………………………………………………asin(3M)参照 asinq(): 逆正弦関数(quad) …………………………………………………………………………………………asin(3M)参照 asinw(): 逆正弦関数(extended) ……………………………………………………………………………………asin(3M)参照 assert(3X): assert()……………………………………………………………………………プログラムアサーションの照合 atan(3M): atan(), atanf(), atanl(), atanw(), atanq()………………………………………………………逆正接関数 atan2(3M): atan2(), atan2f(), atan2l(), atan2w(), atan2q()………………………………………逆正接/象限関数 atan2d(3M): atan2d(), atan2df(), atan2dl(), atan2dw(), atan2dq()…………………度による逆正接/象限関数 atan2df(): 度による逆正接/象限関数 (float) …………………………………………………………………atan2d(3M)参照 atan2dl(): 度による逆正接/象限関数 (long double) …………………………………………………………atan2d(3M)参照 atan2dq(): 度による逆正接/象限関数 (quad) …………………………………………………………………atan2d(3M)参照 atan2dw(): 度による逆正接/象限関数 (extended) ……………………………………………………………atan2d(3M)参照 atan2f(): 逆正接/象限関数 (float) ………………………………………………………………………………atan2(3M)参照 atan2l(): 逆正接/象限関数 (long double) ………………………………………………………………………atan2(3M)参照 atan2q(): 逆正接/象限関数 (quad) ………………………………………………………………………………atan2(3M)参照 atan2w(): 逆正接/象限関数 (extended) …………………………………………………………………………atan2(3M)参照 atand(3M): atand(), atandf(), atandl(), atandw(), atandq()…………………………………度による逆正接関数 atandf(): 度による逆正接関数 (float) …………………………………………………………………………atand(3M)参照 atandl(): 度による逆正接関数 (long double) …………………………………………………………………atand(3M)参照 atandq(): 度による逆正接関数 (quad) …………………………………………………………………………atand(3M)参照 atandw(): 度による逆正接関数 (extended) ……………………………………………………………………atand(3M)参照 atanf(): 逆正接関数 (float) ………………………………………………………………………………………atan(3M)参照 atanh(3M): atanh(), atanhf(), atanhl(), atanhw(), atanhq()……………………………………逆双曲線正接関数 ii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 atanhf(): 逆双曲線正接関数 (float) …………………………………………………………………………atanh(3M)参照 atanhl(): 逆双曲線正接関数 (long double) ……………………………………………………………………atanh(3M)参照 atanhq(): 逆双曲線正接関数 (quad) …………………………………………………………………………atanh(3M)参照 atanhw(): 逆双曲線正接関数 (extended) ………………………………………………………………………atanh(3M)参照 atanl(): 逆正接関数 (long double) …………………………………………………………………………atan(3M)参照 atanq(): 逆正接関数 (quad) ………………………………………………………………………………………atan(3M)参照 atanw(): 逆正接関数 (extended) ……………………………………………………………………………………atan(3M)参照 atexit(3): atexit……………………………………………………………………プログラムの終了時に呼び出す関数を登録 atof(): 文字列を倍精度数に変換…………………………………………………………………………………strtod(3C)参照 atoi(): 文字列を整数に変換………………………………………………………………………………………strtol(3C)参照 atol(): 文字列を整数に変換………………………………………………………………………………………strtol(3C)参照 attroff(3X): attroff, attron, attrset, wattroff, wattron, wattrset…………制限付きウィンドウ属性制御関数 attron(): 制限付きウィンドウ属性制御関数………………………………………………………………attroff(3X)参照 attrset(): 制限付きウィンドウ属性制御関数…………………………………………………………………attroff(3X)参照 attr_get(3X): attr_get, attr_off, attr_on, attr_set, color_set, wattr_get, wattr_off, wattr_on, wattr_set, wcolor_set………………… …………………………………………………………………………………………………ウィンドウ属性制御関数 attr_off(): ウィンドウ属性制御関数…………………………………………………………………………attr_get(3X)参照 attr_on(): ウィンドウ属性制御関数…………………………………………………………………………attr_get(3X)参照 attr_set(): ウィンドウ属性制御関数…………………………………………………………………………attr_get(3X)参照 authdes_create(): RPC 用の旧ライブラリルーチ…………………………………………………………rpc_soc(3N)参照 authdes_seccreate(): Secure RPC のライブラリルーチン……………………………………………secure_rpc(3N)参照 authnone_create(): クライアント側のリモートプロシージャコール認証のためのライブラリルーチン……………… ……………………………………………………………………………………………………rpc_clnt_auth(3N)参照 authsys_create(): クライアント側のリモートプロシージャコール認証のためのライブラリルーチン……………… ……………………………………………………………………………………………………rpc_clnt_auth(3N)参照 authsys_create_default(): クライアント側のリモートプロシージャコール認証のためのライブラリルーチン… ……………………………………………………………………………………………………rpc_clnt_auth(3N)参照 authunix_create(): RPC 用の旧ライブラリルーチン……………………………………………………rpc_soc(3N)参照 authunix_create_default(): RPC 用の旧ライブラリルーチン………………………………………rpc_soc(3N)参照 auth_destroy(): クライアント側のリモートプロシージャコール認証のためのライブラリルーチン…… ……………………………………………………………………………………………………rpc_clnt_auth(3N)参照 basename(3C): basename(), dirname()………………………………………………………………パス名構成要素の抽出 baudrate(3X): baudrate………………………………………………………………………………端末のボーレートの取得 bcmp(): BSD のメモリー比較……………………………………………………………………………………memory(3C)参照 bcopy(): BSD メモリーコピー…………………………………………………………………………………memory(3C)参照 beep(3X): beep…………………………………………………………………………………………………………音響シグナル bgets(3G): bgets()…………………………………………………………………次の区切り記号までストリームを読み込む bigcrypt(3C): bigcrypt…………………………………………………………………………大きい文字列のハッシュ暗号化 bindresvpor(3N): bindresvport()………………………………………………………ソケットを特権IPポートにバインド bkgd(): 1バイト文字を使用したバックグラウンド文字および修飾情報の設定または取得…………………bkgd(3X)参照 bkgd(3X): bkgd, bkgdset, getbkgd, wbkgd, wbkgdset……………………………………………………………………… ………………………………1バイト文字を使用したバックグラウンド文字および修飾情報の設定または取得 bkgdset(): 1バイト文字を使用したバックグラウンド文字および修飾情報の設定または取得……………bkgd(3X)参照 bkgrnd(): 複情報文字を使用したバックグラウンド文字の設定または取得………………………………bkgrnd(3X)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company iii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 bkgrnd(3X): bkgrnd, bkgrndset, getbkgrnd, wbkgrnd, wbkgrndset, wgetbkgrnd…………………………………… ……………………………………………………複情報文字を使用したバックグラウンド文字の設定または取得 blopen(3C): blopen(), blclose(), blread(), blget(), blset()………………………………………………………… ……………………………………………………………ターミナル ブロックモード ライブラリインタフェース bkgrndset(): 複情報文字を使用したバックグラウンド文字の設定または取得…………………………bkgrnd(3X)参照 blclose(): ターミナル ブロックモード ライブラリインタフェース……………………………………blmode(3C)参照 blget(): ターミナル ブロックモード ライブラリインタフェース………………………………………blmode(3C)参照 blopen(): ターミナル ブロックモード ライブラリインタフェース………………………………………blmode(3C)参照 blread(): ターミナル ブロックモード ライブラリインタフェース………………………………………blmode(3C)参照 blset(): ターミナル ブロックモード ライブラリインタフェース………………………………………blmode(3C)参照 border(3X): border, wborder……………………………………………………1バイト文字および修飾情報で枠線を引く border_set(3X): border_set, wborder_set……………………………………複情報文字および修飾情報で枠線を引く box(3X): box…………………………………………………………………………1バイト文字および修飾情報で枠線を引く box_set(3X): box_set…………………………………………………………………複情報文字および修飾情報で枠線を引く bsdproc(3C): killpg, getpgrp, setpgrp, sigvec, signal…………………………4.2 BSDとの互換プロセス制御機能 bsd_signal(3C): bsd_signal…………………………………………………………………………簡略化されたシグナル機能 bsearch(3C): bsearch()……………………………………………………………………ソートテーブルのバイナリサーチ btowc(): シングルバイト キャラクタとワイド キャラクタ間の変換………………………………………btowc(3C)参照 btowc(3C): btowc(), wctob()…………………………………シングルバイト キャラクタとワイド キャラクタ間の変換 bufsplit(3G): bufsplit()…………………………………………………………………バッファーをフィールドに分割する bwtmpname(): 新しい wtmpsと btmpsデータベースへのレコードの書き込み……………………………bwtmps(3C)参照 bwtmps(3C): bwtmps: bwtmpname(), updatebwdb(), getbwent(), setbwent(), endbwent()…………………… ……………………………………………………新しい wtmpsと btmpsデータベースへのレコードの書き込み byteorder(3N): htonl(), htons(), ntohl(), ntohs()………………………………………………………………………… …………………………………………ホスト バイトオーダとネットワーク バイトオーダとの間での値の変換 byte_status(), BYTE_STATUS(): 16ビット文字処理用ツール………………………………………nl_tools_16(3X)参照 bzero(): メモリー操作…………………………………………………………………………………………memory(3C)参照 cabs(3M): cabs(), cabsf(), cabsl(), cabsw(), cabsq()…………………………………………………………………… ………………………… 複素数の絶対値関数 (ノルム関数、モジュラス関数、マグニチュード関数ともいう) cabsf(): 複素数の絶対値関数 (float) ……………………………………………………………………………cabs(3M)参照 cabsl(): 複素数の絶対値関数 (long double) ……………………………………………………………………cabs(3M)参照 cabsq(): 複素数の絶対値関数 (quad) ……………………………………………………………………………cabs(3M)参照 cabsw(): 複素数の絶対値関数 (extended) …………………………………………………………………………cabs(3M)参照 cacos(3M): cacos(), cacosf(), cacosl(), cacosw(), cacosq()…………………………………複素数の逆余弦関数 cacosf(): 複素数の逆余弦関数 (float) …………………………………………………………………………cacos(3M)参照 cacosh(3M): cacosh(), cacoshf(), cacoshl(), cacoshw(), cacoshq()…………………複素数の逆双曲線余弦関数 cacoshf(): 複素数の逆双曲線余弦関数 (float) ………………………………………………………………cacosh(3M)参照 cacoshl(): 複素数の逆双曲線余弦関数 (long double) ………………………………………………………cacosh(3M)参照 cacoshq(): 複素数の逆双曲線余弦関数 (quad) ………………………………………………………………cacosh(3M)参照 cacoshw(): 複素数の逆双曲線余弦関数 (extended) …………………………………………………………cacosh(3M)参照 cacosl(): 複素数の逆余弦関数 (long double) …………………………………………………………………cacos(3M)参照 cacosq(): 複素数の逆余弦関数 (quad) …………………………………………………………………………cacos(3M)参照 cacosw(): 複素数の逆余弦関数 (extended) ……………………………………………………………………cacos(3M)参照 calloc(): 配列のためのメモリーを確保する…………………………………………………………………malloc(3C)参照 iv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 callrpc(): RPC 用の旧ライブラリルーチン…………………………………………………………………rpc_soc(3N)参照 can_change_color(3X): can_change_color, color_content, has_colors, init_color, init_pair, start_color, pair_content…………………………………………………………………………色操作関数 carg(3M): carg(), cargf(), cargl(), cargw(), cargq()………………………複素数の変関数 (位相角関数ともいう) cargf(): 複素数の変関数 (float) ………………………………………………………………………………carg(3M)参照 cargl(): 複素数の変関数 (long double) ………………………………………………………………………carg(3M)参照 cargq(): 複素数の変関数 (quad) ………………………………………………………………………………carg(3M)参照 cargw(): 複素数の変関数 (extended) ………………………………………………………………………………carg(3M)参照 casin(3M): casin(), casinf(), casinl(), casinw(), casinq()…………………………………複素数の逆正弦関数 casinf(): 複素数の逆正弦関数 (float) …………………………………………………………………………casin(3M)参照 casinh(3M): casinh(), casinhf(), casinhl(), casinhw(), casinhq()…………………複素数の逆双曲線正弦関数 casinhf(): 複素数の逆双曲線正弦関数 (float) ………………………………………………………………casinh(3M)参照 casinhl(): 複素数の逆双曲線正弦関数 (long double) ………………………………………………………casinh(3M)参照 casinhq(): 複素数の逆双曲線正弦関数 (quad) ………………………………………………………………casinh(3M)参照 casinhw(): 複素数の逆双曲線正弦関数 (extended) ……………………………………………………………casinh(3M)参照 casinl(): 複素数の逆正弦関数 (long double) ……………………………………………………………………casin(3M)参照 casinq(): 複素数の逆正弦関数 (quad) …………………………………………………………………………casin(3M)参照 casinw(): 複素数の逆正弦関数 (extended) ……………………………………………………………………casin(3M)参照 catan(3M): catan(), catanf(), catanl(), catanw(), catanq()…………………………………複素数の逆正接関数 catanf(): 複素数の逆正接関数 (float) …………………………………………………………………………catan(3M)参照 catanh(3M): catanh(), catanhf(), catanhl(), catanhw(), catanhq()…………………複素数の逆双曲線正接関数 catanhl(): 複素数の逆双曲線正接関数 (long double) ………………………………………………………catanh(3M)参照 catanhq(): 複素数の逆双曲線正接関数 (quad) ………………………………………………………………catanh(3M)参照 catanhw(): 複素数の逆双曲線正接関数 (extended) …………………………………………………………catanh(3M)参照 catanl(): 複素数の逆正接関数 (long double) ………………………………………………………………catan(3M)参照 catanq(): 複素数の逆正接関数 (quad) …………………………………………………………………………catan(3M)参照 catanw(): 複素数の逆正接関数 (extended) ………………………………………………………………………catan(3M)参照 catclose(): NLS メッセージカタログを読むためにクローズする………………………………………catopen(3C)参照 catgets(3C): catgets()………………………………………………………………………プログラムメッセージの読み込み catopen(3C): catopen(), catclose()…………………………メッセージカタログを読むためのオープン とクローズ cbreak(3X): cbreak, nocbreak, noraw, raw………………………………………………………………入力モード制御関数 cbrt(3M): cbrt(), cbrtf(), cbrtl(), cbrtw(), cbrtq()………………………………………………………立方根関数 cbrtf(): 立方根関数 (float) ………………………………………………………………………………………cbrt(3M)参照 cbrtl(): 立方根関数 (long double) ………………………………………………………………………………cbrt(3M)参照 cbrtq(): 立方根関数 (quad) ………………………………………………………………………………………cbrt(3M)参照 cbrtw(): 立方根関数 (extended) ………………………………………………………………………………cbrt(3M)参照 ccos(3M): ccos(), ccosf(), ccosl(), ccosw(), ccosq()………………………………………………複素数の余弦関数 ccosf(): 複素数の余弦関数 (float) ………………………………………………………………………………ccos(3M)参照 ccosh(3M): ccosh(), ccoshf(), ccoshl(), ccoshw(), ccoshq()……………………………複素数の双曲線余弦関数 ccoshf(): 複素数の双曲線余弦関数 (float) ……………………………………………………………………ccosh(3M)参照 ccoshl(): 複素数の双曲線余弦関数 (long double) ……………………………………………………………ccosh(3M)参照 ccoshq(): 複素数の双曲線余弦関数 (quad) ……………………………………………………………………ccosh(3M)参照 ccoshw(): 複素数の双曲線余弦関数 (extended) …………………………………………………………………ccosh(3M)参照 ccosl(): 複素数の余弦関数 (long double) ………………………………………………………………………ccos(3M)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company v 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 ccosq(): 複素数の余弦関数 (quad) ………………………………………………………………………………ccos(3M)参照 ccosw(): 複素数の余弦関数 (extended) ……………………………………………………………………………ccos(3M)参照 ceil(3M): ceil(), ceilf(), ceill(), ceilw(), ceilq()………………………………………………切り上げ丸め関数 ceilf(): 切り上げ丸め関数 (float) …………………………………………………………………………………ceil(3M)参照 ceill(): 切り上げ丸め関数 (long double) …………………………………………………………………………ceil(3M)参照 ceilq(): 切り上げ丸め関数 (quad) …………………………………………………………………………………ceil(3M)参照 ceilw(): 切り上げ丸め関数 (extended) ……………………………………………………………………………ceil(3M)参照 cexp(3M): cexp(), cexpf(), cexpl(), cexpw(), cexpq( )……………………………………………複素数の指数関数 cexpf(): 複素数の指数関数 (float) ………………………………………………………………………………cexp(3M)参照 cexpl(): 複素数の指数関数 (long double) ………………………………………………………………………cexp(3M)参照 cexpq(): 複素数の指数関数 (quad) ………………………………………………………………………………cexp(3M)参照 cexpw(): 複素数の指数関数 (extended) ……………………………………………………………………………cexp(3M)参照 cfgetispeed(): tty 入力ボーレートを得る……………………………………………………………………cfspeed(3C)参照 cfgetospeed(): tty 出力ボーレートを得る……………………………………………………………………cfspeed(3C)参照 cfsetispeed(): 入力ボーレートをセットする………………………………………………………………cfspeed(3C)参照 cfsetospeed(): 出力ボーレートをセットする…………………………………………………………cfspeed(3C)参照 cfspeed(3C): cfgetospeed(), cfsetospeed(), cfgetispeed(), cfsetispeed()………………tty ボーレート関数 CHARADV(): 16ビット文字処理用ツール……………………………………………………………………nl_tools_16(3X)参照 CHARAT(): 16ビット文字処理用ツール……………………………………………………………………nl_tools_16(3X)参照 chgat(3X): chgat, mvchgat, mvwchgat, wchgat……………………………………ウィンドウ内の文字の修飾情報の変更 chownacl(3C): chownacl()……………………………………………………………ファイルのアクセス制御リスト (ACL) cimag(3M): cimag(), cimagf(), cimagl(), cimagw(), cimagq()………………………………………複素数の虚数部 cimagf(): 虚数部関数(float) ………………………………………………………………………………cimag(3M)参照 cimagl(): 虚数部関数(long double) ………………………………………………………………………………cimag(3M)参照 cimagq(): 虚数部関数(quad) ………………………………………………………………………………cimag(3M)参照 cimagw(): 虚数部関数(extended) ………………………………………………………………………………cimag(3M)参照 cis(3M): cis(), cisf(), cisl(), cisw(), cisq()…………………指定した角度 (ラジアン)での絶対値が1の複素数 cisf(): 余弦+i×正弦 (float) ………………………………………………………………………………………cis(3M)参照 cisl(): 余弦+i×正弦 (long double) ………………………………………………………………………………cis(3M)参照 cisq(): 余弦+i×正弦 (quad) ………………………………………………………………………………cis(3M)参照 cisw(): 余弦+i×正弦 (extended) ………………………………………………………………………………cis(3M)参照 clear(3X): clear, erase, wclear, werase………………………………………………………………ウィンドウのクリア clearenv(3C): clearenv……………………………………………………………………………………プロセス環境のクリア clearerr(): ストリームのステータスの照会…………………………………………………………………ferror(3S)参照 clearok(3X): clearok, idlok, leaveok, scrollok, setscrreg, wsetscrreg………………………端末出力制御関数 clntraw_create(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 clnttcp_create(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 clntudp_bufcreate(): RPC 用の旧ライブラリルーチン…………………………………………………rpc_soc(3N)参照 clntudp_create(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 clnt_broadcast(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 clnt_call(): クライアント側コールのためのライブラリルーチン, rpc …………………………rpc_clnt_calls(3N)参照 clnt_control(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc ………rpc_clnt_create(3N)参照 clnt_create(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc …………rpc_clnt_create(3N)参照 clnt_create_vers(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc …rpc_clnt_create(3N)参照 vi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 clnt_destroy(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc ………rpc_clnt_create(3N)参照 clnt_dg_create(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc ……rpc_clnt_create(3N)参照 clnt_freeres(): クライアント側コールのためのライブラリルーチン, rpc ………………………rpc_clnt_calls(3N)参照 clnt_geterr(): クライアント側コールのためのライブラリルーチン, rpc ………………………rpc_clnt_calls(3N)参照 clnt_pcreateerror(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc rpc_clnt_create(3N)参照 clnt_perrno(): クライアント側コールのためのライブラリルーチン, rpc ………………………rpc_clnt_calls(3N)参照 clnt_perror(): クライアント側コールのためのライブラリルーチン, rpc ………………………rpc_clnt_calls(3N)参照 clnt_raw_create(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc …rpc_clnt_create(3N)参照 clnt_spcreateerror(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc………………………… …………………………………………………………………………………………………rpc_clnt_create(3N)参照 clnt_sperrno(): クライアント側コールのためのライブラリルーチン, rpc ………………………rpc_clnt_calls(3N)参照 clnt_sperror(): クライアント側コールのためのライブラリルーチン, rpc ………………………rpc_clnt_calls(3N)参照 clnt_tli_create(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc …rpc_clnt_create(3N)参照 clnt_tp_create(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc ……rpc_clnt_create(3N)参照 clnt_vc_create(): CLIENT ハンドルの作成および操作を行うライブラリルーチン, rpc ……rpc_clnt_create(3N)参照 clock(3C): clock()…………………………………………………………………………………………使用 CPU 時間の報告 clog(3M): clog(), clogf(), clogl(), clogw(), clogq()……………………………複素数の自然 (底は e) 対数関数 clogf(): 複素数の自然対数関数 (float) …………………………………………………………………………clog(3M)参照 clogl(): 複素数の自然対数関数 (long double) …………………………………………………………………clog(3M)参照 clogq(): 複素数の自然対数関数 (quad) …………………………………………………………………………clog(3M)参照 clogw(): 複素数の自然対数関数 (extended) …………………………………………………………………clog(3M)参照 closedir(): ディレクトリの操作…………………………………………………………………………directory(3C)参照 closelog(): システム ログファイルをクローズする………………………………………………………syslog(3C)参照 clrtobot(3X): clrtobot, wclrtobot………………………………………カーソルからウィンドウの終わりまでのクリア clrtoeol(3X): clrtoeol, wclrtoeol…………………………………………………カーソルから行の終わりまでのクリア color_content(): 色操作関数……………………………………………………………………can_change_color(3X)参照 color_set(): ウィンドウ属性制御関数……………………………………………………………………attr_get(3X)参照 COLS(3X): COLS………………………………………………………………………………………ターミナル画面のカラム数 compile(): 正規表現 コンパイル ルーチン……………………………………………………………………regexp(3X)参照 compound(3M): compound(), compoundf(), compoundl(), compoundw(), compoundq()…………複利ファクター compoundf(): 複利ファクター (float) ……………………………………………………………………compound(3M)参照 compoundl(): 複利ファクター (long double) ……………………………………………………………compound(3M)参照 compoundq(): 複利ファクター (quad) ……………………………………………………………………compound(3M)参照 compoundw(): 複利ファクター (extended) …………………………………………………………………compound(3M)参照 confstr(3C): confstr()………………………………………………………………………………文字列形式の設定値の取得 conj(3M): conj(), conjf(), conjl(), conjw(), conjq()…………………………………………………共役複素数関数 conjf(): 共役複素数関数 (float) ………………………………………………………………………………conj(3M)参照 conjl(): 共役複素数関数 (long double) …………………………………………………………………………conj(3M)参照 conjq(): 共役複素数関数 (quad) ………………………………………………………………………………conj(3M)参照 conjw(): 共役複素数関数 (extended) ………………………………………………………………………………conj(3M)参照 conv(3C): toupper(), tolower(), _toupper(), _tolower(), toascii()…………………………………文字の変換 copydvagent: Device Assignment 構造のコピー……………………………………………………………getdvagent(3)参照 copylist(3G): copylist()…………………………………………………………………………ファイルをメモリーにコピー copysign(3M): copysign(), copysignf(), copysignl(), copysignw(), copysignq()……………符号コピー関数 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company vii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 copysignf(): 符号コピー関数 (float) ………………………………………………………………………copysign(3M)参照 copysignl(): 符号コピー関数 (long double) ………………………………………………………………copysign(3M)参照 copysignq(): 符号コピー関数 (quad) ……………………………………………………………………copysign(3M)参照 copysignw(): 符号コピー関数 (extended) …………………………………………………………………copysign(3M)参照 copywin(3X): copywin………………………………………………………………………………ウィンドウの領域のコピー cos(3M): cos(), cosf(), cosl(), cosw(), cosq()…………………………………………………………………余弦関数 cosd(3M): cosd(), cosdf(), cosdl(), cosdw(), cosdq()………………………………度で指定した引き数の余弦関数 cosdf(): 度で指定した引き数の余弦関数 (float) ………………………………………………………………cosd(3M)参照 cosdl(): 度で指定した引き数の余弦関数 (long double) ………………………………………………………cosd(3M)参照 cosdq(): 度で指定した引き数の余弦関数 (quad) ………………………………………………………………cosd(3M)参照 cosdw(): 度で指定した引き数の余弦関数 (extended) ……………………………………………………………cosd(3M)参照 cosf(): 余弦関数 (float) ………………………………………………………………………………………………cos(3M)参照 cosh(3M): cosh(), coshf(), coshl(), coshw(), coshq()…………………………………………………双曲線余弦関数 coshf(): 双曲線余弦関数 (float) ………………………………………………………………………………cosh(3M)参照 coshl(): 双曲線余弦関数 (long double) …………………………………………………………………………cosh(3M)参照 coshq(): 双曲線余弦関数 (quad) ………………………………………………………………………………cosh(3M)参照 coshw(): 双曲線余弦関数 (extended) ………………………………………………………………………………cosh(3M)参照 cosl(): 余弦関数 (long double) ………………………………………………………………………………cos(3M)参照 cosq(): 余弦関数 (quad) ……………………………………………………………………………………………cos(3M)参照 cosw(): 余弦関数 (extended) ………………………………………………………………………………cos(3M)参照 cpacl(3C): cpacl(), fcpacl()…………………………………………アクセス制御リスト (ACL) およびモードビットの cpow(3M): cpow(), cpowf(), cpowl(), cpoww(), cpowq()…………………………………………複素数のべき乗関数 cpowf(): 複素数のべき乗関数 (float) ……………………………………………………………………………cpow(3M)参照 cpowl(): 複素数のべき乗関数 (long double) ……………………………………………………………………cpow(3M)参照 cpowq(): 複素数のべき乗関数 (quad) ……………………………………………………………………………cpow(3M)参照 cpoww(): 複素数のべき乗関数 (extended) ……………………………………………………………………cpow(3M)参照 cproj(3M): cproj(), cprojf(), cprojl(), cprojw(), cprojq()………………………………………………………… …………………………………………………………………無限大をすべて正の実軸上の無限大に射影する関数 cprojf(): 複素数の射影関数 (float) ……………………………………………………………………………cproj(3M)参照 cprojl(): 複素数の射影関数 (long double) ……………………………………………………………………cproj(3M)参照 cprojq(): 複素数の射影関数 (quad) ……………………………………………………………………………cproj(3M)参照 cprojw(): 複素数の射影関数 (extended) …………………………………………………………………………cproj(3M)参照 creal(3M): creal(), crealf(), creall(), crealw(), crealq()………………………………………複素数の実数部 crealf(): 複素数の実数部関数 (float) ……………………………………………………………………………creal(3M)参照 creall(): 複素数の実数部関数 (long double) ……………………………………………………………………creal(3M)参照 crealq(): 複素数の実数部関数 (quad) …………………………………………………………………………creal(3M)参照 crealw(): 複素数の実数部関数 (extended) ………………………………………………………………………creal(3M)参照 crt0(3): crt0.o……………………………………………………………………………………………………実行起動ルーチン crt0.o: 実行起動ルーチン……………………………………………………………………………………………crt0(3)参照 crypt(3C): crypt……………………………………………………………………………………………………ハッシュ暗号化 cr_close(3): cr_close………………………………………………………………………クラッシュダンプ記述子をクローズ cr_info(3): cr_info……………………………………………………………………………クラッシュダンプ情報を取り出す cr_isaddr(3): cr_isaddr………………………………………………………物理ページ番号をダンプしたかどうかを確認 cr_open(3): cr_open()………………………………………………………クラッシュダンプを読み込みのためにオープン viii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 cr_perror(3): cr_perror………………………………………………………libcrash のエラーまたは警告メッセージを出力 cr_read(3): cr_read……………………………………………………………………………クラッシュダンプから読み込む cr_set_node(3): cr_set_node…………………………………………………………………………………ノード番号の設定 cr_uncompress(3): cr_uncompress……………………………………………クラッシュダンプ内のファイルの圧縮を解除 cr_verify(3): cr_verify………………………………………………………………………クラッシュダンプの整合性を検査 csin(3M): csin(), csinf(), csinl(), csinw(), csinq()………………………………………………複素数の正弦関数 csinf(): 複素数の正弦関数 (float) ………………………………………………………………………………csin(3M)参照 csinh(3M): csinh(), csinhf(), csinhl(), csinhw(), csinhq()……………………………複素数の双曲線正弦関数 csinhf(): 複素数の双曲線正弦関数 (float) ……………………………………………………………………csinh(3M)参照 csinhl(): 複素数の双曲線正弦関数 (long double) ……………………………………………………………csinh(3M)参照 csinhq(): 複素数の双曲線正弦関数 (quad) ……………………………………………………………………csinh(3M)参照 csinhw(): 複素数の双曲線正弦関数 (extended) …………………………………………………………………csinh(3M)参照 csinl(): 複素数の正弦関数 (long double) …………………………………………………………………………csin(3M)参照 csinq(): 複素数の正弦関数 (quad) ………………………………………………………………………………csin(3M)参照 csinw(): 複素数の正弦関数 (extended) ……………………………………………………………………………csin(3M)参照 csqrt(3M): csqrt(), csqrtf(), csqrtl(), csqrtw(), csqrtq()…………………………………複素数の平方根関数 csqrtf(): 複素数の平方根関数 (float) …………………………………………………………………………csqrt(3M)参照 csqrtl(): 複素数の平方根関数 (long double) ……………………………………………………………………csqrt(3M)参照 csqrtq(): 複素数の平方根関数 (quad) …………………………………………………………………………csqrt(3M)参照 csqrtw(): 複素数の平方根関数 (extended) ………………………………………………………………………csqrt(3M)参照 ctan(3M): ctan(), ctanf(), ctanl(), ctanw(), ctanq()………………………………………………複素数の正接関数 ctanf(): 複素数の正接関数 (float) …………………………………………………………………………ctan(3M)参照 ctanh(3M): ctanh(), ctanhf(), ctanhl(), ctanhw(), ctanhq()……………………………複素数の双曲線正接関数 ctanhf(): 複素数の双曲線正接関数 (float) ……………………………………………………………………ctanh(3M)参照 ctanhl(): 複素数の双曲線正接関数 (long double) ……………………………………………………………ctanh(3M)参照 ctanhq(): 複素数の双曲線正接関数 (quad) ……………………………………………………………………ctanh(3M)参照 ctanhw(): 複素数の双曲線正接関数 (extended) ………………………………………………………………ctanh(3M)参照 ctanl(): 複素数の正接関数 (long double) …………………………………………………………………………ctan(3M)参照 ctanq(): 複素数の正接関数 (quad) ……………………………………………………………………………ctan(3M)参照 ctanw(): 複素数の正接関数 (extended) ……………………………………………………………………………ctan(3M)参照 ctermid(3S): ctermid()…………………………………………………………………ターミナルに対するファイル名の生成 ctime(): 日付と時刻の文字列への変換 …………………………………………………………………………ctime(3C)参照 ctime(3C): ctime(), ctime_r(), localtime(), localtime_r(), gmtime(), gmtime_r(), mktime(), difftime(), asctime(), asctime_r(), timezone(), daylight(), tzname(), tzset()……………… ……………………………………………………………………………………………日付と時刻の文字列への変換 ctime_r(): 日付と時刻の文字列への変換 ………………………………………………………………………ctime(3C)参照 ctype(3C): isalpha(), isupper(), islower(), isdigit(), isxdigit(), isalnum(), isspace(), ispunct(), isprint(), isgraph(), iscntrl(), isascii()…………………………………………文字のクラス分類 curscr(3X): curscr………………………………………………………………………………………………現在のウィンドウ curses_intro(3X): curses()……………………………………………端末およびプリンタの取り扱いと最適化パッケージ curs_set(3X): curs_set……………………………………………………………………………………カーソルモードを設定 cur_term(3X): cur_term…………………………………………………………………………………現在のターミナル情報 cuserid(3S): cuserid()………………………………………………………………………ユーザーの文字ログイン名の取得 c_colwidth(), C_COLWIDTH(): 16ビット文字処理用ツール………………………………………nl_tools_16(3X)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company ix 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 datalock(3C): datalock()…データスペースおよびスタックスペースを割り当てた後にプロセスをメモリー内にロック daylight(): 日付と時刻の文字列への変換 ……………………………………………………………………ctime(3C)参照 dbm(3C): dbminit, fetch, store, delete, firstkey, nextkey, dbmclose………………データベースサブルーチン dbmclose(): データベースサブルーチン…………………………………………………………………………dbm(3X)参照 dbminit(): データベースサブルーチン……………………………………………………………………………dbm(3X)参照 dbm_clearerr(): データベースサブルーチン…………………………………………………………………ndbm(3X)参照 dbm_close(): データベースサブルーチン………………………………………………………………………ndbm(3X)参照 dbm_delete(): データベースサブルーチン……………………………………………………………………ndbm(3X)参照 dbm_error(): データベースサブルーチン………………………………………………………………………ndbm(3X)参照 dbm_fetch(): データベースサブルーチン………………………………………………………………………ndbm(3X)参照 dbm_firstkey(): データベースサブルーチン…………………………………………………………………ndbm(3X)参照 dbm_nextkey(): データベースサブルーチン……………………………………………………………………ndbm(3X)参照 dbm_open(): データベースサブルーチン………………………………………………………………………ndbm(3X)参照 dbm_store(): データベースサブルーチン……………………………………………………………………ndbm(3X)参照 db_add_entry(): NIS+ データベースアクセス関数…………………………………………………………nis_db(3N)参照 db_checkpoint(): NIS+ データベースアクセス関数………………………………………………………nis_db(3N)参照 db_create_table(): NIS+ データベースアクセス関数……………………………………………………nis_db(3N)参照 db_destroy_table(): NIS+ データベースアクセス関数……………………………………………………nis_db(3N)参照 db_first_entry(): NIS+ データベースアクセス関数………………………………………………………nis_db(3N)参照 db_free_result(): NIS+ データベースアクセス関数………………………………………………………nis_db(3N)参照 db_initialize(): NIS+ データベースアクセス関数………………………………………………………nis_db(3N)参照 db_list_entries(): NIS+ データベースアクセス関数……………………………………………………nis_db(3N)参照 db_next_entry(): NIS+ データベースアクセス関数………………………………………………………nis_db(3N)参照 db_remove_entry(): NIS+ データベースアクセス関数…………………………………………………nis_db(3N)参照 db_reset_next_entry(): NIS+ データベースアクセス関数………………………………………………nis_db(3N)参照 db_standby(): NIS+ データベースアクセス関数………………………………………………………nis_db(3N)参照 db_table_exists(): NIS+ データベースアクセス関数……………………………………………………nis_db(3N)参照 db_unload_table(): NIS+ データベースアクセス関数……………………………………………………nis_db(3N)参照 def_prog_mode(3X): def_prog_mode, def_shell_mode, reset_prog_mode, reset_shell_mode………………… …………………………………………………プログラムまたはシェル ターミナルモードの保存もしくは復元 def_shell_mode(): ターミナルモードを「シェル」の状態で保存………………………………def_prog_mode(3X)参照 delay_output(3X): delay_output…………………………………………………………………………………出力を遅らす delch(3X): delch, mvdelch, mvwdelch, wdelch………………………………………………ウィンドウからの文字の削除 delete(): データベースサブルーチン……………………………………………………………………………dbm(3X)参照 deleteln(3X): deleteln, wdeleteln…………………………………………………………………ウィンドウ内の行の削除 delmntent(): 開いているファイルシステム記述子ファイルからのエントリーの削除………………getmntent(3X)参照 delmntent(): ファイルシステム記述子のファイルエントリーの取得…………………………………getmntent(3X)参照 delscreen(3X): delscreen………………………………………………………………………………面関連の記憶領域の解放 delwin(3X): delwin………………………………………………………………………………………………ウィンドウの削除 del_curterm(): terminfo データベースとのインタフェース………………………………………del_curterm(3X)参照 del_curterm(3X): del_curterm, restartterm, set_curterm, setupterm……………………………………………… ……………………………………………………………………………terminfo データベースとのインタフェース derwin(3X): derwin……………………………………………………………………………………相対的ウィンドウ作成関数 devnm(3): devnm………………………………………………………………………デバイス ID のファイルパスへのマップ x Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 dial(3C): dial(), undial()…………………………………………………………………………………外部端末回線の開設 difftime(): 日付と時刻の文字列への変換 ……………………………………………………………………ctime(3C)参照 directory(3C): opendir(), readdir(), readdir_r(), telldir(), seekdir(), rewinddir(), closedir()…… ………………………………………………………………………………………………………ディレクトリの操作 dirname(): パス名の一部の取り出し……………………………………………………………………basename(3C)参照 div(3C): div(), ldiv()……………………………………………………………………………………整数の除算および剰余 dladdr(3C): dladdr…………………………………………………………………………アドレスのシンボリック情報の取得 dlclose(3C): dlclose…………………………………………………………………………………共有ライブラリをクローズ dlerror(3C): dlerror………………………………………………………………………………………………診断情報を入手 dlget(3C): dlget…………ロードされているモジュール (プログラムまたは共有ライブラリ)に関する情報を取り出す dlgetmodinfo(3C): dlgetmodinfo………………………………………………………………………………………………… …………………ロードされているモジュール (プログラムまたは共有ライブラリ)に関する情報の取り出し dlgetname(3C): dlgetname…………ロードモジュール記述子が割り当てられているロードモジュールの名前を取り出 dlmodadd(3C): dlmodadd…………………………………………………………動的に生成された関数に関する情報の登録 dlmodinfo(3C): dlmodinfo……………………………………………………………………………………………………… …………………ロードされているモジュール (プログラムまたは共有ライブラリ)に関する情報を取り出す dlmodremove(3C): dlmodremove……………………………………………………dlmodaddを使って登録された情報の削除 dlopen(3C): dlopen………………………………………………………………………………共有ライブラリをオープンする dlsym(3C): dlsym………………………………………………………………共有ライブラリ内のシンボルのアドレスの取得 dn_comp, dn_expand - リゾルバルーチン……………………………………………………………………resolver(3N)参照 dn_comp(): リゾルバルーチン………………………………………………………………………………resolver(3N)参照 dn_expand(): リゾルバルーチン………………………………………………………………………………resolver(3N)参照 doupdate(3X): doupdate, refresh, wnoutrefresh, wrefresh……………………ウィンドウおよび行のリフレッシュ drand48(3C): drand48(), drand48_r(), erand48(), erand48_r(), lrand48(), lrand48_r(), nrand48(), nrand48_r(), mrand48(), mrand48_r(), jrand48(), jrand48_r(), srand48(), srand48_r(), seed48(), seed48_r(), lcong48(), lcong48_r()…………………均等に分散される疑似乱数の生成 dupwin(3X): dupwin……………………………………………………………………………………………ウィンドウの複写 echo(3X): echo, noecho………………………………………………………ターミナルエコーを使用可能/使用不能にする echochar(3X): echochar, wechochar……………1バイト文字と修飾情報のウィンドウへのエコーおよびリフレッシュ echo_wchar(3X): echo_wchar, wecho_wchar…複情報文字の書き出しおよびそのウィンドウの速やかなリフレッシュ ecvt(3C): ecvt(), fcvt(), gcvt()………………………………………………………浮動小数点数値から文字列への変換 edata(): プログラムの最終位置………………………………………………………………………………end(3C)参照 elf(3E): elf………………………………………………………………………オブジェクトファイルのアクセスライブラリ elf32_fsize(): それぞれ、elf32 ファイルのブジェクトファイルタイプのサイズを戻し、elf64ファイルのオブジェ クトファイルタイプのサイズを戻す………………………………………………………………elf_fsize(3E)参照 elf32_getehdr(): ELF ファイル用にクラス依存のオブジェクトファイルヘッダーを取り出す…elf_getehdr(3E)参照 elf32_getphdr(): ELF ファイル用にクラス依存プログラムのヘッダーテーブルを取り出す……elf_getphdr(3E)参照 elf32_getshdr(): ELF ファイル用にクラス依存のセクションヘッダーを取り出す………………elf_getshdr(3E)参照 elf32_newehdr(): ELF ファイル用にクラス依存のオブジェクトファイルヘッダーを取り出す…elf_getehdr(3E)参照 elf32_newphdr(): ELF ファイル用にクラス依存プログラムのヘッダーテーブルを取り出す ………………………………………………………………………………………………………elf_getphdr(3E)参照 elf32_xlatetof(): ELF ファイルに対するクラス依存のデータ変換……………………………………elf_xlate(3E)参照 elf32_xlatetom(): ELF ファイルに対するクラス依存のデータ変換……………………………………elf_xlate(3E)参照 elf64_fsize(): elf64 ファイルのオブジェクトファイルタイプのサイズを戻す………………………elf_fsize(3E)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xi 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 elf64_getehdr(): ELF ファイル用にクラス依存のオブジェクトファイルヘッダーを取り出す…elf_getehdr(3E)参照 elf64_getphdr(): ELF ファイル用にクラス依存プログラムのヘッダーテーブルを取り出す……elf_getphdr(3E)参照 elf64_getshdr(): ELF ファイル用にクラス依存のセクションヘッダーを取り出す………………elf_getshdr(3E)参照 elf64_newehdr(): ELF ファイル用にクラス依存のオブジェクトファイルヘッダーを取り出す…elf_getehdr(3E)参照 elf64_newphdr(): ELF ファイル用にクラス依存プログラムのヘッダーテーブルを取り出す……elf_getphdr(3E)参照 elf64_xlatetof(): ELF ファイルに対するクラス依存のデータ変換……………………………………elf_xlate(3E)参照 elf64_xlatetom(): ELF ファイルに対するクラス依存のデータ変換……………………………………elf_xlate(3E)参照 elf_begin(3E): elf_begin…………………………………………………………………………………ファイル記述子を作成 elf_cntl(3E): elf_cntl……………………………………………………………………………………ファイル記述子を制御 elf_end(3E): elf_end………………………………………………………………………オブジェクトファイルの使用を終了 elf_errmsg(): ELF ライブラリエラー処理…………………………………………………………………elf_error(3E)参照 elf_errno(): ELF ライブラリエラー処理……………………………………………………………………elf_error(3E)参照 elf_error(3E): elf_errmsg, elf_errno………………………………………………………………………………エラー処理 elf_fill(3E): elf_fil…………………………………………………………………………………………フィルバイトを設定 elf_flag(3E): elf_flagdata, elf_flagehdr, elf_flagelf, elf_flagphdr, elf_flagscn, elf_flagshdr……… ………………………………………………………………………………………………………………フラグを操作 elf_flagdata(): ELF ファイルのフラグを操作……………………………………………………………elf_flag(3E)参照 elf_flagehdr(): ELF ファイルのフラグを操作……………………………………………………………elf_flag(3E)参照 elf_flagelf(): ELF ファイルのフラグを操作………………………………………………………………elf_flag(3E)参照 elf_flagphdr(): ELF ファイルのフラグを操作……………………………………………………………elf_flag(3E)参照 elf_flagscn(): ELF ファイルのフラグを操作………………………………………………………………elf_flag(3E)参照 elf_flagshdr(): ELF ファイルのフラグを操作……………………………………………………………elf_flag(3E)参照 elf_fsize(3E): elf32_fsize, elf64_fsize…………………………………………………………それぞれ、elf32ファイル のブジェクトファイルタイプのサイズを戻し、elf64ファイルのオブジェクトファイルタイプのサイズを戻す elf_getarhdr(3E): elf_getarhdr………………………………………………………アーカイブメンバーヘッダを取り出す elf_getarsym(3E): elf_getarsym……………………………………………………アーカイブシンボルテーブルを取り出す elf_getbase(3E): elf_getbase………………………………………………オブジェクトファイルの基底オフセットを入手 elf_getdata(3E): elf_getdata, elf_newdata, elf_rawdata……………………………………セクションデータを取得 elf_getehdr(3E): elf32_getehdr, elf32_newehdr, elf64_getehdr, elf64_newehdr………………………………… ……… elf32ファイルおよび elf64ファイル用にそれぞれ、クラス依存のオブジェクトファイルを取り出す elf_getident(3E): elf_getident………………………………………………………………ファイル識別データを取り出す elf_getphdr(3E): elf32_getphdr, elf32_newphdr, elf64_getphdr, elf64_newphdr………………………………… ……それぞれ elf32ファイルと elf64ファイル用に、クラス依存プログラムのヘッダーテーブルを取り出す elf_getscn(3E): elf_getscn, elf_ndxscn, elf_newscn, elf_nextscn…………………………セクション情報を入手 elf_getshdr(3E): elf32_getshdr, elf64_getshd……………………………………………………………………………… …………………それぞれ elf32ファイルと elf64ファイル用にクラス依存のセクションヘッダーを取り出す elf_hash(3E): elf_hash…………………………………………………………………………………………ハッシュ値を計算 elf_kind(3E): elf_kind……………………………………………………………………………………ファイルタイプを決定 elf_ndxscn(): ELF ファイルのセクション情報を入手……………………………………………………elf_getscn(3E)参照 elf_newdata(): ELF ファイルのセクションデータを取得……………………………………………elf_getdata(3E)参照 elf_newscn(): ELF ファイルのセクション情報を入手……………………………………………………elf_getscn(3E)参照 elf_next(3E): elf_next………………………………………………………………………順次アーカイブメンバーアクセス elf_nextscn(): ELF ファイルのセクション情報を入手…………………………………………………elf_getscn(3E)参照 elf_rand(3E): elf_rand…………………………………………………………………ランダムアーカイブメンバーアクセス xii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 elf_rawdata(): ELF ファイルのセクションデータを取得……………………………………………elf_getdata(3E)参照 elf_rawfile(3E): elf_rawfile………………………………………………………………未解釈のファイル内容を取り出す elf_strptr(3E): elf_strptr………………………………………………………………………………文字列ポインタを作成 elf_update(3E): elf_update…………………………………………………………………………ELF記述子をアップデート elf_version(3E): elf_version……………………………………ELFライブラリとアプリケーションのバージョンを調整 elf_xlate(3E): elf32_xlatetof, elf32_xlatetom, elf64_xlatetof, elf64_xlatetom……………………………… ……………………………………それぞれ elf32ファイルと elf64ファイルに対するクラス依存のデータ変換 end(3C): end, etext, edata, __data_start, __text_start……………………………………プログラムの最終位置 endbwent(): 新しい wtmpsと btmpsデータベースへのレコードの書き込み……………………………bwtmps(3C)参照 enddvagent: メモリーを開放し、ファイルを閉じる………………………………………………………getdvagent(3)参照 endfsent(): ファイルシステム 記述子 ファイルをクローズする………………………………………getfsent(3X)参照 endgrent(): グループファイル エントリーの取得…………………………………………………………getgrent(3C)参照 endhostent(): ネットワークホストエントリーの取得…………………………………………………gethostent(3N)参照 endmntent(): ファイルシステム 記述子 ファイルをクローズする……………………………………getmntent(3X)参照 endnetconfig(): ネットワーク構成データベースのエントリの取得……………………………getnetconfig(3N)参照 endnetent(): ネットワークエントリーの取得 ……………………………………………………………getnetent(3N)参照 endnetent_r(): ネットワークエントリーの取得 …………………………………………………………getnetent(3N)参照 endnetpath(): NETPATH の構成要素に対応する /etc/netconfig エントリの取得……………………getnetpath(3N)参照 endprdfent(): System Default データベースエントリーの操作 ………………………………………getprdfent(3)参照 endprotoent(): プロトコルエントリーの終了…………………………………………………………getprotoent(3N)参照 endprotoent_r(): プロトコルエントリーの終了 (スレッドセーフ…………………………………getprotoent(3N)参照 endprpwent(): 保護されたパスワードデータベースのエントリーの操作……………………………getprpwent(3)参照 endprtcent(): Terminal Control データベースエントリーの操作………………………………………getprtcent(3)参照 endpwent(): パスワードファイルエントリーの取得………………………………………………………getpwent(3C)参照 endpwent(): 現在オープンしているパスワードファイルをクローズする………………………………getspwent(3X)参照 endpwent(): 現在オープンしているパスワードファイルをクローズする………………………………getspent(3C)参照 endservent(): サービスエントリーの終了………………………………………………………………getservent(3N)参照 endservent_r(): サービスエントリーの終了 (スレッドセーフ………………………………………getservent(3N)参照 endusershell(): 正当なユーザー シェルの取得………………………………………………………getusershell(3C)参照 endutent(): utmpをクローズする………………………………………………………………………………getut(3C)参照 endutsent(): utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン…………getuts(3C)参照 endutxent(): utmpx ファイルエントリーへのアクセス………………………………………………………getutx(3C)参照 endwin(3X): endwin……………………………………………………………………………Curses のセッションの一時停止 erand48(): 倍精度 疑似乱数を生成する……………………………………………………………………drand48(3C)参照 erase(): ウィンドウのクリア……………………………………………………………………………………clear(3X)参照 erasechar(3X): erasechar, killchar……………………………………………………シングルバイト端末環境照会関数 erasewchar(3X): erasewchar, killwchar…………………………………………………………………端末環境照会関数 erf(3M): erf(), erff(), erfl(), erfw(), erfq(), erfc(), erfcf(), erfcl(), erfcw(), erfcq()……………… ……………………………………………………………………………………… 誤差関数および誤差関数の補数 erfc(): 誤差関数の補数 (double) ……………………………………………………………………………………erf(3M)参照 erfcf(): 誤差関数の補数 (float) ……………………………………………………………………………………erf(3M)参照 erfcl(): 誤差関数の補数 (long double) ……………………………………………………………………………erf(3M)参照 erfcq(): 誤差関数の補数 (quad) ……………………………………………………………………………………erf(3M)参照 erfcw(): 誤差関数の補数 (extended) ………………………………………………………………………………erf(3M)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xiii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 erff(): 誤差関数 (float) ………………………………………………………………………………………………erf(3M)参照 erfl(): 誤差関数 (long double) ………………………………………………………………………………………erf(3M)参照 erfq(): 誤差関数 (quad) ………………………………………………………………………………………………erf(3M)参照 erfw(): 誤差関数 (extended) …………………………………………………………………………………………erf(3M)参照 errno(): システム エラーメッセージ…………………………………………………………………………perror(3C)参照 etext(): プログラムの最終位置……………………………………………………………………………………end(3C)参照 exp(3M): exp(), expf(), expl(), expw(), expq()…………………………………………………………………指数関数 exp10(3M): exp10(), exp10f(), exp10l(), exp10w(), exp10q()………………………………10 を底とする指数関数 exp10f(): 10 を底とする指数関数 (float) ………………………………………………………………………exp10(3M)参照 exp10l(): 10 を底とする指数関数 (long double) ………………………………………………………………exp10(3M)参照 exp10q(): 10 を底とする指数関数 (quad) ………………………………………………………………………exp10(3M)参照 exp10w(): 10 を底とする指数関数 (extended) …………………………………………………………………exp10(3M)参照 exp2(3M): exp2(), exp2f(), exp2l(), exp2w(), exp2q()…………………………………………2を底とする指数関数 exp2f(): 2を底とする指数関数 (float) …………………………………………………………………………exp2(3M)参照 exp2l(): 2を底とする指数関数 (long double) …………………………………………………………………exp2(3M)参照 exp2q(): 2を底とする指数関数 (quad) …………………………………………………………………………exp2(3M)参照 exp2w(): 2を底とする指数関数 (extended) ……………………………………………………………………exp2(3M)参照 expf(): 指数関数 (float) ……………………………………………………………………………………………exp(3M)参照 expl(): 指数関数 (long double) ……………………………………………………………………………………exp(3M)参照 expm1(3M): expm1(), expm1f(), expm1l(), expm1w(), expm1q()………………………………………指数関数の計算 expm1f(): 指数関数の計算 (float) ………………………………………………………………………………expm1(3M)参照 expm1l(): 指数関数の計算 (long double) ………………………………………………………………………expm1(3M)参照 expm1q(): 指数関数の計算 (quad) ………………………………………………………………………………expm1(3M)参照 expm1w(): 指数関数の計算 (extended) …………………………………………………………………………expm1(3M)参照 expq(): 指数関数 (quad) ……………………………………………………………………………………………exp(3M)参照 expw(): 指数関数 (extended) …………………………………………………………………………………………exp(3M)参照 fabs(3M): fabs(), fabsf(), fabsl(), fabsw(), fabsq()………………………………………………………絶対値関数 fabsf(): 絶対値関数 (float) ………………………………………………………………………………………fabs(3M)参照 fabsl(): 絶対値関数 (long double) ………………………………………………………………………………fabs(3M)参照 fabsq(): 絶対値関数 (quad) ………………………………………………………………………………………fabs(3M)参照 fabsw(): 絶対値関数 (extended) ………………………………………………………………………………fabs(3M)参照 fattach(3C): fattach()…………………………ファイルシステム名称空間中のオブジェクトへのファイル記述子の結合 fclose(3S): fclose(), fflush()……………………………………………………………ストリームのクローズ、吐き出し fcpacl(): アクセス制御リスト (ACL) およびモードビットの………………………………………………cpacl(3C)参照 fcvt(): 浮動小数点数値から文字列への変換………………………………………………………………………ecvt(3C)参照 fdetach(3C): fdetach()……………………………………………………STREAMSファイル記述子からの名前の切り離し fdim(3M): fdim(), fdimf(), fdiml(), fdimw(), fdimq()……………………………………………………正の差分関数 fdimf(): 正の差分関数 (float) ……………………………………………………………………………………fdim(3M)参照 fdiml():正の差分関数 (long double) ………………………………………………………………………………fdim(3M)参照 fdimq():正の差分関数 (quad) ………………………………………………………………………………………fdim(3M)参照 fdimw():正の差分関数 (extended) …………………………………………………………………………………fdim(3M)参照 fdopen(): ファイルからストリームへの変換……………………………………………………………………fopen(3S)参照 feclearexcept(3M): feclearexcept()………………………………………………………浮動小数点例外フラグのクリア fegetenv(3M): fegetenv()………………………………………………………………………………浮動小数点環境の取得 xiv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 fegetexceptflag(3M): fegetexceptflag()……………………………………………………浮動小数点例外フラグの取得 fegetflushtozero(3M): fegetflushtozero()……………………………………浮動小数点アンダーフローモードの取得 fegetround(3M): fegetround()……………………………………………………………浮動小数点丸め方向モードの取得 fegettrapenable(3M): fegettrapenable()……………………………………浮動小数点例外トラップ有効フラグの取得 feholdexcept(3M): feholdexcept()……………………………………………………………………浮動小数点環境の保存 feof(): ストリームのステータスの照会 ………………………………………………………………………ferror(3S)参照 feraiseexcept(3M): feraiseexcept()…………………………………………………………………浮動小数点例外の生成 ferror(3S): ferror( ), feof(), clearerr()……………………………………………………ストリームのステータスの照会 fesetenv(3M): fesetenv()…………………………………………………………………………………浮動小数点環境の設定 fesetexceptflag(3M): fesetexceptflag()……………………………………………………浮動小数点例外フラグの設定 fesetflushtozero(3M): fesetflushtozero()……………………………………浮動小数点アンダーフローモードの設定 fesetround(3M): fesetround()……………………………………………………………浮動小数点丸め方向モードの設定 fesettrapenable(3M): fesettrapenable()…………………………………………………例外トラップ有効フラグの設定 fetch(): データベースサブルーチン………………………………………………………………………………dbm(3X)参照 fetestexcept(3M): fetestexcept()……………………………………………………………………浮動小数点例外のテスト feupdateenv(3M): feupdateenv()……………………………………………………………浮動小数点環境のアップデート fflush(): ストリームの吐き出し…………………………………………………………………………………fclose(3S)参照 ffs(): memory operations, find first bit set ……………………………………………………………………memory(3C)参照 fgetc(): ストリームファイルからの文字あるいはワードの取得………………………………………………getc(3S)参照 fgetgrent(): グループファイル エントリーの取得………………………………………………………getgrent(3C)参照 fgetpos(3S): fgetpos(), fsetpos()……………………………………ストリームのファイル位置指標の保存および回復 fgetpos64(3S): fopen64(), freopen64(), fseeko64(), fsetpos64(), fstatvfsdev64(), ftello64(), ftw64(), nftw64(), statvfsdev64(), tmpfile64()………………………………………………………… …………………………………………………ラージファイルをサポートする非POSIX標準APIインタフェース fgetpwent(): パスワードファイルエントリーの取得……………………………………………………getpwent(3C)参照 fgetpwent(): シャドウパスワードエントリーのアクセス………………………………………………getspwent(3X)参照 fgets(): ストリームからの文字列の取得………………………………………………………………………gets(3S)参照 fgetspent(): シャドウパスワードエントリーのアクセス…………………………………………………getspent(3C)参照 fgetwc(): ストリームファイルからのワイドキャラクタの取得………………………………………getwc(3C)参照 fgetwc_unlocked(): ストリームファイルからのワイドキャラクタの取得……………………………getwc(3C)参照 fgetws(3C): fgetws()……………………………………………ストリームファイルからのワイドキャラクタ文字列の取得 fileno(3S): fileno()……………………………………………………ストリームポインターのファイル記述子へのマップ filter(3X): filter……………………………………………………………………………一定の端末機能を使用不能にする firstkey(): データベースサブルーチン………………………………………………………………………dbm(3X)参照 firstof2(), FIRSTof2(): 16ビット文字処理用ツール…………………………………………………nl_tools_16(3X)参照 flash(3X): flash…………………………………………………………………………………………………スクリーンの点滅 flockfile(3S): flockfile(), ftrylockfile(), funlockfile()…………………………………………………………… ………………………………………………マルチスレッドアプリケーション内でのストリームの明示的ロック floor(3M): floor(), floorf(), floorl(), floorw(), floorq()………………………………………切り捨て丸め関数 floorf(): 切り捨て丸め関数 (float) ……………………………………………………………………………floor(3M)参照 floorl(): 切り捨て丸め関数 (long double) ……………………………………………………………………floor(3M)参照 floorq(): 切り捨て丸め関数 (quad) ……………………………………………………………………………floor(3M)参照 floorw(): 切り捨て丸め関数 (extended) …………………………………………………………………………floor(3M)参照 flushinp(3X): flushinp…………………………………………………………………………………………………入力の廃棄 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xv 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 fma(3M): fma(), fmaf(), fmaw(), fmal(), fmaq()……………………………………………………浮動小数点積和関数 fmaf(): 浮動小数点積和関数 (extended) …………………………………………………………………………fma(3M)参照 fmaf(): 浮動小数点積和関数 (float) ………………………………………………………………………………fma(3M)参照 fmaf(): 浮動小数点積和関数 (quad) ………………………………………………………………………………fma(3M)参照 fmal(): 浮動小数点積和関数 (long double) ………………………………………………………………………fma(3M)参照 fmax(3M): fmax(), fmaxf(), fmaxl(), fmaxw(), fmaxq()……………………………………………………最大値関数 fmaxf(): 最大値関数 (float) ………………………………………………………………………………………fmax(3M)参照 fmaxl(): 最大値関数 (long double) ………………………………………………………………………………fmax(3M)参照 fmaxq(): 最大値関数 (quad) ………………………………………………………………………………………fmax(3M)参照 fmaxw(): 最大値関数 (extended) ………………………………………………………………………………fmax(3M)参照 fmin(3M): fmin(), fminf(), fminl(), fminw(), fminq()………………………………………………………最小値関数 fminf(): 最小値関数 (float) ………………………………………………………………………………………fmin(3M)参照 fminl(): 最小値関数 (long double) ………………………………………………………………………………fmin(3M)参照 fminq(): 最小値関数 (quad) ……………………………………………………………………………………fmin(3M)参照 fminw(): 最小値関数 (extended) ………………………………………………………………………………fmin(3M)参照 fmod(3M): fmod(), fmodf(), fmodl(), fmodw(), fmodq()………………………………………………………剰余関数 fmodf(): 剰余関数 (float) …………………………………………………………………………………………fmod(3M)参照 fmodl(): 剰余関数 (long double) ………………………………………………………………………………fmod(3M)参照 fmodq(): 剰余関数 (quad) …………………………………………………………………………………………fmod(3M)参照 fmodw(): 剰余関数 (extended) …………………………………………………………………………………fmod(3M)参照 fmtmsg(3C): fmtmsg()…………………………………………………標準エラーとコンソールへの定型メッセージの表示 fnmatch(3C): fnmatch()……………………………………………………………………………ファイル名パターンの一致 fopen(3S): fopen(), freopen(), fdopen()……………………………………………………………………………………… ………………………………ストリームファイルのオープン、再オープン、ファイルからストリームへの変換 fpclassify(3M): fpclassify()…………………………………………………………………………浮動小数点数分類マクロ fprintf(): ファイルへのフォーマットつき出力………………………………………………………………printf(3S)参照 fputc(): ストリーム上に文字を出力………………………………………………………………………………putc(3S)参照 fputs(): ストリーム上に文字列を出力……………………………………………………………………………puts(3S)参照 fputwc(): ストリームファイルへのワイドキャラクタ出力……………………………………………………putwc(3C)参照 fputws(): ワイドキャラクタ文字列のストリームファイルへの書き込み…………………………………putws(3C)参照 fread(3S): fread(), fwrite()…………………………ストリームファイルに対するバッファーされたバイナリの入出力 free(): メインメモリーに割り当てられたブロックを解放……………………………………………………malloc(3C)参照 freeaddrinfo(): 登録されているホスト名およびアドレスの取得……………………………………getaddrinfo(3N)参照 freenetconfigent(): ネットワーク構成データベースのエントリの取得…………………………getnetconfig(3N)参照 freopen(): 指定されたファイル をすでにオープンされている ストリームに置き換える………………fopen(3S)参照 frexp(3M): frexp(), frexpf(), frexpl(), frexpw(), frexpq()……浮動小数点数からの仮数部と指数部の抽出 frexpf(): 浮動小数点数からの仮数部と指数部の抽出 (float) ………………………………………………frexp(3M)参照 frexpl(): 浮動小数点数からの仮数部と指数部の抽出 (long double) ………………………………………frexp(3M)参照 frexpq(): 浮動小数点数からの仮数部と指数部の抽出 (quad) ………………………………………………frexp(3M)参照 frexpw(): 浮動小数点数からの仮数部と指数部の抽出 (extended) ………………………………………frexp(3M)参照 fscanf(): ストリームファイルからの読み取りでの書式付き入力変換………………………………………scanf(3S)参照 fseek(3S): fseek(), fseeko(), rewind(), ftell(), ftello()……ストリームのファイルポインターの位置決め fseeko(): ラージファイルをサポートする非POSIX標準APIインタフェース……………………………fseek(3S)参照 fseek_unlocked(): ラージファイルをサポートする非POSIX標準APIインタフェース……………………fseek(3S)参照 xvi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 fsetaclentry(): ファイルのアクセス制御リスト (ACL) ……………………………………………setaclentry(3C)参照 fsetpos() - ストリームのファイル位置指標の保存および回復………………………………………fgetpos(3S)参照 fstatfsdev(): ファイルシステムの統計……………………………………………………………………statfsdev(3C)参照 fstatvfsdev(): ファイルシステムの統計………………………………………………………………statvfsdev(3C)参照 ftell(): ラージファイルをサポートする非POSIX標準APIインタフェース………………………………fseek(3S)参照 ftello(): ラージファイルをサポートする非POSIX標準APIインタフェース………………………………fseek(3S)参照 ftell_unlocked(): ラージファイルをサポートする非POSIX標準APIインタフェース……………………fseek(3S)参照 ftok(3C): ftok()……………………………………………………………………………………プロセス間通信識別子の作成 ftw(3C): ftw(), nftw()……………………………………………………………関数の実行を伴ったファイルツリーの走査 funflockfile(): マルチスレッドアプリケーション内でのストリームの明示的ロック………………flockfile(3S)参照 fwide(3C): fwide()………………………………………………………………………………………ストリームの指向の設定 fwprintf(3C): fwprintf(), wprintf(), swprintf()……………………書式化されたワイドキャラクタ出力の印刷 fwrite(): マルチスレッドアプリケーション内でのストリームの明示的ロック……………………………fread(3S)参照 fwscanf(3C): fwscanf(), wscanf(), swscanf()……………………………書式化されたワイドキャラクタ入力の変換 gai_strerror(): 登録されているホスト名およびアドレスの取得……………………………………getaddrinfo(3N)参照 gamma(): 対数ガンマ関数 (double) ……………………………………………………………………………lgamma(3M)参照 gammaf(): 対数ガンマ関数 (float) ……………………………………………………………………………lgamma(3M)参照 gammal(): 対数ガンマ関数 (long double) ……………………………………………………………………lgamma(3M)参照 gammaq(): 対数ガンマ関数 (quad) ……………………………………………………………………………lgamma(3M)参照 gammaw(): 対数ガンマ関数 (extended) ………………………………………………………………………lgamma(3M)参照 gcvt(): 浮動小数点数値から文字列への変換………………………………………………………………………ecvt(3C)参照 getaddrinfo(3N): getaddrinfo(), getnameinfo(), freeaddrinfo(), gai_strerror()………………………… ………………………………………………………………………登録されているホスト名およびアドレスの取得 getbegyx(3X): getbegyx, getmaxyx, getparyx………………………………追加のカーソルとウィンドウの座標の取得 getbkgd(): 1バイト文字を使用したバックグラウンド文字および修飾情報の設定または取得……………bkgd(3X)参照 getbkgrnd(): 複情報文字を使用したバックグラウンド文字の設定または取得…………………………bkgrnd(3X)参照 getbootpent(3X): getbootpent(), putbootpent(), setbootpent(), endbootpent(), parse_bp_htype(), arse_bp_haddr(),parse_bp_iaddr()………………………………………bootptabエントリーの出し入れ getbwent(): 新しい wtmpsと btmpsデータベースへのレコードの書き込み……………………………bwtmps(3C)参照 getc(3S): getc(), getc_unlocked(), getchar(), getchar_unlocked(), fgetc(), getw()………………………… ………………………………………………………………ストリームファイルからの文字あるいはワードの取得 getcchar(3X): getcchar…………………………………………………………cchar_t からワイド文字列と修飾情報を取得 getch(3X): getch, wgetch, mvgetch, mvwgetch………………………………………………端末から 1バイト文字を取得 getchar(): ストリームファイルからの文字あるいはワードの取得……………………………………………getc(3S)参照 getchar_unlocked(): ストリームファイルからの文字あるいはワードの取得………………………………getc(3S)参照 getclock(3C): getclock……………………………………………………………システムワイド クロックの現在の値取得 getcwd(3C): getcwd()……………………………………………………………現在のワークディレクトリのパス名の取得 getc_unlocked(): ストリームファイルからの文字あるいはワードの取得…………………………………getc(3S)参照 getdate(3C): getdate()……………………………………………………………ユーザーの書式指定した日付と時間の変換 getdate_r(): ユーザーの書式指定した日付と時刻の変換 …………………………………………………getdate(3C)参照 getdiskbyname(3C): getdiskbyname()……………………………………………………名前によるディスク記述子の取得 getdiskbyname_r(3C): ディスク記述子の取得……………………………………………………getdiskbyname(3C)参照 getdvagent: Device Assignment データベースエントリーのポインタを戻す……………………………getdvagent(3)参照 getdvagent(3): getdvagent, getdvagnam, setdvagent, enddvagent, putdvagnam, copydvagent………………… HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xvii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 ………………………………… 高信頼性システムに対する Device Assignmentデータベースエントリーの操作 getdvagnam: 正常終了および異常終了に関する情報を返します…………………………………………getdvagent(3)参照 getenv(3C): getenv()……………………………………………………………………………………………環境名の値を返す getfsent(): ファイルシステム 記述子 ファイルをクローズする………………………………………getfsent(3X)参照 getfsent(3X): getfsent(), getfsspec(), getfsfile(), getfstype(), setfsent(), endfsent()………………… ……………………………………………………………ファイルシステム記述子の ファイルエントリーの取得 getfsfile(): ファイルシステム 記述子 ファイルをクローズする………………………………………getfsent(3X)参照 getfsspec(): ファイルシステム 記述子 ファイルをクローズする………………………………………getfsent(3X)参照 getfstype(): ファイルシステム 記述子 ファイルをクローズする………………………………………getfsent(3X)参照 getgrent(3C): getgrent(), getgrgid(), getgrgid_r(), getgrnam(), getgrnam_r(), setgrent(), endgrent(), getgrent()………………………………………………グループファイル エントリーの取得 getgrgid(), getgrnam(): グループファイル エントリーの取得………………………………………getgrent(3C)参照 gethostbyaddr(): ネットワークホストエントリーの取得………………………………………………gethostent(3N)参照 gethostbyname(): ネットワークホストエントリーの取得………………………………………………gethostent(3N)参照 gethostent(3N): gethostent(), gethostbyaddr(), gethostbyname(), sethostent(), endhostent()………… …………………………………………………………………………………ネットワークホストエントリーの取得 gethrtime(3C): gethrtime()………………………………………………………………………………高分解能時間の取得 getlocale(): プログラムのロケールの取得…………………………………………………………………setlocale(3C)参照 getlocale_r(): プログラムのロケールの取得(MT-Safe) …………………………………………………setlocale(3C)参照 getlogin(3C): getlogin(), getlogin_r()………………………………端末にログインしているユーザーの名前の取得 getlogin_r(): 端末にログインしているユーザーの名前の取得………………………………………getlogin(3C)参照 getmaxyx(): 追加のカーソルとウィンドウの座標の取得…………………………………………………getbegyx(3X)参照 getmntent(3X): getmntent(), getmntent_r(), setmntent(), addmntent(), delmntent(), endmntent(), hasmntopt()…………………………………………ファイルシステム記述子のファイルエントリーの取得 getmntent_r(): ファイルシステム 記述子 ファイルをクローズする…………………………………getmntent(3X)参照 getnameinfo(): 登録されているホスト名およびアドレスの取得……………………………………getaddrinfo(3N)参照 getnetbyaddr(): ネットワークエントリーの取得 ………………………………………………………getnetent(3N)参照 getnetbyaddr_r(): ネットワークエントリーの取得 ……………………………………………………getnetent(3N)参照 getnetbyname(): ネットワークエントリーの取得 ………………………………………………………getnetent(3N)参照 getnetbyname_r(): ネットワークエントリーの取得 ……………………………………………………getnetent(3N)参照 getnetconfig(3N): getnetconfig(), setnetconfig(), endnetconfig(), getnetconfigent(), freenetconfigent(), nc_perror(), nc_sperror()………………………………………………………… ……………………………………………………………………ネットワーク構成データベースのエントリの取得 getnetconfigent(): ネットワーク構成データベースのエントリの取得……………………………getnetconfig(3N)参照 getnetent(): ネットワークエントリーの取得 ……………………………………………………………getnetent(3N)参照 getnetent(3N): getnetent(), getnetbyaddr(), getnetbyname(), setnetent(), endnetent()…………………… …………………………………………………………………………………………ネットワークエントリーの取得 getnetent_r(): ネットワークエントリーの取得 …………………………………………………………getnetent(3N)参照 getnetgrent(3C): getnetgrent(), setnetgrent(), endnetgrent(), innetgr()…………………………………… ……………………………………………………………………………… ネットワークグループ エントリの取得 getnetname(): Secure RPC のライブラリルーチン………………………………………………………secure_rpc(3N)参照 getnetpath(3N): getnetpath(), setnetpath(), endnetpath()……………………………………………………… …………………………………………………NETPATH の構成要素に対応する /etc/netconfig エントリの取得 getnstr(3X): getnstr, mvgetnstr, mvwgetnstr, wgetnstr…………端末からマルチバイト文字長制限文字列を取得 getn_wstr(3X): getn_wstr, get_wstr, mvgetn_wstr, mvget_wstr, mvwgetn_wstr, mvwget_wstr, wgetn_wstr, xviii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 wget_wstr…………………………端末からワイドキャラクタとファンクションキー コードの配列を取得 getopt(3C): getopt(), optarg, optind, opterr……………………引き数 のベクトルからのオプション英文字の取得 getparyx(): 追加のカーソルとウィンドウの座標の取得…………………………………………………getbegyx(3X)参照 getpass(3C): getpass()………………………………………………………………………………………パスワードの読み取 getprdfent(3): getprdfent, getprdfnam, setprdfent, endprdfent, putprdfnam…………………………………… ………………………………………高信頼性システムに対する System Defaultデータベースエントリーの操作 getprdfnam(): データベースエントリーの操作……………………………………………………………getprdfent(3)参照 getprotobyname(): プロトコルエントリーの取得……………………………………………………getprotoent(3N)参照 getprotobyname_r(): プロトコルエントリーの取得 (スレッドセーフ) ……………………………getprotoent(3N)参照 getprotobynumber(): プロトコルエントリーの取得…………………………………………………getprotoent(3N)参照 getprotobynumber_r(): プロトコルエントリーの取得 (スレッドセーフ) …………………………getprotoent(3N)参照 getprotoent(3N): getprotoent(), getprotobynumber(), getprotobyname(), setprotoent(), endprotoent()………………………………………………………………………プロトコルエントリーの取得 getprotoent_r(): プロトコルエントリーの取得 (スレッドセーフ) …………………………………getprotoent(3N)参照 getprpwaid(): 保護されたパスワードデータベースの監査 ID の取得…………………………………getprpwent(3)参照 getprpwent(3): getprpwent, getprpwuid, getprpwnam, getprpwaid, setprpwent, endprpwent, putprpwnam… ……………………………………………………………保護されたパスワードデータベースのエントリーの操作 getprpwnam(): 保護されたパスワードデータベースのユーザー名の取得………………………………getprpwent(3)参照 getprpwuid(): 保護されたパスワードデータベースのユーザー ID の取得……………………………getprpwent(3)参照 getprtcent(): Terminal Control データベースエントリーの操作………………………………………getprtcent(3)参照 getprtcent(3): getprtcent, getprtcnam, setprtcent, endprtcent, putprtcnam……………………………………… …………………………………… 高信頼性システムに対する Terminal Controlデータベースエントリーの操作 getprtcnam(): Terminal Control データベースエントリーの操作………………………………………getprtcent(3)参照 getpublickey(3N): getpublickey(), getsecretkey(), publickey()…………………………………………………… ………………………………………………………………………パブリックキーとシークレットキーの取り出し getpw(3C): getpw()………………………………………………………………………………………UID からの名前の取得 getpwent(): パスワードファイルエントリーの取得………………………………………………………getpwent(3C)参照 getpwent(): シャドウパスワードエントリーのアクセス…………………………………………………getspwent(3X)参照 getpwent(3C): getpwent(), getpwuid(), getpwuid_r(), getpwnam(), getpwnam_r(), setpwent(), endpwent(), fgetpwent()……………………………………………パスワードファイルエントリーの取得 getresgid(): ユーザーまたはグループの実 ID、実効 ID、保存 ID の取得……………………………getresuid(3)参照 getresuid(3): getresuid, getresgid………………………ユーザーまたはグループの実 ID、実効 ID、保存 ID の取得 getrpcent(3C): getrpcent(), getrpcbyname(), getrpcbynumber()………………………………rpc エントリの取得 getrpcport(3N): getrpcport()…………………………………………………………………………RPCのポート番号の取得 gets(3S): gets(), fgets()…………………………………………………………………ストリームからの文字列の取得 getsecretkey(): パブリックキーとシークレットキーの取り出し…………………………………getpublickey(3M)参照 getservbyname(): サービスエントリーの取得……………………………………………………………getservent(3N)参照 getservbyname_r(): サービスエントリーの取得 (スレッドセーフ) …………………………………getservent(3N)参照 getservbyport(): サービスエントリーの取得……………………………………………………………getservent(3N)参照 getservbyport_r(): サービスエントリーの取得 (スレッドセーフ) …………………………………getservent(3N)参照 getservent(): サービスエントリーの取得………………………………………………………………getservent(3N)参照 getservent(3N): getservent(), getservbyport(), getservbyname(), setservent(), endservent()………… ………………………………………………………………………………………………サービスエントリーの取得 getservent_r(): サービスエントリーの取得 (スレッドセーフ) ………………………………………getservent(3N)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xix 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 getspent(): シャドウパスワードエントリーのアクセス…………………………………………………getspent(3C)参照 getspent(3C): getspnam(), getspnam_r(), getspent(), setspent(), endspent(), fgetspent()…………… ……………………………………………………………………………シャドウパスワードエントリーのアクセス getspnam_r(): シャドウパスワードエントリーのアクセス………………………………………………getspent(3C)参照 getspwaid(): シャドウパスワードエントリーのアクセス………………………………………………getspwent(3X)参照 getspwent(3X): getspwent(), getspwuid(), getspwaid(), getspwnam(), setspwent(), endspwent(), fgetspwent()…………高信頼性システムにおける、保護されたパスワードファイル エントリーの取得 getstr(3X): getstr, mvgetstr, mvwgetstr, wgetstr………………………………端末からマルチバイト文字列を取得 getsubopt(3C): getsubopt()……………………………………………………………文字列からのサブオプションの解析 gettimer(3C): gettimer………………………………………………………………………プロセスごとのタイマー値の取得 gettxt(3C): gettxt()…………………………………………………メッセージファイルからのテキスト文字列の読み取り getusershel(3C): getusershell(), setusershell(), endusershell()………………正当なユーザー シェルの取得 getut(3C): getutent(), getutid(), getutline(), pututline(), _pututline(), setutent(), endutent(), utmpname(), utmp……………………………………………………………ファイルエントリーへのアクセス getutent(): utmpをクローズする………………………………………………………………………………getut(3C)参照 getutid(): utmpをクローズする………………………………………………………………………………getut(3C)参照 getutline(): utmpをクローズする………………………………………………………………………………getut(3C)参照 getuts(3C): getuts: getutsent(), getutsid(), getutsline(), pututsline(), setutsent(), endutsent() …………………………………utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン getutsent(): utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン…………getuts(3C)参照 getutsid(): utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン……………getuts(3C)参照 getutsline(): utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン…………getuts(3C)参照 getutx(3C): getutxent(), getutxid(), getutxline(), pututxline(), setutxent(), endutxent()…………… ………………………………………………………………………………utmpx ファイルエントリーへのアクセス getutxent(): utmpx ファイルエントリーへのアクセス………………………………………………………getutx(3C)参照 getutxid(): utmpx ファイルエントリーへのアクセス………………………………………………………getutx(3C)参照 getutxline(): utmpx ファイルエントリーへのアクセス……………………………………………………getutx(3C)参照 getw(): ストリームファイルからの文字あるいはワードの取得…………………………………………………getc(3S)参照 getwc(): ストリームファイルからのワイドキャラクタの取得………………………………………………getwc(3C)参照 getwc(3C): getwc(), getwchar(), fgetwc()……………………ストリームファイルからのワイドキャラクタの取得 getwchar(): ストリームファイルからのワイドキャラクタの取得…………………………………………getwc(3C)参照 getwchar_unlocked(): ストリームファイルからのワイドキャラクタの取得……………………………getwc(3C)参照 getwc_unlocked(): ストリームファイルからのワイドキャラクタの取得…………………………………getwc(3C)参照 getwd(3C): getwd()………………………………………………………………現在のワークディレクトリのパス名の取得 getwin(3X): getwin, putwin……………………………ウィンドウのファイルへのダンプおよびファイルからの再ロード getw_unlocked(): ストリームファイルからの文字あるいはワードの取得…………………………………getc(3S)参照 getyx(3X): getyx……………………………………………………………………………カーソルとウィンドウの座標を取得 get_expiration_time(3T): get_expiration_time()……………現在の絶対システム時間に指定された時間間隔を加算 get_myaddress(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 get_resfield - リゾルバルーチン……………………………………………………………………………resolver(3N)参照 get_resfield(): リゾルバルーチン…………………………………………………………………………resolver(3N)参照 get_wch(3X): get_wch, mvget_wch, mvwget_wch, wget_wch…………………………端末からワイドキャラクタを取得 get_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得………………getn_wstr(3X)参照 glob(3C): glob(), globfree()…………………………………………………………………………ファイル名の生成関数 globfree(): ファイル名生成関数に関連するスペースを開放する…………………………………………glob(3C)参照 xx Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 gmtime(): 日付と時刻の文字列への変換 ………………………………………………………………………ctime(3C)参照 gmtime_r(): 日付と時刻の文字列への変換 ……………………………………………………………………ctime(3C)参照 grantpt(3C): grantpt…………………………………………………………STREAMSスレーブptyへのアクセス権限の付与 gsignal(): ソフトウェアシグナル………………………………………………………………………………ssignal(3C)参照 gss_accept_sec_context(3): gss_accept_sec_context()……………………………………………………………………… ……………………アプリケーションとコンテキスト受け入れ側との間でのセキュリティコンテキストの確立 gss_acquire_cred(3): gss_acquire_cred()……………………………………………………………………………………… …………………………名前が付いている既存の証明書のハンドル取得 (アプリケーションが使うルーチン) gss_add_cred(3): gss_add_cred()………………………………………………………………証明書への証明書要素の追加 gss_add_oid_set_member(3): gss_add_oid_set_member()……オブジェクト識別子 (OID) セットへの OID の追加 gss_canonicalize_name(3): gss_canonicalize_name()……………………………………………………………………… …………………………内部名から内部機構名 (MN) 表現への変換 (不透明な内部名から正式名称への変換) gss_compare_name(3): gss_compare_name()…………………………………………………………………………………… ………………2つの内部名が等価であるかどうかを調べるための比較 (アプリケーションが使うルーチン) gss_context_time(3): gss_context_time()……………………………………………コンテキストの有効期間のチェック gss_create_empty_oid_set(3): gss_create_empty_oid_set()…メンバーを追加できる空の OID セットの新規作成 gss_delete_sec_context(3): gss_delete_sec_context()………………………………セキュリティコンテキストの削除 gss_display_name(3): gss_display_name()…………………………………………………………………………………… ……………………………………不透明な内部名のテキスト表現取得 (アプリケーションが使うルーチン) gss_display_status(3): gss_display_status()…………………………………………………………………………GSSAPI ステータスコードのテキスト表現の取得 (アプリケーションがユーザーへの表示やログ用に使うルーチン) gss_duplicate_name(3): gss_duplicate_name()……………………………………………………………………………… ……………………………………………既存内部名の正確な複製の作成 (アプリケーションが使うルーチン) gss_export_name(3): gss_export_name()………………………………直接比較に適した形式への機構名 (MN) の変換 gss_export_sec_context(3): gss_export_sec_context()……………………………………………………………………… ……………………………………同じマシン上の他のプロセスへのセキュリティコンテキストのエクスポート gss_get_mic(3): gss_get_mic()………………暗号化したメッセージ完全性コード (MIC) の作成とトークンへの設定 gss_import_name(3): gss_import_name()……………………………………………印刷可能な名前の内部形式への変換 gss_import_sec_context(3): gss_import_sec_context()…………………………………………………………………… ……………………………………同じマシン上の他のプロセスからのセキュリティコンテキストのインポート gss_indicate_mechs(3): gss_indicate_mechs()………………………………………………………………………………… ………………………………………使用可能なセキュリティ機構の調査 (アプリケーションが使うルーチン) gss_init_sec_context(3): gss_init_sec_context()…………………………………………………………………………… …………………コンテキスト起動側とコンテキスト受け入れ側との間でのセキュリティコンテキストの確立 gss_inquire_context(3): gss_inquire_context()………………………セキュリティコンテキストに関する情報の取得 gss_inquire_cred(3): gss_inquire_cred()……………証明書に関する情報の取得 (アプリケーションが使うルーチン) gss_inquire_cred_by_mech(3): gss_inquire_cred_by_mech()……………………………………………………………… ……………………………………特定の機構に関する証明書の情報取得 (アプリケーションが使うルーチン) gss_inquire_mechs_for_name(3): gss_inquire_mechs_for_name()……………………………………………………… ……………………………………………………………特定の名前タイプをサポートしている機構のリスト取得 gss_inquire_names_for_mech(3): gss_inquire_names_for_mech()……………………………………………………… …………………………………………………………特定の機構でサポートされている名前タイプのリスト取得 gss_process_context_token(3): gss_process_context_token()………………………………………………………… …………………………………………………………………セキュリティサービスへのコンテキストの受け渡し HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxi 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 gss_release_buffer(3): gss_release_buffer()……………………………バッファーとして使っている記憶領域の解放 gss_release_cred(3): gss_release_cred()…………………………………………………………証明書の削除マーク付け gss_release_name(3): gss_release_name()……………………………………………………………………………………… ………………………………………GSSAPI ルーチンによって内部名用に割り当てられている記憶領域の解放 gss_release_oid_set(3): gss_release_oid_set()…………gss_OID_set オブジェクトに使われている記憶領域の解放 gss_test_oid_set_member(3): gss_test_oid_set_member()…………………………OID の メンバーシップチェック gss_unwrap(3): gss_unwrap………………………………………………………………………………………添付されてい メッセージ完全性コード (MIC) を使ったメッセージチェックと、必要に応じたメッセージ内容暗号化解除 gss_verify_mic(3): gss_verify_mic()…………………………………………………………………………………………… …………暗号化されているメッセージ完全性コード (MIC) のチェックを通した、メッセージの完全性検証 gss_wrap(3): gss_wrap()……………………………メッセージ完全性コード (MIC) の添付とメッセージ内容の暗号化 gss_wrap_size_limit(3): gss_wrap_size_limit()……………………………………………………………………………… ……………………………………特定のコンテキストで gss_wrap() が作成するトークンの最大サイズの調査 halfdelay(3X): halfdelay……………………………………………………………………………入力文字遅延モードの制御 hasmntopt(): ファイルシステム 記述子 ファイルをクローズする……………………………………getmntent(3X)参照 has_colors(): 色操作関数…………………………………………………………………………can_change_color(3X)参照 has_ic(3X): has_ic, has_il………………………………………………………端末の挿入/削除機能の有無を照会する関数 has_il(): 端末の挿入/削除機能の有無を照会する関数………………………………………………………has_ic(3X)参照 hcreate(): ハッシュ サーチテーブルの管理…………………………………………………………………hsearch(3C)参照 hdestroy(): ハッシュ サーチテーブルの管理………………………………………………………………hsearch(3C)参照 herror - リゾルバルーチン……………………………………………………………………………………resolver(3N)参照 herror(): リゾルバルーチン……………………………………………………………………………………resolver(3N)参照 hline(3X): hline, mvhline, mvvline, mvwhline, mvwvline, vline, whline, wvline………………………………… ………………………………………………………………………………1バイト文字と修飾情報を元にした線描 hline_set(3X): hline_set, mvhline_set, mvvline_set, mvwhline_set, mvwvline_set, vline_set, whline_set, wvline_set………………………………………………複情報文字と修飾情報を元にした線描 host2netname(): Secure RPC のライブラリルーチン……………………………………………………secure_rpc(3N)参照 hosts_access(3): hosts_access(), hosts_ctl(), request_init(), request_set()……アクセス制御ライブラリ hosts_ctl(): アクセス制御ライブラリ……………………………………………………………………hosts_access(3)参照 hppac(3X): hppac: HPPACADDD(), HPPACCMPD(), HPPACCVAD(), HPPACCVBD(), HPPACCVDA(), HPPACCVDB(), HPPACDIVD(), HPPACLONGDIVD(), HPPACMPYD(), HPPACNSLD(), HPPACSLD(), HPPACSRD(), HPPACSUBD()………………………………………………………………3000モードのパック 10進ライブラリ HPPACADDD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACCMPD(): HP 3000 モードのパック 10 進ライブラリ…………………………………………………hppac(3X)参照 HPPACCVAD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACCVBD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACCVDA(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACCVDB(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACDIVD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACLONGDIVD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………hppac(3X)参照 HPPACMPYD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACNSLD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACSLD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACSRD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 HPPACSUBD(): HP 3000 モードのパック 10 進ライブラリ……………………………………………………hppac(3X)参照 xxii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 hsearch(3C): hsearch(), hcreate(), hdestroy()………………………………………ハッシュ サーチテーブルの管理 htonl(), htons(): ホスト バイトオーダとネットワーク バイトオーダとの間での値の変換………byteorder(3N)参照 hypot(3M): hypotf(), hypotl(), hypotw(), hypotq()……………………………………………ユークリッド距離関数 hypotf(): ユークリッド距離関数 (float) …………………………………………………………………hypot(3M)参照 hypotl(): ユークリッド距離関数 (long double) ………………………………………………………………hypot(3M)参照 hypotq(): ユークリッド距離関数 (quad) …………………………………………………………………hypot(3M)参照 hypotw(): ユークリッド距離関数 (extended) …………………………………………………………………hypot(3M)参照 iconv(): 文字コードセット変換…………………………………………………………………………………iconv(3C)参照 iconv(3C): iconv, iconv_open, iconv_close…………………………………………………コードセット変換ルーチン iconv_close(): コードセット変換ルーチン、変換記述子を割り当て解除する……………………………iconv(3C)参照 iconv_open(): コードセット変換ルーチン、変換記述子を返す……………………………………………iconv(3C)参照 idcok(3X): idcok………………………………………ハードウエアの文字挿入/削除機構を使用可能または使用不能にする idleok(): 端末出力制御関数……………………………………………………………………………………clearok(3X)参照 if_freenameindex(): インタフェース名とインデックスとの間のマッピング…………………if_nameindex(3N)参照 if_indextoname(): インタフェース名とインデックスとの間のマッピング………………………if_nameindex(3N)参照 if_nameindex(3N): if_nameindex(), if_nametoindex(), if_indextoname(), if_freenameindex()…………… ………………………………………………………………インタフェース名とインデックスとの間のマッピング if_nametoindex(): インタフェース名とインデックスとの間のマッピング………………………if_nameindex(3N)参照 ilogb(3M): ilogb(), ilogbf(), ilogbl(), ilogbw(), ilogbq()………………基数に依存しない指数取り出し関数 ilogbf(): 基数に依存しない指数取り出し関数 (float) ………………………………………………………ilogb(3M)参照 ilogbl(): 基数に依存しない指数取り出し関数 (long double) …………………………………………………ilogb(3M)参照 ilogbq(): 基数に依存しない指数取り出し関数 (quad) ………………………………………………………ilogb(3M)参照 ilogbw(): 基数に依存しない指数取り出し関数 (extended) ……………………………………………………ilogb(3M)参照 immedok(3X): immedok……………………………………………即時端末リフレッシュを使用可能または使用不能にする inch(3X): inch, mvinch, mvwinch, winch…………………………………ウィンドウから 1バイト文字と修飾情報を入力 inchnstr(3X): inchnstr, inchstr, mvinchnstr, mvinchstr, mvwinchnstr, mvwinchstr, winchnstr, winchstr ………………………………………………………………ウィンドウから 1バイト文字と修飾情報の配列を入力 inchstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力………………………………………inchnstr(3X)参照 index(): BSD への移植性のための文字列ルーチン……………………………………………………………string(3C)参照 inet(3N): inet_addr(), inet_network(), inet_ntoa(), inet_makeaddr(), inet_lnaof(), inet_netof()… …………………………………………………………………………………インターネットアドレス処理ルーチン inet6(3N): inet_pton(), inet_ntop()………………IP バージョン 4 以降用のインターネットアドレス操作ルーチン inet6_opt_append(): IPv6のホップバイホップオプションおよびあて先オプションの操作……inet6_opt_init(3N)参照 inet6_opt_find(): IPv6のホップバイホップオプションおよびあて先オプションの操作………inet6_opt_init(3N)参照 inet6_opt_finish(): IPv6のホップバイホップオプションおよびあて先オプションの操作……inet6_opt_init(3N)参照 inet6_opt_get_val(): IPv6のホップバイホップオプションおよびあて先オプションの操作…inet6_opt_init(3N)参照 inet6_opt_init(3N): inet6_opt_init(), inet6_opt_append(), inet6_opt_find(), inet6_opt_finish(), inet6_opt_get_val(), inet6_opt_next(), inet6_opt_set_val()………………………………… ………………………………………………IPv6のホップバイホップオプションおよびあて先オプションの操作 inet6_opt_next(): IPv6のホップバイホップオプションおよびあて先オプションの操作………inet6_opt_init(3N)参照 inet6_opt_set_val(): IPv6のホップバイホップオプションおよびあて先オプションの操作…inet6_opt_init(3N)参照 inet6_rth_addr(): IPv6の経路制御ヘッダーオプションの操作…………………………………inet6_rth_space(3N)参照 inet6_rth_getaddr(): IPv6の経路制御ヘッダーオプションの操作……………………………inet6_rth_space(3N)参照 inet6_rth_init(): IPv6の経路制御ヘッダーオプションの操作…………………………………inet6_rth_space(3N)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxiii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 inet6_rth_reverse(): IPv6の経路制御ヘッダーオプションの操作……………………………inet6_rth_space(3N)参照 inet6_rth_segments(): IPv6の経路制御ヘッダーオプションの操作……………………………inet6_rth_space(3N)参照 inet6_rth_space(): IPv6の経路制御ヘッダーオプションの操作………………………………inet6_rth_space(3N)参照 inet6_rth_space(3N): inet6_rth_add(), inet6_rth_getaddr(), inet6_rth_init(), inet6_rth_reverse(), inet6_rth_segments(), inet6_rth_space()………………IPv6の経路制御ヘッダーオプションの操作 inet_addr(): インターネットアドレス処理ルーチン……………………………………………………………inet(3N)参照 inet_lnaof(): インターネットアドレス処理ルーチン…………………………………………………………inet(3N)参照 inet_makeaddr(): インターネットアドレス処理ルーチン……………………………………………………inet(3N)参照 inet_netof(): インターネットアドレス処理ルーチン…………………………………………………………inet(3N)参照 inet_network(): インターネットアドレス処理ルーチン………………………………………………………inet(3N)参照 inet_ntoa(): インターネットアドレス処理ルーチン…………………………………………………………inet(3N)参照 inet_ntoa_r(): インターネットアドレス処理ルーチン…………………………………………………………inet(3X)参照 inet_nton(): インターネットアドレス処理ルーチン…………………………………………………………inet6(3N)参照 inet_pton(): インターネットアドレス処理ルーチン…………………………………………………………inet6(3N)参照 initgroups(3C): initgroups()………………………………………………………グループ アクセスリストを初期化する initscr(3X): initscr, newterm……………………………………………………………………………スクリーン初期化関数 initstate(): 擬似乱数の生成…………………………………………………………………………………random(3M)参照 init_colors(): 色操作関数………………………………………………………………………can_change_color(3X)参照 init_pair(): 色操作関数……………………………………………………………………………can_change_color(3X)参照 innstr(3X): innstr, instr, mvinnstr, mvinstr, mvwinnstr, mvwinstr, winnstr, winstr…………………………… ……………………………………………………………………………ウィンドウからマルチバイト文字列を入力 innwstr(): ウィンドウからワイド文字列を入力…………………………………………………………innwstr(3X)参照 innwstr(3X): innwstr, inwstr, mvinnwstr, mvinwstr, mvwinnwstr, mvwinwstr, winnwstr, winwstr…………… …………………………………………………………………………ウィンドウからワイド文字列を入力 insch(3X): insch, mvinsch, mvwinsch, winsch…………………………1バイト文字と修飾情報のウィンドウへの挿入 insdelln(3X): insdelln, winsdelln……………………………ウィンドウからの行の削除またはウィンドウへ行の挿入 insertln(3X): insertln, winsertln…………………………………………………………………ウィンドウへの行の挿入 insnstr(3X): insnstr, insstr, mvinsnstr, mvinsstr, mvwinsnstr, mvwinsstr, winsnstr, winsstr…………… ……………………………………………………………………………マルチバイト文字列のウィンドウへの挿入 insque(3C): insque(), remque()……………………………………………………………キューの要素の挿入または削除 insstr(): マルチバイト文字列のウィンドウへの挿入………………………………………………………insnstr(3X)参照 instr(): ウィンドウからマルチバイト文字列を入力…………………………………………………………innstr(3X)参照 ins_nwstr(3X): ins_nwstr, ins_wstr, mvins_nwstr, mvins_wstr, mvwins_nwstr, mvwins_wstr, wins_nwstr, wins_wstr……………………………………………………………………ワイド文字列のウィンドウへの挿入 ins_wch(3X): ins_wch, mvins_wch, mvwins_wch, wins_wch……………複情報文字と修飾情報のウィンドウへの挿入 ins_wstr(): ワイド文字列のウィンドウへの挿入…………………………………………………………ins_nwstr(3X)参照 intrflush(3X): intrflush………………………………………割り込み時の初期化機能を使用可能または使用不能にする inwstr(): ウィンドウからワイド文字列を入力…………………………………………………………innwstr(3X)参照 in_wch(3X): in_wch, mvin_wch, mvwin_wch, win_wch……………………ウィンドウから複情報文字と修飾情報を入力 in_wchnstr(3X): in_wchnstr, in_wchstr, mvin_wchnstr, mvin_wchstr, mvwin_wchnstr, mvwin_wchstr, win_wchnstr, win_wchstr……………………………ウィンドウから複情報文字と修飾情報の配列を入力 in_wchstr(): ウィンドウから複情報文字と修飾情報の配列を入力……………………………………in_wchnstr(3X)参照 isalnum(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isalpha(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isascii(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 xxiv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 isastream(3C): isastream()……………………………………………………………………………………………………… … …………ファイル記述子がSTREAMSデバイスまたはSTREAMSベースのパイプを参照していることの判定 isatty(): 端末名の取得…………………………………………………………………………………………ttyname(3C)参照 iscntrl(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isdigit(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isendwin(3X): isendwin……………………………………………………スクリーンがリフレッシュされたかどうかの判定 isfinite(3M): isfinite()…………………………………………………………………………浮動小数点数のテスト (有限) isgraph(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isgreater(3M): isgreater()………………………………………………例外を発生させない浮動小数点数比較マクロ (>) isgreaterequal(3M): isgreaterequal()………………………………例外を発生させない浮動小数点数比較マクロ (>=) isinf(3M): isinf()………………………………………………………………………………浮動小数点数のテスト (無限大) isless(3M): isless()……………………………………………………例外を発生させない浮動小数点数比較マクロ (<) islessequal(3M): islessequal()………………………………………例外を発生させない浮動小数点数比較マクロ (<=) islessgreater(3M): islessgreater()…………………………………例外を発生させない浮動小数点数比較マクロ (<>) islower(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isnan(3M): isnan()………………………………………………………………………………浮動小数点数のテスト (NaN) isnormal(3M): isnormal()…………………………………………………………浮動小数点数のテスト (正規化された値) isprint(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 ispunct(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isspace(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 isunordered(3M): isunordered()………………………………………………………浮動小数点数比較マクロ (順序なし) isupper(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 iswalnum(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswalpha(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswcntrl(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswctype(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswdigit(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswgraph(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswlower(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswprint(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswpunct(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswspace(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswupper(): ワイドキャラクタの分類…………………………………………………………………………wctype(3C)参照 iswxdigit(): ワイドキャラクタの分類………………………………………………………………………wctype(3C)参照 isxdigit(): 文字のクラス分類……………………………………………………………………………………ctype(3C)参照 is_linetouched(3X): is_linetouched, is_wintouched, touchline, untouchwin, wtouchln……………………… ………………………………………………………………………………………ウィンドウリフレッシュ制御関数 is_wintouched(): ウィンドウリフレッシュ制御関数………………………………………………is_linetouched(3X)参照 j0(3M): j0(), j1(), jn()……………………………………………………………………………………第1種ベッセル関数 j1(): 第1種ベッセル関数……………………………………………………………………………………………j0(3M)参照 jn(): 第1種ベッセル関数……………………………………………………………………………………………j0(3M)参照 jrand48(): 均等に分散される疑似乱数の生成………………………………………………………………drand48(3C)参照 keyname(3X): keyname, key_name…………………………………………………………………………………キー名の取得 keypad(3X): keypad………………………………………ファンクションキーの省略形を使用可能または使用不能にする HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxv 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 key_decryptsession(): Secure RPC のライブラリルーチン…………………………………………secure_rpc(3N)参照 key_encryptsession(): Secure RPC のライブラリルーチン…………………………………………secure_rpc(3N)参照 key_gendes(): Secure RPC のライブラリルーチン………………………………………………………secure_rpc(3N)参照 key_name(): キー名の取得……………………………………………………………………………………keyname(3X)参照 key_secretkey_is_set(): Secure RPC のライブラリルーチン………………………………………secure_rpc(3N)参照 key_setsecret(): Secure RPC のライブラリルーチン…………………………………………………secure_rpc(3N)参照 killchar(): シングルバイト端末環境照会関数……………………………………………………………erasechar(3X)参照 killwchar(): 現在の行抹消文字…………………………………………………………………………erasewchar(3X)参照 l64a(): long 整数と 64 進の ASCII 文字列間の変換……………………………………………………………a64l(3C)参照 l64a_r: long 整数と 64 進の ASCII 文字列間の変換……………………………………………………………a64l(3X)参照 lckpwdf(3C): lckpwdf(), ulckpwdf()………………/etc/passwd ファイルと /etc/shadow ファイルへのアクセスの制御 lcong48(): 均等に分散される疑似乱数の生成………………………………………………………………drand48(3C)参照 ldcvt(3C): _ldecvt(), _ldfcvt(), _ldgcvt()……………………………long-double 浮動小数点数値の文字列への変換 ldecvt() (_ldecvt()): long-double 浮動小数点数値の文字列への変換……………………………………ldcvt(3C)参照 ldexp(3M): ldexp(), ldexpf(), ldexpl(), ldexpw(), ldexpq()………………浮動小数点数の指数のスケーリング ldexpf(): 浮動小数点数の指数のスケーリング (float) ………………………………………………………ldexp(3M)参照 ldexpl(): 浮動小数点数の指数のスケーリング (long double) ………………………………………………ldexp(3M)参照 ldexpq(): 浮動小数点数の指数のスケーリング (quad) ………………………………………………………ldexp(3M)参照 ldexpw(): 浮動小数点数の指数のスケーリング (extended) ……………………………………………………ldexp(3M)参照 ldfcvt() (_ldfcvt()): long-double 浮動小数点数値の文字列への変換……………………………………ldcvt(3C)参照 ldgcvt() (_ldgcvt()): long-double 浮動小数点数値の文字列への変換……………………………………ldcvt(3C)参照 ldiv(): 整数の除算および剰余……………………………………………………………………………………div(3C)参照 leaveok(): 端末出力制御関数…………………………………………………………………………………clearok(3X)参照 lfind(): 線形検索および更新…………………………………………………………………………………lsearch(3C)参照 lgamma(3M): lgamma(), lgammaf(), lgammal(), lgammaw(), lgammaq(), lgamma_r(), lgammaf_r(), lgammal_r(), lgammaw_r(), lgammaq_r(), gamma(), gammaf(), gammal(), gammaw(), gammaq(), signgam………………………………………………………………………………………………対数ガンマ関数 lgammaf(): 対数ガンマ関数 (float) ……………………………………………………………………………lgamma(3M)参照 lgammaf_r(): リエントラント対数ガンマ関数 (float) ……………………………………………………lgamma(3M)参照 lgammal(): 対数ガンマ関数 (long double) …………………………………………………………………lgamma(3M)参照 lgammal_r(): リエントラント対数ガンマ関数 (long double) ………………………………………………lgamma(3M)参照 lgammaq(): 対数ガンマ関数 (quad) ……………………………………………………………………………lgamma(3M)参照 lgammaq_r(): リエントラント対数ガンマ関数 (quad) ……………………………………………………lgamma(3M)参照 lgammaw(): 対数ガンマ関数 (extended) ………………………………………………………………………lgamma(3M)参照 lgammaw_r(): リエントラント対数ガンマ関数 (extended) …………………………………………………lgamma(3M)参照 lgamma_r(): リエントラント対数ガンマ関数 (double) ……………………………………………………lgamma(3M)参照 libkrb5(3): libkrb5………………………………Kerberos クライアントライブラリ (libkrb5, libk5crypto, libcom_err) libslp(3N): libslp: SLPOpen(), SLPClose(), SLPReg(), SLPDereg(), SLPDelAttrs(), SLPFindSrvs(), SLPFindSrvTypes(), SLPFindAttrs(), SLPParseSrvURL(), SLPEscape(), SLPUnescape(), SLPFree(), SLPGetRefreshInterval(), SLPFindScopes(), SLPGetProperty(), SLPSetProperty()………………………………………SLP (Service Location Protocol)ライブラリルーチン LINES(3X): LINES………………………………………………………………………………………………端末画面上の行数 llrint(3M): llrint(), llrintf(), llrintl(), llrintw(), llrintq()……………最も近い long long への丸め関数 llrintf(): 最も近い long long への丸め関数 (float) …………………………………………………………llrint(3M)参照 llrintl(): 最も近い long long への丸め関数 (long double) …………………………………………………llrint(3M)参照 xxvi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 llrintq(): 最も近い long long への丸め関数 (quad) ………………………………………………………llrint(3M)参照 llrintw(): 最も近い long long への丸め関数 (extended) ……………………………………………………llrint(3M)参照 llround(3M): llround(), llroundf(), llroundl(), llroundw(), llroundq()…………long long への丸め関数 llroundf(): long long への丸め関数 (float) …………………………………………………………………llround(3M)参照 llroundl(): long long への丸め関数 (long double) ………………………………………………………llround(3M)参照 llroundq(): long long への丸め関数 (quad) …………………………………………………………………llround(3M)参照 llroundw(): long long への丸め関数 (extended) ……………………………………………………………llround(3M)参照 localeconv(3C): localeconv()…………………………………………現在の locale の数値フォーマット規約の問合わせ localtime(): 日付と時刻の文字列への変換 ……………………………………………………………………ctime(3C)参照 localtime_r(): 日付と時刻の文字列への変換 ………………………………………………………………ctime(3C)参照 log(3M): log(), logf(), logl(), logw(), logq()……………………………………………………………自然対数関数 log10(3M): log10(), log10f(), log10l(), log10w(), log10q()…………………………………………常用対数関数 log10f(): 常用対数関数 (float) …………………………………………………………………………………log10(3M)参照 log10l(): 常用対数関数 (long double) …………………………………………………………………………log10(3M)参照 log10q(): 常用対数関数 (quad) ………………………………………………………………………………log10(3M)参照 log10w(): 常用対数関数 (extended) ………………………………………………………………………………log10(3M)参照 log1p(3M): log1p(), log1pf(), log1pl(), log1pw(), log1pq()……………………引き数プラス1の自然対数関数 log1pf(): 引き数プラス1の自然対数関数 (float) ……………………………………………………………log1p(3M)参照 log1pl(): 引き数プラス1の自然対数関数 (long double) ……………………………………………………log1p(3M)参照 log1pq(): 引き数プラス1の自然対数関数 (quad) …………………………………………………………log1p(3M)参照 log1pw(): 引き数プラス1の自然対数関数 (extended) …………………………………………………………log1p(3M)参照 log2(3M): log2(), log2f(), log2l(), log2w(), log2q()…………………………………………2を底とする対数関数 log2f(): 2を底とする対数関数 (float) …………………………………………………………………………log2(3M)参照 log2l(): 2を底とする対数関数 (long double) ……………………………………………………………………log2(3M)参照 log2q(): 2を底とする対数関数 (quad) …………………………………………………………………………log2(3M)参照 log2w(): 2を底とする対数関数 (extended) ………………………………………………………………………log2(3M)参照 logb(3M): logb(), logbf(), logbl(), logbw(), logbq()…………………………基数に依存しない指数取り出し関数 logbf(): 基数に依存しない指数取り出し関数 (float) …………………………………………………………logb(3M)参照 logbl(): 基数に依存しない指数取り出し関数 (long double) ……………………………………………………logb(3M)参照 logbq(): 基数に依存しない指数取り出し関数 (quad) …………………………………………………………logb(3M)参照 logbw(): 基数に依存しない指数取り出し関数 (extended) ………………………………………………………logb(3M)参照 logf(): 自然対数関数 (float) …………………………………………………………………………………………log(3M)参照 logl(): 自然対数関数 (long double) …………………………………………………………………………………log(3M)参照 logname(3C): logname()…………………………………………………………………………………ユーザーのログイン名 logq(): 自然対数関数 (quad) ………………………………………………………………………………………log(3M)参照 logw(): 自然対数関数 (extended) ……………………………………………………………………………………log(3M)参照 longjmp(): 保存されている非ローカルの goto のスタック環境を復旧……………………………………setjmp(3C)参照 longname(3X): longname…………………………………………………………………………現在の端末の冗長記述の取得 lrand48(): 均等に分散される疑似乱数の生成………………………………………………………………drand48(3C)参照 lrint(3M): lrint(), lrintf(), lrintl(), lrintw(), lrintq()………………………最も近い long int への丸め関数 lrintf(): 最も近い long long への丸め関数 (float) ……………………………………………………………lrint(3M)参照 lrintl(): 最も近い long long への丸め関数 (long double) ……………………………………………………lrint(3M)参照 lrintq(): 最も近い long long への丸め関数 (quad) ……………………………………………………………lrint(3M)参照 lrintw(): 最も近い long long への丸め関数 (extended) ………………………………………………………lrint(3M)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxvii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 lround(3M): lround(), lroundf(), lroundl(), lroundw(), lroundq()………………………long int への丸め関数 lroundf(): long int への丸め関数 (float) ………………………………………………………………………lround(3M)参照 lroundl(): long int への丸め関数 (long double) ………………………………………………………………lround(3M)参照 lroundq(): long int への丸め関数 (quad) ………………………………………………………………………lround(3M)参照 lroundw(): long int への丸め関数 (extended) ………………………………………………………………lround(3M)参照 lsearch(3C): lsearch(), lfind()…………………………………………………………………………線形検索および更新 ltoa(): 変換 long 整数 to ASCII 10 進数………………………………………………………………………ltostr(3C)参照 ltoa_r(): 変換 long 整数 to ASCII 10 進数 (マルチスレッドセーフ) ………………………………………ltostr(3C)参照 ltostr(3C): ltostr(), ltostr_r(), ultostr(), ultostr_r(), ltoa(), ltoa_r(), ultoa(), ultoa_r()……… …………………………………………………………………………………………… long 整数の文字列への変換 ltostr_r(): 符号なし long 整数を文字列に変換 (マルチスレッドセーフ) ………………………………ltostr(3C)参照 mallinfo(): メモリー空間使用状況を表示する………………………………………………………………malloc(3C)参照 malloc(3C): malloc(), free(), realloc(), calloc(), valloc(), mallopt(), mallinfo(), memorymap(), alloca()…………………………………………………………………………………メインメモリー割り当て mallopt(): メモリー空間の割り当てを制御する………………………………………………………………malloc(3C)参照 mblen(): マルチバイト文字のバイトの数……………………………………………………………………multibyte(3C)参照 mbrlen(3C): mbrlen()…………………………………………………………………1文字内のバイト数の取得 (再開可能) mbrtowc(3C): mbrtowc()……………………………………………文字のワイドキャラクタ コードへの変換 (再開可能) mbsinit(3C): mbsinit()…………………………………………………………………変換オブジェクトのステータスの決定 mbsrtowcs(3C): mbsrtowcs()………………………………………文字列のワイドキャラクタ文字列への変換 (再開可能) mbstowcs(): マルチバイト文字のバイトの数………………………………………………………………multibyte(3C)参照 mbtowc(): マルチバイト文字のバイトの数…………………………………………………………………multibyte(3C)参照 memalign(3C): memalign()……………………………………………………………………………整列メモリーの割り付け memccpy(): メモリーから、他のメモリー位置に、バイトをコピー する………………………………memory(3C)参照 memchr(): メモリーの部分に始めてあるバイトが出てくるところを探す…………………………………memory(3C)参照 memcmp(): メモリーの内容とバイトを比較する………………………………………………………………memory(3C)参照 memcpy(): メモリー内のワイドキャラクタのコピー…………………………………………………………memory(3C)参照 memmove(): メモリーの内容を移動する………………………………………………………………………memory(3C)参照 memory(3C): memccpy(), memchr(), memcmp(), memcpy(), memmove(), memset(), bcopy(), bcmp(), bzero(), ffs()……………………………………………………………………………………………………メモリー操作 memorymap(): メモリーアロケータの内容を表示する…………………………………………………………malloc(3C)参照 memset(): メモリーの部分を特定のバイトでうめる…………………………………………………………memory(3C)参照 meta(3X): meta………………………………………………………………………メタキーを使用可能または使用不能にする mkdirp(3G): mkdirp(), rmdirp()…………………………………………………パス内でディレクトリを作成または削除 mkfifo(3C): mkfifo()………………………………………………………………………………………FIFO ファイルの作成 mktemp(3C): mktemp(), mkstemp()………………………………………………………………一意なファイル名の生成 mktime(): 時間をカレンダー上の時間に変換 する…………………………………………………………ctime(3C)参照 mktimer(3C): mktimer………………………………………………………………………プロセスごとのタイマーの割当て modf(3M): modf(), modff(), modfl(), modfw(), modfq()………………………………………浮動小数点数の分解 modff(): 浮動小数点数の分解 (float) …………………………………………………………………………modf(3M)参照 modfl(): 浮動小数点数の分解 (long double) ……………………………………………………………………modf(3M)参照 modfq(): 浮動小数点数の分解 (quad) ……………………………………………………………………………modf(3M)参照 modfw(): 浮動小数点数の分解 (extended) ……………………………………………………………………modf(3M)参照 monitor(3C): monitor()………………………………………………………………………………実行プロファイルの準備 xxviii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 mount(3N): mount…………………………………………………………リモートマウントされたファイルシステムの追跡 move(3X): move, wmove……………………………………………………………………………ウィンドウカーソル位置関数 mrand48(): 均等に分散される疑似乱数の生成………………………………………………………………drand48(3C)参照 multibyte(3C): mblen(), mbtowc(), mbstowcs(), wctomb(), wcstombs()…マルチバイト文字および文字列の規約 mvaddch(): 1バイト文字と修飾情報をウィンドウに追加して、カーソルを進める…………………………addch(3X)参照 mvaddchnstr(): 1バイト文字からなる長さが制限された文字列と修飾情報のウィンドウへの追加…addchnstr(3X)参照 mvaddchstr(): 1バイト文字からなる文字列と修飾情報のウィンドウへの追加…………………………addchstr(3X)参照 mvaddnstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める………… …………………………………………………………………………………………………………addnstr(3X)参照 mvaddnwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める………addnwstr(3X)参照 mvaddstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める………… …………………………………………………………………………………………………………addnstr(3X)参照 mvaddwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める………addnwstr(3X)参照 mvadd_wch(): 情報文字および修飾情報のウィンドウへの追加…………………………………………add_wch(3X)参照 mvadd_wchnstr(): 複情報文字および修飾情報の配列のウィンドウへの追加……………………add_wchnstr(3X)参照 mvadd_wchstr(): 複情報文字および修飾情報の配列のウィンドウへの追加………………………add_wchnstr(3X)参照 mvchgat(): ウィンドウ内の文字の修飾情報の変更……………………………………………………………chgat(3X)参照 mvcur(3X): mvcur………………………………………………………………………カーソル移動コマンドの端末への出力 mvdelch(): ウィンドウからの文字の削除…………………………………………………………………………delch(3X)参照 mvderwin(3X): mvderwin…………………………………………………………………………ウィンドウの座標変換の定義 mvgetch(): 端末から 1バイト文字を取得………………………………………………………………………getch(3X)参照 mvgetnstr(): 端末からマルチバイト文字長制限文字列を取得……………………………………………getnstr(3X)参照 mvgetn_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得…………getn_wstr(3X)参照 mvgetstr(): 端末からマルチバイト文字列を取得……………………………………………………………getstr(3X)参照 mvget_wch(): 端末からワイドキャラクタを取得……………………………………………………………get_wch(3X)参照 mvget_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得……………getn_wstr(3X)参照 mvhline(): 1バイト文字と修飾情報を元にした線描……………………………………………………………hline(3X)参照 mvhline_set(): 複情報文字と修飾情報を元にした線描…………………………………………………hline_set(3X)参照 mvinch(): ウィンドウから 1バイト文字と修飾情報を入力……………………………………………………inch(3X)参照 mvinchnstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力…………………………………inchnstr(3X)参照 mvinchstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力……………………………………inchnstr(3X)参照 mvinnstr(): ウィンドウからマルチバイト文字列を入力……………………………………………………innstr(3X)参照 mvinnwstr(): ウィンドウからワイド文字列を入力…………………………………………………………innwstr(3X)参照 mvinsch(): 1バイト文字と修飾情報のウィンドウへの挿入……………………………………………………insch(3X)参照 mvinsnstr(): マルチバイト文字列のウィンドウへの挿入…………………………………………………insnstr(3X)参照 mvinsstr(): マルチバイト文字列のウィンドウへの挿入……………………………………………………insnstr(3X)参照 mvinstr(): ウィンドウからマルチバイト文字列を入力……………………………………………………innstr(3X)参照 mvins_nwstr(): ワイド文字列のウィンドウへの挿入……………………………………………………ins_nwstr(3X)参照 mvins_wch(): 複情報文字と修飾情報のウィンドウへの挿入………………………………………………ins_wch(3X)参照 mvins_wstr(): ワイド文字列のウィンドウへの挿入……………………………………………………ins_nwstr(3X)参照 mvinwstr(): ウィンドウからワイド文字列を入力……………………………………………………………innwstr(3X)参照 mvin_wch(): ウィンドウから複情報文字と修飾情報を入力…………………………………………………in_wch(3X)参照 mvin_wchnstr(): ウィンドウから複情報文字と修飾情報の配列を入力……………………………in_wchnstr(3X)参照 mvin_wchstr(): ウィンドウから複情報文字と修飾情報の配列を入力……………………………in_wchnstr(3X)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxix 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 mvprintw(3X): mvprintw, mvwprintw, printw, wprintw…………………形式化した出力のウィンドウへのプリント mvscanw(3X): mvscanw, mvwscanw, scanw, wscanw……………………………ウィンドウからの形式化した入力の変換 mvvline(): 1バイト文字と修飾情報を元にした線描…………………………………………………………hline(3X)参照 mvvline_set(): 複情報文字と修飾情報を元にした線描…………………………………………………hline_set(3X)参照 mvwaddch(): 1バイト文字と修飾情報をウィンドウに追加して、カーソルを進める………………………addch(3X)参照 mvwaddchnstr(): 1バイト文字からなる長さが制限された文字列と修飾情報のウィンドウへの追加…………………… ………………………………………………………………………………………………………addchnstr(3X)参照 mvwaddchstr(): 1バイト文字からなる文字列と修飾情報のウィンドウへの追加………………………addchstr(3X)参照 mvwaddnstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める………… …………………………………………………………………………………………………………addnstr(3X)参照 mvwaddnwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める……addnwstr(3X)参照 mvwaddstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める………… …………………………………………………………………………………………………………addnstr(3X)参照 mvwaddwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める………addnwstr(3X)参照 mvwadd_wch(): 情報文字および修飾情報のウィンドウへの追加…………………………………………add_wch(3X)参照 mvwadd_wchnstr(): 複情報文字および修飾情報の配列のウィンドウへの追加……………………add_wchnstr(3X)参照 mvwadd_wchstr(): 複情報文字および修飾情報の配列のウィンドウへの追加……………………add_wchnstr(3X)参照 mvwchgat(): ウィンドウ内の文字の修飾情報の変更……………………………………………………………chgat(3X)参照 mvwdelch(): ウィンドウからの文字の削除…………………………………………………………………………delch(3X)参照 mvwgetch(): 端末から 1バイト文字を取得………………………………………………………………………getch(3X)参照 mvwgetnstr(): 端末からマルチバイト文字長制限文字列を取得……………………………………………getnstr(3X)参照 mvwgetn_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得…………getn_wstr(3X)参照 mvwgetstr(): 端末からマルチバイト文字列を取得…………………………………………………………getstr(3X)参照 mvwget_wch(): 端末からワイドキャラクタを取得…………………………………………………………get_wch(3X)参照 mvwget_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得…………getn_wstr(3X)参照 mvwhline(): 1バイト文字と修飾情報を元にした線描…………………………………………………………hline(3X)参照 mvwhline_set(): 複情報文字と修飾情報を元にした線描…………………………………………………hline_set(3X)参照 mvwin(3X): mvwin………………………………………………………………………………………………ウィンドウの移動 mvwinch(): ウィンドウから 1バイト文字と修飾情報を入力……………………………………………………inch(3X)参照 mvwinchnstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力…………………………………inchnstr(3X)参照 mvwinchstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力…………………………………inchnstr(3X)参照 mvwinnstr(): ウィンドウからマルチバイト文字列を入力……………………………………………………innstr(3X)参照 mvwinnwstr(): ウィンドウからワイド文字列を入力………………………………………………………innwstr(3X)参照 mvwinsch(): 1バイト文字と修飾情報のウィンドウへの挿入…………………………………………………insch(3X)参照 mvwinsnstr(): マルチバイト文字列のウィンドウへの挿入…………………………………………………insnstr(3X)参照 mvwinsstr(): マルチバイト文字列のウィンドウへの挿入…………………………………………………insnstr(3X)参照 mvwinstr(): ウィンドウからマルチバイト文字列を入力……………………………………………………innstr(3X)参照 mvwins_nwstr(): ワイド文字列のウィンドウへの挿入…………………………………………………ins_nwstr(3X)参照 mvwins_wch(): 複情報文字と修飾情報のウィンドウへの挿入……………………………………………ins_wch(3X)参照 mvwins_wstr(): ワイド文字列のウィンドウへの挿入……………………………………………………ins_nwstr(3X)参照 mvwinwstr(): ウィンドウからワイド文字列を入力…………………………………………………………innwstr(3X)参照 mvwin_wch(): ウィンドウから複情報文字と修飾情報を入力………………………………………………in_wch(3X)参照 mvwin_wchnstr(): ウィンドウから複情報文字と修飾情報の配列を入力……………………………in_wchnstr(3X)参照 mvwin_wchstr(): ウィンドウから複情報文字と修飾情報の配列を入力……………………………in_wchnstr(3X)参照 xxx Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 mvwprintw(): 形式化した出力のウィンドウへのプリント………………………………………………mvprintw(3X)参照 mvwscanw(): ウィンドウからの形式化した入力の変換……………………………………………………mvscanw(3X)参照 mvwvline(): 1バイト文字と修飾情報を元にした線描……………………………………………………………hline(3X)参照 mvwvline_set(): 複情報文字と修飾情報を元にした線描…………………………………………………hline_set(3X)参照 nan(3M): nan(), nanf(), nanl(), nanw(), nanq()…………………………………文字列から NaN への変換関数 nanf(): 文字列から NaN への変換関数 (float) …………………………………………………………………nan(3M)参照 nanl(): 文字列から NaN への変換関数 (long double) …………………………………………………………nan(3M)参照 nanq(): 文字列から NaN への変換関数 (quad) ………………………………………………………………nan(3M)参照 nanw(): 文字列から NaN への変換関数 (extended) ……………………………………………………………nan(3M)参照 napms(3X): napms…………………………………………………………………………………呼び出しプロセスの一時停止 nc_perror(): ネットワーク構成データベースのエントリの取得……………………………………getnetconfig(3N)参照 nc_sperror(): ネットワーク構成データベースのエントリの取得……………………………………getnetconfig(3N)参照 mdbm(3X): dbm_open, dbm_close, dbm_fetch, dbm_store, dbm_delete, dbm_firstkey, dbm_nextkey, dbm_error, dbm_clearerr…………………………………………………………データベースサブルーチン nearbyint(): 最も近い整数への丸め関数…………………………………………………………………………rint(3M)参照 nearbyintf(): 最も近い整数への丸め関数(float) ……………………………………………………………………rint(3M)参照 nearbyintl(): 最も近い整数への丸め関数(long double) ……………………………………………………………rint(3M)参照 nearbyintq(): 最も近い整数への丸め関数(quad) ……………………………………………………………………rint(3M)参照 nearbyintw(): 最も近い整数への丸め関数(extended) ………………………………………………………………rint(3M)参照 netdir(3N): netdir(), netdir_getbyname(), netdir_getbyaddr(), netdir_free(), netdir_options(), taddr2uaddr(), uaddr2taddr(), netdir_perror(), netdir_sperror()………………………… ……………………………………………………………………汎用トランスポートの名前からアドレスへの変換 netdir_free(): 汎用トランスポートの名前からアドレスへの変換……………………………………netdir(3N)参照 netdir_getbyaddr(): 汎用トランスポートの名前からアドレスへの変換…………………………………netdir(3N)参照 netdir_getbyname(): 汎用トランスポートの名前からアドレスへの変換…………………………………netdir(3N)参照 netdir_options(): 汎用トランスポートの名前からアドレスへの変換……………………………………netdir(3N)参照 netdir_perror(): 汎用トランスポートの名前からアドレスへの変換……………………………………netdir(3N)参照 netdir_sperror(): 汎用トランスポートの名前からアドレスへの変換……………………………………netdir(3N)参照 netname2host(): Secure RPC のライブラリルーチン……………………………………………………secure_rpc(3N)参照 netname2user(): Secure RPC のライブラリルーチン……………………………………………………secure_rpc(3N)参照 net_aton(3C): net_aton(), net_ntoa()……………………ネットワーク ステーションアドレス文字列変換ルーチン net_ntoa(): ネットワーク ステーションアドレス文字列変換ルーチン…………………………………net_aton(3C)参照 newpad(3X): newpad, pnoutrefresh, prefresh……………………………………………………………パッド管理関数 newterm(): スクリーン初期化関数…………………………………………………………………………initscr(3X)参照 newwin(3X): newwin, subwin………………………………………………………………………………ウィンドウ作成関数 nextafter(3M): nextafter(), nextafterf(), nextafterl(), nextafterw(), nextafterq(), nexttoward(), nexttowardf(), nexttowardl(), nexttowardw(), nexttowardq()………………………………… ……………………………………………………………………………………………次に表現可能な浮動小数点値 nextafterf(): 次に表現可能な浮動小数点値 (float) ……………………………………………………nextafter(3M)参照 nextafterl(): 次に表現可能な浮動小数点値 (long double) ……………………………………………nextafter(3M)参照 nextafterq(): 次に表現可能な浮動小数点値 (quad) ……………………………………………………nextafter(3M)参照 nextafterw(): 次に表現可能な浮動小数点値 (extended) ………………………………………………nextafter(3M)参照 nextkey(): データベースサブルーチン……………………………………………………………………………dbm(3X)参照 nexttoward(): 次に表現可能な浮動小数点値 (double) …………………………………………………nextafter(3M)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxxi 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 nexttowardf(): 次に表現可能な浮動小数点値 (float) …………………………………………………nextafter(3M)参照 nexttowardl(): 次に表現可能な浮動小数点値 (long double) ……………………………………………nextafter(3M)参照 nexttowardq(): 次に表現可能な浮動小数点値 (quad) …………………………………………………nextafter(3M)参照 nexttowardw(): 次に表現可能な浮動小数点値 (extended) ………………………………………………nextafter(3M)参照 nftw(): 関数の実行を伴ったファイルツリーの走査……………………………………………………………ftw(3C)参照 nftw2(): 関数の実行を伴ったファイルツリーの走査……………………………………………………………ftw(3C)参照 nis_add(): NIS+ ネーム空間の関数…………………………………………………………………………nis_names(3N)参照 nis_addmember(): NIS+ グループの操作関数……………………………………………………………nis_groups(3N)参照 nis_add_entry(): NIS+ テーブル関数……………………………………………………………………nis_tables(3N)参照 nis_checkpoint(): その他の NIS+ ログ管理関数…………………………………………………………nis_ping(3N)参照 nis_clone_object(): NIS+ サブルーチン…………………………………………………………………nis_subr(3N)参照 nis_creategroup(): NIS+ グループの操作関数…………………………………………………………nis_groups(3N)参照 nis_db(3N): nis_db, db_initialize, db_create_table, db_destroy_table, db_first_entry, db_next_entry, db_reset_next_entry, db_list_entries, db_remove_entry, db_add_entry, db_table_exists, db_unload_table, db_checkpoint, db_standby, db_free_result………… ………………………………………………………………………………………NIS+ データベースアクセス関数 nis_destroygroup(): NIS+ グループの操作関数………………………………………………………nis_groups(3N)参照 nis_destroy_object(): NIS+ サブルーチン………………………………………………………………nis_subr(3N)参照 nis_dir_cmp(): NIS+ サブルーチン…………………………………………………………………………nis_subr(3N)参照 nis_domain_of(): NIS+ サブルーチン………………………………………………………………………nis_subr(3N)参照 nis_error(3N): nis_error, nis_sperrno, nis_perror, nis_lerror, nis_sperror, nis_sperror_r………… ……………………………………………………………………………………… NIS+ エラーメッセージの表示 nis_first_entry(): NIS+ テーブル関数…………………………………………………………………nis_tables(3N)参照 nis_freenames(): NIS+ サブルーチン………………………………………………………………………nis_subr(3N)参照 nis_freeresult(): NIS+ ネーム空間の関数……………………………………………………………nis_names(3N)参照 nis_freeservlist(): その他の NIS+ 関数……………………………………………………………nis_servers(3N)参照 nis_freetags(): その他の NIS+ 関数……………………………………………………………………nis_servers(3N)参照 nis_getnames(): NIS+ サブルーチン………………………………………………………………………nis_subr(3N)参照 nis_getservlist(): その他の NIS+ 関数………………………………………………………………nis_servers(3N)参照 nis_groups(3N): nis_groups, nis_ismember, nis_addmember, nis_removemember, nis_creategroup, nis_destroygroup, nis_verifygroup, nis_print_group_entry, nis_map_group,__nis_map_group…………………………………………………NIS+ グループの操作関数 nis_ismember(): NIS+ グループの操作関数……………………………………………………………nis_groups(3N)参照 nis_leaf_of(): NIS+ サブルーチン…………………………………………………………………………nis_subr(3N)参照 nis_lerror(): NIS+ エラーメッセージの表示……………………………………………………………nis_error(3N)参照 nis_list(): NIS+ テーブル関数…………………………………………………………………………nis_tables(3N)参照 nis_local_directory(): NIS+ ローカル名………………………………………………………nis_local_names(3N)参照 nis_local_group(): NIS+ ローカル名……………………………………………………………nis_local_names(3N)参照 nis_local_host(): NIS+ ローカル名………………………………………………………………nis_local_names(3N)参照 nis_local_names(3N): nis_local_names, nis_local_directory, nis_local_host, nis_local_group, nis_local_principal………………………………………………………………………NIS+ ローカル名 nis_local_principal(): NIS+ ローカル名………………………………………………………nis_local_names(3N)参照 nis_lookup(): NIS+ ネーム空間の関数……………………………………………………………………nis_names(3N)参照 nis_map_group(): NIS+ グループの操作関数……………………………………………………………nis_groups(3N)参照 nis_mkdir(): その他の NIS+ 関数………………………………………………………………………nis_servers(3N)参照 xxxii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 nis_modify(): NIS+ ネーム空間の関数……………………………………………………………………nis_names(3N)参照 nis_modify_entry(): NIS+ テーブル関数………………………………………………………………nis_tables(3N)参照 nis_names(3N): nis_names, nis_lookup, nis_add, nis_remove, nis_modify, nis_freeresult………………… ………………………………………………………………………………………………vNIS+ ネーム空間の関数 nis_name_of (): NIS+ サブルーチン………………………………………………………………………nis_subr(3N)参照 nis_next_entry(): NIS+ テーブル関数……………………………………………………………………nis_tables(3N)参照 nis_objects(3N): nis_objects……………………………………………………………NIS+ オブジェクトのフォーマット nis_perror(): NIS+ エラーメッセージの表示……………………………………………………………nis_error(3N)参照 nis_ping(3N): nis_ping, nis_checkpoint……………………………………………………その他の NIS+ ログ管理関数 nis_print_group_entry(): NIS+ グループの操作関数………………………………………………nis_groups(3N)参照 nis_print_object(): NIS+ サブルーチン…………………………………………………………………nis_subr(3N)参照 nis_remove(): NIS+ ネーム空間の関数…………………………………………………………………nis_names(3N)参照 nis_removemember(): NIS+ グループの操作関数………………………………………………………nis_groups(3N)参照 nis_remove_entry(): NIS+ テーブル関数………………………………………………………………nis_tables(3N)参照 nis_rmdir(): その他の NIS+ 関数………………………………………………………………………nis_servers(3N)参照 nis_server(3N): nis_server, nis_mkdir, nis_rmdir, nis_servstate, nis_stats, nis_getservlist, nis_freeservlist, nis_freetags………………………………………………………その他の NIS+ 関数 nis_servstate(): その他の NIS+ 関数…………………………………………………………………nis_servers(3N)参照 nis_sperrno(): NIS+ エラーメッセージの表示……………………………………………………………nis_error(3N)参照 nis_sperror(): NIS+ エラーメッセージの表示……………………………………………………………nis_error(3N)参照 nis_sperror_r(): NIS+ エラーメッセージの表示…………………………………………………………nis_error(3N)参照 nis_stats(): その他の NIS+ 関数………………………………………………………………………nis_servers(3N)参照 nis_subr(3N): nis_subr, nis_leaf_of, nis_name_of, nis_domain_of, nis_getnames, nis_freenames, nis_dir_cmp, nis_clone_object, nis_destroy_object, nis_print_object…NIS+ サブルーチン nis_tables(3N): nis_tables, nis_list, nis_add_entry, nis_remove_entry, nis_modify_entry, nis_first_entry,nis_next_entry………………………………………………………NIS+ テーブル関数 nis_verifygroup(): NIS+ グループの操作関数…………………………………………………………nis_groups(3N)参照 nl(3X): nl, nonl……………………………………………………………………改行変換を使用可能または使用不能にする nlist(3E): nlist(), nlist64()………………………………………………………ネームリストからエントリーを取得 nl_langinfo(3C): nl_langinfo()………………………………………………………………………………………言語情報 nl_tools_16(3X): nl_tools_16:ADVANCE(), byte_status(), BYTE_STATUS(), CHARADV(), CHARAT(), c_colwidth(),C_COLWIDTH(), firstof2(), FIRSTof2(), secof2(), SECof2(), WCHAR(), WCHARADV()……………………………………………………………16ビット文字処理用ツール(10.30で廃止) nocbreak(): 入力モード制御関数…………………………………………………………………………cbreak(3X)参照 nodelay(3X): nodelay………………………………………………読み込み中にブロックを使用可能または使用不能にする noecho(): ターミナルエコーを使用可能/使用不能にする………………………………………………………echo(3X)参照 nonl(): 改行変換を使用可能または使用不能にする………………………………………………………………nl(3X)参照 noqiflush(3X): noqiflush, qiflush……………………………待ち行列の初期化機能を使用可能または使用不能にする noraw(): 入力モード制御関数……………………………………………………………………………………cbreak(3X)参照 notimeout(3X): notimeout, timeout, wtimeout…………………………………………………入力時のブロック化制御 nrand48(): 均等に分散される疑似乱数の生成………………………………………………………………drand48(3C)参照 ntohl(), ntohs(): ホスト バイトオーダとネットワーク バイトオーダとの間での値の変換 …………byteorder(3N) 参 照 opendir(): ディレクトリの操作………………………………………………………………………………directory(3C)参照 openlog(): システム ログファイルをクローズする…………………………………………………………syslog(3C)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxxiii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 optarg(): 引き数 のベクトルからのオプション英文字の取得………………………………………………getopt(3C)参照 opterr(): 引き数 のベクトルからのオプション英文字の取得………………………………………………getopt(3C)参照 optind(): 引き数 のベクトルからのオプション英文字の取得………………………………………………getopt(3C)参照 overlay(3X): overlay, overwrite…………………………………………………オーバーラップしたウィンドウのコピー overwrite(): オーバーラップしたウィンドウのコピー……………………………………………………overlay(3X)参照 pair_content(): 色操作関数………………………………………………………………………can_change_color(3X)参照 pam(3): PAM…………………………………………………………………………………………組み込み可能認証モジュール pam_acct_mgmt(3): pam_acct_mgmt……………………………………………PAM アカウント妥当性検査手続きの実行 pam_authenticate(3): pam_authenticate…………………………………………PAM フレームワーク内での認証の実行 pam_chauthtok(3): pam_chauthtok………………………………PAM フレームワーク内でのパスワード関連関数の実行 pam_close_session(): PAM セッションの作成および終了の操作の実行……………………pam_open_session(3)参照 pam_end(): PAM 用の認証トランザクションルーチン…………………………………………………pam_start(3)参照 pam_get_data(): PAM ルーチン、モジュール固有の状態を保持するための〜……………………pam_set_data(3)参照 pam_get_item(): PAM のための認証情報ルーチン…………………………………………………pam_set_item(3)参照 pam_get_user(3): pam_get_user………………………………………………ユーザー名を取り出すための PAMルーチン pam_open_session(3): pam_open_session, pam_close_session…PAM セッションの作成および終了の操作の実行 pam_setcred(3): pam_setcred……………………………………認証サービスのためのユーザー資格認定の変更 ¥/ 削除 pam_set_data(3): pam_set_data, pam_get_data……………モジュール固有の状態を保持するための PAM ルーチン pam_set_item(3): pam_set_item, pam_get_item………………………………………PAM のための認証情報ルーチン pam_sm(3): pam_sm………………………………………………………………………………PAM サービスモジュール API pam_sm_acct_mgmt(3): pam_sm_acct_mgmt………………………pam_acct_mgmt のためのサービスプロバイダの実現 pam_sm_authenticate(3): pam_sm_authenticate…………………………pam_authenticate 用サービスプロバイダの実行 pam_sm_chauthtok(3): pam_sm_chauthtok…………………………………pam_chauthtok 用サービスプロバイダの実行 pam_sm_close_session(): pam_open_session() および pam_close_session() サービスプロバイダの実行 ……………………………………………………………………………………………pam_sm_open_session(3)参照 pam_sm_open_session(3): pam_sm_open_session, pam_sm_close_session…………………………………………… ……………………………pam_open_session および pam_close_session それぞれのサービスプロバイダの実行 pam_sm_setcred(3): pam_sm_setcred……………………………………………pam_setcred 用サービスプロバイダの実行 pam_start(3): pam_start, pam_end………………………………………………PAM 用の認証トランザクションルーチン pam_strerror(3): pam_strerror………………………………………………………PAM エラーメッセージ文字列の取得 pathfind(3G): pathfind()……………………………………………名前付きディレクトリ内で名前付きファイルを検索 pclose(): initiate pipe I/O to/from a process ………………………………………………………………………popen(3S)参照 pechochar(3X): pechochar, pecho_wchar……文字と修飾情報の書き出しおよびそのパッドの速やかなリフレッシュ pecho_wchar(): プロセスへの、またはプロセスからのパイプ I/O の初期化………………………pechochar(3X)参照 perror(3C): perror(), strerror(), errno, sys_errlist, sys_nerr……………………システム エラーメッセージ pfmt(3C): pfmt(), vpfmt()…………………………………………………………………………標準形式のメッセージ表示 pmap_getmaps(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 pmap_getport(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 pmap_rmtcall(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 pmap_set(): RPC 用の旧ライブラリルーチン……………………………………………………………rpc_soc(3N)参照 pmap_unset(): RPC 用の旧ライブラリルーチン……………………………………………………………rpc_soc(3N)参照 pnoutrefresh(): パッド管理関数……………………………………………………………………………newpad(3X)参照 popen(3S): popen(), pclose()……………………………プロセスへの、またはプロセスからのパイプ I/O の初期化 pow(3M): pow(), powf(), powl(), poww(), powq(), pown(), pownf(), pownl(), pownw(), pownq(), xxxiv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 powlln(),powllnf(), powllnl(), powllnw(), powllnq()……………………………………べき乗関数 powf(): べき乗関数(float) …………………………………………………………………………………………pow(3M)参照 powl(): べき乗関数(long double) …………………………………………………………………………………pow(3M)参照 powlln(): べき乗関数(double,long long) …………………………………………………………………………pow(3M)参照 powllnf(): べき乗関数(float,long long) …………………………………………………………………………pow(3M)参照 powllnl(): べき乗関数(long double,long long) ……………………………………………………………………pow(3M)参照 powllnq(): べき乗関数(quad,long long) …………………………………………………………………………pow(3M)参照 powllnw(): べき乗関数(extended,long long) ……………………………………………………………………pow(3M)参照 pown(): べき乗関数(double,int) ……………………………………………………………………………………pow(3M)参照 pownf(): べき乗関数(float,int) ……………………………………………………………………………………pow(3M)参照 pownl(): べき乗関数(long double,int) ………………………………………………………………………………pow(3M)参照 pownq(): べき乗関数(quad,int) ……………………………………………………………………………………pow(3M)参照 pownw(): べき乗関数(extended,int) ………………………………………………………………………………pow(3M)参照 powq(): べき乗関数(quad) …………………………………………………………………………………………pow(3M)参照 poww(): べき乗関数(extended) ………………………………………………………………………………………pow(3M)参照 prcmd(3N): prcmd…………………………………………………………並列リモートコマンドへのストリームのリターン prefresh(): パッド管理関数……………………………………………………………………………………newpad(3X)参照 printf(3S): printf(), fprintf(), sprintf(), snprintf()……………………………………フォーマットされた出力 printw(): 形式化した出力のウィンドウへのプリント……………………………………………………mvprintw(3X)参照 pthread(3T): pthread……………………………………………………………………………POSIX.1c でのスレッドの概要 pthread_atfork(3T): pthread_atfork()………………………………………………………………forkハンドラーの登録 pthread_attr_destroy(): スレッド属性の消去 ………………………………………………pthread_attr_init(3T)参照 pthread_attr_getdetachstate(3T): pthread_attr_getdetachstate(), pthread_attr_getguardsize(), pthread_attr_getinheritsched(), pthread_attr_getprocessor_np(), pthread_attr_getschedparam(), pthread_attr_getschedpolicy(), pthread_attr_getscope(), pthread_attr_getstackaddr(), pthread_attr_getstacksize(), pthread_attr_setde-tachstate(), pthread_attr_setguardsize(), pthread_attr_setinheritsched(), pthread_attr_setprocessor_np(), pthread_attr_setschedparam(), pthread_attr_setschedpolicy(), pthread_attr_setscope(), pthread_attr_set-stackaddr(), pthread_attr_setstacksize() ………………………………………………………………………………………………スレッド属性の取得と設定 pthread_attr_getguardsize(): guardsize 属性の取得……………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_getinheritsched(): inheritsched 属性の取得……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_getprocessor_np(): processorとbinding_type 属性の取得 …… pthread_attr_getdetachstate(3T)参照 pthread_attr_getschedparam(): schedparam 属性の取得……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_getschedpolicy(): schedpolicy 属性の取得……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_getscope(): contentionscope 属性の取得…………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_getstackaddr(): stackaddr 属性の取得……………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_getstacksize(): stacksize 属性の取得……………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_init(3T): pthread_attr_init(), pthread_attr_destroy()………………………………………… ………………………………………………………………………スレッド属性オブジェクトの初期化または消去 pthread_attr_setdetachstate(): detachstate 属性の設定……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setguardsize(): guardsize 属性の設定……………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setinheritsched(): inheritsched 属性の設定……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setprocessor_np(): processor とbinding_type 属性の設定……pthread_attr_getdetachstate(3T)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxxv 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 pthread_attr_setschedparam(): schedparam 属性の設定……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setschedpolicy(): schedpolicy 属性の設定……………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setscope(): contentionscope 属性の設定…………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setstackaddr(): stackaddr 属性の設定……………………………pthread_attr_getdetachstate(3T)参照 pthread_attr_setstacksize(): stacksize 属性の設定……………………………pthread_attr_getdetachstate(3T)参照 pthread_cancel(3T): pthread_cancel()………………………………………………………スレッドの実行のキャンセル pthread_cleanup_pop(3T): pthread_cleanup_pop(), pthread_cleanup_push()……………………………………… ……………………………………………………………………取り消しクリーンアップハンドラーの削除と登録 pthread_cleanup_push(): 取り消しクリーンアップハンドラーの削除と登録………pthread_cleanup_pop(3T)参照 pthread_condattr_destroy(): 条件変数属性オブジェクトの初期化と消去…………pthread_condattr_init(3T)参照 pthread_condattr_getpshared(3T): pthread_condattr_getpshared(), pthread_condattr_setpshared()…… …………………………………………………………………………………………プロセス共有属性の取得と設定 pthread_condattr_init(3T): pthread_condattr_init(), pthread_condattr_destroy()…………………………… ………………………………………………………………………… 条件変数属性オブジェクトの初期化と消去 pthread_condattr_setpshared(): プロセス共有属性の取得と設定…………………………………………………… …………………………………………………………………………………pthread_condattr_getpshared(3T)参照 pthread_cond_broadcast(): 条件変数で待ち状態になっている1つあるいはすべてのスレッドのブロックの解除 …………………………………………………………………………………………pthread_cond_signal(3T)参照 pthread_cond_destroy(): 条件変数属性オブジェクトの初期化と消去 …………………pthread_cond_init(3T)参照 pthread_cond_init(3T): pthread_cond_init(), pthread_cond_destroy()………………条件変数の初期化と消去 pthread_cond_signal(3T): pthread_cond_signal(), pthread_cond_broadcast()…………………………………… ……………………………条件変数で待ち状態になっている1つあるいはすべてのスレッドのブロックの解除 pthread_cond_timedwait(): 条件変数に対する待機または一定時………………………pthread_cond_wait(3T)参照 pthread_cond_wait(3T): pthread_cond_wait(), pthread_cond_timedwait()………………………………………… ……………………………………………………………………………条件変数に対する待機または一定時間待機 pthread_continue(): スレッドの実行の継続…………………………………………………pthread_resume_np(3T)参照 pthread_create(3T): pthread_create()………………………………………………………新しい実行用スレッドの作成 pthread_default_stacksize_np(3T): pthread_default_stacksize_np()………デフォルトのスタックサイズの変更 pthread_detach(3T): pthread_detach()……………………………………………………………………………………… …………………………………スレッド終了時にリソースを再利用するためのデタッチされるスレッドの登録 pthread_equal(3T): pthread_equal()…………………………………………………………2つのスレッド識別子の比較 pthread_exit(3T): pthread_exit()………………………………………………………………呼び出し元スレッドの終了 pthread_getconcurrency(3T): pthread_getconcurrency(), pthread_setconcurrency()………………………… …………………………………………………………アンバインドされたスレッドの並列性レベルの取得と設定 pthread_getschedparam(3T): pthread_getschedparam(), pthread_setschedparam()……………………………… ……………………………………………………………… スケジューリング方針と関連パラメータの取得/設定 pthread_getspecific(3T): pthread_getspecific(), pthread_setspecific()………………………………………… ……………………………………………………………キーに関連付けられたスレッド固有データの取得と設定 pthread_gettimeslice_np(): スケジューリング方針が SCHED_TIMESHARE である PTHREAD_SCOPE_PROCESS スレッドの¥nスケジューリングタイムスライス値の〜………………………… ………………………………………………………………………………………pthread_gettimeslice_np(3T)参照 pthread_gettimeslice_np(3T): pthread_gettimeslice_np(), pthread_settimeslice_np()……………………… ……………………………………………………………………………………………………… スケジューリング 方針がSCHED_TIMESHAREPTHREAD_SCOPE_PROCESS スレッドのスケジューリングタイムスライス値の設定/取得 xxxvi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 pthread_join(3T): pthread_join()………………………………………………指定されたスレッドの終了の待ち合わせ pthread_key_create(3T): pthread_key_create(), pthread_key_delete()………………………………………… ……………………………………………………………………………スレッド固有データキーの作成または削除 pthread_key_delete(): スレッド固有データキーを消去…………………………………pthread_key_create(3T)参照 pthread_kill(3T): pthread_kill()…………………………………………………………………スレッドへのシグナル送信 pthread_launch_policy_np(3T): pthread_launch_policy_np()…………………………スレッド起動ポリシーの設定 pthread_ldom_bind_np(): ローカリティドメインへのスレッドのバインド……pthread_processor_bind_np(3T)参照 pthread_ldom_id_np(): ローカリティドメイン ID の取得……………………pthread_processor_bind_np(3T)参照 pthread_mutexattr_destroy(): mutex属性オブジェクトの初期化と消去…………pthread_mutexattr_init(3T)参照 pthread_mutexattr_disable_handoff_np(): 特定の mutex のハンドオフモード無効化…………………………… ………………………………………………………………………………pthread_mutexattr_getspin_np(3T)参照 pthread_mutexattr_getprioceiling(): prioceiling属性の取得………………pthread_mutex_getprotocol(3T)参照 pthread_mutexattr_getprotocol(3T): pthread_mutexattr_getprotocol(), pthread_mutexattr_setprotocol(), pthread_mutexattr_getprioceiling() pthread_mutexattr_setprioceiling()……………………protocol属性と prioceiling属性の取得/設定 pthread_mutexattr_getpshared(3T): pthread_mutexattr_getpshared(), pthread_mutexattr_setpshared(), pthread_mutexattr_gettype(), pthread_mutexattr_settype()……………………………………… ………………………………………………………………………………プロセス共有属性とtype属性の取得/設定 pthread_mutexattr_getspin_np(3T): pthread_mutexattr_getspin_np(), pthread_mutexattr_setspin_np(), pthread_mutex_getyieldfreq_np(),pthread_mutex_setyieldfreq_np(),pthread_mutexattr _disable_handoff_np(), pthread_mutex_dis-able_handoff_np()………mutexの spin 属性お よ びyield frequency属性の取得/設定、特定の mutexまたはプロセスワイドの mutexのハンドオフモード無効化 pthread_mutexattr_gettype(): type属性の取得………………………………pthread_mutexattr_getpshared(3T)参照 pthread_mutexattr_init(3T): pthread_mutexattr_init(), pthread_mutexattr_destroy()……………………… ………………………………………………………………………………mutex属性オブジェクトの初期化と消去 pthread_mutexattr_setprioceiling(): prioceiling属性の設定…………………pthread_mutex_getprotocol(3T)参照 pthread_mutexattr_setprotocol(): protocol属性の設定……………………pthread_mutex_getprotocol(3T)参照 pthread_mutexattr_setpshared(): プロセス共有属性の設定………………pthread_mutexattr_getpshared(3T)参照 pthread_mutexattr_setspin_np(): spin属性の設定…………………………pthread_mutexattr_getspin_np(3T)参照 pthread_mutexattr_settype(): type属性の設定………………………………pthread_mutexattr_getpshared(3T)参照 pthread_mutex_destroy(): mutexの消去……………………………………………………pthread_mutex_init(3T)参照 pthread_mutex_disable_handoff_np(): プロセスワイドの mutex のハンドオフモード無効化…………………… ………………………………………………………………………………pthread_mutexattr_getspin_np(3T)参照 pthread_mutex_getprioceiling(3T): pthread_mutex_getprioceiling(), pthread_mutex_setprioceiling()… ………………………………………………………………………………… mutexの prioceiling属性の取得と設定 pthread_mutex_getyieldfreq_np(): yield frequency属性の取得…………………pthread_mutex_getspin_np(3T)参照 pthread_mutex_init(3T): pthread_mutex_init(), pthread_mutex_destroy()………………mutexの初期化と消去 pthread_mutex_lock(3T): pthread_mutex_lock(), pthread_mutex_trylock()……………………………………… ……………………………………………………………………………………mutexのロックまたはロックの試行 pthread_mutex_setprioceiling(): mutexの prioceiling属性の設定…………pthread_mutex_getprioceiling(3T)参照 pthread_mutex_setyieldfreq_np(): yield frequency 属性の取得………………pthread_mutex_getspin_np(3T)参照 pthread_mutex_trylock(): mutex のロックの試行…………………………………………pthread_mutex_lock(3T)参照 pthread_mutex_unlock(3T): pthread_mutex_unlock()………………………………………………mutexのロックの解除 pthread_num_ldomprocs_np(): ローカリティドメインのプロセッサの調査…pthread_processor_bind_np(3T)参照 pthread_num_ldoms_np(): ローカリティドメインの数の調査……………………pthread_processor_bind_np(3T)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxxvii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 pthread_num_processors_np(): 使用できるプロセッサの数の調査……………pthread_processor_bind_np(3T)参照 pthread_once(3T): pthread_once()…………………………………………………初期化ルーチンの一度だけの呼び出し pthread_processor_bind_np(3T): pthread_processor_bind_np(), pthread_num_processors_np(), pthread_processor_id_np(), pthread_num_ldoms_np(), pthread_num_ldomprocs_np(), pthread_spu_to_ldom_np(), pthread_ldom_bind_np(), p t h r e a d _ l d o m _ i d _ n p ( ) , pthread_pset_bind_np()…………使用できるプロセッサの数の調査、プロセッサへのスレッドのバイ ンド、プロセッサ IDの調査、使用できるローカリティドメインの数の調査、ローカリティドメインへのス レッドのバインド、ローカリティドメイン IDの調査、スレッドのプロセッサセットバインディングの変更 pthread_processor_id_np(): プロセッサ ID の調査……………………………pthread_processor_bind_np(3T)参照 pthread_pset_bind_np(): プロセッサセットへのスレッドのバインド…………pthread_processor_bind_np(3T)参照 pthread_resume_np(3T): pthread_resume_np(), pthread_continue(), pthread_suspend()…………………… ……………………………………スレッドの実行の再開、スレッドの実行の継続、スレッドの実行の一時停止 pthread_rwlockattr_destroy(): 読み書きロック属性オブジェクトの消去………pthread_rwlockattr_init(3T)参照 pthread_rwlockattr_getpshared(3T): pthread_rwlockattr_getpshared(), pthread_rwlockattr_setpshared()………………………………………プロセス共有属性の取得と設定 pthread_rwlockattr_init(3T): pthread_rwlockattr_init(), pthread_rwlockattr_destroy()…………………… ……………………………………………………………………読み書きロック属性オブジェクトの初期化と消去 pthread_rwlockattr_setpshared(): プロセス共有属性の設定……………pthread_rwlockattr_getpshared(3T)参照 pthread_rwlock_destroy(): 読み書きロックの消去………………………………………pthread_rwlock_init(3T)参照 pthread_rwlock_init(3T): pthread_rwlock_init(), pthread_rwlock_destroy()…………………………………… …………………………………………………………………………………………読み書きロックの初期化と消去 pthread_rwlock_rdlock(3T): pthread_rwlock_rdlock(), pthread_rwlock_tryrdlock()………………………… ……………………………………………………………読み書きロックへの読み取りロックまたはロックの試行 pthread_rwlock_tryrdlock(): 読み書きロックへの読み取りロックまたはロックの試行…………………………… …………………………………………………………………………………………pthread_rwlock_rdlock(3T)参照 pthread_rwlock_trywrlock(): 読み書きロックへの書き込みロックまたはロックの試行…………………………… ………………………………………………………………………………………pthread_rwlock_wrlock(3T)参照 pthread_rwlock_unlock(3T): pthread_rwlock_unlock()…………………………………………読み書きロックの解除 pthread_rwlock_wrlock(3T): pthread_rwlock_wrlock(), pthread_rwlock_trywrlock()………………………… ……………………………………………………………読み書きロックへの書き込みロックまたはロックの試行 pthread_self(3T): pthread_self()………………………………………………呼び出し元スレッドのスレッドIDの取得 pthread_setcancelstate(3T): pthread_setcancelstate(), pthread_setcanceltype()……………………………… ……………………………………………………………現在のスレッドの取り消し可能状態や形式の設定と取得 pthread_setcanceltype(): 読み書きロックへの読み取りロックまたはロックの試行………………………………… ………………………………………………………………………………………pthread_setcancelstate(3T)参照 pthread_setconcurrency(): アンバインドされたスレッドの並列性レベルの設定…………………………………… ………………………………………………………………………………………pthread_getconcurrency(3T)参照 pthread_setschedparam(): スケジューリング方針と関連パラメータの設定………pthread_getschedparam(3T)参照 pthread_setspecific(): キーに関連付けられたスレッド固有データの設定....pthread_getspecific(3T)参照 pthread_sigmask(3T): pthread_sigmask()…………………………呼び出し元スレッドのシグナルマスクの調査/変更 pthread_spu_to_ldom_np(): spu で指定したローカリティドメインの ID の調査……………………………………… ……………………………………………………………………………………pthread_processor_bind_np(3T)参照 pthread_suspend(): スレッドの実行の一時停止……………………………………………pthread_resume_np(3T)参照 pthread_testcancel(3T): pthread_testcancel()……………………………………………保留中の取り消し要求の処理 ptsname(3C): ptsname, ptsname_r……………………………………………スレーブptyのパス名の取得(pseudo-terminal) xxxviii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 ptsname_r(): スレーブの疑似端末の名前を得る……………………………………………………………ptsname(3C)参照 publickey(): パブリックキーとシークレットキーの取り出し……………………………………getpublickey(3M)参照 putc(3S): putc(), putchar(), fputc(), putw()………………………………ストリーム上に文字またはワードを出力 putchar(): ストリーム上に文字を出力…………………………………………………………………………putc(3S)参照 putdvagnam: Device Assignment データベースエントリーの追加あるいは書き換え……………………getdvagent(3)参照 putenv(3C): putenv()…………………………………………………………環境の値の変更、もしくは環境への値の追加 putp(3X): putp, tputs…………………………………………………………………………………コマンドの端末への出力 putprdfnam(): Default データベースエントリーの操作……………………………………………………getprdfent(3)参照 putprpwnam(): 保護されたパスワードデータベースのエントリーの操作………………………………getprpwent(3)参照 putprtcnam(): Terminal Control データベースエントリーの操作…………………………………………getprtcent(3)参照 putpwent(3C): putpwent()……………………………………………………………パスワードファイル エントリーの記入 puts(3S): puts(), fputs()………………………………………………………………………ストリーム上に文字列を出力 putspent(3C): putspent………………………………………………シャドウパスワードファイルのエントリーの書き込み pututline(): utmpをクローズする………………………………………………………………………………getut(3C)参照 pututsline(): utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン…………getuts(3C)参照 pututxline(): utmpx ファイルエントリーへのアクセス……………………………………………………getutx(3C)参照 putw(): ストリーム上にワード (整数) を出力……………………………………………………………………putc(3S)参照 putwc(3C): putwc(), putwchar(), fputwc()……………………………ストリームファイルへのワイドキャラクタ出力 putwchar(): ストリームファイルへのワイドキャラクタ出力 ………………………………………………putwc(3C)参照 putwin(): ウィンドウのファイルへのダンプおよびファイルからの再ロード……………………………getwin(3X)参照 putws(3C): putws(), fputws()……………………………ワイドキャラクタ文字列のストリームファイルへの書き込み qiflush(): 待ち行列の初期化機能を使用可能または使用不能にする……………………………………noqiflush(3X)参照 qsort(3C): qsort()…………………………………………………………………………………………………クイックソート rand(3C): rand(), rand_r(), srand()………………………………………………………………単純な乱数発生ルーチン random(): 擬似乱数の生成………………………………………………………………………………………random(3M)参照 random(3M): random(), srandom(), initstate(), setstate()………………………………………擬似乱数の生成 raw(): 入力モード制御関数………………………………………………………………………………………cbreak(3X)参照 rcmd(): リモートコマンドにストリームを返す…………………………………………………………………rcmd(3N)参照 rcmd(3N): rcmd(), rcmd_af(), rresvport(), rresvport_af(), ruserok()…………………………………………… …………………………………………………………………………………リモートコマンドにストリームを返す readdir(): ディレクトリの操作………………………………………………………………………………directory(3C)参照 realloc(): 確保したメモリーブロックのサイズ変更する……………………………………………………malloc(3C)参照 realpath(3X): realpath………………………………………………………………………………………………パス名の解釈 redrawwin(3X): redrawwin, wredrawln…………………………………………………行のアップデートステータス関数 refresh(): ウィンドウおよび行のリフレッシュ………………………………………………………………doupdate(3X)参照 regcmp(3X): regcmp(), regex()………………………………………………………………正規表現のコンパイルと実行 regcomp(3C): regcomp(), regerror(), regexec(), regfree()……………正規表現の照合 (マッチング) ルーチン regerror(): 正規表現を照合する ルーチン…………………………………………………………………regcomp(3C)参照 regex(): 正規表現のコンパイルと実行…………………………………………………………………………regcmp(3X)参照 regexec(): 正規表現を照合する ルーチン…………………………………………………………………regcomp(3C)参照 regexp(3X): compile(), step(), advance()………………………………正規表現のコンパイルおよび照合ルーチン regfree(): 正規表現を照合する ルーチン…………………………………………………………………regcomp(3C)参照 registerrpc(): RPC 用の旧ライブラリルーチン……………………………………………………………rpc_soc(3N)参照 reltimer(3C): reltimer………………………………………………………………………プロセスごとのタイマーを相対化 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xxxix 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 remainder(3M): remainder(), remainderf(), remainderl(), remainderw(), remainderq()…………剰余関数 remainderf(): 剰余関数 (float) ……………………………………………………………………………remainder(3M)参照 remainderl(): 剰余関数 (long double) ……………………………………………………………………remainder(3M)参照 remainderq(): 剰余関数 (quad) …………………………………………………………………………remainder(3M)参照 remainderw(): 剰余関数 (extended) ………………………………………………………………………remainder(3M)参照 remove(3C): remove()……………………………………………………………………………………………ファイルの削除 remque(): キューの要素の削除………………………………………………………………………………insque(3C)参照 remquo(3M): remquo(), remquof(), remquol(), remquow(), remquoq()…………………………商を持つ剰余関数 remquof(): 商を持つ剰余関数 (float) ………………………………………………………………………remquo(3M)参照 remquol(): 商を持つ剰余関数 (long double) …………………………………………………………………remquo(3M)参照 remquoq(): 商を持つ剰余関数 (quad) ………………………………………………………………………remquo(3M)参照 remquow(): 商を持つ剰余関数 (extended) ……………………………………………………………………remquo(3M)参照 request_init(): アクセス制御ライブラリ………………………………………………………………hosts_access(3)参照 request_set(): アクセス制御ライブラリ…………………………………………………………………hosts_access(3)参照 resetty(3X): resetty, savetty…………………………………………………………………ターミナルモードの保存/復元 reset_prog_mode(): シェル ターミナルモードを「プログラム」の状態に復元………………def_prog_mode(3X)参照 reset_shell_mode(): ターミナルモードを「シェル」の状態に復元…………………………def_prog_mode(3X)参照 resolver(3N): resolver: dn_comp(), dn_expand(), get_resfield(), herror(), res_init(), res_mkquery(), res_query(),res_search(), res_send(), set_resfield()…リゾルバルーチン resolver(3N): res_init(), res_mkquery(), res_query(), res_search(), res_send(), dn_comp(), dn_expand(), herror(), get_resfield(), set_resfield() ………………………リゾルバルーチン restartterm(): terminfo データベースとのインタフェース…………………………………………del_curterm(3X)参照 res_init(), res_mkquery(), res_query(), res_search(), res_send(): リゾルバルーチン………resolver(3N) res_init(): リゾルバルーチン………………………………………………………………………………resolver(3N)参照 res_mkquery(): リゾルバルーチン……………………………………………………………………………resolver(3N)参照 res_query(): リゾルバルーチン………………………………………………………………………………resolver(3N)参照 res_search(): リゾルバルーチン……………………………………………………………………………resolver(3N)参照 res_send(): リゾルバルーチン………………………………………………………………………………resolver(3N)参照 rewind(): ラージファイルをサポートする非POSIX標準APIインタフェース…………………………………fseek(3S)参照 rewinddir(): ディレクトリの操作…………………………………………………………………………directory(3C)参照 rewind_unlocked(): ラージファイルをサポートする非POSIX標準APIインタフェース…………………fseek(3S)参照 rexec(3N): rexec()………………………………………………………………………リモートコマンドにストリームを返還 re_comp(3X): re_comp, re_exec……………………………………………………………正規表現のコンパイルおよび実行 re_exec(): 正規表現のコンパイルおよび実行………………………………………………………………re_comp(3X)参照 rindex(): BSD への移植性のための文字列ルーチン…………………………………………………………string(3C)参照 rint(3M): rint(), rintf(), rintl(), rintw(), rintq(), nearbyint(), nearbyintf(), nearbyintl(), rintf(): 最も近い整数への丸め関数 (float) ……………………………………………………………………rint(3M)参照 rintl(): 最も近い整数への丸め関数 (long double) ……………………………………………………………rint(3M)参照 rintq(): 最も近い整数への丸め関数 (quad) ……………………………………………………………………rint(3M)参照 rintw(): 最も近い整数への丸め関数 (extended) …………………………………………………………………rint(3M)参照 nearbyintw(), nearbyintq()……………………………………………………………………最も近い整数への丸め関数 ripoffline(3X): ripoffline……………………………………………………………………専用の目的のために 1行を予約 rmdirp(): パス内でディレクトリを作成または削除……………………………………………………mkdirp(3G)参照 rmtimer(3C): rmtimer…………………………………………………………………………プロセスごとのタイマーを解除 rnusers(3N): rnusers(), rusers()……………………………………リモートマシン上のユーザーに関する情報を取得 xl Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 round(3M): round(), roundf(), roundl(), roundw(), roundq()………………………………………………丸め関数 roundf(): 丸め関数 (float) ………………………………………………………………………………………round(3M)参照 roundl(): 丸め関数 (long double) ………………………………………………………………………………round(3M)参照 roundq(): 丸め関数 (quad) ………………………………………………………………………………………round(3M)参照 roundw(): 丸め関数 (extended) ………………………………………………………………………………round(3M)参照 rpc(3N): rpc………………………………………………………………リモートプロシージャコール用ライブラリルーチン rpcbind(3N): rpcbind, rpcb_getmaps, rpcb_getaddr, rpcb_gettime, rpcb_rmtcall, rpcb_set, rpcb_unset ……………………………………………………………………RPC バインドサービス用のライブラリルーチン rpcb_getaddr(): RPC バインドサービス用のライブラリルーチン………………………………………rpcbind(3N)参照 rpcb_getmaps(): RPC バインドサービス用のライブラリルーチン………………………………………rpcbind(3N)参照 rpcb_gettime(): RPC バインドサービス用のライブラリルーチン………………………………………rpcbind(3N)参照 rpcb_rmtcall(): RPC バインドサービス用のライブラリルーチン………………………………………rpcbind(3N)参照 rpcb_set(): RPC バインドサービス用のライブラリルーチン……………………………………………rpcbind(3N)参照 rpcb_unset(): RPC バインドサービス用のライブラリルーチン…………………………………………rpcbind(3N)参照 rpc_broadcast(): クライアント側コールのためのライブラリルーチン…………………………rpc_clnt_calls(3N)参照 rpc_broadcast_exp(): クライアント側コールのためのライブラリルーチン……………………rpc_clnt_calls(3N)参照 rpc_call(): クライアント側コールのためのライブラリルーチン…………………………………rpc_clnt_calls(3N)参照 rpc_clnt_auth(3N): rpc_clnt_auth, auth_destroy, authnone_create, authsys_create, authsys_create_default………………………………………………………………………………………… ………………………………クライアント側のリモートプロシージャコール認証のためのライブラリルーチン rpc_clnt_calls(3N): rpc_clnt_calls, clnt_call, clnt_freeres, clnt_geterr, clnt_perrno, clnt_perror, clnt_sperrno, clnt_sperror, rpc_broadcast, rpc_broadcast_exp, rpc_call…………………… …………………………………………………………………クライアント側コールのためのライブラリルーチン rpc_clnt_create(3N): rpc_clnt_create, clnt_control, clnt_create, clnt_create_vers, clnt_destroy, clnt_dg_create,clnt_pcreateerror, clnt_raw_create, clnt_spcreateerror, clnt_tli_create, clnt_tp_create, clnt_vc_create, pc_createerr………………………………………………………………………… ……………………………………………………CLIENT ハンドルの作成および操作を行うライブラリルーチン rpc_control(3N): rpc_control……………………………………………………………………………………………………… ライアントおよびサーバーアプリケーションのグローバル RPC 属性を操作するためのライブラリルーチン rpc_createerr(): CLIENT ハンドルを扱うライブラリルーチン………………………………rpc_clnt_create(3N)参照 rpc_reg(): サーバの登録用ライブラリルーチン………………………………………………………rpc_svc_reg(3N)参照 rpc_soc(3N): rpc_soc, authdes_create, authunix_create, authunix_create_default, callrpc, clnt_broadcast, clntraw_create, clnttcp_create, clntudp_bufcreate, clntudp_create, get_myaddress, pmap_getmaps, pmap_getport, pmap_rmtcall, pmap_set, pmap_unset, registerrpc, svc_fds, svc_getcaller, svc_getreq, svc_register, svc_unregister, svcfd_create, svcraw_create, svctcp_create, svcudp_bufcreate, svcudp_create, xdr_authunix_parms……………………………………………………… RPC 用の旧ライブラリルーチン rpc_svc_calls(3N): rpc_svc_calls, svc_dg_enablecache, svc_done, svc_exit, svc_fdset, svc_freeargs, svc_getargs, svc_getreq_common, svc_getreq_poll, svc_getreqset, svc_getrpccaller, svc_pollset, svc_run, svc_sendreply…………………………… RPC サーバ用のライブラリルーチン rpc_svc_create(3N): rpc_svc_create, svc_control, svc_create, svc_destroy, svc_dg_create, svc_fd_create, svc_raw_create, svc_tli_create, svc_tp_create, svc_vc_create…………… ……………………………………………………………………サーバハンドル作成のためのライブラリルーチン rpc_svc_err(3N): rpc_svc_err, svcerr_auth, svcerr_decode, svcerr_noproc, svcerr_noprog, svcerr_progvers, vcerr_systemerr, svcerr_weakauth………………………………………………… HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xli 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 ………………………………………サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン rpc_svc_reg(3N): rpc_svc_reg, rpc_reg, svc_reg, svc_unreg, svc_auth_reg, xprt_register, xprt_unregister…………………………………………………………サーバの登録用ライブラリルーチン rpc_xdr(3N): rpc_xdr, xdr_accepted_reply, xdr_authsys_parms, xdr_callhdr, xdr_callmsg,xdr_opaque_auth, xdr_rejected_reply, xdr_replymsg………………………………… ………………………………………………………リモートプロシージャコール用 XDR ライブラリルーチン rresvport(): リモートコマンドにストリームを返す…………………………………………………………rcmd(3N)参照 rresvport_af(): リモートコマンドにストリームを返す……………………………………………………rcmd(3N)参照 rsqrt(3M): rsqrt(), rsqrtf(), rsqrtl(), rsqrtw(), rsqrtq()…………………………………………逆平方根関数 rsqrtf(): 逆平方根関数 (float) …………………………………………………………………………………rsqrt(3M)参照 rsqrtl(): 逆平方根関数 (long double) …………………………………………………………………………rsqrt(3M)参照 rsqrtq(): 逆平方根関数 (quad) …………………………………………………………………………………rsqrt(3M)参照 rsqrtw(): 逆平方根関数 (extended) ……………………………………………………………………………rsqrt(3M)参照 rstat(3N): rstat(), havedisk()…………………………………リモートカーネルからのパフォーマンスデータの取得 ruserok(): リモートコマンドにストリームを返す……………………………………………………………rcmd(3N)参照 rwall(3N): rwall()…………………………………………………………指定されたリモートマシンへのメッセージの送付 savetty(): ターミナルモードの保存/復元……………………………………………………………………resetty(3X)参照 scalb(3M): scalb(), scalbf(), scalbl(), scalbw(), scalbq()………………………………………………………… …………………………………………………………… 基数に依存しない浮動小数点数の指数のスケーリング scalbf(): 基数に依存しない浮動小数点数の指数のスケーリング (float) …………………………………scalb(3M)参照 scalbl(): 基数に依存しない浮動小数点数の指数のスケーリング (long double) …………………………scalb(3M)参照 scalbln(3M): scalbln(), scalblnf(), scalblnl(), scalblnw(), scalblnq()………………………………………… ……………………………………………………………基数に依存しない、浮動小数点数の指数のスケーリング scalblnf(): 基数に依存しない浮動小数点数の指数のスケーリング (float) ……………………………scalbln(3M)参照 scalblnl(): 基数に依存しない浮動小数点数の指数のスケーリング (long double) ……………………scalbln(3M)参照 scalblnq(): 基数に依存しない浮動小数点数の指数のスケーリング (quad) ……………………………scalbln(3M)参照 scalblnw(): 基数に依存しない浮動小数点数の指数のスケーリング (extended) ………………………scalbln(3M)参照 scalbn(3M): scalbn(), scalbnf(), scalbnl(), scalbnw(), scalbnq()………………………………………………… …………………………………………………………… 基数に依存しない浮動小数点数の指数のスケーリング scalbnf(): 基数に依存しない浮動小数点数の指数のスケーリング (float) ………………………………scalbn(3M)参照 scalbnl(): 基数に依存しない浮動小数点数の指数のスケーリング (long double) ………………………scalbn(3M)参照 scalbnq(): 基数に依存しない浮動小数点数の指数のスケーリング (quad) ………………………………scalbn(3M)参照 scalbnw(): 基数に依存しない浮動小数点数の指数のスケーリング (extended) …………………………scalbn(3M)参照 scalbq(): 基数に依存しない浮動小数点数の指数のスケーリング (quad) …………………………………scalb(3M)参照 scalbw(): 基数に依存しない浮動小数点数の指数のスケーリング (extended) ……………………………scalb(3M)参照 scandir(3C): scandir(), alphasort()………………………………………………………………………ディレクトリ走査 scanf(3S): scanf, fscanf, sscanf……………………………ストリームファイルからの読み取りでの書式付き入力変換 scanw(): ウィンドウからの形式化した入力の変換…………………………………………………………mvscanw(3X)参照 scrl(3X): scrl, wscrl…………………………………………………………………Curses ウィンドウの拡張スクロール関数 scroll(3X): scroll………………………………………………………………………………Curses ウィンドウのスクロール scrollok(): 端末出力制御関数…………………………………………………………………………………clearok(3X)参照 scr_dump(3X): scr_dump, scr_init, scr_restore, scr_set…………………………スクリーンファイル入出力関数 scr_init(): スクリーンファイル入出力関数………………………………………………………………scr_dump(3X)参照 scr_restore(): スクリーンファイル入出力関数…………………………………………………………scr_dump(3X)参照 xlii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 scr_set(): スクリーンファイル入出力関数………………………………………………………………scr_dump(3X)参照 secdef(3): secdef………………………………………………………………セキュリティデフォルト構成ファイルルーチン secof2(), SECof2(): 16ビット文字処理用ツール………………………………………………………nl_tools_16(3X)参照 secure_rpc(3N): secure_rpc, authdes_getucred, authdes_seccreate, getnetname, host2netname, key_decryptsession, key_encryptsession, key_gendes, key_setsecret, key_secretkey_is_set, netname2host, netname2user, user2netname……………………………… ……………………………………………………………………………………Secure RPC のライブラリルーチン seed48(): 均等に分散される疑似乱数の生成…………………………………………………………………drand48(3C)参照 seekdir(): ディレクトリの操作………………………………………………………………………………directory(3C)参照 setaclentry(3C): setaclentry(), fsetaclentry()………………………………ファイルのアクセス制御リスト (ACL) setbuf(3S): setbuf(), setvbuf()…………………………………………………ストリームファイルへのバッファリング setbwent(): 新しい wtmpsと btmpsデータベースへのレコードの書き込み……………………………bwtmps(3C)参照 setcat(3C): setcat()…………………………………………………………………デフォルトのメッセージカタログの設定 setcchar(3X): setcchar………………………………………………………ワイド文字列と修飾情報からの cchar_t の設定 setclock(3C): setclock……………………………………………………………………システムワイドクロックの値の設定 setdvagent: Device Assignment データベースエントリーの設定…………………………………………getdvagent(3)参照 setfsent(): ファイルシステム 記述子 ファイルをクローズする…………………………………………getfsent(3X)参照 setgrent(): グループファイル エントリーの取得…………………………………………………………getgrent(3C)参照 sethostent(): ネットワークホスト エントリーの設定…………………………………………………gethostent(3N)参照 setjmp(3C): setjmp(), longjmp(), sigsetjmp(), siglongjmp()……………………………………非ローカルの goto setlabel(3C): setlabel()…………………………………………………………………フォーマットルーチンのラベル定義 setlocale(3C): setlocale(), getlocale()…………………………………………プログラムの locale の設定、確認 setlocale_r(): (マルチスレッドアプリケーションで安全な) プログラムのロケールの設定…………setlocale(3C)参照 setlogmask(): システム ログファイルをクローズする………………………………………………………syslog(3C)参照 setmntent(): ファイルシステム 記述子 ファイルをクローズする……………………………………getmntent(3X)参照 setnetconfig(): ネットワーク構成データベースのエントリの取得………………………………getnetconfig(3N)参照 setnetent(): ネットワークエントリーの取得 ……………………………………………………………getnetent(3N)参照 setnetent_r(): ネットワークエントリーの取得 …………………………………………………………getnetent(3N)参照 setnetpath(): NETPATH の構成要素に対応する /etc/netconfig エントリの取得……………………getnetpath(3N)参照 setprdfent(): System Default データベースエントリーの操作……………………………………………getprdfent(3)参照 setprotoent(): プロトコルエントリーの設定…………………………………………………………getprotoent(3N)参照 setprotoent_r(): プロトコルエントリーの設定 (スレッドセーフ) ………………………………getprotoent(3N)参照 setprpwent(): 保護されたパスワードデータベースのエントリーの設定………………………………getprpwent(3)参照 setprtcent(): Terminal Control データベースエントリーの操作………………………………………getprtcent(3)参照 setpwent(): パスワードファイルエントリーの取得………………………………………………………getpwent(3C)参照 setpwent(): シャドウパスワードエントリーのアクセス…………………………………………………getspwent(3X)参照 setpwent(): シャドウパスワードエントリーのアクセス…………………………………………………getspent(3C)参照 setscrreg(): 端末出力制御関数………………………………………………………………………………clearok(3X)参照 setservent(): サービスエントリーの設定………………………………………………………………getservent(3N)参照 setservent_r(): サービスエントリーの設定 (スレッドセーフ) ……………………………………getservent(3N)参照 setstate(): 擬似乱数の生成…………………………………………………………………………………random(3M)参照 setupterm(): terminfo データベースとのインタフェース……………………………………………del_curterm(3X)参照 setusershell() - 正当な ユーザー シェルを得る……………………………………………………getusershell(3C)参照 setutent(): utmpをクローズする…………………………………………………………………………………getut(3C)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xliii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 setutsent(): utmpd(1M)が管理するユーザアカウンティングデータベース参照/更新ルーチン…………getuts(3C)参照 setutxent(): utmpx ファイルエントリーへのアクセス………………………………………………………getutx(3C)参照 setvbuf(): ストリームファイルへのバッファリング…………………………………………………………setbuf(3S)参照 set_curterm(): terminfo データベースとのインタフェース…………………………………………del_curterm(3X)参照 set_resfield - リゾルバルーチン……………………………………………………………………………resolver(3N)参照 set_resfield(): リゾルバルーチン………………………………………………………………………resolver(3N)参照 set_term(3X): set_term……………………………………………………………………………………… 画面間の切り換え shl_definesym() - 共有ライブラリに関する 新しいシンボルの定義…………………………………shl_load(3X)参照 shl_findsym() - 共有ライブラリからシンボルを探す……………………………………………………shl_load(3X)参照 shl_findsym() - 共有ライブラリに関する情報を得る……………………………………………………shl_load(3X)参照 shl_gethandle() - 共有ライブラリをロードする…………………………………………………………shl_load(3X)参照 shl_gethandle_r() - 共有ライブラリをロードする………………………………………………………shl_load(3X)参照 shl_get_r() - 共有ライブラリをロードする………………………………………………………………shl_load(3X)参照 shl_load() - 共有ライブラリの明示的ロード……………………………………………………………shl_load(3X)参照 shl_load(3X): shl_load(), shl_definesym(), shl_findsym(), shl_gethandle(), shl_getsymbols(), shl_unload(), shl_get(), shl_gethandle_r(),shl_get_r()………………共有ライブラリの明示的ロード shl_unload() - 共有ライブラリをアンロードする…………………………………………………………shl_load(3X)参照 sigaddset(): シグナル集合の初期化、操作、テスト………………………………………………………sigsetops(3C)参照 sigdelset(): シグナル集合の初期化、操作、テスト………………………………………………………sigsetops(3C)参照 sigemptyset(): シグナル集合の初期化、操作、テスト…………………………………………………sigsetops(3C)参照 sigfillset(): シグナル集合の初期化、操作、テスト……………………………………………………sigsetops(3C)参照 sigismember(): シグナル集合の初期化、操作、テスト…………………………………………………sigsetops(3C)参照 siglongjmp(): シグナルマスクを復旧…………………………………………………………………………setjmp(3C)参照 signbit(3M): signbit()…………………………………………………………………………………浮動小数点数符号判定 signgam(): 対数ガンマ関数 …………………………………………………………………………………lgamma(3M)参照 sigpause(3C): sigpause………………………………………ブロックされたシグナルを自動的に解除して割り込みを待つ sigset(3C): sigset, sighold, sigrelse, sigignore, sigpause……………………………………………シグナル管理 sigsetjmp(): savemask が0以外のときのシグナルマスクを保存…………………………………………setjmp(3C)参照 sigsetops(3C): sigemptyset(), sigfillset(), sigaddset(), sigdelset(), sigismember()…………………… …………………………………………………………………………………シグナル集合の初期化、操作、テスト sin(3M): sin(), sinf(), sinl(), sinw(), sinq()…………………………………………………………………正弦関数 sincos(3M): sincos(), sincosf(), sincosl(), sincosw(), sincosq()…………正弦と余弦の両方を計算する関数 sincosd(3M): sincosd(), sincosdf(), sincosdl(), sincosdw(), sincosdq()……………………………………… ……………………………………………………………度で指定した引き数の正弦と余弦の両方を計算する関数 sincosdf(): 度で指定した引き数の正弦と余弦の両方 (float) ……………………………………………sincosd(3M)参照 sincosdl(): 度で指定した引き数の正弦と余弦の両方 (long double) ……………………………………sincosd(3M)参照 sincosdq(): 度で指定した引き数の正弦と余弦の両方 (quad) ……………………………………………sincosd(3M)参照 sincosdw(): 度で指定した引き数の正弦と余弦の両方 (extended) ………………………………………sincosd(3M)参照 sincosf(): 正弦と余弦の両方 (float) …………………………………………………………………………sincos(3M)参照 sincosl(): 正弦と余弦の両方 (long double) …………………………………………………………………sincos(3M)参照 sincosq(): 正弦と余弦の両方 (quad) …………………………………………………………………………sincos(3M)参照 sincosw(): 正弦と余弦の両方 (extended) ……………………………………………………………………sincos(3M)参照 sind(3M): sind(), sindf(), sindl(), sindw(), sindq()………………………………度で指定した引き数の正弦関数 sindf(): 度で指定した引き数の正弦関数 (float) ………………………………………………………………sind(3M)参照 xliv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 sindl(): 度で指定した引き数の正弦関数 (long double) ………………………………………………………sind(3M)参照 sindq(): 度で指定した引き数の正弦関数 (quad) ………………………………………………………………sind(3M)参照 sindw(): 度で指定した引き数の正弦関数 (extended) …………………………………………………………sind(3M)参照 sinf(): 正弦関数 (float) ……………………………………………………………………………………………sin(3M)参照 sinh(3M): sinh(), sinhf(), sinhl(), sinhw(), sinhq()…………………………………………………双曲線正弦関数 sinhf(): 双曲線正弦関数 (float) …………………………………………………………………………………sinh(3M)参照 sinhl(): 双曲線正弦関数 (long double) …………………………………………………………………………sinh(3M)参照 sinhq(): 双曲線正弦関数 (quad) …………………………………………………………………………………sinh(3M)参照 sinhw(): 双曲線正弦関数 (extended) ……………………………………………………………………………sinh(3M)参照 sinl(): 正弦関数 (long double) ……………………………………………………………………………………sin(3M)参照 sinq(): 正弦関数 (quad) ……………………………………………………………………………………………sin(3M)参照 sinw(): 正弦関数 (extended) …………………………………………………………………………………………sin(3M)参照 sleep(3C): sleep()…………………………………………………………………………………指定された時間、実行を停止 slk_attroff(3X): slk_attroff, slk_attr_off, slk_attron, slk_attr_on, slk_attrset, slk_attr_set, slk_clear, slk_color, slk_init, slk_label, slk_noutrefresh, slk_refresh, s l k _ r e s t o r e , slk_set, slk_touch, slk_wset………………………………………………………………ソフトラベル関数 slk_attron(): ソフトラベル関数…………………………………………………………………………slk_attroff(3X)参照 slk_attrset(): ソフトラベル関数…………………………………………………………………………slk_attroff(3X)参照 slk_attr_off(): ソフトラベル関数………………………………………………………………………slk_attroff(3X)参照 slk_attr_on(): ソフトラベル関数…………………………………………………………………………slk_attroff(3X)参照 slk_attr_set(): ソフトラベル関数………………………………………………………………………slk_attroff(3X)参照 slk_clear(): ソフトラベル関数……………………………………………………………………………slk_attroff(3X)参照 slk_color(): ソフトラベル関数……………………………………………………………………………slk_attroff(3X)参照 slk_init(): ソフトラベル関数……………………………………………………………………………slk_attroff(3X)参照 slk_label(): ソフトラベル関数……………………………………………………………………………slk_attroff(3X)参照 slk_noutrefresh(): ソフトラベル関数…………………………………………………………………slk_attroff(3X)参照 slk_refresh(): ソフトラベル関数…………………………………………………………………………slk_attroff(3X)参照 slk_restore(): ソフトラベル関数…………………………………………………………………………slk_attroff(3X)参照 slk_set(): ソフトラベル関数………………………………………………………………………………slk_attroff(3X)参照 slk_touch(): ソフトラベル関数……………………………………………………………………………slk_attroff(3X)参照 slk_wset(): ソフトラベル関数……………………………………………………………………………slk_attroff(3X)参照 SLPClose(): SLP (Service Location Protocol)ライブラリルーチン………………………………………………libslp(3N)参照 SLPDelAttrs(): SLP (Service Location Protocol)ライブラリルーチン…………………………………………libslp(3N)参照 SLPDereg(): SLP (Service Location Protocol)ライブラリルーチン………………………………………………libslp(3N)参照 SLPError(3N): SLPError…………………………………………………………SLP (Service Location Protocol) エラーコード smonitor(3C): smonitor()……………………………………………………………………………実行プロファイルの準備 SLPEscape(): SLP (Service Location Protocol)ライブラリルーチン……………………………………………libslp(3N)参照 SLPFindAttrs(): SLP (Service Location Protocol)ライブラリルーチン………………………………………libslp(3N)参照 SLPFindScopes(): SLP (Service Location Protocol)ライブラリルーチン………………………………………libslp(3N)参照 SLPFindSrvs(): SLP (Service Location Protocol)ライブラリルーチン…………………………………………libslp(3N)参照 SLPFindSrvTypes(): SLP (Service Location Protocol)ライブラリルーチン……………………………………libslp(3N)参照 SLPFree(): SLP (Service Location Protocol)ライブラリルーチン………………………………………………libslp(3N)参照 SLPGetProperty(): SLP (Service Location Protocol)ライブラリルーチン……………………………………libslp(3N)参照 SLPGetRefreshInterval(): SLP (Service Location Protocol)ライブラリルーチン…………………………libslp(3N)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xlv 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 SLPOpen(): SLP (Service Location Protocol)ライブラリルーチン………………………………………………libslp(3N)参照 SLPParseSrvURL(): SLP (Service Location Protocol)ライブラリルーチン……………………………………libslp(3N)参照 SLPReg(): SLP (Service Location Protocol)ライブラリルーチン…………………………………………………libslp(3N)参照 SLPSetProperty(): SLP (Service Location Protocol)ライブラリルーチン……………………………………libslp(3N)参照 SLPUnescape(): SLP (Service Location Protocol)ライブラリルーチン…………………………………………libslp(3N)参照 snprintf(): フォーマットされた出力……………………………………………………………………………printf(3S)参照 spray(3N): spray………………………………………………………ネットワークをチェックするためのデータ散布 sprintf(): フォーマットされた出力……………………………………………………………………………printf(3S)参照 sqrt(3M): sqrt(), sqrtf(), sqrtl(), sqrtw(), sqrtq()………………………………………………………平方根関数 sqrtf(): 平方根関数(float) ………………………………………………………………………………………sqrt(3M)参照 sqrtl(): 平方根関数(long double) …………………………………………………………………………………sqrt(3M)参照 sqrtq(): 平方根関数(quad) …………………………………………………………………………………………sqrt(3M)参照 sqrtw(): 平方根関数(extended) ……………………………………………………………………………………sqrt(3M)参照 srand(): 單純乱数生成関数 ………………………………………………………………………………………rand(3C)参照 srand48(): 均等に分散される疑似乱数の生成………………………………………………………………drand48(3C)参照 srandom(): 擬似乱数の生成関数………………………………………………………………………………random(3M)参照 sscanf(): ストリームファイルからの読み取りでの書式付き入力変換………………………………………scanf(3S)参照 ssignal(3C): ssignal(), gsignal()……………………………………………………………………ソフトウェアシグナル standend(3X): standend, standout, wstandend, wstandout……………………ウィンドウ属性の設定およびクリア standout(): ウィンドウ属性の設定およびクリア…………………………………………………………standend(3X)参照 start_color(): 色操作関数………………………………………………………………………can_change_color(3X)参照 statfsdev(3C): statfsdev, fstatfsdev………………………………………………………………ファイルシステムの統計 statvfsdev(3C): statvfsdev, fstatvfsdev……………………………………………………ファイルシステム情報の入手 stdio(3S): stdio()……………………………………………………標準バッファ化入出力ストリームファイル パッケージ stdscr(3X): stdscr…………………………………………………………………………………………デフォルトウィンドウ step(): 正規表現 コンパイル ルーチン………………………………………………………………………regexp(3X)参照 store(): データベースサブルーチン………………………………………………………………………………dbm(3X)参照 strcasecmp(), strncasecmp(): 文字列操作…………………………………………………………………string(3C)参照 strcat(), strncat(): 文字列操作………………………………………………………………………………string(3C)参照 strchr(), strrchr(): 文字列操作………………………………………………………………………………string(3C)参照 strcmp(), strncmp(): 文字列操作………………………………………………………………………………string(3C)参照 strcoll(): 文字列操作……………………………………………………………………………………………string(3C)参照 strcpy(), strncpy(): 文字列操作………………………………………………………………………………string(3C)参照 strdup(): 文字列操作………………………………………………………………………………………………string(3C)参照 strerror(): システム エラーメッセージ………………………………………………………………………perror(3C)参照 strfmon(3C): strfmon…………………………………………………………………………………………金額を文字列に変換 strftime(3C): strftime()……………………………………………………………………日付および時間の文字列への変換 string(3C): 文字列関数: strcasecmp(), strcat(), strchr(), strcmp(), strcoll(), strcpy(), strcspn(), strdup(), strlen(),strncasecmp(), strn cat (), s trn cmp (), s trnc py( ), st rpb rk( ), strrchr(), strrstr(), strspn(), strstr(), strtok(), str-tok_r(), strxfrm(), index(), rindex()………………………………………………………………………………………………… 文字列操作 strlen(): 文字列操作………………………………………………………………………………………………string(3C)参照 strord(3C): strord………………………………………………………………………………………文字列データ順序の変換 strpbrk(): 文字列操作……………………………………………………………………………………………string(3C)参照 xlvi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 strptime(3C): strptime…………………………………………………………………………………………日付と時刻の変換 strrstr(): 文字列操作……………………………………………………………………………………………string(3C)参照 strspn(), strcspn(): 文字列操作………………………………………………………………………………string(3C)参照 strstr(): 文字列操作……………………………………………………………………………………………string(3C)参照 strtoacl(3C): strtoacl(), strtoaclpatt(), aclentrystart[ ]……………………………………文字列形式の変換 strtoaclpatt(): 文字列形式からアクセス制御リスト (ACL) 構造体への変換…………………………strtoacl(3C)参照 strtod(3C): strtod, strtof, strtold, strtow, strtoq, atof……………………………文字列を浮動小数点数に変換 strtof(): 文字列を浮動小数点数に変換 (float) ………………………………………………………………strtod(3C)参照 strtoimax(3C): strtoimax(), strtoumax()………………………………………………………文字列から整数への変換 strtok(): 文字列操作………………………………………………………………………………………………string(3C)参照 strtok_r(): 文字列操作…………………………………………………………………………………………string(3C)参照 strtol(3C): strtol(), atol(), atoi(), strtoul(), strtoll(), strtoull()……………………文字列を整数に変換 strtold(): 文字列を浮動小数点数に変換 (long double) ……………………………………………………strtod(3C)参照 strtoll(): 文字列を整数に変換………………………………………………………………………………strtol(3C)参照 strtoq(): 文字列を浮動小数点数に変換 (quad) ………………………………………………………………strtod(3C)参照 strtoul(): 文字列を整数に変換………………………………………………………………………………strtol(3C)参照 strtoull(): 文字列を整数に変換………………………………………………………………………………strtol(3C)参照 strtoumax(): 文字列を整数に変換………………………………………………………………………strtoimax(3C)参照 strtow(): 文字列を浮動小数点数に変換 (extended) ……………………………………………………strtod(3C)参照 strxfrm(): 文字列操作……………………………………………………………………………………………string(3C)参照 subpad(3X): subpad…………………………………………………………………………………………拡張パッド管理関数 subwin(): ウィンドウ作成関数………………………………………………………………………………subwin(3X)参照 svcerr_auth(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン……rpc_svc_err(3N)参照 svcerr_decode(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン…rpc_svc_err(3N)参照 svcerr_noproc(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン…rpc_svc_err(3N)参照 svcerr_noprog(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン…rpc_svc_err(3N)参照 svcerr_progvers(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン……………………… ………………………………………………………………………………………………………rpc_svc_err(3N)参照 svcerr_systemerr(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン…………………… ……………………………………………………………………………………………………rpc_svc_err(3N)参照 svcerr_weakauth(): サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン……………………… ………………………………………………………………………………………………………rpc_svc_err(3N)参照 svcfd_create(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 svcraw_create(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 svctcp_create(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 svcudp_bufcreate(): RPC 用の旧ライブラリルーチン……………………………………………………rpc_soc(3N)参照 svcupd_create(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 svc_auth_reg(): サーバの登録用ライブラリルーチン………………………………………………rpc_svc_reg(3N)参照 svc_control(): サーバハンドル作成のためのライブラリルーチン……………………………rpc_svc_create(3N)参照 svc_create(): サーバハンドル作成のためのライブラリルーチン………………………………rpc_svc_create(3N)参照 svc_destroy(): サーバハンドル作成のためのライブラリルーチン……………………………rpc_svc_create(3N)参照 svc_dg_create(): サーバハンドル作成のためのライブラリルーチン……………………………rpc_svc_create(3N)参照 svc_dg_enablecache(): RPC サーバ用のライブラリルーチン……………………………………rpc_svc_calls(3N)参照 svc_done(): RPC サーバ用のライブラリルーチン……………………………………………………rpc_svc_calls(3N)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xlvii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 svc_exit(): RPC サーバ用のライブラリルーチン……………………………………………………rpc_svc_calls(3N)参照 svc_fds(): RPC 用の旧ライブラリルーチン…………………………………………………………………rpc_soc(3N)参照 svc_fdset(): RPC サーバ用のライブラリルーチン……………………………………………………rpc_svc_calls(3N)参照 svc_fd_create(): サーバハンドル作成のためのライブラリルーチン……………………………rpc_svc_create(3N)参照 svc_freeargs(): RPC サーバ用のライブラリルーチン………………………………………………rpc_svc_calls(3N)参照 svc_getargs(): RPC サーバ用のライブラリルーチン………………………………………………rpc_svc_calls(3N)参照 svc_getcaller(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 svc_getreq(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 svc_getreqset(): RPC サーバ用のライブラリルーチン……………………………………………rpc_svc_calls(3N)参照 svc_getreq_common(): RPC サーバ用のライブラリルーチン………………………………………rpc_svc_calls(3N)参照 svc_getreq_poll(): RPC サーバ用のライブラリルーチン…………………………………………rpc_svc_calls(3N)参照 svc_getrpccaller(): RPC サーバ用のライブラリルーチン………………………………………rpc_svc_calls(3N)参照 svc_pollset(): RPC サーバ用のライブラリルーチン………………………………………………rpc_svc_calls(3N)参照 svc_raw_create(): サーバハンドル作成のためのライブラリルーチン…………………………rpc_svc_create(3N)参照 svc_reg(): サーバの登録用ライブラリルーチン………………………………………………………rpc_svc_reg(3N)参照 svc_register(): RPC 用の旧ライブラリルーチン…………………………………………………………rpc_soc(3N)参照 svc_run(): RPC サーバ用のライブラリルーチン………………………………………………………rpc_svc_calls(3N)参照 svc_sendreply(): RPC サーバ用のライブラリルーチン……………………………………………rpc_svc_calls(3N)参照 svc_tli_create(): サーバハンドル作成のためのライブラリルーチン…………………………rpc_svc_create(3N)参照 svc_tp_create(): サーバハンドル作成のためのライブラリルーチン……………………………rpc_svc_create(3N)参照 svc_unreg(): サーバの登録用ライブラリルーチン……………………………………………………rpc_svc_reg(3N)参照 svc_unregister(): RPC 用の旧ライブラリルーチン………………………………………………………rpc_soc(3N)参照 svc_vc_create(): サーバハンドル作成のためのライブラリルーチン……………………………rpc_svc_create(3N)参照 swab(3C): swab()………………………………………………………………………………………………バイトのスワップ swscanf(): 書式化されたワイドキャラクタ入力の変換……………………………………………………fwscanf(3C)参照 syncok(3X): syncok, wcursyncup, wsyncdown, wsyncup…………………………………………………………………… ………………………………………………………ウィンドウとその親ウィンドウまたは子ウィンドウとの同期 syslog(3C): syslog(), openlog(), closelog(), setlogmask()…………………………………システムログの制御 system(3S): system()……………………………………………………………………………………シェルコマンドの発行 sys_errlist(): システム エラーメッセージ…………………………………………………………………perror(3C)参照 sys_nerr(): システム エラーメッセージ………………………………………………………………………perror(3C)参照 taddr2uaddr(): 汎用トランスポートの名前からアドレスへの変換…………………………………………netdir(3N)参照 tan(3M): tan(), tanf(), tanl(), tanw(), tanq()…………………………………………………………………正接関数 tand(3M): tand(), tandf(), tandl(), tandw(), tandq()…………………………………で指定した引き数の正接関数 tandf(): 度で指定した引き数の正接関数 (float) ………………………………………………………………tand(3M)参照 tandl(): 度で指定した引き数の正接関数 (long double) ………………………………………………………tand(3M)参照 tandq(): 度で指定した引き数の正接関数 (quad) ………………………………………………………………tand(3M)参照 tandw(): 度で指定した引き数の正接関数 (extended) …………………………………………………………tand(3M)参照 tanf(): 正接関数 (float) ……………………………………………………………………………………………tan(3M)参照 tanh(3M): tanh(), tanhf(), tanhl(), tanhw(), tanhq()…………………………………………………双曲線正接関数 tanhf(): 双曲線正接関数 (float) …………………………………………………………………………………tanh(3M)参照 tanhl(): 双曲線正接関数 (long double) …………………………………………………………………………tanh(3M)参照 tanhq(): 双曲線正接関数 (quad) …………………………………………………………………………………tanh(3M)参照 tanhw(): 双曲線正接関数 (extended) ……………………………………………………………………………tanh(3M)参照 xlviii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 tanl(): 正接関数 (long double) ……………………………………………………………………………………tan(3M)参照 tanq(): 正接関数 (quad) ……………………………………………………………………………………………tan(3M)参照 tanw(): 正接関数 (extended) ………………………………………………………………………………………tan(3M)参照 tcattribute(3C): tcgetattr(), tcsetattr()……………………………………………………………tty デバイスの制御 tccontrol(3C): tcsendbreak(), tcdrain(), tcflush(), tcflow()…………………………………tty 回線制御関数 tcdrain(): tty 回線制御関数…………………………………………………………………………………tccontrol(3C)参照 tcflow(): tty 回線制御関数……………………………………………………………………………………tccontrol(3C)参照 tcflush(): tty 回線制御関数…………………………………………………………………………………tccontrol(3C)参照 tcgetattr(): get tty device attributes ………………………………………………………………………tcattribute(3C)参照 tcgetpgrp(3C): tcgetpgrp()………………………………………………フォアグラウンド プロセスグループ ID の取得 tcgetsid(3C): tcgetsid()……………………………………………………………………ターミナルセッション ID の入手 tcsendbreak(): tty 回線制御関数……………………………………………………………………………tccontrol(3C)参照 tcsetattr(): tty デバイスの制御…………………………………………………………………………tcattribute(3C)参照 tcsetpgrp(3C): tcsetpgrp()………………………………………………フォアグラウンド プロセスグループ ID の設定 tdelete(): 二分木の操作………………………………………………………………………………………tsearch(3C)参照 telldir(): ディレクトリの操作………………………………………………………………………………directory(3C)参照 tempnam(): 一時ファイルの名前の作成……………………………………………………………………tmpnam(3S)参照 termattrs(3X): termattrs, term_attrs………………………………………サポートされている端末ビデオ属性の取得 termcap(3X): termcap:termcap: tgetent(), tgetflag(), tgetnum(), tgetstr(), tgoto(), tputs()……… ………………………………………………………/usr/share/lib/termcapにあるアクセスルーチンのエミュレート TERMNAME(3X): termname………………………………………………………………………………………端末名の取得 term_attrs(): サポートされている端末ビデオ属性の取得………………………………………………termattrs(3X)参照 tfind(): 二分木の操作……………………………………………………………………………………………tsearch(3C)参照 tgamma(3M): tgamma(), tgammaf(), tgammal(), tgammaw(), tgammaq()…………………………本当のガンマ関数 tgammaf(): 本当のガンマ関数 (float) ………………………………………………………………………tgamma(3M)参照 tgammal(): 本当のガンマ関数 (long double) ………………………………………………………………tgamma(3M)参照 tgammaq(): 本当のガンマ関数 (quad) ………………………………………………………………………tgamma(3M)参照 tgammaw(): 本当のガンマ関数 (extended) ……………………………………………………………………tgamma(3M)参照 tgetent(): /usr/share/lib/termcapにあるアクセスルーチンのエミュレート…………………………………termcap(3X)参照 tgetflag(): /usr/share/lib/termcapにあるアクセスルーチンのエミュレート………………………………termcap(3X)参照 tgetnum(): /usr/share/lib/termcapにあるアクセスルーチンのエミュレート…………………………………termcap(3X)参照 tgetstr(): /usr/share/lib/termcapにあるアクセスルーチンのエミュレート…………………………………termcap(3X)参照 tgoto(): /usr/share/lib/termcapにあるアクセスルーチンのエミュレート……………………………………termcap(3X)参照 tigetflag(3X): tigetflag, tigetnum, tigetstr, tparm………………………terminfo データベースからの機能の検索 tigetnum(): terminfo データベースからの機能の検索 ……………………………………………………tigetflag(3X)参照 tigetstr(): terminfo データベースからの機能の検索 ……………………………………………………tigetflag(3X)参照 timeout(): 入力時のブロック化制御………………………………………………………………………notimeout(3X)参照 timezone(): 日付と時刻の文字列への変換 ……………………………………………………………………ctime(3C)参照 tmpfile(3S): tmpfile()………………………………………………………………………………………一時ファイルの作成 tmpnam(3S): tmpnam(), tempnam()………………………………………………………………一時ファイルの名前の作成 toascii(): 文字の変換………………………………………………………………………………………………conv(3C)参照 tolower(), _tolower: 文字の変換………………………………………………………………………………conv(3C)参照 touchline(): ウィンドウリフレッシュ制御関数……………………………………………………is_linetouched(3X)参照 touchwin(3X): touchwin……………………………………………………………………ウィンドウリフレッシュ制御関数 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company xlix 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 toupper(), _toupper: 文字の変換………………………………………………………………………………conv(3C)参照 towctrans(3C): towctrans(), wctrans()……………………………………………………………………………文字変換 towlower(): ワイドキャラクタの変換…………………………………………………………………………wconv(3C)参照 towupper(): ワイドキャラクタの変換…………………………………………………………………………wconv(3C)参照 tparm(): terminfo データベースからの機能の検索 …………………………………………………………tigetflag(3X)参照 tputs(): /usr/share/lib/termcapにあるアクセスルーチンのエミュレート……………………………………termcap(3X)参照 tputs(): コマンドの端末への出力…………………………………………………………………………………putp(3X)参照 trunc(3M): trunc(), truncf(), truncl(), truncw(), truncq()…………………………………………切り捨て関数 truncf(): 切り捨て関数(float) ……………………………………………………………………………………trunc(3M)参照 truncl(): 切り捨て関数(long double) ……………………………………………………………………………trunc(3M)参照 truncq(): 切り捨て関数(quad) …………………………………………………………………………………trunc(3M)参照 truncw(): 切り捨て関数(extended) ………………………………………………………………………………trunc(3M)参照 tsearch(3C): tsearch(), tfind(), tdelete(), twalk()……………………………………………………二分木の操作 ttyname(3C): ttyname(), ttyname_r(), isatty()……………………………………………………………端末名の取得 ttyslot(3C): ttyslot()………………………………………………現在のユーザーの utmpx ファイルにおける位置の取得 twalk(): 二分木の操作……………………………………………………………………………………………tsearch(3C)参照 typeahead(3X): typeahead………………………………………………………………………タイプアヘッドの検査の制御 tzname(): 日付と時刻の文字列への変換 ………………………………………………………………………ctime(3C)参照 tzset(): 日付と時刻の文字列への変換 …………………………………………………………………………ctime(3C)参照 t_accept(3): t_accept()……………………………………………………………………………………接続要求の受け入れ t_alloc(3): t_alloc()……………………………………………………………………………ライブラリー構造体の割り当て t_bind(3): t_bind()………………………………………………トランスポートエンドポイントへのアドレスのバインド t_close(3): t_close()………………………………………………………………トランスポートエンドポイントのクローズ t_connect(3): t_connect()……………………………………………………別のトランスポートユーザーとの接続の確立 t_error(3): t_error()…………………………………………………………………………………エラーメッセージの生成 t_free(3): t_free()……………………………………………………………………………………ライブラリー構造体の解放 t_getinfo(3): t_getinfo()………………………………………………………………プロトコル固有のサービス情報の入手 t_getprotaddr(3): t_getprotaddr()………………………………………………………………プロトコルアドレスの入手 t_getstate(3): t_getstate()……………………………………………………………………………………現在の状態の入手 t_listen(3): t_listen()…………………………………………………………………………………接続要求の受け入れ待機 t_look(3): t_look()……………………………………………トランスポートエンドポイント上の現在のイベントの検出 t_open(3): t_open()……………………………………………………………………トランスポートエンドポイントの確立 t_optmgmt(3): t_optmgmt()……………………………………………トランスポートエンドポイントのオプションの管理 t_rcv(3): t_rcv()……………………………………………………接続を介して送信されたデータまたは急送データの受信 t_rcvconnect(3): t_rcvconnect()…………………………………………………………………接続要求からの確認の受信 t_rcvdis(3): t_rcvdis()……………………………………………………………………………………切断情報の取り出し t_rcvrel(3): t_rcvrel()………………………………ランスポートエンドポイントでの正常解放指示の受信に対する確認 t_rcvudata(3): t_rcvudata()…………………リモートトランスポートプロバイダーユーザーからのデータ単位の受信 t_rcvuderr(3): t_rcvuderr()……………………………………………………………………単位データエラー指示の受信 t_snd(3): t_snd()………………………………………………………………接続を介したデータまたは急送データの送信 t_snddis(3): t_snddis()…………………………………………………………………………ユーザー開始切断要求の送信 t_sndrel(3): t_sndrel()…………………………………………………………………………………………正常解放の開始 t_sndudata(3): t_sndudata()…………………………………………………………………………………データ単位の送信 t_strerror(3): t_strerror()…………………………………………………………………エラーメッセージ文字列の生成 l Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 t_sync(3): t_sync()……………………………………………………………………トランスポートライブラリーの同期化 t_unbind(3): t_unbind()…………………………………………………………トランスポートエンドポイントの使用停止 uaddr2taddr(): 汎用トランスポートの名前からアドレスへの変換…………………………………………netdir(3N)参照 uc_access(3): uc_access: __uc_get_reason(), __uc_get_grs(), __uc_set_grs(), __uc_get_frs(), __uc_set_frs(), __uc_get_prs(), __uc_set_prs(), __uc_get_brs(), __uc_set_brs(), __uc_get_ip(), __uc_set_ip(), __uc_get_cfm(), __uc_set_cfm(), _ _ u c _ g e t _ u m ( ) , __uc_set_um(), __uc_get_ar_rsc(), _uc_set_ar_rsc(), __uc_get_ar_bsp(), __uc_get_ar_bspstore(), __uc_get_ar_csd(), __uc_set_ar_csd(), __uc_get_ar_ssd(), __uc_set_ar_ssd(), __uc_get_ar_ccv(), __uc_set_ar_ccv(), __uc_get_ar_unat(), __uc_set_ar_unat(), __uc_get_ar_fpsr(), __uc_set_ar_fpsr(), __uc_get_ar_pfs(), __uc_se t_ar_ pfs(), __u c_get_a r_lc( ), __uc_se t_ar_lc (), __uc_g et_ar _ec() , __uc_set_ar_ec(), __uc_get_ed(), __uc_set_ed(), __uc_get_rsebs(), __uc_set_rsebs(), __uc_get_rsebs64(), _uc_set_rsebs64(), __uc_get_ar(), __uc_set_ar(), __uc_get_cr()… …………………………………………………………………………ucontext_t (ユーザーコンテキスト)アクセス ultoa(): 符号なし long 整数を ASCII 10 進数に変換…………………………………………………………ltostr(3C)参照 ultoa_r(): 符号なし long 整数を ASCII 10 進数に変換 (マルチスレッドセーフ) ………………………ltostr(3C)参照 ultostr(): 符号なし long 整数を文字列に変換………………………………………………………………ltostr(3C)参照 ultostr_r(): 符号なし long 整数を文字列に変換 (マルチスレッドセーフ) ………………………………ltostr(3C)参照 unctrl(3X): unctrl………………………………………………………………………………文字のプリント可能表現を生成 undial(): 外部への端末回線連結の設立……………………………………………………………………………dial(3C)参照 ungetc(3S): ungetc()………………………………………………………………………………文字を入力ストリームに戻す ungetch(3X): ungetch, unget_wch……………………………………………………………文字の入力キューへのプッシュ ungetwc(3C): ungetwc()…………………………………………………………ワイドキャラクタを入力ストリームに戻す unget_wch(): 文字の入力キューへのプッシュ………………………………………………………………ungetch(3X)参照 unlockpt(3C): unlockpt……………………………………一組みのSTREAMS ptyマスターおよびスレーブのロック解除 untouchwin(): ウィンドウリフレッシュ制御関数……………………………………………………is_linetouched(3X)参照 updatebwdb(): 新しい wtmpsと btmpsデータベースへのレコードの書き込み…………………………bwtmps(3C)参照 user2netname(): Secure RPC のライブラリルーチン……………………………………………………secure_rpc(3N)参照 use_env(3X): use_env……………………………………………………………………………画面サイズの情報ソースの指定 utmpname(): utmpをクローズする…………………………………………………………………………………getut(3C)参照 utmpx file entry ………………………………………………………………………………………………………getutx(3C)参照 uwx(3X): uwx…………………………………………………………………………………………Unwind Express ライブラリ U_STACK_TRACE(3X): U_STACK_TRACE(), _UNW_STACK_TRACE()……………………………………………………… …………………アンワインドライブラリを使ったプロシージャコールスタックのバックトレース情報の出力 valloc(): sysconf の値に対して境界調整したメモリーブロックを割り当てる……………………………malloc(3C)参照 vfprintf(): フォーマットしたvarargs引き数リストの出力…………………………………………………vprintf(3S)参照 vfscanf(): ストリームファイルからの入力をフォーマットに従ってvarargs引き数リストに変換する…vscanf(3S)参照 vfwprintf(): ファイルへのフォーマットつき出力…………………………………………………………vwprintf(3C)参照 vidattr(3X): vidattr, vid_attr, vidputs, vid_puts…………………………………………………端末への属性の出力 vidputs(): 端末への属性の出力……………………………………………………………………………………vidattr(3X)参照 vid_attr(): 端末への属性の出力……………………………………………………………………………………vidattr(3X)参照 vid_puts(): 端末への属性の出力……………………………………………………………………………………vidattr(3X)参照 vline(): 1バイト文字と修飾情報を元にした線描………………………………………………………………hline(3X)参照 vline_set(): 複情報文字と修飾情報を元にした線描………………………………………………………hline_set(3X)参照 vpfmt(): 標準形式のメッセージ表示………………………………………………………………………………pfmt(3C)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company li 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 vprintf(3S): vprintf(), vfprintf(), vsprintf(), vsnprintf()……フォーマットしたvarargs引き数リストの出力 vscanf(3S): vscanf(), vfscanf(), vsscanf()………………………………………………………………………………… ………………………ストリームファイルからの入力をフォーマットに従ってvarargs引き数リストに変換する vsnprintf(): フォーマットしたvarargs引き数リストの出力…………………………………………………vprintf(3S)参照 vsprintf(): フォーマットしたvarargs引き数リストの出力…………………………………………………vprintf(3S)参照 vsscanf(): ストリームファイルからの入力をフォーマットに従ってvarargs引き数リストに変換する…vscanf(3S)参照 vswprintf(): フォーマットされた出力………………………………………………………………………vwprintf(3C)参照 vwprintf(3C): vfwprintf(), vwprintf(), vswprintf()…stdarg 引き数リストのワイドキャラクタ形式による出力 vwprintw(3X): vwprintw……………………………………………………………形式化した出力をウィンドウにプリント vwscanw(3X): vwscanw………………………………………………………ウィンドウからの形式化されている入力の変換 vw_printw(3X): vw_printw…………………………………………形式化した出力のウィンドウへのプリント (廃止予定) vw_scanw(3X): vw_scanw…………………………………………………ィンドウからの形式化した入力の変換 (廃止予定) waddch(): 1バイト文字と修飾情報をウィンドウに追加して、カーソルを進める…………………………addch(3X)参照 waddchnstr(): 1バイト文字からなる長さが制限された文字列と修飾情報のウィンドウへの追加…addchnstr(3X)参照 waddchstr(): 1バイト文字からなる文字列と修飾情報のウィンドウへの追加…………………………addchstr(3X)参照 waddnstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める…………… …………………………………………………………………………………………………………addnstr(3X)参照 waddnwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める………addnwstr(3X)参照 waddstr(): 修飾情報のないマルチバイト文字からなる文字列をウィンドウに追加し、カーソルを進める…………… …………………………………………………………………………………………………………addnstr(3X)参照 waddwstr(): ワイドキャラクタからなる文字列をウィンドウに追加し、カーソルを進める…………addnwstr(3X)参照 wadd_wch(): 情報文字および修飾情報のウィンドウへの追加……………………………………………add_wch(3X)参照 wadd_wchnstr(): 複情報文字および修飾情報の配列のウィンドウへの追加………………………add_wchnstr(3X)参照 wadd_wchstr(): 複情報文字および修飾情報の配列のウィンドウへの追加…………………………add_wchnstr(3X)参照 wattroff(): 制限付きウィンドウ属性制御関数………………………………………………………………attroff(3X)参照 wattron(): 制限付きウィンドウ属性制御関数………………………………………………………………attroff(3X)参照 wattrset(): 制限付きウィンドウ属性制御関数………………………………………………………………attroff(3X)参照 wattr_get(): ウィンドウ属性制御関数………………………………………………………………………attr_get(3X)参照 wattr_off(): ウィンドウ属性制御関数………………………………………………………………………attr_get(3X)参照 wattr_on(): ウィンドウ属性制御関数…………………………………………………………………………attr_get(3X)参照 wattr_set(): ウィンドウ属性制御関数………………………………………………………………………attr_get(3X)参照 wbkgd(): 1バイト文字を使用したバックグラウンド文字および修飾情報の設定または取得………………bkgd(3X)参照 wbkgdset(): 1バイト文字を使用したバックグラウンド文字および修飾情報の設定または取得……………bkgd(3X)参照 wbkgrnd(): 複情報文字を使用したバックグラウンド文字の設定または取得……………………………bkgrnd(3X)参照 wbkgrndset(): 複情報文字を使用したバックグラウンド文字の設定または取得…………………………bkgrnd(3X)参照 wborder(): 1バイト文字および修飾情報で枠線を引く………………………………………………………border(3X)参照 wborder_set(): 複情報文字および修飾情報で枠線を引く………………………………………………border_set(3X)参照 WCHAR(): 16ビット文字処理用ツール………………………………………………………………………nl_tools_16(3X)参照 WCHARADV(): 16ビット文字処理用ツール…………………………………………………………………nl_tools_16(3X)参照 wchgat(): ウィンドウ内の文字の修飾情報の変更………………………………………………………………chgat(3X)参照 wclear(): ウィンドウのクリア……………………………………………………………………………………clear(3X)参照 wclrtobot(): カーソルからウィンドウの終わりまでのクリア……………………………………………clrtobot(3X)参照 wclrtoeol(): カーソルから行の終わりまでのクリア………………………………………………………clrtoeol(3X)参照 wcolor_set(): ウィンドウ属性制御関数……………………………………………………………………attr_get(3X)参照 lii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 wconv(3C): towupper(), towlower()………………………………………………………………ワイドキャラクタの変換 wcrtomb(3C): wcrtomb()……………………………………………ワイドキャラクタ コードの文字への変換 (再開可能) wcscat(), wcsncat(): ワイドキャラクタ文字列操作………………………………………………………wcstring(3C)参照 wcschr(), wcsrchr(): ワイドキャラクタ文字列操作………………………………………………………wcstring(3C)参照 wcscmp(), wcsncmp(): ワイドキャラクタ文字列操作………………………………………………………wcstring(3C)参照 wcscoll(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wcscpy, wcsncpy(): ワイドキャラクタ文字列操作…………………………………………………………wcstring(3C)参照 wcsftime(3C): wcsftime()……………………………………………日付および時刻のワイドキャラクタ文字列への変換 wcslen(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wcspbrk(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wcsrtombs(3C): wcsrtombs()………………………………………ワイドキャラクタ文字列の文字列への変換 (再開可能) wcsspn(), wcscspn(): ワイドキャラクタ文字列操作………………………………………………………wcstring(3C)参照 wcsstr(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wcstod(3C): wcstod()…………………………………………………………ワイドキャラクタ文字列の倍精度数への変換 wcstoimax(3C): wcstoimax(), wcstoumax()…………………………ワイドキャラクタ文字列から long整数への変換 wcstok(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wcstok_r(): ワイドキャラクタ文字列操作…………………………………………………………………wcstring(3C)参照 wcstol(3C): wcstol(), wcstoll(), wcstoul(), wcstoull()……ワイドキャラクタ文字列から long整数への変換 wcstoll(): ワイドキャラクタ文字列から 整数への変換…………………………………………………………wcstol(3C)参照 wcstoul(): ワイドキャラクタ文字列から 整数への変換…………………………………………………………wcstol(3C)参照 wcstoull(): ワイドキャラクタ文字列から 整数への変換…………………………………………………………wcstol(3C)参照 wcstoumax(): ワイドキャラクタ文字列から long整数への変換…………………………………………wcstoimax(3C)参照 wcstring(3C): wcscat(), wcsncat(), wcscmp(), wcsncmp(), wcscpy(), wcsncpy(), wcslen(), wcschr(), wcsrchr(), wcsstr(), wcspbrk(), wcsspn(), wcscspn(), wcswcs(), wcstok(), wcscoll(), wcwidth(), wcswidth(), wcsxfrm()…………………………………………ワイドキャラクタ文字列操作 wcswcs(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wcswidth(): ワイドキャラクタ文字列操作…………………………………………………………………wcstring(3C)参照 wctob(): シングルバイト キャラクタとワイド キャラクタ間の変換………………………………………btowc(3C)参照 wctomb(): マルチバイト文字のバイトの数…………………………………………………………………multibyte(3C)参照 wctombs(): マルチバイト文字のバイトの数………………………………………………………………multibyte(3C)参照 wctrans(): 文字変換…………………………………………………………………………………………towctrans(3C)参照 wctype(3C): iswalpha(), iswupper(), iswlower(), iswdigit(), iswxdigit(), iswalnum(), iswspace(), iswpunct(), iswprint(), iswgraph(), iswcntrl(), wctype(), iswctype()…………………… …………………………………………………………………………………………………ワイドキャラクタの分類 wcursyncup(): ウィンドウとその親ウィンドウまたは子ウィンドウとの同期……………………………syncok(3X)参照 wcwidth(): ワイドキャラクタ文字列操作……………………………………………………………………wcstring(3C)参照 wdelch(): ウィンドウからの文字の削除…………………………………………………………………………delch(3X)参照 wdeleteln(): ウィンドウ内の行の削除………………………………………………………………………deleteln(3X)参照 wechochar(): 1バイト文字と修飾情報のウィンドウへのエコーおよびリフレッシュ…………………echochar(3X)参照 wecho_wchar(): 複情報文字の書き出しおよびそのウィンドウの速やかなリフレッシュ…………echo_wchar(3X)参照 werase(): ウィンドウのクリア……………………………………………………………………………………clear(3X)参照 wgetbkgrnd(): 複情報文字を使用したバックグラウンド文字の設定または取得…………………………bkgrnd(3X)参照 wgetch(): 端末から 1バイト文字を取得…………………………………………………………………………getch(3X)参照 wgetnstr(): 端末からマルチバイト文字長制限文字列を取得………………………………………………getnstr(3X)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company liii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 wgetn_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得……………getn_wstr(3X)参照 wgetstr(): 端末からマルチバイト文字列を取得………………………………………………………………getstr(3X)参照 wget_wch(): 端末からワイドキャラクタを取得……………………………………………………………get_wch(3X)参照 wget_wstr(): 端末からワイドキャラクタとファンクションキー コードの配列を取得………………getn_wstr(3X)参照 whline(): 1バイト文字と修飾情報を元にした線描………………………………………………………………hline(3X)参照 whline_set(): 複情報文字と修飾情報を元にした線描……………………………………………………hline_set(3X)参照 winch(): ウィンドウから 1バイト文字と修飾情報を入力………………………………………………………inch(3X)参照 winchnstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力……………………………………inchnstr(3X)参照 winchstr(): ウィンドウから 1バイト文字と修飾情報の配列を入力……………………………………inchnstr(3X)参照 winnstr(): ウィンドウからマルチバイト文字列を入力………………………………………………………innstr(3X)参照 winnwstr(): ウィンドウからワイド文字列を入力……………………………………………………………innwstr(3X)参照 winsch(): 1バイト文字と修飾情報のウィンドウへの挿入………………………………………………………insch(3X)参照 winsdelln(): ウィンドウの行の削除またはウィンドウへの挿入…………………………………………insdelln(3X)参照 winsertln(): ウィンドウへの行の挿入………………………………………………………………………insertln(3X)参照 winsnstr(): マルチバイト文字列のウィンドウへの挿入……………………………………………………insnstr(3X)参照 winsstr(): マルチバイト文字列のウィンドウへの挿入………………………………………………………insnstr(3X)参照 winstr(): ウィンドウからマルチバイト文字列を入力………………………………………………………innstr(3X)参照 wins_nwstr(): ワイド文字列のウィンドウへの挿入………………………………………………………ins_nwstr(3X)参照 wins_wch(): 複情報文字と修飾情報のウィンドウへの挿入………………………………………………ins_wch(3X)参照 wins_wstr(): ワイド文字列のウィンドウへの挿入………………………………………………………ins_nwstr(3X)参照 winwstr(): ウィンドウからワイド文字列を入力……………………………………………………………innwstr(3X)参照 win_wch(): ウィンドウから複情報文字と修飾情報を入力…………………………………………………in_wch(3X)参照 win_wchnstr(): ウィンドウから複情報文字と修飾情報の配列を入力………………………………in_wchnstr(3X)参照 win_wchstr(): ウィンドウから複情報文字と修飾情報の配列を入力…………………………………in_wchnstr(3X)参照 wmemchr(): メモリー内のワイドキャラクタの検索………………………………………………………wmemory(3C)参照 wmemcmp(): メモリー内のワイドキャラクタの比較………………………………………………………wmemory(3C)参照 wmemcpy(): メモリー内のワイドキャラクタのコピー……………………………………………………wmemory(3C)参照 wmemmove(): オーバーラップ領域のあるメモリー内のワイドキャラクタのコピー…………………wmemory(3C)参照 wmemory(3C): wmemchr(), wmemcmp(), wmemcpy(), wmemmove(), wmemset()………………………………………… ………………………………………………………………………………ワイドキャラクタに基づくメモリー操作 wmemset(): メモリー内のワイドキャラクタの設定………………………………………………………wmemory(3C)参照 wmove(): ウィンドウカーソル位置関数…………………………………………………………………………move(3X)参照 wnoutrefresh(): ウィンドウおよび行のリフレッシュ……………………………………………………doupdate(3X)参照 wordexp(3C): wordexp(), wordfree()………………………………………………………………………………単語の展開 wordfree(): 単語の展開に関連した未使用メモリー………………………………………………………wordexp(3C)参照 wprintf(): 書式化されたワイドキャラクタ出力の印刷……………………………………………………fwprintf(3C)参照 wprintw(): 形式化した出力のウィンドウへのプリント…………………………………………………mvprintw(3X)参照 wredrawln(): 行のアップデートステータス関数…………………………………………………………redrawwin(3X)参照 wrefresh(): ウィンドウおよび行のリフレッシュ……………………………………………………………doupdate(3X)参照 wscanf(): 書式化されたワイドキャラクタ入力の変換………………………………………………………fwscanf(3C)参照 wscanw(): ウィンドウからの形式化した入力の変換………………………………………………………mvscanw(3X)参照 wscrl(): ウィンドウのスクロール、拡張された Curses…………………………………………………………scrl(3X)参照 wsetscrreg(): 端末出力制御関数………………………………………………………………………………clearok(3X)参照 wstandend(): ウィンドウ属性の設定およびクリア………………………………………………………standend(3X)参照 liv Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 wstandout(): ウィンドウ属性の設定およびクリア………………………………………………………standend(3X)参照 wsyncdown(): ウィンドウとその親ウィンドウまたは子ウィンドウとの同期……………………………syncok(3X)参照 wsyncup(): ウィンドウとその親ウィンドウまたは子ウィンドウとの同期………………………………syncok(3X)参照 wtimeout(): 入力時のブロック化制御………………………………………………………………………notimeout(3X)参照 wtouchln(): ウィンドウリフレッシュ制御関数………………………………………………………is_linetouched(3X)参照 wunctrl(3X): wunctrl……………………………………………………………ワイドキャラクタのプリント可能表現の生成 wvline(): 1バイト文字と修飾情報を元にした線描………………………………………………………………hline(3X)参照 wvline_set(): 複情報文字と修飾情報を元にした線描……………………………………………………hline_set(3X)参照 xdr(3N): xdr………………………………………………………………………………外部データ表現のライブラリルーチン xdrmem_create(): 外部データ表現ストリーム作成のライブラリルーチン…………………………xdr_create(3N)参照 xdrrec_create(): 外部データ表現ストリーム作成のライブラリルーチン…………………………xdr_create(3N)参照 xdrrec_endofrecord(): 外部データ表現のライブラリルーチン……………………………………xdr_admin(3N)参照 xdrrec_eof(): 外部データ表現のライブラリルーチン………………………………………………xdr_admin(3N)参照 xdrrec_readbytes(): 外部データ表現のライブラリルーチン………………………………………xdr_admin(3N)参照 xdrrec_skiprecord(): 外部データ表現のライブラリルーチン………………………………………xdr_admin(3N)参照 xdrstdio_create(): 外部データ表現ストリーム作成のライブラリルーチン………………………xdr_create(3N)参照 xdr_accepted_reply(): リモートプロシージャコール用 XDR ライブラリルーチン………………rpc_xdr(3N)参照 xdr_admin(3N): xdr_admin, xdr_control, xdr_getpos, xdr_inline, xdrrec_endofrecord, xdrrec_eof, xdrrec_readbytes, xdrrec_skiprecord, xdr_setpos, xdr_sizeof…………………………………… …………………………………………………………………………………外部データ表現のライブラリルーチン xdr_array(): 外部データ表現のライブラリルーチン………………………………………………xdr_complex(3N)参照 xdr_authsys_parms(): リモートプロシージャコール用 XDR ライブラリルーチン………………rpc_xdr(3N)参照 xdr_authunix_parms(): RPC 用の旧ライブラリルーチン………………………………………………rpc_soc(3N)参照 xdr_bool(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_bytes(): 外部データ表現のライブラリルーチン…………………………………………………xdr_complex(3N)参照 xdr_callhdr(): リモートプロシージャコール用 XDR ライブラリルーチン……………………………rpc_xdr(3N)参照 xdr_callmsg(): リモートプロシージャコール用 XDR ライブラリルーチン……………………………rpc_xdr(3N)参照 xdr_char(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_complex(3N): xdr_complex, xdr_array, xdr_bytes, xdr_opaque, xdr_pointer, xdr_reference, xdr_string, xdr_union, xdr_vector, xdr_wrapstring………外部データ表現のライブラリルーチン xdr_control(): 外部データ表現のライブラリルーチン………………………………………………xdr_admin(3N)参照 xdr_create(3N): xdr_create, xdr_destroy, xdrmem_create, xdrrec_create, xdrstdio_create……………… ………………………………………………………………外部データ表現ストリーム作成のライブラリルーチン xdr_destroy(): 外部データ表現ストリーム作成のライブラリルーチン………………………………xdr_create(3N)参照 xdr_double(): 外部データ表現のライブラリルーチン…………………………………………………xdr_simple(3N)参照 xdr_enum(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_float(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_free(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_getpos(): 外部データ表現のライブラリルーチン…………………………………………………xdr_admin(3N)参照 xdr_hyper(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_inline(): 外部データ表現のライブラリルーチン…………………………………………………xdr_admin(3N)参照 xdr_int(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_long(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_longlong_t(): 外部データ表現のライブラリルーチン……………………………………………xdr_simple(3N)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company lv 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 xdr_opaque(): 外部データ表現のライブラリルーチン………………………………………………xdr_complex(3N)参照 xdr_opaque_auth(): リモートプロシージャコール用 XDR ライブラリルーチン……………………rpc_xdr(3N)参照 xdr_pointer(): 外部データ表現のライブラリルーチン………………………………………………xdr_complex(3N)参照 xdr_quadruple(): 外部データ表現のライブラリルーチン……………………………………………xdr_simple(3N)参照 xdr_reference(): 外部データ表現のライブラリルーチン…………………………………………xdr_complex(3N)参照 xdr_rejected_reply(): リモートプロシージャコール用 XDR ライブラリルーチン………………rpc_xdr(3N)参照 xdr_replymsg(): リモートプロシージャコール用 XDR ライブラリルーチン………………………rpc_xdr(3N)参照 xdr_setpos(): 外部データ表現のライブラリルーチン…………………………………………………xdr_admin(3N)参照 xdr_short(): 外部データ表現のライブラリルーチン……………………………………………………xdr_simple(3N)参照 xdr_simple(3N): xdr_simple, xdr_bool, xdr_char, xdr_double, xdr_enum, xdr_float, xdr_free, xdr_hyper, xdr_int, xdr_long, xdr_longlong_t, xdr_quadruple, xdr_short, xdr_u_char, xdr_u_hyper, xdr_u_int, xdr_u_long, xdr_u_longlong_t, xdr_u_short, xdr_void……………………………… …………………………………………………………………………………外部データ表現のライブラリルーチン xdr_sizeof(): 外部データ表現のライブラリルーチン…………………………………………………xdr_admin(3N)参照 xdr_string(): 外部データ表現のライブラリルーチン………………………………………………xdr_complex(3N)参照 xdr_union(): 外部データ表現のライブラリルーチン…………………………………………………xdr_complex(3N)参照 xdr_u_char(): 外部データ表現のライブラリルーチン…………………………………………………xdr_simple(3N)参照 xdr_u_hyper(): 外部データ表現のライブラリルーチン………………………………………………xdr_simple(3N)参照 xdr_u_int(): 外部データ表現のライブラリルーチン…………………………………………………xdr_simple(3N)参照 xdr_u_long(): 外部データ表現のライブラリルーチン…………………………………………………xdr_simple(3N)参照 xdr_u_longlong_t(): 外部データ表現のライブラリルーチン………………………………………xdr_simple(3N)参照 xdr_u_short(): 外部データ表現のライブラリルーチン………………………………………………xdr_simple(3N)参照 xdr_vector(): 外部データ表現のライブラリルーチン………………………………………………xdr_complex(3N)参照 xdr_void(): 外部データ表現のライブラリルーチン…………………………………………………xdr_simple(3N)参照 xdr_wrapstring(): 外部データ表現のライブラリルーチン…………………………………………xdr_complex(3N)参照 xprt_register(): サーバの登録用ライブラリルーチン………………………………………………rpc_svc_reg(3N)参照 xprt_unregister(): サーバの登録用ライブラリルーチン……………………………………………rpc_svc_reg(3N)参照 y0(3M): y0(), y1(), yn()……………………………………………………………………………………第2種ベッセル関数 y1(): 第1種ベッセル関数……………………………………………………………………………………………y0(3M)参照 yn(): 第1種ベッセル関数……………………………………………………………………………………………y0(3M)参照 ypclnt(3C): ypclnt(), yp_all(), yp_bind(), yp_first(), yp_get_default_domain(), yp_master(), yp_match(), yp_next(), yp_order(), yp_unbind(), yperr_string(), ypprot_err()…………… …………………………………………………………Network Information Serviceのクライアントインタフェース yperr_string() - Network Information Serviceのクライアントインタフェース……………………………ypclnt(3C)参照 yppasswd(3N): yppasswd()……………………………………Network Information Serviceでのユーザーパスワードの更新 ypprot_err() - Network Information Serviceのクライアントインタフェース………………………………ypclnt(3C)参照 ypupdate(3C): ypupdate……………………………………………………………………………………………NIS情報の変更 yp_all() - Network Information Serviceのクライアントインタフェース……………………………………ypclnt(3C)参照 yp_bind() - Network Information Serviceのクライアントインタフェース……………………………………ypclnt(3C)参照 yp_first() - Network Information Serviceのクライアントインタフェース…………………………………ypclnt(3C)参照 yp_get_default_domain() - Network Information Serviceのクライアントインタフェース……………ypclnt(3C)参照 yp_master() - Network Information Serviceのクライアントインタフェース………………………………ypclnt(3C)参照 yp_match() - Network Information Serviceのクライアントインタフェース…………………………………ypclnt(3C)参照 yp_next() - Network Information Serviceのクライアントインタフェース……………………………………ypclnt(3C)参照 yp_order() - Network Information Serviceのクライアントインタフェース…………………………………ypclnt(3C)参照 lvi Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 yp_unbind() - Network Information Serviceのクライアントインタフェース………………………………ypclnt(3C)参照 _authdes_getucred(): Secure RPC のライブラリルーチン……………………………………………secure_rpc(3N)参照 _ldecvt(): long-double 浮動小数点数値の文字列への変換……………………………………………………ldcvt(3C)参照 _ldfcvt(): long-double 浮動小数点数値の文字列への変換……………………………………………………ldcvt(3C)参照 _ldgcvt(): long-double 浮動小数点数値の文字列への変換……………………………………………………ldcvt(3C)参照 _longjmp(): 保存されている非ローカルの goto のスタック環境を復旧…………………………………setjmp(3C)参照 _nis_map_group(): NIS+ グループの操作関数…………………………………………………………nis_groups(3N)参照 _pututline(): utmpをクローズする………………………………………………………………………………getut(3C)参照 _setjmp(): 非ローカルの goto のスタック環境を保存………………………………………………………setjmp(3C)参照 _UNW_clear(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 _UNW_clearAlertCode(): アンワインドライブラリのデータ構造内の値の取り出し…………_UNW_getGR(3X)参照 _UNW_createContext(): アンワインドライブラリデータ構造の割り当てと割り当て解除……………………………… …………………………………………………………………………………_UNW_createContextForSelf(3X)参照 _ U N W _ c r e a te c o n te x tf o r s e l f (3 X) : _ U N W _ c r e a t e C o n t e x t F o r S e l f ( ) , _ U N W _ c r e a t e C o n t e x t ( ) , _UNW_destroyContext()…………………アンワインドライブラリデータ構造の割り当てと割り当て解除 _UNW_currentcontext(3X): _UNW_currentContext(), _UNW_clear(), _UNW_jmpbufContext(), _UNW_setAR(), _UNW_setBR(), _UNW_setCFM(), _UNW_setFR(), _UNW_setGR(), _UNW_setGR_NaT(), _UNW_setIP(), _UNW_setPR(), _UNW_setPreds(), _UNW_GR_PhysicalNumber(), _UNW_FR_PhysicalNumber(), _UNW_PR_PhysicalNumber(), _UNW_step()…………………………… ……………………………………………………………………アンワインドライブラリデータ構造体の値の操作 _UNW_destroyContext(): アンワインドライブラリデータ構造の割り当てと割り当て解除…………………………… …………………………………………………………………………………_UNW_createContextForSelf(3X)参照 _UNW_FR_PhysicalNumber(): アンワインドライブラリデータ構造体の値の操作…_UNW_currentContext(3X)参照 _UNW_getAlertCode(): アンワインドライブラリのデータ構造内の値の取り出し……………_UNW_getGR(3X)参照 _UNW_getAR(): アンワインドライブラリのデータ構造内の値の取り出し…………………………_UNW_getGR(3X)参照 _UNW_getBR(): アンワインドライブラリのデータ構造内の値の取り出し…………………………_UNW_getGR(3X)参照 _UNW_getCFM(): アンワインドライブラリのデータ構造内の値の取り出し………………………_UNW_getGR(3X)参照 _UNW_getFR(): アンワインドライブラリのデータ構造内の値の取り出し…………………………_UNW_getGR(3X)参照 _UNW_getgr(3X): _UNW_getGR(), _UNW_getGR_NaT(), _UNW_getFR(), _UNW_getBR(), _UNW_getAR(), _UNW_getPR(), _UNW_getPreds(), _UNW_getIP(), _UNW_getCFM(), _UNW_getAlertCode(), _UNW_clearAlertCode(), _UNW_getKernelSavedContext()……………………………………………… ……………………………………………………………アンワインドライブラリのデータ構造内の値の取り出し _UNW_getGR_NaT(): アンワインドライブラリのデータ構造内の値の取り出し…………………_UNW_getGR(3X)参照 _UNW_getIP(): アンワインドライブラリのデータ構造内の値の取り出し…………………………_UNW_getGR(3X)参照 _UNW_getKernelSavedContext(): アンワインドライブラリのデータ構造内の値の取り出し………………………… …………………………………………………………………………………………………_UNW_getGR(3X)参照 _UNW_getPR(): アンワインドライブラリのデータ構造内の値の取り出し…………………………_UNW_getGR(3X)参照 _UNW_getPreds(): アンワインドライブラリのデータ構造内の値の取り出し……………………_UNW_getGR(3X)参照 _UNW_GR_PhysicalNumber(): アンワインドライブラリデータ構造体の値の操作…_UNW_currentContext(3X)参照 _UNW_jmpbufContext(): アンワインドライブラリデータ構造体の値の操作…………_UNW_currentContext(3X)参照 _UNW_PR_PhysicalNumber(): アンワインドライブラリデータ構造体の値の操作…_UNW_currentContext(3X)参照 _UNW_setAR(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 _UNW_setBR(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 _UNW_setCFM(): アンワインドライブラリデータ構造体の値の操作……………………_UNW_currentContext(3X)参照 _UNW_setFR(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company lvii 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 _UNW_setGR(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 _UNW_setGR_NaT(): アンワインドライブラリデータ構造体の値の操作………………_UNW_currentContext(3X)参照 _UNW_setIP(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 _UNW_setPR(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 _UNW_setPreds(): アンワインドライブラリデータ構造体の値の操作…………………_UNW_currentContext(3X)参照 _UNW_STACK_TRACE(): アンワインドライブラリを使ったプロシージャコールスタックのバックトレース情報の出 力…………………………………………………………………………………………U_STACK_TRACE(3X)参照 _UNW_step(): アンワインドライブラリデータ構造体の値の操作………………………_UNW_currentContext(3X)参照 __uc_get_ar(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 __uc_get_ar_bsp(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_bspstore(): ucontext_t (ユーザーコンテキスト)アクセス………………………………uc_access(3)参照 __uc_get_ar_ccv(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_csd(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_ec(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_get_ar_fpsr(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_lc(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_get_ar_pfs(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_rsc(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_ssd(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_ar_unat(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_brs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_get_cfm(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_get_cr(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 __uc_get_ed(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 __uc_get_frs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_get_grs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_get_ip(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 __uc_get_prs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_get_reason(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_rsebs(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_get_rsebs64(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_get_um(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 __uc_set_ar(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 __uc_set_ar_ccv(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_ar_csd(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_ar_ec(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_set_ar_fpsr(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_ar_lc(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_set_ar_pfs(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_ar_rsc(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_ar_ssd(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_ar_unat(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………uc_access(3)参照 __uc_set_brs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_set_cfm(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 lviii Hewlett-Packard Company HP-UX 11i Version 2: August 2003 目次 Vol. 6&7 エントリ 名(セクション): 名称 説明 __uc_set_ed(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_set_frs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_set_grs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_set_ip(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_set_prs(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………………uc_access(3)参照 __uc_set_rsebs(): ucontext_t (ユーザーコンテキスト)アクセス…………………………………………uc_access(3)参照 __uc_set_rsebs64(): ucontext_t (ユーザーコンテキスト)アクセス……………………………………uc_access(3)参照 __uc_set_um(): ucontext_t (ユーザーコンテキスト)アクセス………………………………………………uc_access(3)参照 HP-UX 11i Version 2: August 2003 Hewlett-Packard Company lix ノート lx Hewlett-Packard Company HP-UX 11i Version 2: August 2003 セクション 3 第2部 ライブラリ N~Z セクション 3 第2部 ライブラリ N~Z nan(3M) nan(3M) 名称 nan( ), nanf( ), nanl( ), nanw( ), nanq( ) − 文字列から NaN への変換関数 構文 #include <math.h> double nan(const char *tagp); Itanium(R)ベース システムのみ float nanf(const char *tagp); long double nanl(const char *tagp); extended nanw(const char *tagp); quad nanq(const char *tagp); 説明 nan() 関数は、指定された文字列をクワイエット NaN に変換します。 tagp が n-char-sequence 文字列や空の文 字列を指していない場合、この呼び出しは、 strtod("NAN", (char**) NULL) と同じになります。 ISO/IEC C99 標準では n-char-sequence 構文を規定していますが、構文の解釈と拡張は、処理系で定義していま す。 n-char-sequence の引き数は、HP-UX システムでは無視されます。 Itaniumベース システムのみ nanf() は、 nan() の float バージョンで、 float 型の結果を返します。 nanl() は、 nan() の long double バージョンで、 long double 型の結果を返します。 nanw() は、 nan() の extended バージョンで、 extended 型の結果を返します。 nanq() は、HP-UX システムでは nanl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 nanw() または nanq() を使うには、 −fpwidetypes オプションを指定してコンパイルしてください。プログラムに、 <math.h> がインクルードされ ていることを確認した後、コンパイラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリン クしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 nan() 関数は、クワイエット NaN を返します。 これらの関数では、例外は発生しません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-1 nan(3M) nan(3M) エラー エラーは、定義されていません。 参照 copysign(3M), isnan(3M), nextafter(3M), math(5) 標準準拠 nan(), nanf(), nanl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-2 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 napms(3X) napms(3X) 名称 napms — 呼び出しプロセスの一時停止 構文 #include <curses.h> int napms(int ms); 説明 napms() 関数は、戻り値を返すまで少なくとも ms ミリ秒かかります。 戻り値 napms() 関数は OK を返します。 エラー エラーは定義されていません。 アプリケーション使用法 時限遅延動作を行うには、 usleep() 関数の方がより高い信頼性が得られます。 参照 delay_output(), usleep() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification ), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-3 ndbm(3X) ndbm(3X) 名称 dbm_open, dbm_close, dbm_fetch, dbm_store, dbm_delete, dbm_firstkey, dbm_nextkey, dbm_error, dbm_clearerr − デー タベースサブルーチン 構文 #include <ndbm.h> DBM *dbm_open(const char *file, int flags, mode_t mode); void dbm_close(DBM *db); datum dbm_fetch(DBM *db, datum key); int dbm_store(DBM *db, datum key, datum content, int flags); int dbm_delete(DBM *db, datum key); datum dbm_firstkey(DBM *db); datum dbm_nextkey(DBM *db); int dbm_error(DBM *db); int dbm_clearerr(DBM *db); 説明 データベースのkey/contentの組を管理する関数です。これらの関数は非常に大きな (10億ブロック (ブロック = 1024 バイト) ) データベースを扱います。1〜2個のファイルシステムアクセスにおいては、keyで識別して要素 にアクセスできます。 パラメータ key と content は datum 型で記述します。 datum は dptr の指す長さ dsize バイトの文字列を表しま す。通常の ASCII 文字列ばかりでなく、任意のバイナリデータも使用できます。データベースは2つのファイ ルに分けられます。1つは key のビットマップのあるディレクトリのファイルで、拡張子 .dir が付けられま す。2つ目はすべてのデータを含んだファイルで、拡張子 .pag が付けられます。 データベースにアクセスする前に、まず dbm_open でデータベースをオープンする必要があります。この関数 はファイル file.dir と file.pag を作成し、パラメータ flags によっては、それをオープンします (open(2) を参 照)。 いったんデータベースをオープンすると、keyのもとで貯えられているデータは dbm_fetch でアクセスできま す。 ま た dbm_store で デー タ を key の も と で 貯 え ら れ ま す。 flags フィー ル ド に は DBM_INSERT か DBM_REPLACE を指定します。 DBM_INSERT は新しい登録データのみをデータベースに追加挿入し、同じ keyですでに登録されているデータはそのままにします。 DBM_REPLACE は、同じkeyのデータがすでに存在 していたとき、古いデータを新しいもので置き換えます。 key (とそのcontent) は dbm_delete で削除します。 dbm_firstkey と dbm_nextkey で (見かけ上は) 無秩序に、データベースのすべてのkeyを一次元的に移動できま す。 dbm_firstkey はデータベースの最初のkeyを返します。 dbm_nextkey はデータベースの次のkeyを返しま す。次の文はデータベースのすべてのkeyを順番に指します。 Section 3-4 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ndbm(3X) ndbm(3X) for (key = dbm_firstkey(db); key.dptr != NULL; key = dbm_nextkey(db)) dbm_error は、データベースの読み書き時になんらかのエラーがあると、0以外の数を返します。 dbm_clearerr は、指定したデータベースのエラー状態をリセットします。 診断 一般に int を返す関数について、負の戻り値はエラーを、戻り値0は正常終了を表しています。 datum を返す 関数はnull dptr でエラーを表します。 flags に DBM_INSERT を指定して dbm_store を呼び出し、同じkey の データが存在した場合、値 1 が返されます。 dbm_store の呼び出しによって内部ブロックのオーバーフローが 発生した場合、値 -2 が返されます。 警告 このライブラリが提供する ndbm を、他の汎用データベース管理システムと混同してはいけません。これらの 関数は、1つのデータに複数の key を許して いませんし、マルチユーザーアクセスを考慮して いません (つま りレコードやファイルをロックしない) し、より高度に構成された一般のデータベース管理システムのよう に、便利な関数を多数提供するわけでも ありません。ハッシュを整理しながらデータコピーが行われるため、 これらの関数を使ってデータベースを構築し、更新するのは比較的時間がかかります。 keyが単一の比較的静 的な情報を高速に参照するアプリケーションには、これらの関数は 有益です。 これらの関数が返すデータのポインターは整列されていません。そのため、特定の境界整列の必要なデータが ブロックにあると、問題が発生することがあります。整列の必要なデータがブロックにある場合は、そのブ ロックを適切な整列領域にコピーする必要があります。 .pag ファイルは空白を含むので、見かけ上の大きさは、実質的な大きさの4倍程度になります。古い UNIX シ ステムには、こういった空白にアクセスすると、実際にファイルブロックを作るものがあります。これらの ファイルは、拡張なしには (cp(1), cat(1), tar(1), ar(1) のような) 通常の方法ではコピーできません。 これらのサブルーチンの返すポインター dptr は、続く呼び出しで変更される静的な記憶領域を指します。 key/contentの大きさの合計は、内部的なブロックサイズ (現在は1024バイト) を超えることができません。さら に、ハッシュ時にひとまとめに扱われるkey/contentの組は1つのブロックに入らなくてはなりません。データ が分割できず、複数のディスクブロックにまたがってしまうイベントの場合、 dbm_store はエラーを返しま す。 dbm_delete は物理的にファイルスペースを改善するわけではありませんが、ファイルスペースを再利用可能に します。 dbm_firstkey と dbm_nextkey により返されるkeyの順序は、純粋にハッシュ関数のみに依存しており、他には 特にあらわに依存する要素はありません。 dbm_firstkey や dbm_nextkey で一次元的にデータベース上を移動しているときに dbm_store や dbm_delete を 行うと、予想外の結果を招く可能性があります。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-5 ndbm(3X) ndbm(3X) 著者 ndbm(3X) はカリフォルニア大学バークレイ校で開発されました。 参照 dbm(3X), thread_safety(5) Section 3-6 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 netdir(3N) netdir(3N) 名称 netdir(), netdir_getbyname(), netdir_getbyaddr(), netdir_free(), netdir_options(), taddr2uaddr(), uaddr2taddr(), netdir_perror(), netdir_sperror() − 汎用トランスポートの名前からアドレスへの変換 構文 #include <netdir.h> int netdir_getbyname(const struct netconfig *config, const struct nd_hostserv *service, struct nd_addrlist **addrs ); int netdir_getbyaddr(const struct netconfig *config, struct nd_hostservlist **service, const struct netbuf *netaddr ); void netdir_free(void *ptr,const int struct_type ); int netdir_options(const struct netconfig *config, const int option,const int fildes,char *point_to_args ); char *taddr2uaddr(const struct netconfig *config, const struct netbuf *addr ); struct netbuf *uaddr2taddr(const struct netconfig *config, const char *uaddr ); void netdir_perror(char *s ); char *netdir_sperror(void); マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境下で安全に呼び出せます。これらの関数は、キャンセルポイントの関数 を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 説明 これらのルーチンは、すべてのトランスポートプロトコルを使って動作する、名前からアドレスへのマッピン グのための汎用インタフェースを提供します。このインタフェースは、プログラムがトランスポート特定のア HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-7 netdir(3N) netdir(3N) ドレスを共通の構造体に変換し、また元に戻す汎用性ある方法を提供します。 netconfig(4) マニュアルページで 説明した netconfig 構造体はトランスポートを識別します。 netdir_getbyname() ルーチンは、 nd_hostserv 構造体のマシン名とサービス名を、 netconfig 構造体のトランス ポート識別子が解釈するタイプのアドレス集合へマップします。このルーチンは、該当するトランスポートで 有効なすべてのアドレスを nd_addrlist 構造体に格納して戻します。 nd_hostserv 構造体には以下のメンバーが あります。 char *h_host; /* host name */ char *h_serv; /* service name */ nd_addrlist 構造体には以下のメンバーがあります。 int n_cnt; /* number of addresses */ struct netbuf *n_addrs; netdir_getbyname() は、特別なホスト名も受け入れます。このホスト名は <netdir.h> で定義されます。現在は 以下のホスト名が定義されています。 HOST_SELF ローカルプログラムが、その終端としてバインドするアドレスを表しま す。 HOST_SELF は、 gethostname() (gethostname(2) を参照) が提供する ホスト名とは異なります。こちらは リモートプログラムが、その終端と してバインドするアドレスを表します。 HOST_ANY このトランスポートプロバイダがアクセスできるすべてのホストを表し ます。 HOST_ANY を使用すれば、アプリケーションは特定ホスト名を 指定せずに必要なサービスを指定できます。 HOST_SELF_CONNECT HOST_BROADCAST ローカルホストへの接続に使用できるホストアドレスを表します。 このトランスポートプロバイダがアクセスできるすべてのホストのアド レスを表します。このアドレスへのネットワーク要求はすべてのマシン が受け取ります。 nd_hostserv 構造体のすべてのフィールドは、必ず初期化を行ってから使用してください。 使用可能なすべてのトランスポート上で指定のホストとサービスのアドレスを見つけるには、 getnetconfig() (getnetconfig(3N) を参照 ) が戻すそれぞれの netconfig 構造体を使って、 netdir_getbyname() ルーチンを呼び出します。 netdir_getbyaddr() ルーチンは、アドレスをサービス名にマップします。このルーチンは、このアドレ スのもととなるホストとサービスのペアを service にリストとして戻します。ホストとサービスの名前 の組が複数戻された場合、最も適したホスト名とサービス名が最初の組に入ります。 struct nd_hostservlist { Section 3-8 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 netdir(3N) netdir(3N) int *h_cnt; /* number of hostservs found */ struct hostserv *h_hostservs; }; netdir_free() 構造体を使用すると、名前からアドレスへの変換ルーチンがアロケートした構造体が解放 されます。 ptr は、解放しなければならない構造体をポイントします。 struct_type は以下の構造体を 識別します。 struct netbuf ND_ADDR struct nd_addrlist ND_ADDRLIST struct hostserv ND_HOSTSERV struct nd_hostservlist ND_HOSTSERVLIST taddr2uaddr() が戻す汎用アドレスは、 free() で解放しなければなりません。 netdir_options() ルーチンを使用して、すべてのトランスポート特定のセットアップとオプション管理 を行います。 fildes は、関連付けられたファイル記述子です。option, fildes, pointer_to_args は、 config で指定されたトランスポートのために netdir_options() ルーチンに渡されます。 option には、現在以下 の 3つの値が定義されています。 ND_SET_BROADCAST ND_SET_RESERVEDPORT ND_CHECK_RESERVEDPORT taddr2uaddr() と uaddr2taddr() のルーチンは、汎用アドレスと TLI タイプの netbufs との間の変換を サポートします。 taddr2uaddr() ルーチンは、 netbuf 構造体のデータを使って汎用アドレスが入った 文字列へのポインタを戻します。変換できない場合は -1 すなわち NULL を戻します。一部のトランス ポートでは汎用アドレス形式をサポートしていないので、これは致命的な状態ではありません。 uaddr2taddr() は taddr2uaddr() の逆の機能を提供します。指定した汎用アドレスに対する netbuf 構造 体を戻します。 トランスポートプロバイダがオプションをサポートしていない場合、 netdir_options() は -1 を戻し、 netdir_perror() または netdir_sperror() によってエラーメッセージを表示できます。 それぞれのオプションの特定のアクションは以下の通りです。 ND_SET_BROADCAST トランスポートがブロードキャストをサポートする場合、トラン スポートプロバイダがブロードキャストを行えるようにセット アップします。 fildes はトランスポートへのファイル記述子です ( 例えば、 /dev/udp の t_open の結果)。 pointer_to_args は使用しま せん。終了すると、ファイル記述子 fildes に対してブロードキャ スト操作が実行されます。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-9 netdir(3N) netdir(3N) ND_SET_RESERVEDPORT トランスポートプロバイダに予約ポートの概念が存在する場合、 アプリケーションが予約ポートへのバインドを行えるようにしま す。 fildes はバインド解除されているトランスポートへのファイ ル記述子です。 pointer_to_args が NULL の場合、 fildes は予約 ポートにバインドされます。 pointer_to_args が netbuf 構造体への ポインタである場合、指定のアドレスのすべての予約ポートへの バインドが試行されます。 ND_CHECK_RESERVEDPORT トランスポートプロバイダに予約ポートという概念が存在する場 合、アドレスが予約ポートに対応しているか検査します。 fildes は使用しません。 pointer_to_args は、アドレスが入った netbuf 構 造体へのポインタです。このオプションは、 pointer_to_args で指 定されたアドレスが予約されている場合だけ 40 を戻します。 戻り値 netdir_perror() ルーチンは、名前からアドレスへマッピングするいずれかのルーチンが失敗した原因を示すエ ラーメッセージを、標準出力に出力します。エラーメッセージの先頭には、引き数として指定された文字列が 付加されます。 netdir_sperror() ルーチンは、名前からアドレスへマッピングするいずれかのルーチンが失敗した原因を示すエ ラーメッセージが入っている文字列を戻します。 netdir_sperror() は、エラーメッセージ文字列が入っているバッファへのポインタを戻します。このバッファは 呼び出しごとに上書きされます。マルチスレッドのアプリケーションでは、このバッファはスレッド特定の データとして実現されます。 参照 gethostname(2), getnetconfig(3N), getnetpath(3N), netconfig(4) Section 3-10 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 net_aton(3C) net_aton(3C) 名称 net_aton( ), net_ntoa( ) − ネットワーク ステーションアドレス文字列変換ルーチン 構文 #include <sys/netio.h> char *net_aton(char *dstr, const char *sstr, int size); char *net_ntoa(char *dstr, const char *sstr, int size); 説明 net_aton() と net_ntoa() は、ステーションアドレスを 16 進数、8進数、10 進数、そしてバイナリ形式間で変 換します。 net_aton() 16 進数、8進数、10 進数形式のアドレスを1バイナリ形式のアドレスに変換 net_ntoa() 1バイナリ形式のアドレスを ASCII 16 進数形式のアドレスに変換 これらのルーチンは両方とも標準の C ライブラリで提供され、コンパイル時に自動的にロードされます。 net_aton パラメータ 以下のパラメータは net_aton() に用いられます。 dstr sstr 関数の返す1バイナリアドレスへのアドレス ステーションアドレス (イーサーネット、または IEEE 802.3) の null で終了する ASCII 表現 へのポインター。アドレスには、通常 C 言語で行われるように、8進数、10 進数、そして 16 進数が使えます (つまり、0x か 0X で始まる 16 進数、0で始まる8進数、それ以外の文 字で始まる 10 進数が使えます)。 size dstr に返す1バイナリアドレスの長さ。イーサーネット/IEEE 802.3 アドレスではこの長さ は6です。 net_ntoa パラメータ net_ntoa() は 48 ビットの1バイナリ ステーションアドレスを、それと等価な ASCII 形式の 16 進数に変換しま す。以下のパラメータは net_ntoa() に用いられます。 dstr 関数の返す ASCII 形式の 16 進数アドレスへのポインター。 dstr は null で終了する表現 で、必要ならば頭部に0を挿入します。変換したアドレスを格納するために、 dstr には、 少なくとも (2 × size + 3) バイトは必要です。 sstr バイナリ形式で表現したステーションアドレスへのポインター size sstr の長さ 戻り値 エラーが発生すると net_aton() と net_ntoa() は NULL を返します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-11 net_aton(3C) net_aton(3C) 例 #include <netio.h> #define destination_addr "0x00DD0002AD00" ... struct fis arg; char str[16]; ... (void) net_aton(arg.value.s, destination_addr, 6); /* arg.value.s = "<48-bit binary value>" */ (void) net_ntoa(str, arg.value.s, 6); /* str = "0x00DD0002AD00" */ 著者 net_aton() は HP で開発されました。 参照 thread_safety(5), lan(7) Section 3-12 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 newpad(3X) newpad(3X) 名称 newpad, pnoutrefresh, prefresh — パッド管理関数 構文 #include <curses.h> WINDOW *newpad(int nlines, int ncols); int pnoutrefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol); int prefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol); 説明 newpad() 関数は、nlines 行 ncols 桁のパッドを表現する特化された WINDOW データ構造を作成します。パッ ドはウィンドウに類似しています。ただし、パッドは必ずしもスクリーンの目で見える部分との関連性を持ち ません。パッドの自動リフレッシュは行われません。 prefresh() と pnoutrefresh() の両関数は、ウィンドウではなくてパッドに関連しているという点を除けば、 wrefresh() と wnoutrefresh() の両関数に類似しています。付け加えられる引き数は、パッドとスクリーンのど の部分が関係しているかを示しています。pminrow と pmincol の両引き数は、パッド内に表示する長方形の原 点を指定します。sminrow、smincol、smaxrow、および smaxcol の引き数は、スクリーン上に表示する長方形の 頂点を指定します。長方形は同じ大きさにしなければならないので、パッド内に表示する長方形の右下隅の点 は、スクリーン座標を元にして計算します。パッド内に表示する長方形は、パッド内に収まっていなければな りません。スクリーン上に表示する長方形は、スクリーン内に収まっていなければなりません。 pminrow、 pmincol、sminrow、または smincol に負の値を指定すると、ゼロとして取り扱われます。 戻り値 正常に終了すると、 newpad() 関数はパッドデータ構造へのポインターを返します。そうでなければヌルポイ ンターを返します。 正常に終了すると、 pnoutrefresh() と prefresh() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 パッドをリフレッシュするには、 wrefresh() ではなくて prefresh() または pnoutrefresh() を呼び出します。 パッドを使うため WINDOWS からコードを移植するときは、これらの関数は、さらに別の引き数によって、 表示するパッドの部分と表示に使用するスクリーン上の位置を指定する必要があることを忘れないでくださ い。 サブウィンドウとその親パッドは、親パッド内の文字を表現するメモリ領域を共有している場合があります が、必ずしもパッド内で発生した変化に関するステータス情報を共有しているわけではありません。ですか ら、パッド内でサブウィンドウを変更した後は、 prefresh() を呼び出す前にパッド上で touchwin() または HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-13 newpad(3X) newpad(3X) touchline() を呼び出す必要がある場合があります。 参照 derwin(), doupdate(), is_linetouched(), <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 pnoutrefresh() および prefresh() の両関数は、このエントリーに併合されました。以前の版では、 prefresh() の エントリーに含まれていました。 Section 3-14 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 newwin(3X) newwin(3X) 名称 newwin, subwin — ウィンドウ作成関数 構文 #include <curses.h> WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x); WINDOW *subwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x); 説明 newwin() 関数は、(begin_y, begin_x) を原点とする nlines 行、ncols 桁の新しいウィンドウを作成します。 nlines をゼロにすると、デフォルトで begin_y の LINES になります。ncols をゼロにすると、デフォルトでbegin_x の COLS になります。 subwin() 関数は、(begin_y, begin_x) を原点とする nlines 行、ncols 桁の新しいウィンドウを作成します。 (この 位置は絶対スクリーン位置で、ウィンドウ orig に対する相対位置ではありません。) 新しいウィンドウが一部 でも orig からはみ出す場合には、関数は正常に動作せずウィンドウも作成されません。 戻り値 正常に終了すると、これらの関数は新しいウィンドウを示すポインターを返します。そうでなければヌルポイ ンターを返します。 エラー エラーは定義されていません。 アプリケーション使用法 移植可能なアプリケーションでは、サブウィンドウの最初のリフレッシュを行う前に、親ウィンドウ上で touchwin() または touchline() を呼び出してください。 各ウィンドウは、スクリーンイメージとスクリーン状態に関する内部記述を保持しています。スクリーンイ メージは、ウィンドウ階層内のすべてのウィンドウが共有しています。リフレッシュ動作は、ウィンドウ内で どんな変化が起こったか、各ウィンドウだけに関係している変化はどれかという情報によって決まります。あ るウィンドウを更新したときに別のウィンドウをリフレッシュすると、これらのウィンドウが更新情報を共有 していないため、必要な更新ができない場合があります。 新しくフルスクリーンウィンドウを作成するには、次のようにしてウィンドウ作成関数を呼び出します。 newwin(0, 0, 0, 0); 参照 delwin(), is_linetouched(), doupdate(), <curses.h> HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-15 newwin(3X) newwin(3X) 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。 Section 3-16 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nextafter(3M) nextafter(3M) 名称 nextafter( ), nextafterf( ), nextafterl( ), nextafterw( ), nextafterq( ), nexttoward( ), nexttowardf( ), nexttowardl( ), nexttowardw( ), nexttowardq( ) − 次に表現可能な浮動小数点値 構文 #include <math.h> double nextafter(double x, double y); float nextafterf(float x, float y); Itanium(R)ベース システムのみ long double nextafterl(long double x, long double y); extended nextafterw(extended x, extended y); quad nextafterq(quad x, quad y); double nexttoward(double x, long double y); float nexttowardf(float x, long double y); long double nexttowardl(long double x, long double y); extended nexttowardw(extended x, long double y); quad nexttowardq(quad x, long double y); 説明 関数 nextafter() は、 y の方向で x の次に表現可能な倍精度値を計算します。したがって、 y が x より小さい場 合、 nextafter() は、 x より小さい表現可能な浮動小数点数のうち最大のものを返します。 x が y に等しい場合、 nextafter() 関数は、 y を返します。 関数 nexttoward() は、2番目の引き数の型が long double であることと、 x が y に等しい場合、 y をこの関数 の型に変換して返すことを除いて、 nextafter() と同等です。 関数 nexttoward() の結果は、関数の型によって決まります。2番目の浮動引き数の型は、関数の型に比べて範 囲が広いこともあり、2番目の引き数の中で範囲や精度は損なわれません。 nextafterf() は、 nextafter() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 nextafterl() は、 nextafter() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結 果を返します。 nextafterw() は、 nextafter() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返 します。 nextafterq() は、HP-UX システムでは nextafterl() と同等です。 nexttowardf() は、 nexttoward() の float バージョンで、 float 型の (第1) 引き数をとり、 float 型の結果を返し HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-17 nextafter(3M) nextafter(3M) ます。 nexttowardl() は nextafterl() と同等です。 nexttowardw() は、 nexttoward() の extended バージョンで、 extended 型の (第1) 引き数をとり、 extended 型 の結果を返します。 nexttowardq() は、HP-UX システムでは nexttowardl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itanium ベース システムで nextafterw()、 nextafterq()、 nexttowardw()、または nexttowardq() を使うには、 −fpwidetypes オプションも指定してコンパイルしてください。 プログラムに <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカーのコマンド 行で −lm を指定して、数学ライブラリとリンクしてください。 戻り値 x が y に等しい場合、 nextafter() は y 返して、 nexttoward() は、 x の型に変換された y を返します。 x または y が NaN の場合、 nextafter() および nexttoward() は NaN を返します。 x が有限で、正しい関数値がオーバーフローする場合、 nextafter() および nexttoward() は、 x の符号に応じて ±HUGE_VAL (+INFINITY に等しい) を返し、オーバーフロー例外が発生します。 戻り値がデノーマル値で、 x!=y の場合、これらの関数で、アンダーフロー浮動小数点例外と不正確浮動小数 点例外が発生します。 エラー x が有限で、正しい関数値がオーバーフローする場合、 nextafter() は errno に [ERANGE] を設定します。 Itaniumベース システムのみ Itaniumベース システムでの HP-UX の libm 関数は、デフォルトでは errno を設定しません。 errno を設定す るには、 +Olibmerrno オプションを指定してコンパイルしてください。 参照 scalbn(3M), math(5) 標準準拠 nextafter() : SVID3, XPG4.2, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) nextafterf(), nextafterl(), nexttoward(), nexttowardf(), nexttowardl() : ISO/IEC C99 ( 付録 F 『 IEC 60559 floatingpoint arithmetic』を含む) Section 3-18 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nis_db(3N) nis_db(3N) 名称 nis_db, db_initialize, db_list_entries, db_create_table, db_remove_entry, db_destroy_table, db_add_entry, db_first_entry, db_table_exists, db_next_entry, db_unload_table, db_reset_next_entry, db_checkpoint, db_standby, db_free_result − NIS+ データベースアクセス関数 構文 cc [ flag . . . ] file. . . −lnisdb −lnsl [ library. . . ] #include <rpcsvc/nis.h> #include <rpcsvc/nis_db.h> bool db_initialize(const char *dictionary_pathname); db_status db_create_table(const char *table_name, const table_obj *table); db_status db_destroy_table(const char *table_name); db_result *db_first_entry(const char *table_name, const int numattrs, const nis_attr *attrs); db_result *db_next_entry(const char *table_name, const db_next_desc *next_handle); db_result *db_reset_next_entry(const char *table_name, const db_next_desc *next_handle); db_result *db_list_entries(const char *table_name, const int numattrs, const nis_attr *attrs); db_result *db_remove_entry(const char *table_name, const int numattrs, const nis_attr *attrs); db_result *db_add_entry(const char *table_name, const int numattrs, const nis_attr *attrs, const entry_obj *entry); db_status db_table_exists(const char *table_name); db_status db_unload_table(const char *table_name); db_status db_checkpoint(const char *table_name); HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-19 nis_db(3N) nis_db(3N) db_status db_standby(const char *table_name ); void db_free_result(db_result *); 説明 これらの関数は、NIS+ サーバーと基底のデータベース間のインタフェースを記述します。これらは共用ライ ブラリ /usr/lib/libnisdb.so に定義されています。 インタフェースは完全なリレーショナルデータベースを簡潔なサブセットにしたもので、NIS+ サーバーデー モンが必要とする項目だけを提供します。データベースを置き換える場合は、インタフェースルーチンを確実 に一致させるようにしなければなりません。また、渡されるオブジェクトが、使用中のデータベースの内部的 な制限を超えていないことを確認するのはデータベースの責任です。 データベースのパフォーマンスがサーバーのパフォーマンスに直接影響します。 NIS+ で提供されている省略 時の情報ベースは SSM (Structured Storage Manager) です。これは NIS+ 用に調整されたメモリベースのデータ ベースです。 NIS+ クライアントがこれらのルーチンを呼び出してはなりません。 NIS+ クライアントは、 nis_tables(3N) に 説明されている NIS+ テーブルの API を使用します。 ルーチンは <rpcsvc/nis.h> に定義されている table_obj、entry_obj 、および nis_attr の各構造体だけを使用し ます。NIS+ ディレクトリ自体がサービスデーモンによってテーブルに保存されます。このテーブルには、オ ブジェクトの名前が入った検索可能なカラムと、バイナリの XDR データが入った検索不可能なカラムがあり ます。 NIS+ サーバーはネーム空間のディレクトリ参照要求をテーブル検索に変換します。このような要求に 応えて検索するテーブルには、目的のディレクトリ名と同じ名前が入っています。 DB アクセスルーチンで戻される構造体の定義は、以下の通りです。 enum db_status {DB_SUCCESS, DB_NOTFOUND, DB_NOTUNIQUE, DB_BADTABLE, DB_BADQUERY, DB_BADOBJECT, DB_MEMORY_LIMIT, DB_STORAGE_LIMIT, DB_INTERNAL_ERROR }; struct db_result { db_status db_next_desc status; /* Result status */ nextinfo; /* descriptor */ struct { u_int objects_len; entry_obj *objects_val; } objects; /* A variable list of objects */ long /* execution time in microseconds */ ticks; }; NIS+ オブジェクトについての詳細は、 nis_objects(3N) を参照してください。 db_next_entry( ) と db_reset_next_entry( ) のオペークハンドルとして構造体 db_next_desc を使用する必要があ ります。 Section 3-20 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nis_db(3N) nis_db(3N) db_first_entry で使用されている nis_attr 構造体と、その他の関連する関数の定義は以下の通りです。 struct nis_attr { char *zattr_ndx; struct { u_int zattr_val_len; char *zattr_val_val; } zattr_val; }; zattr_ndx は属性の名前です。 zattr_val_len は、属性 zattr_val_val の値です。 db_result では、 status 変数に戻された結果が DB_SUCCESS であるときに限って、 objects 配列の中にオブ ジェクトが入ります。構造体を作成するためのメモリが不十分な場合は、 db_result 構造体を指すポインタで はなく、ヌルポインタが戻されます。 データベースとの対話に先だって db_initialize() が呼び出されます。この関数は、データベースのカタログ情 報が入ったファイルまたはカタログ情報を入れるファイルのパス名を引き数として受け付けます。 db_create_table() は、指定されたテーブル名とテーブルオブジェクトを使用して新しいテーブルを作成しま す。テーブルを正しく作成したときは TRUE が戻り、作成できなかったときは FALSE が戻ります。 db_destroy_table() は、指定された名前のテーブルを消去します。消去が正しく行われたときは TRUE が戻 り、正しく行われなかったときは FALSE が戻ります。 db_first_entry() は、指定されたテーブルの中で、指定された属性を満たす最初のエントリのコピーを戻しま す。属性を指定していないと、テーブルの先頭のエントリが戻されます。 attrs は nis_attr 構造体の配列で、 要素の数は numattrs です。戻される構造体 db_result には、 db_next_entry() または db_reset_next_entry() の引 き数として使用される構造体 db_next_desc が入っています。 db_next_desc はオペークハンドルとしてのみ使 用します。 db_free_result() を使用すると、戻された db_result 構造体を解放することができます。 db_next_entry() は、 next_handle で指示された次のエントリのコピーを戻します。最初に db_first_entry() を呼 び 出 し、 続 い て 一 連 の db_next_entry() を 呼 び 出 す こ と に よっ て、 テー ブ ル 全 体 の エ ン ト リ や、 db_first_entry() に指定した属性を満たすエントリを得ることができます。 db_free_result() を使用すると、戻 された db_result 構造体を解放することができます。 db_reset_next_entry() は、 next_handle で指示されているように db_first_entry()/db_next_entry() シーケンスを 終了し、このシーケンスを維持するためのすべてのリソースを解放します。 db_reset_next_entry() を呼び出し た後で、 同じ next_handle を使用して db_next_entry() を呼び出しても、正しく処理されず DB_BADQUERY が 戻されます。 db_free_result() を使用すると、戻された db_result 構造体を解放することができます。 db_list_entries() は、指定された属性を満たすエントリのコピーを戻します。 db_free_result() を使用すると、 戻された db_result 構造体を解放することができます。 attrs は nis_attr 構造体の配列で、要素数は numattrs で す。 db_remove_entry() は、指定された属性を満たすエントリをすべて削除します。 db_free_result() を使用する HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-21 nis_db(3N) nis_db(3N) と、戻された db_result 構造体を解放することができます。 attrs は nis_attr 構造体の配列で、要素数は numattrs です。 db_add_entry() は、指定されたオブジェクトのコピーを指定されたテーブルに追加し、指定された属性が指示 するオブジェクトを置き換えます。属性が複数のオブジェクトを示す場合は、 DB_NOTUNIQUE が戻されま す。属性でオブジェクトが指示されていない場合は、単にオブジェクトが追加されます。 attrs は nis_attr 構 造体の配列で、要素数は numattrs です。 db_free_result() を使用すると、戻された db_result 構造体を解放する ことができます。 db_table_exists() を使用すると、NIS+ サービスはテーブルがあるかどうかを効率的に検出できるようになりま す。この関数を使用すると、クライアントに対する応答時間が増え、サーバーの負荷が少なくなります。 サービスは db_unload_table() を使用して、現在使用されていないテーブルのアンロードやアクティブ解除を行 います。サービスはテーブルのアクセス状況を内部的に記録しておき、一定期間アクセスされていないテーブ ルをアンロードします。あまりアクセスされていないテーブルをアンロードすることによって、サービスはシ ステムリソースを最少に抑え、効率的に操作できるようにします。 db_checkpoint() は、さらに効率的になるようテーブルの内容を編成し直します。データベースの種類に応じて チェックポイントの意味が違っていることがあります。チェックポイントがテーブルの論理的な内容に影響を 及ぼすことはなく、チェックポイント後であっても、操作と照会は以前と同じ結果となるはずです。例えば、 ログベースのシステムでは、チェックポイントは、前回のチェックポイント以降に蓄積した更新のログエント リをテーブルに組み込むことを意味します。 db_free_result() は、このマンページに掲載している db_result 構造体を戻す各種関数で割り当てられたスペー スを解放します。 db_standby() は、データベースマネージャの通知呼び出しです。この呼び出しは、アクティビティの速度が低 下したときに、ファイル記述子などの不要なリソースを解放するようデータベースに通知します。 マルチスレッドの使用法 Thread Safe : No Cancel Safe : No Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことはできません。 プログラミング このライブラリの大半のルーチンは NIS+ 名を使用して、ユーザーが希望するオブジェクトを識別します。 1 つのサーバーはいくつものネーム空間に対して機能し、ドメイン名を比較することによって要求されたオブ ジェクトを区別するので、名前は、データベースに渡される前に標準形にしておく必要があります。 Section 3-22 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 nis_db(3N) nis_db(3N) 診断 DB_SUCCESS 照会または操作が正しく終了し、ステータスが戻されています。 DB_NOTFOUND 名前、または引き数に指定されているエントリがありません。 DB_NOTUNIQUE テーブルからエントリを削除しようとしましたが、指定がユニークではありません。 DB_BADQUERY データベースにサブミットされた照会が無効です (例えば、存在していないフィールド を指定しているなど)。 DB_BADTABLE テーブルが破壊されています。 DB_BADOBJECT オブジェクトのフィールドが追加対象のテーブルのフィールドと合っていません。 DB_MEMORY_LIMIT メモリ不足のために、要求された操作を完了できません。 DB_STORAGE_LIMIT ファイルの記憶領域不足のために、要求された操作を完了できません。 DB_INTERNAL_ERROR 要求された操作の実行途中で内部エラーが検出されました (プログラミングエラーまた は回復不能な例外)。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 rpc.nisd(1M), nis_objects(3N), nisfiles(4). HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-23 nis_error(3N) nis_error(3N) 名称 nis_error, nis_sperrno, nis_perror, nis_lerror, nis_sperror, nis_sperror_r − NIS+ エラーメッセージの表示 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <rpcsvc/nis.h> char *nis_sperrno(const nis_error status); void nis_perror(const nis_error status, const char *label); void nis_lerror(const nis_error status, const char *label); char *nis_sperror_r(nis_error status, char *label, char * buf ); char *nis_sperror(const nis_error status, const char *label); 説明 これらの関数は NIS+ ステータス値をテキスト文字列に変換します。 nis_sperrno() は、エラーの文字列定数を指すポインタを戻します。 nis_perror( ) は、 status に対応するエラーメッセージを標準エラーの ‘‘label: エラーメッセージ’’ としてプリン トします。 nis_lerror() は、エラーテキストを LOG_ERR のレベルで syslog(3C) に送ります。 関数 nis_sperror_r() は、使用可能な文字列、または strdup() 関数 ( string (3C) を参照) でコピーできる文字列 を指すポインタを戻します。呼び出し側は、エラー文字列を保持できる大きさの文字列バッファ buf を用意す る必要があります (バッファサイズは 128バイトで十分です)。 最後の関数 nis_sperror() は nis_sperror_r() とよく似ていますが、各呼び出しで再利用可能なバッファを指すポ インタとして文字列が戻されます。 nis_sperror_r() はシングルスレッドとマルチスレッドのどちらのプログラ ムにも適しているので、 nis_sperror_r() の方を使用するようにしてください。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Section 3-24 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nis_error(3N) Async-signal Safe : nis_error(3N) No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では、fork() の後と exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではあ りません。非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリケーションでこれら の関数を呼び出さないようにしてください。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 niserror(1), string(3C), syslog(3C). HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-25 nis_groups(3N) nis_groups(3N) 名称 nis_groups, nis_ismember, nis_addmember, nis_removemember, nis_creategroup, nis_destroygroup, nis_verifygroup, nis_print_group_entry, nis_map_group, __nis_map_group − NIS+ グループの操作関数 構文 cc [ flag . . . ] file. . . -lnsl [ library. . . ] #include <rpcsvc/nis.h> bool_t nis_ismember(const nis_name principal, const nis_name group); nis_error nis_addmember(const nis_name member, const nis_name group); nis_error nis_removemember(const nis_name member, const nis_name group); nis_error nis_creategroup(const nis_name group, const u_long flags); nis_error nis_destroygroup(const nis_name group); void nis_print_group_entry(const nis_name group); nis_error nis_verifygroup(const nis_name group); 説明 これらの関数は NIS+ グループを操作します。 NIS+ クライアントおよびサーバで使用され、グループオーソ ライゼーション オブジェクトへのインタフェースとして機能します。 NIS+ グループ名の構文は NIS+ オブジェクト名とよく似ていますが、別のネーム空間に属します。 "a.b.c.d."と いうグループ名は、"a.groups_dir.b.c.d."という NIS+ グループオブジェクト名に相当します。ここで説明する関 数にはすべてグループ名を使用し、グループオブジェクト名は使用しません。 グループメンバーには以下の 3種類があります。 • • 明示メンバーは "wickedwitch.west.oz." など、通常の NIS+ 主体名です。 暗黙 ("ドメイン ") メンバーは、"*.west.oz."のように表し、指定されたドメインのすべての主体がこ のメンバーに属することを意味します。ワイルドカードを他の方法で使用することはできません。 したがって、 "wickedwitch.*.oz." や "wickedwitch.west.*."は無効です。指定されたドメインのサブド メインにある主体は 含まれない ことに注意してください。 • 再帰 ("グループ ") メンバーは、 "@cowards.oz."のように表し、別のグループを参照します。そのグ ループに属するすべての主体が対象となります。 どのメンバーも前にマイナス符号 (’−’) を付けることによって、 否定 することができます。したがって、グ ループには明示メンバー、暗黙メンバー、再帰メンバー、明示否定メンバー、暗黙否定メンバー、再帰否定メ ンバーがあることになります。 主体は、グループの 1つ以上の非否定メンバーに属し、どの否定メンバーにも属していないときに、グループ に属するものとみなされます。 Section 3-26 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nis_groups(3N) nis_groups(3N) nis_ismember() 関数は、 principal が group に属することを確認できた場合に TRUE を戻し、確認できない場合 に FALSE を戻します。 nis_addmember() 関数と nis_removemember() 関数はそれぞれメンバーの追加と削除を行います。メンバーが 有効かどうかのチェックは行いません。ユーザーは目的のグループに対して読み取りアクセス権と変更アクセ ス権を持っていなければなりません。 nis_creategroup() 関数と nis_destroygroup() 関数はそれぞれ グループオブジェクトの作成と消去を行います。 ユーザーは適切なドメインの groups_dir ディレクトリに対して作成アクセス権または消去アクセス権を持って いなければなりません。 nis_creategroup() へのパラメータ flags は現在のところ使用されておらず、ゼロに設 定する必要があります。 nis_print_group_entry() 関数は、グループのメンバーを標準出力にリストします。 nis_verifygroup() 関数は、指定されたグループがある場合に NIS_SUCCESS を戻し、ない場合にエラーコード を戻します。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では、 fork() の後と exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではあ りません。非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリケーションでこれら の関数を呼び出さないようにしてください。 例 単純なメンバーシップ確認 tinman.oz.、 lion.oz.、 scarecrow.oz. の各メンバーを持つ sadsouls.oz. というグループがある場合に、以下の関 数を呼び出します。 bool_var = nis_ismember("lion.oz.", "sadsouls.oz."); この関数は 1 (TRUE) を戻します。次に、以下の関数を呼び出します。 bool_var = nis_ismember("toto.oz.", "sadsouls.oz."); この関数は 0 (FALSE) を戻します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-27 nis_groups(3N) nis_groups(3N) 暗黙メンバーシップ wickedwitch.west.oz. と *.monkeys.west.oz. のメンバーを持つ baddies.oz. というグループがある場合に、以下 の関数を呼び出します。 bool_var = nis_ismember("hulk.monkeys.west.oz.", "baddies.oz."); monkeys.west.oz. ドメインから得られるどの主体も暗黙グループ *.monkeys.west.oz. に属するので、この関数 は 1 (TRUE) を戻します。次に以下の関数を呼び出します。 bool_var = nis_ismember("hulk.big.monkeys.west.oz.", "baddies.oz."); この関数は 0 (FALSE) を戻します。 再帰メンバーシップ toto.kansas、 @sadsouls.oz.、 @baddies.oz. の各メンバーを持つ goodandbad.oz. というグループと、前に定義 したグループの sadsouls.oz. と baddies.oz. がある場合に、以下の関数を呼び出します。 bool_var = nis_ismember("wickedwitch.west.oz.", "goodandbad.oz."); wickedwitch.west.oz. は、 goodandbad.oz. グループに再帰的に含まれた baddies.oz. グループのメンバーであ るので、この関数は 1 (TRUE) を戻します。 注意 これらの関数が受け付けるのは完全修飾された NIS+ 名だけです。 グループは、 group_obj 構造体で定義された可変部のある NIS+ オブジェクト (nis_objects(3N) を参照) で表さ れます。グループには以下のフィールドが含まれています。 u_long gr_flags; /* Interpretation Flags (currently unused) */ struct { u_int gr_members_len; nis_name *gr_members_val; } gr_members; /* Array of members */ NIS+ のサーバとクライアントは拡張されたグループのローカルキャッシュを維持して、グループのメンバー シップをチェックする際のパフォーマンスを高めます。グループのメンバーシップを変更しても、グループの キャッシュが期限切れとなるかまたはグループのキャッシュを明示的にフラッシュするまで、そのキャッシュ を維持するサーバとクライアントには変更が認識されません。サーバのキャッシュは、タグ TAG_GCACHE と 1 の値を指定して nis_servstate() 関数を呼び出すことによって、プログラムでフラッシュすることができま す。 現在のところ、 nis_ismember()、 nis_print_group_entry()、および nis_verifygroup() がマスターサーバのみか ら答えを得る方法はありません。 Section 3-28 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 nis_groups(3N) nis_groups(3N) 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 nisgrpadm(1), nis_objects(3N) HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-29 nis_local_names(3N) nis_local_names(3N) 名称 nis_local_names, nis_local_directory, nis_local_host, nis_local_group, nis_local_principal − NIS+ ローカル名 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <rpcsvc/nis.h> nis_name nis_local_directory(void); nis_name nis_local_host(void); nis_name nis_local_group(void); nis_name nis_local_principal(void); 説明 これらの関数は、現在のプロセスに対応するデフォルトの NIS+ 名をいくつか戻します。 nis_local_directory() は、当該マシンの NIS+ ドメイン名を戻します。現在のところ、これは sysinfo() システム コールで戻される Secure RPC ドメインと同じです。 nis_local_host() は、現在のマシンの NIS+ 名を戻します。これは、ホストの完全修飾名で、 gethostname(2) 関 数で戻される値と同じになるか、部分修飾されているホスト名と NIS+ ディレクトリの名前を連結した値にな ります。マシンの名前とアドレスがローカルの NIS+ ディレクトリにない場合は、そのホスト名を完全修飾す る必要があります。 nis_local_group() は、現在の NIS+ グループ名を戻します。現在のところ、これは環境変数 NIS_GROUP をグ ループ名に設定することによって可能です。 nis_local_principal() は、呼び出し側のプロセスの有効な UID に対応するユーザーの NIS+ 主体名を戻します。 この関数は、デフォルトのドメインの cred.org_dir というテーブルにある LOCAL 型の資格認定 ( nisaddcred (1M) を参照) 見つけ出すことによって、有効な UID を主体名にマップします。 注 : これらの関数で戻される結果は NIS+ ライブラリのあるデータ構造を指すポインタです。したがって、結 果は読み取り専用で、変更できません。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では、 fork() の後と exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではあ Section 3-30 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nis_local_names(3N) nis_local_names(3N) りません。非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリケーションでこれら の関数を呼び出さないようにしてください。 環境 NIS_GROUP この変数にはローカルの NIS+ グループの名前が入っています。この名前が完全修飾名でない 場合、 nis_local_directory() で戻される値には完全修飾名にするための連結が行われます。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 nisdefaults(1), nisaddcred(1M), gethostname(2), nis_names(3N), nis_objects(3N). HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-31 nis_names(3N) nis_names(3N) 名称 nis_names, nis_lookup, nis_add, nis_remove, nis_modify, nis_freeresult − NIS+ ネーム空間の関数 構文 cc [ flag . . . ] file. . . -lnsl [ library. . . ] #include <rpcsvc/nis.h> nis_result *nis_lookup(const nis_name name, const u_long flags); nis_result *nis_add(const nis_name name, const nis_object *obj); nis_result *nis_remove(const nis_name name, const nis_object *obj); nis_result *nis_modify(const nis_name name, const nis_object *obj); void nis_freeresult(nis_result *result); 説明 これらの関数を使用して、NIS+ エントリ以外の NIS+ オブジェクト ( nis_objects (3N) を参照) を見つけ出し、 操作します。 NIS+ テーブル内にある NIS+ エントリオブジェクトを見つけ出すには、 nis_subr(3N) を参照し てください。 nis_lookup() は NIS+ 名を解決し、 NIS+ サーバーから該当するオブジェクトのコピーを戻します。 nis_add() は NIS+ ネーム空間にオブジェクトを追加し、 nis_remove() は NIS+ ネーム空間からオブジェクトを削除しま す。 nis_modify() は既にネーム空間にあるオブジェクトの特定の属性を変更します。 これらの関数は、 NIS+ ディレクトリ、 NIS+ テーブル、NIS+ グループ、または NIS+ プライベートの各オブ ジェクトを参照する名前とともに使用しなければなりません。 NIS+ エントリオブジェクトを参照する名前の 場合は、 nis_subr(3N) にリストしている関数を使用する必要があります。 nis_freeresult() は、 nis_result 構造体に関連するすべてのメモリを解放します。 NIS+ の結果に関連するメモリ を解放するには、必ずこの関数を呼び出します。 nis_lookup()、 nis_add()、 nis_remove() 、および nis_modify() は す べ て、 nis_result 構 造 体 を 指 す ポ イ ン タ を 戻 し ま す。 こ の 構 造 体 は、 使 用 が 終 わ り し だ い、 nis_freeresult() を呼び出して 必ず 解放しなければなりません。この構造体に戻されたオブジェクトをいくつ か保持したい場合は、 nis_clone_object(3N) ( nis_subr (3N) を参照) を使用してコピーするようにします。 nis_lookup() は 2つのパラメータを受け付けます。1つは、 name に指定する解決の対象とするオブジェクトの 名前であり、もう 1つは、以下に説明しているフラグパラメータの flags です。オブジェクト名はインデックス 名以外の NIS+ 名 ( nis_tables (3N) を参照) に対応するものでなければなりません。このグループの関数の中 で、 nis_lookup() 関数 だけに部分修飾名を指定することができます。パラメータ name が部分修飾名のときに は、呼び出しでフラグ EXPAND_NAME を指定する 必要があります。このフラグを省略すると、この関数は NIS_BADNAME のエラーで異常終了します。 flags パラメータには、以下に示すフラグを論理 OR で結んで指定します。 Section 3-32 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nis_names(3N) FOLLOW_LINKS nis_names(3N) このフラグが指定されていると、クライアントライブラリはリンクに「従い」、リンク で指定されているオブジェクトに対して別の NIS+ 参照呼び出しを発行します。リンク されているオブジェクト自体がリンクの場合、 リンク 型オブジェクト以外のオブジェ クトが見つかるまで、またはライブラリが 16 個のリンクに従うまでこのプロセスが繰 り返されます。 HARD_LOOKUP このフラグが指定されていると、クライアントライブラリはサーバーからの答えを得る まで参照を試みます。このフラグを使用すると、少なくとも 1つの NIS+ サーバーが使 用できるようになるまでライブラリがブロックされます。ネットワークの接続性が低下 している場合は、相当時間がかかることがあります。 NO_CACHE このフラグが指定されていると、クライアントライブラリはオブジェクトキャッシュを どれもバイパスし、NIS+ マスターサーバーまたはそのレプリカの 1つからオブジェクト を得ます。 MASTER_ONLY このフラグが指定されていると、クライアントライブラリはオブジェクトキャッシュや ドメインのレプリカをどれもバイパスし、オブジェクトのドメインの NIS+ マスター サーバーからオブジェクトをフェッチします。これによって、パフォーマンスが低下す る可能性はあるものの、戻されるオブジェクトは確実に最新のものになります。マス ターサーバーが使用できない場合や、物理的に距離が離れている場合は、異常終了しま す。 EXPAND_NAME このフラグが指定されていると、クライアントライブラリは、環境変数 NIS_PATH を使 用する nis_getnames() 関数 ( nis_subr(3N) を参照) を呼び出して部分修飾名を展開しま す。 ステータス値を ASCII テキストに変換するには、 nis_sperrno() 関数 ( nis_error(3N) を参照) を使用します。 戻された結果の objects 配列には、要求で解決されたオブジェクトがいくつも入っていることがあります。 FOLLOW_LINKS フラグを指定した場合は、対象とするリンクがテーブル内でポイントしているときに、関数 が正しく終了することによっていくつものエントリが戻されることがあります。リンクに従う際にエラーが発 生すると、objects 配列にはリンクオブジェクトのコピーがそのまま入ります。 nis_add() 関数はオブジェクト obj を受け付け、それを name の名前で NIS+ ネーム空間に追加します。この操 作は、要求を出すクライアントがオブジェクトの追加先とするドメインに対して 作成 アクセス権を持ってい ない限り、異常終了します。パラメータ name には完全修飾の NIS+ 名を指定する必要があります。オブジェ クトメンバーの zo_name と zo_domain がこの名前を使用して作成されます。既に同じオブジェクトがあれば、 この操作は異常終了します。そのため、別のプロセスによって追加された別のオブジェクトを誤って上書きし てオブジェクトを追加するようなことはありません。 nis_remove() 関数は name で指示された名前を持つオブジェクトを NIS+ ネーム空間から削除します。この要求 を出すクライアントは、オブジェクトのあるドメインに対して 消去 アクセス権を持っていなければなりませ ん。指定したオブジェクトがリンクの場合は、そのポイント先のオブジェクトではなく、リンクが削除されま す。パラメータ obj が NULL 以外のときは、削除対象のオブジェクトのコピーを指しているものとみなされま HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-33 nis_names(3N) nis_names(3N) す。この場合、渡されたオブジェクトと同じ識別子のオブジェクトがサーバー上にないときは、 NIS_NOTSAMEOBJ のエラーで操作が異常終了します。そのため、目的のオブジェクトだけの削除が確実に行われるよ うになります。パラメータ name には完全修飾の NIS+ 名を指定する必要があります。 nis_modify() 関数は name で指示されたオブジェクトを、 obj が指すオブジェクト中のフィールド値に変更しま す。このオブジェクトには、ネーム空間にある変更対象のオブジェクトのコピーが入っていなければなりませ ん。渡されたオブジェクトの識別子がネーム空間にある変更対象のオブジェクトの識別子と一致しない場合、 この操作はエラー NIS_NOTSAMEOBJ で異常終了します。 注 : 通常、 nis_object 構造体のメンバー zo_name の内容は、 name パラメータで渡された名前から作成されま す。ただし、NULL 以外の場合には、クライアントライブラリは zo_name メンバー中の名前を使用してオブ ジェクトの名前変更操作を実行します。この名前に ‘.’(ドット) がある場合は、 必ず 引用符で囲まなければな りません。この条件を満たしていないと、操作は異常終了し、NIS_BADNAME のエラーコードが戻されます。 結果 関数は、 nis_result 型の構造体を指すポインタを戻します。 struct nis_result { nis_error status; struct { u_int objects_len; nis_object *objects_val; } objects; netobj cookie; u_long zticks; u_long dticks; u_long aticks; u_long cticks; }; statusメンバーには操作のエラーステータスが入ります。エラーを説明するテキストメッセージを得るには、 nis_sperrno() 関数 ( nis_error(3N) を参照) を呼び出します。 objects 構造体には 2つのメンバーが含まれています。 1つは objects_val で、 nis_object 構造体の配列です。も う 1つは objects_len で、配列内のセル数を示します。これらのオブジェクトを解放するには nis_freeresult() を 呼び出します。オブジェクトをいくつか保持したい場合は、 nis_clone_object() 関数でコピーしてから オブ ジェクトを nis_destroy_object() 関数 ( nis_server(3N) を参照) で解放します。 nis_object 構造体についての詳細 は、 nis_objects(3N) を参照してください。 要求においてかかった種々の時間の明細も含まれています。これらの時間明細を使用することによって、高速 にアクセスできるようデータの編成方法を調整したり、別の実装方法のデータベースと比較したり ( nis_db(3N) を参照) できます。 Section 3-34 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 nis_names(3N) zticks nis_names(3N) NIS+ サービス自体にかかった時間。サーバーが要求を受信した時点から返答を送信するまで の時間です。 dticks データベースのバックエンドでかかった時間。データベース呼び出しを開始してから結果が戻 るまでの時間です。要求でデータベースを複数回呼び出す場合は、その呼び出しすべてにか かった時間の合計です。 aticks 「アクセラレータ」またはキャッシュにかかった時間。要求を解決するために必要なサーバー の位置を見つけ出す時間も含まれます。 cticks 要求にかかった合計時間。このクロックは、クライアントライブラリに入った時点で開始し、 結果が戻った時点で停止します。この値から他の時間の合計を差し引くと、NIS+ 要求を生成 するためのローカルオーバヘッドを得ることができます。 zticks の値から dticks の値を差し引くと、サービスコード自体にかかった時間となります。 cticks の値から zticks の値と aticks の値の合計を差し引くと、クライアントライブラリ自体にかかった時間となります。注 : 時 間はすべてマイクロ秒で測定されます。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前の子プロセスでこれらの関数を呼び出すことは安全では ありません。非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリケーションでこれ らの関数を呼び出さないようにしてください。 戻り値 クライアントライブラリから種々のエラーや診断が戻ります。一般的なものを以下に説明します。 NIS_SUCCESS NIS_S_SUCCESS 要求は正常終了しました。 要求は正しく操作されましたが、戻されたオブジェクトはサーバーから直接戻され たものではなく、オブジェクトキャッシュからのものです。オブジェクトキャッ シュからのオブジェクトを求めているのではない場合、参照関数を呼び出すときに フラグ NO_CACHE を指定する必要があります。 NIS_NOTFOUND NIS_CACHEEXPIRED 指定のオブジェクトはネーム空間に存在しません。 戻されたオブジェクトは 期限切れのオブジェクトキャッシュからのものです。有 効期間値はゼロになっており、オブジェクトは変更されている可能性があります。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-35 nis_names(3N) nis_names(3N) フラグ NO_CACHE を参照関数に渡すと、期限の切れていないオブジェクトのコ ピーを得る操作が行われます。 NIS_NAMEUNREACHABLE 指定のオブジェクトのディレクトリ用サーバーに到達できません。この状態は、 ネットワークパーティションまたはすべてのサーバーがクラッシュしたときに発生 することがあります。 HARD_LOOKUP フラグを参照してください。 NIS_UNKNOWNOBJ NIS_TRYAGAIN 戻されたオブジェクトは認識できない型になっています。 接続されているサーバーがビジーで、ユーザーからの要求を取り扱うことができま せん。 追加、 削除、および 変更操作の場合は、ディレクトリのマスターサーバー が利用できないか、データベースのチェックポイントが進行中のときにこのフラグ が戻されます。サーバーが内部状態を更新しているときにも戻されることがありま す。また、 nis_list() の場合は、クライアントがコールバックを指定したとき、 サーバーがコールバックを扱うためのリソースを十分に持っていない場合に戻され ます。 NIS_SYSTEMERROR 要求を処理しようとしたときに、汎用システムエラーが発生しました。一般的な原 因は、サーバーがクラッシュしたか、データベースが破壊されたことです。 syslog のレコードをチェックし、サーバーからのエラーメッセージを調べてください。 NIS_NOT_ME サーバーに要求が出されましたが、そのサーバーは対象とする名前に対して機能し ません。通常、このようなことは起こりませんが、サーバーの組み込み位置メカニ ズムを使用していない場合に、ユーザー独自のメカニズムが壊れているときに発生 することがあります。 NIS_NOMEMORY 通常は、致命的な結果となります。サービスでヒープスペースが不足していること を意味します。 NIS_NAMEEXISTS 既に存在する名前を追加しようとしました。名前を追加するには、まず既存の名前 を削除してから新しいオブジェクトを追加するか、既存のオブジェクトの同一名を 変更します。 NIS_NOTMASTER NIS_INVALIDOBJ レプリカサーバー上のデータベースを更新しようとしました。 obj でポイントされているオブジェクトは有効な NIS+ オブジェクトではありませ ん。 NIS_BADNAME NIS_LINKNAMEERROR 関数に渡された名前は有効な NIS+ 名ではありません。 渡された名前は リンク型のオブジェクトとして解決されましたが、そのリンクの 内容が無効な名前をポイントしています。 NIS_NOTSAMEOBJ 削除対象のオブジェクトが要求で渡されたオブジェクトと同じではないので、ネー ム空間からオブジェクトを削除する操作が打ち切られました。 Section 3-36 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 nis_names(3N) nis_names(3N) NIS_NOSUCHNAME このハードエラーは、テーブルオブジェクトには指定されたディレクトリがないこ とを示します。このエラーは、当該テーブルに機能するサーバーの親サーバーが、 テーブルの入っているディレクトリに関する情報を持っていないときに発生しま す。 NIS_NOSUCHTABLE 指定のテーブルがありません。 NIS_MODFAIL 変更が異常終了しました。 NIS_FOREIGNNS 名前が完全には解決されていない可能性があります。関数に渡された名前が NIS+ 名前ツリーの外側にあるネーム空間で解決されると、このエラーと一緒に ディレ クトリ型の NIS+ オブジェクトが戻されます。このオブジェクトにはネーム空間の 型と、そのネーム空間内のサーバーの接続情報が入っています。 NIS_RPCERROR これは致命的なエラーで、何らかの形で RPC サブシステムが異常終了したことを 示します。通常は、RPC 要求が異常終了した理由を示す syslog(3C) メッセージが あるはずです。 環境 NIS_PATH この変数は、フラグ EXPAND_NAME を設定したときに、 nis_lookup() で使用される検索パ スとなります。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 注意 オブジェクトの名前を変更することによってオブジェクトが別のドメインとなるような場合は、名前を変更で きません。 テーブルオブジェクトのスキーマを変更することはできません。 参照 nis_error(3N), nis_objects(3N), nis_server(3N), nis_subr(3N), nis_tables(3N) HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-37 nis_objects(3N) nis_objects(3N) 名称 nis_objects − NIS+ オブジェクトのフォーマット 構文 cc [ flag . . . ] file. . . -lnsl [ library. . . ] /usr/include/rpcsvc/nis_objects.h 説明 共通属性 NIS+ サービスでは、使用されるオブジェクトの内容を保持するために可変要素レコードとなっている構造体が 使用されます。このようなオブジェクトすべてが持っている一連の属性を定義する共通の構造体を、すべての オブジェクトで共用します。 nis_object 構造体には以下のメンバーが含まれています。 typedef char *nis_name; struct nis_object { nis_oid zo_oid; nis_name zo_name; nis_name zo_owner; nis_name zo_group; nis_name zo_domain; u_long zo_access; u_long zo_ttl; objdata zo_data; }; この構造体の最初のメンバー zo_oid は、当該サーバ上のオブジェクトの当該インスタンスを一意に識別する 64 ビットの数値です。このメンバーの内容は、オブジェクトの作成時にサーバによって書き込まれ、オブジェ クトの変更時にサーバによって変更されます。このメンバーをオブジェクトの名前およびドメインと一緒に使 用すると、 NIS+ ネーム空間全体のオブジェクトを一意に識別することができます。 2 番目のメンバー zo_name には、オブジェクトのリーフ名が入ります。この名前は ‘.’ (ドット) で終わってい ては なりません。ネーム空間にオブジェクトを作成または追加すると、関数に渡された名前からクライアント ライブラリが自動的にこのフィールドとドメイン名フィールドに内容を書き込みます。 zo_domain には当該オブジェクトが属する NIS+ ドメインの名前が入ります。この情報は、オブジェクトの親 関係をキャッシュから追跡する際に効果的です。このメンバーと一緒に zo_name および zo_oid の両メンバー を使用すると、オブジェクトを一意に識別することができます。このような構造となっているので、以下の コードを使用すればいつでもオブジェクトの名前を再構築することができます。 sprintf(buf,"%s.%s", obj→zo_name, obj→zo_domain); zo_owner と zo_group のメンバーにはオブジェクトの主所有者とグループ所有者の NIS+ 名がそれぞれ入りま す。どちらの名前も NIS+ の完全修飾名でなければ なりません。ただし、各名前を個別に使用しても、それが Section 3-38 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nis_objects(3N) nis_objects(3N) 表すオブジェクトを直接指示することはできません。これは、 NIS+ が発信する情報を保存するとき、 NIS+ 自体を使用するためです。 zo_ownerメンバーには、 principal.domain の形式で NIS+ の完全修飾名が入ります。この名前を NIS+ 主体名と 呼び、資格テーブルにある認証情報を識別する際に使用されます。サーバは以下の形式の検索照会を作成しま す。 [cname= principal],cred.org_dir.domain. principal で使用される、その principal 用の全 RPC 認証情報が、照会によってサーバへ戻ります。 RPC 要求が サーバに届くと、その要求から認証の種類が抽出されて、クライアントの NIS+ 主体名の検出に使用されま す。例えば、クライアントが AUTH_DES の認証を使用している場合は、要求を出したユーザーのネットワー ク名つまり ネット名 が認証の認定情報に含まれます。このネット名は以下の形式となっています。 unix.UID@domain その後で NIS+ サーバは認定データベースに関する照会を以下の形式で作成します。 [auth_name=netname,auth_type=AUTH_DES],cred.org_dir.domain. この照会により、最初のカラムに主体名が入ったエントリが戻ります。この NIS+ 主体名は、NIS+ オブジェク トのアクセスを制御するために使用されます。 オブジェクトのグループ所有者は別の方法で取り扱われます。グループ所有者のメンバーはオプション (使用 しない場合は空文字列) ですが、使用する場合には完全修飾名を指定してください。グループ名の形式は以下 の通りです。 group.domain. サーバはこの名前を以下の形式の名前にマッピングします。 group.groups_dir.domain. このマッピングの目的は、NIS+ グループ名がユーザー指定のドメイン名またはテーブル名と衝突しないよう にすることです。例えば、ドメインが engineering.foo.com. という名前の場合、これと同じ名前の NIS+ グルー プ名を engineering のメンバーとして表すには、マッピングしない限り不可能です。グループの内容はオブジェ クトの zo_owner 名で使用される NIS+ 主体名のリストです。詳細は、 nis_groups(3N) を参照してください。 zo_accessメンバーには、当該オブジェクトに割り当てられたアクセス権のビットマスクが入ります。 4つのア クセス権が定義されており、他にも将来のために 4つが予約され、この値がゼロのときアクセス権が与えられ ます。この 8つのアクセス権は、4つのカテゴリのクライアントに与えることができます。この 4つのカテゴリ とは、オブジェクトの所有者、オブジェクトのグループ所有者、認証されたすべてのクライアント (world)、認 証されていないすべてのクライアント (nobody) です。 ‘‘nobody’’ に与えられるアクセス権は、実際は、認証さ れたクライアントと認証されていないクライアントのだれにでも与えられるアクセス権であることに注意して ください。 zo_ttl メンバーには、該当オブジェクトがキャッシュ内に置かれる「寿命」の秒数が入ります。この値はオブ HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-39 nis_objects(3N) nis_objects(3N) ジェクトの有効期間 (ttl) と呼ばれます。この値はグループオブジェクトやディレクトリ (ドメイン) オブジェク トの場合特に重要です。オブジェクトがキャッシュされると、現在時刻が zo_ttl の値に加算されます。その 後、キャッシュされたオブジェクトが使用されるたびに、 zo_ttl の時間が現在時刻と比較されます。現在時刻 が zo_ttl の時間を超えると、オブジェクトは期限切れとなり、キャッシュコピーは使用されません。 ttl の設定を工夫してください。 ttl はオブジェクトの「半生」、つまりオブジェクトが変更されるまでの時間 の半分と考えることができます。 ttl を大きな値に設定した場合は、オブジェクトが長い時間キャッシュに存在 するので有利です。大きな値を設定した場合の欠点は、オブジェクトに変更があったとき、キャッシュがその オブジェクトの古いコピーをフラッシュするのに長い時間がかかることです。小さい値に設定した場合は、こ の欠点と利点が逆になります。一般に、毎日変更されるようなものは、値を 43200 (12 時間) に設定すると妥当 であり、週ごとに変更されるようなものは、 3024000 に設定するとよいでしょう。値を 0 に設定するとただち に期限切れとなるので、オブジェクトはキャッシュされません。 zo_dataメンバーは、以下のメンバーを含む区分共用体です。 zotypes zo_type; union { struct directory_obj di_data; struct group_obj gr_data; struct table_obj ta_data; struct entry_obj en_data; struct link_obj li_data; struct { u_int po_data_len; char *po_data_val; } po_data; } objdata_u; この共用体は、 zo_type に入っている型の値に基づいて区分されます。現在、NIS+ サービスでは、ディレクト リ、リンク、グループ、テーブル、エントリ、プライベートの 6つの型のオブジェクトが定義されています。 enum zotypes { BOGUS_OBJ NO_OBJ = 0, = 1, DIRECTORY_OBJ = 2, GROUP_OBJ = 3, TABLE_OBJ = 4, ENTRY_OBJ LINK_OBJ PRIVATE_OBJ = 5, = 6, =7 }; typedef enum zotypes zotypes; Section 3-40 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 nis_objects(3N) nis_objects(3N) 各オブジェクト型により、型固有のデータが入る構造体が決まります。最も単純なものはプライベートオブ ジェクトで、オクテットの可変長配列を含みます。オブジェクトの所有者だけがプライベートオブジェクトの 内容を理解できます。次のセクションでは、その他の 5つのオブジェクト型を詳しく説明します。 ディレクトリオブジェクト オブジェクトの 1つ目の型はディレクトリ オブジェクトです。このオブジェクトの可変部は、以下のように定 義します。 PP enum nstype { UNKNOWN = 0, NIS = 1, SUNYP = 2, DNS = 4, X500 = 5, DNANS = 6, XCHS = 7, } typedef enum nstype nstype; struct oar_mask { u_long oa_rights; zotypes oa_otype; } typedef struct oar_mask oar_mask; struct endpoint { char *uaddr; char *family; char *proto; } typedef struct endpoint endpoint; struct nis_server { nis_name name; struct { u_int ep_len; endpoint *ep_val; } ep; u_long key_type; netobj pkey; } typedef struct nis_server nis_server; HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-41 nis_objects(3N) nis_objects(3N) struct directory_obj { nis_name nstype do_name; do_type; struct { u_int do_servers_len; nis_server *do_servers_val; } do_servers; u_long do_ttl; struct { u_int do_armask_len; oar_mask *do_armask_val; } do_armask; } typedef struct directory_obj directory_obj; メインの構造体には do_name、 do_type、 do_servers、 do_ttl、 do_armask の 5 つの主メンバーが含まれま す。クライアントライブラリがディレクトリが指定するサーバとネットワーク接続を行うには、 do_servers 構 造体の情報だけで十分です。 do_nameメンバーには、ドメインに対して有効なネームサービスの型で、認識可能なフォーマットで表わされ たディレクトリまたはドメインの名前が入ります。 NIS+ ドメインの場合は、zo_nameメンバーと zo_domainメ ンバーで構成される名前と同じになります。その他のネームサービスの場合は、そのネームサービスで認識で きる名前となります。例えば、NIS+ ディレクトリ eng.hp.com. 「配下」にある X.500 ネーム空間を記述する ディレクトリオブジェクトの場合には、名前に ‘‘/C=US, /O=Hewlett-Packard, /OU=Engineering/’’ を含めることが できます。記述されているネームサービスの型は、メンバー do_type の値で判断されます。 do_servers 構造体には 2つのメンバーがあります。1つは do_servers_val で、これは nis_server 構造体の配列で す。もう 1つは do_servers_len で、これは配列中のセル数を示します。 nis_server 構造体は、ネームサービスを提供するネットワーク上のマシンに、ネームサービスを使用しないで 接続する場合の情報が入ります。 NIS+ サーバーの場合、この情報には、 name で指定されたマシン名、 pkey で指定された認証用のパブリックキー、可変長配列のエンドポイントがあり、 それぞれが指定されたマシンの rpcbind デーモンのネットワークエンドポイントを表します。クライアントライブラリはこれらのアドレスを使 用して、クライアントとサーバの両方で通信可能な相手に接続します。そして、そのサーバが使用する物理ア ドレスを得るために rpcbind デーモンを参照します。 do_servers リストの先頭のサーバは常にディレクトリのマスターサーバであることに注意してください。 key_type フィールドは、pkey netobj (ネットワークオブジェクト構造体の定義については /usr/include/rpc/xdr.h を参照 ) に保存されているキーの型を記述します。現在サポートされている型は、パブリックキーなしの NIS_PK_NONE と、 Diffie-Hellman 方式のパブリックキーの NIS_PK_DH です。 do_ttlメンバーには、共通属性の zo_ttlメンバーのコピーが含まれます。コピーを使用する理由は、キャッシュ マネージャはディレクトリオブジェクトの可変部だけをキャッシュするからです。 Section 3-42 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 nis_objects(3N) nis_objects(3N) do_armask 構造体には 2つのメンバーがあります。 1つは do_armask_val で、 これは oar_mask 構造体の配列 です。もう 1つは do_armask_len で、これは配列中のセル数を示します。 oar_mask 構造体にも 2つのメンバーがあり、 oa_rights は oa_otype の型のオブジェクトに対して許可されるア クセス権を示します。このアクセス権が配列中にあると、ディレクトリ内の特定のオブジェクト型に対してそ のアクセス権が使用されます。 ディレクトリ内に含まれているオブジェクトに対するアクセス権の認可は、実際には 2 つの層になっていま す。ディレクトリオブジェクト自体が特定のアクセス権を認可 ( ディレクトリを表す nis_object 構造体の zo_accessメンバーを使用) していると、そのディレクトリ内のすべてのオブジェクトにそのアクセスが許可さ れることになります。そうでない場合は、 do_armask 構造体が調べられ、指定したオブジェクト型のアクセス 権が確認されます。このような方式になっているので、ネーム空間の管理者はそれぞれのオブジェクト型を個 別に設定できます。例えば、テーブルを作成するポリシーと、他のディレクトリを作成するポリシーを区別す ることができます。詳細は、 nis+(1) を参照してください。 リンクオブジェクト リンクオブジェクトは、ネーム空間内で 別名 、つまり、シンボリックリンクを提供します。このオブジェク トの可変部は以下のように定義します。 struct link_obj { zotypes li_rtype; struct { u_int li_attrs_len; nis_attr *li_attrs_val; } li_attrs; nis_name li_name; } li_rtypeメンバーには、リンクされるオブジェクトの型が入ります。リンクされるオブジェクトは変更や削除さ れることがあるので、これは単にヒントに過ぎません。 メンバー li_name にはオブジェクト (テーブル、その 他) の完全修飾名を指定します。 NIS+ リンクは、NIS+ ネーム空間内の他のオブジェクトをポイントすることも、 NIS+ テーブル内のエントリ をポイントすることもできます。リンクでポイントされているオブジェクトがテーブルで、メンバー li_attrs に 指定されている属性 (インデックス名 / 値の対) の数がゼロ以外であると、このリンクではテーブルが検索され ます。そして、指定された検索パターンと一致するエントリがすべて戻されます。ここで、フラグ FOLLOW_LINKS の指定がない限り、 nis_lookup(3N) 関数は常にエントリ以外のオブジェクトを戻すことに注意し てください。 グループオブジェクト グループオブジェクトには、NIS+ 主体のメンバーシップリストが含まれています。グループオブジェクトの 可変部は以下のように定義します。 PP struct group_obj { u_long gr_flags; HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-43 nis_objects(3N) nis_objects(3N) struct { u_int gr_members_len; nis_name *gr_members_val; } gr_members; } gr_flagsメンバーには、現在使用されていないフラグが入ります。 gr_members 構造体には、主体のリストが入ります。グループオブジェクトの詳しい操作方法については、 nis_groups(3N). を参照してください。 テーブルオブジェクト NIS+ テーブルオブジェクトは YP マップと似ています。ただし、アクセス制御と NIS+ 対応の変数のスキーマ は異なります。テーブルオブジェクトのデータ構造は、以下のように定義します。 #define TA_BINARY 1 #define TA_CRYPT 2 #define TA_XDR 4 #define TA_SEARCHABLE 8 #define TA_CASE 16 struct table_col { char *tc_name; u_long tc_flags; u_long tc_rights; } typedef struct table_col table_col; struct table_obj { char *ta_type; u_int ta_maxcol; u_char ta_sep; struct { u_int table_col ta_cols_len; *ta_cols_val; } ta_cols; char *ta_path; } ta_typeメンバーには、当該テーブル内のエントリ型を示す文字列が入ります。 NIS+ では、この文字列を自由 に設定できます。ただし、 NIS+ サービスがエントリをテーブルに追加する際には、エントリがこのメンバー で指定されているテーブルと同じ「型」となっているかをチェックします。 ta_cols 構造体には 2つのメンバーがあります。ta_cols_valは Section 3-44 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 nis_objects(3N) nis_objects(3N) table_col 構造体の配列です。この配列の長さは、テーブルのカラム数によって異なります。この長さはテーブ ルの作成時に定義し、 ta_cols_len に保存します。 ta_maxcol にもテーブルのカラム数が入りますが、常に ta_cols_len と同じ長さになります。いったんテーブルを作成すると、この長さのフィールドを変更できませ ん。 ta_sep の文字は、クライアントアプリケーションでテーブル内のエントリを印刷するときに使用する区切り文 字を含みます。この文字は、通常、空白 (‘‘ ’’) かコロン (‘‘:’’) のどちらかです。 ta_path の文字列は、テーブルの連結パスを定義します。この文字列は、該当テーブルの検索でどのエントリも 一致しない場合に使用され、検索対象となるテーブルの完全修飾名をコロンで区切って特定の順序でリストし たものです。このパスは、 nis_list() の呼び出しでフラグ FOLLOW_PATH を指定したときにのみ使用されま す。フラグについては、 nis_tables(3N) を参照してください。 サービスは型をチェックするだけでなく、エントリを追加する前に、そのカラム数がテーブルのカラム数と同 じであるかもチェックします。 各カラムには、 tc_name にある名前、 tc_flags にある一連のフラグ、tc_rights にある一連のアクセス権が関連 付けられています。名前は、そのカラムの内容を示すものでなければなりません。 TA_BINARY フラグは、そのカラム内のデータがテキストではなくバイナリであることを示します。バイナリ データを含んだカラムは、検索されません。 TA_CRYPT フラグは、ネットワーク上を送信する場合に、カラ ム内の情報を前もって暗号化する必要があることを示します。エクスポート版の NIS+ では、このフラグは効 力がありません。 TA_XDR フラグは、カラム内のデータが XDR プロトコルによってコード化されていること をクライアントアプリケーションに指示します。 XDR フラグを指定する際には、 TA_BINARY フラグも一緒 に指定する必要があります。さらに、慣例的に TA_XDR フラグが設定されているカラム名を、そのデータを デコードする XDR 関数の名前にします。 TA_SEARCHABLE フラグは、カラムの内容が検索可能であることを示します。検索可能なカラムの内容はテ キストデータでなければならず、それに関連した名前をつける必要があります。 TA_CASE フラグは、大文字 と小文字を無視してこのカラムを検索させます。テーブル内には、少なくとも検索可能なカラムが 1つはある ようにしてください。また、検索可能なカラムすべての内容を組み合わせたものが、テーブル内でユニークな エントリとなるようにする必要があります。 エントリオブジェクト エントリオブジェクトはテーブルに保存されます。エントリデータを定義するための構造体は、以下の通りで す。 #define EN_BINARY 1 #define EN_CRYPT #define EN_XDR 2 4 #define EN_MODIFIED 8 struct entry_col { u_long ec_flags; HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-45 nis_objects(3N) nis_objects(3N) struct { u_int ec_value_len; char *ec_value_val; } ec_value; } typedef struct entry_col entry_col; struct entry_obj { char *en_type; struct { u_int entry_col en_cols_len; *en_cols_val; } en_cols; } en_typeメンバーには、エントリのデータ型を示す文字列が入ります。 NIS+ サーバは、この文字列とテーブル オブジェクトに指定された型文字列を比較し、違っている場合はそのエントリの更新や変更を許可しません。 en_cols 構造体には en_cols_len と en_cols_val の 2つのメンバーがあります。en_cols_val は entry_col 構造体の 配列です。 en_cols_len には en_cols_val 配列のセル数が入り、テーブル内のカラム数に反映されます。この値は、エント リが格納されているテーブルの table_obj.ta_cols.ta_cols_lenメンバーと常に同じ値になります。 entry_col 構造体には、エントリの各カラムごとの値に関する情報が入ります。 ec_value には、特定の値に関す る情報が入ります。これには 2つのメンバーがあり、 ec_value_val には値自体が、 ec_value_len には値の長さ がバイトで入ります。 entry_col にもメンバー ec_flags があり、エントリ用の一連のフラグが入ります。 ec_flags のフラグは、主に、テーブルにエントリを追加したり、テーブルのエントリを変更する場合に使用さ れます。 EN_CRYPT フラグが設定されているカラムはすべて、ネットワークで送信する前に暗号化されま す。 EN_BINARY フラグが設定されているカラムは、バイナリデータが入っているものとみなされます。サー バは、エントリを追加する前に、テーブルオブジェクト中のカラムでバイナリデータが指定されているかを確 認します。テーブル中のエントリを変更した場合、変更のあるカラムだけをサーバへ送ります。変更対象であ ることをサーバに指示するために、変更する各カラムに EN_MODIFIED フラグを設定する必要があります。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 nis+(1), nis_groups(3N), nis_names(3N), nis_server(3N), nis_subr(3N), nis_tables(3N). Section 3-46 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 nis_ping(3N) nis_ping(3N) 名称 nis_ping, nis_checkpoint − その他の NIS+ ログ管理関数 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <rpcsvc/nis.h> void nis_ping(const nis_name dirname, const u_long utime, const nis_object *dirobj); nis_result *nis_checkpoint(const nis_name dirname); 説明 nis_ping() は、ディレクトリ内で変更があったときに、そのディレクトリのマスターサーバによって呼び出さ れます。パラメータ dirname は、変更があったディレクトリを示します。パラメータ dirobj が NULL である と、この関数は dirname のディレクトリオブジェクトを調べ、その中に入っているレプリカのリストを使用し ます。パラメータ utime には、ディレクトリに加えられた前回の変更のタイムスタンプが入ります。このタイ ムスタンプは、ディレクトリに加えられた更新を検索するときに、レプリカによって使用されます。 nis_ping() を呼び出すことによって、レプリカの更新がスケジュールに入れられます。 ping を受け取った直後 に、一般的には約 2 分後に、レプリカはそのデータベースの前回の更新時刻と ping から送られたタイムスタン プを比較します。 ping のタイムスタンプの方が新しい場合、レプリカはマスターサーバとの接続を確立し、ロ グ (ローカルログに記録) にある前回の更新後に発生した変更をすべて要求します。 nis_checkpoint() を使用して、ログに記録されている情報のうち、まだディスクにチェックポイントされていな いものを強制的にチェックポイントするようサービスに指示します。この関数は、呼び出された時点で、ディ レクトリ中の各テーブルのデータベース、ディレクトリが入っているデータベース、およびトランザクション ログをチェックポイントします。変更が多いディレクトリのチェックポイントには数分間かかることがあるの で、この関数の呼び出しには十分な注意が必要です。チェックポイントプロセスが進行中のときには、当該マ シンがマスターとして機能するすべてのディレクトリの更新ができなくなります。 nis_checkpoint() は nis_result 構造体 ( nis_tables(3N) で説明 ) を指すポインタを戻します。この構造体は、 nis_freeresult() ( nis_names(3N) を参照) で解放する必要があります。戻された結果の中で必要な項目は、ステー タス値と統計情報だけです。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-47 nis_ping(3N) nis_ping(3N) ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 nislog(1M), nis_names(3N), nis_tables(3N), nisfiles(4). Section 3-48 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nis_server(3N) nis_server(3N) 名称 nis_server, nis_mkdir, nis_rmdir, nis_servstate, nis_stats, nis_getservlist, nis_freeservlist, nis_freetags − その他の NIS+ 関数 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <rpcsvc/nis.h> nis_error nis_mkdir(const nis_name dirname, const nis_server *machine); nis_error nis_rmdir(const nis_name dirname, const nis_server *machine); nis_error nis_servstate(const nis_server *machine, const nis_tag *tags, const int numtags, nis_tag **result); nis_error nis_stats(const nis_server *machine, const nis_tag *tags, const int numtags, nis_tag **result); void nis_freetags(nis_tag *tags, const int numtags); nis_server **nis_getservlist(const nis_name dirname); void nis_freeservlist(nis_server **machines); 説明 これらの関数は、NIS+ アプリケーションにさまざまなサービスを提供します。 nis_mkdir() を使用すると、 サーバ machine 上のディレクトリ dirname に NIS+ サービスをサポートするデータ ベースを作成します。この操作が正常終了するとディレクトリオブジェクトが更新され、サーバ machine は指 定 の ディ レ ク ト リ dirname に 対 し て 機 能 す る よ う に な り ま す。 nis_server 構 造 体 に つ い て の 説 明 は、 nis_objects(3N) を参照してください。 nis_rmdir() を使用して、ディレクトリ dirname を指定のマシンから削除します。 machine パラメータは NULL であってはなりません。 nis_server 構造体についての説明は、 nis_objects(3N) を参照してください。 nis_servstate() を使用して、 NIS+ サーバのさまざまな状態変数の設定や読み取りを行います。特に、サーバの 内部デバッギング状態を設定したり照会することができます。 nis_stats() を使用して、サーバの運用に関する統計情報を取り出します。管理者はこの統計情報を追跡して、 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-49 nis_server(3N) nis_server(3N) レプリカを追加したり、ドメインを 2つ以上のサブドメインに分割したりする判断の参考にします。統計情報 を読み取る方法については、 nisstat(1M) を参照してください。 nis_servstate() と nis_stats() はタグリストを使用します。このタグリストは可変長配列の nis_tag 構造体で、こ の長さは numtags パラメータで関数に渡されます。有効な一連のタグは <rpcsvc/nis.h> にインクルードされて いるファイル <rpcsvc/nis_tags.h> で定義されます。タグは NIS+ サービスの実装方法に応じて多種にわたって いるので、サポートされているリストをこのファイルで調べるようにしてください。認識されないタグをサー バに渡すと、 tag_value メンバーが文字列 ‘‘unknown’’ に設定されます。上記のどちらの関数も malloc されたタ グ構造体の *result に結果を戻します。エラーが発生すると、 *result は NULL に設定されます。 tag_value ポ インタは、結果の入っている文字列メモリをポイントします。タグ構造体を解放するには、 nis_freetags() を使 用します。 nis_getservlist() は、リストがヌルで終了する nis_server 構造体を戻します。この構造体は、 dirname のドメイ ンに機能するサーバのリストを表しています。 NIS+ サーバの名前を必要とする関数を呼び出すときは、この リスト中のサーバを使用します。 nis_server 構造体についての説明は、 nis_objects(3N) を参照してください。 nis_freeservlist() は、 nis_getservlist() で戻されたサーバのリストを解放します。この関数が、このリストを解 放できる唯一の手段です。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 参照 nisstat(1M), nis_names(3N), nis_objects(3N), nis_subr(3N). Section 3-50 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nis_subr(3N) nis_subr(3N) 名称 nis_subr, nis_leaf_of, nis_name_of, nis_domain_of, nis_getnames, nis_freenames, nis_dir_cmp, nis_clone_object, nis_destroy_object, nis_print_object − NIS+ サブルーチン 構文 cc [ flag . . . ] file. . . -lnsl [ library. . . ] #include <rpcsvc/nis.h> nis_name nis_leaf_of(const nis_name name); nis_name nis_name_of(const nis_name name); nis_name nis_domain_of(const nis_name name); nis_name *nis_getnames(const nis_name name); void nis_freenames(nis_name *namelist); name_pos nis_dir_cmp(const nis_name n1, const nis_name n2); nis_object *nis_clone_object(const nis_object *src, nis_object *dest); void nis_destroy_object(nis_object *obj); void nis_print_object(const nis_object *obj); 説明 これらのサブルーチンは、NIS+ アプリケーションの開発に役立ちます。 NIS+ 名および NIS+ オブジェクトの どちらにも効果的に操作をします。 最初のグループの nis_leaf_of()、 nis_domain_of()、および nis_name_of() は NIS+ 名を解析する機能を持ってい ます。 nis_leaf_of() は、 NIS+ 名の最初のラベルを戻します。 このルーチンは、オブジェクト名の中に入って いる ‘.’ (ドット) の文字を保護するため二重引用符 ‘"’ を使います。戻される名前には後続のドット文字がない ことに注意してください。このルーチンにグローバル ルートディレクトリ名である "." を渡すと、空文字列が 戻されます。 nis_domain_of() は、オブジェクトがある NIS+ ドメインの名前を戻します。この名前は常に完全修飾の NIS+ 名であり、最後にドットが付いています。 nis_leaf_of() と nis_domain_of() を繰り返して呼び出すことによっ て、 NIS+ 名を個々のコンポーネントに分けることができます。 nis_name_of() を使用して、NIS+ 名のユニークな部分を抽出します。この関数は、ローカルドメインで共通す るすべての名前の後続部分からラベルを取り除きます。したがって、マシンがドメイン foo.bar.baz にあるとき に、 nis_name_of() に 名 前 bob.friends.foo.bar.baz を 渡 す と、 nis_name_of() は ユ ニー ク な 部 分 で あ る bob.friends を戻します。この関数に渡された名前がローカルドメインまたはその子にない場合は、ヌルが戻さ れます。 nis_getnames() は、 name として渡された名前の候補のリストを戻します。渡された名前が完全修飾名でない場 合は、 nis_getnames() はデフォルトの NIS+ ディレクトリ検索パスまたは環境変数 NIS_PATH の設定を用いて HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-51 nis_subr(3N) nis_subr(3N) 名前のリストを生成します。戻されるポインタの配列は NULL ポインタで終了します。この配列に関連するメ モリは、必ず nis_freenames() を呼び出して解放するようにします。 nis_dir_cmp() を使用すると、任意の 2つの NIS+ 名を比較することができますが、この関数は本来、ドメイン を比較するためのものです。この関数の比較は大文字と小文字を区別しないで行われ、 結果は列挙型の name_pos です。この関数に渡された名前が同じであると、 SAME_NAME の値が戻されます。名前 n1 が名前 n2 の直接の祖先であると、 HIGHER_NAME の値が戻されます。同様に、名前 n1 が名前 n2 の直接の子孫で あると、 LOWER_NAME の値が戻されます。名前 n1 が 名前 n2 の直接の祖先でも子孫でもない場合、つま り、2つの名前がネーム空間の別の部分にある兄弟の場合は、 NOT_SEQUENTIAL の値が戻されます。どちら かの名前が有効な名前として解析されなかった場合は、 BAD_NAME の値が戻されます。 2 番 目 の グ ルー プ の nis_clone_object() と nis_destroy_object() は、 オ ブ ジェ ク ト の 操 作 に 使 用 し ま す。 nis_clone_object() は、 NIS+ オブジェクト src の完全なコピー (クローン) を作成します。 dest の値がヌル以外 のときは、オブジェクトのクローンを当該オブジェクト構造体の中に作成し、可変長の配列に必要なメモリを 割り当てます。このパラメータがヌルのときは、クローンの対象とするオブジェクトを指すポインタを戻しま す。 nis_object 構造体についての説明は、 nis_objects(3N) を参照してください。 nis_destroy_object() を使用すると、 nis_clone_object() で作成されたオブジェクトを消去できます。この関数 は、オブジェクトに関連するメモリをすべて解放し、渡されるポインタを解除します。オブジェクトのクロー ンを配列に作成した場合は (nis_clone_object() で dest パラメータを使用)、この関数を使用してもオブジェクト を解放できません。このような場合は、代わりに xdr_free(xdr_nis_object, dest) を使用する必要があります。 nis_print_object() は NIS+ オブジェクト構造体の内容を標準出力にプリントします。この関数は、主に NIS+ プログラムをデバッグする際に使用します。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 多言語化対応 環境変数 NIS_PATH nis_getnames() で使用されるデフォルトの NIS+ ディレクトリ検索パスがこの変数に置き換え られます。この変数には、特定の順序で並べられたディレクトリが ’:’ (コロン) で区切られて リストされています。 Section 3-52 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nis_subr(3N) nis_subr(3N) ’$’ (ドル記号) は特殊な取り扱われ方をします。’$’ で終わるディレクトリ名にはデフォルト のドメインが付加され、’$’ はデフォルトのドメインとグローバルルートの間にある 2 レベル 以上のディレクトリのリストに置き換えられます。デフォルトの NIS+ ディレクトリ検索パス は ’$’ です。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 注意 マルチスレッドアプリケーションでは、 nis_leaf_of()、 nis_name_of()、および nis_clone_object() は結果をス レッド固有のデータとして戻します。 参照 nis_names(3N), nis_objects(3N), nis_tables(3N) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-53 nis_tables(3N) nis_tables(3N) 名称 nis_tables, nis_list, nis_add_entry, nis_remove_entry, nis_modify_entry, nis_first_entry, nis_next_entry − NIS+ テーブル 関数 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <rpcsvc/nis.h> nis_result *nis_list(const nis_name name, const u_long flags, int (*callback)(const nis_name table_name, const nis_object *object, const void *userdata), const void *userdata)); nis_result *nis_add_entry(const nis_name table_name, const nis_object *object, const u_long flags); nis_result *nis_remove_entry(const nis_name name, const nis_object *object, const u_long flags); nis_result *nis_modify_entry(const nis_name name, const nis_object *object, const u_long flags); nis_result *nis_first_entry(const nis_name table_name); nis_result *nis_next_entry(const nis_name table_name, const netobj *cookie); void nis_freeresult(nis_result *result); 説明 これらの関数を使用して、NIS+ テーブルの検索と変更を行います。 nis_list() を使用して、NIS+ ネーム空間に あるテーブルを検索します。 nis_first_entry() と nis_next_entry() を使用して、テーブルのエントリを 1つずつ 列挙します。 nis_add_entry() 、 nis_remove_entry() 、および nis_modify_entry() を使用して、テーブルに保存 されている情報を変更します。 nis_freeresult() を使用して、 nis_result 構造体に関連するメモリを解放しま す。 テーブル内のエントリは、NIS+ インデックス名で指示します。インデックス名は、検索基準とテーブルオブ ジェクトを表す単純 NIS+ 名で構成された複合名です。検索基準は、一連のカラム名と、それに対応する値を 大かっこ ‘[ ]’ で囲んで指定します。インデックス名の指定方法は以下の通りです。 Section 3-54 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nis_tables(3N) nis_tables(3N) [ colname=value, . . . ],tablename リ ス ト 関 数 の nis_list() は、 name パ ラ メー タ の 値 に イ ン デッ ク ス 名 を 受 け 付 け ま す。 こ こ で、 EXPAND_NAME フラグ (以下に説明) を設定していない限り、 tablename は NIS+ の完全修飾名でなければな りません。 2 番目のパラメータ flags は、関数が種々の状態に対応する方法を定義します。このパラメータの 値は、以下に示すフラグを論理式 OR で結合して作成します。 FOLLOW_LINKS name に指定されたテーブルを解決した結果が リンク型オブジェクト ( nis_objects(3N) を参照) となった場合に、このフラグはクライアントライブラリがそのリンクに従ってそのオブジェク トで検索を行うよう指示します。このフラグを設定していないときに、解決された名前がリン ク型であると、エラー NIS_NOTSEARCHABLE が戻されます。 FOLLOW_PATH このフラグは、当該テーブル内でエントリが見つからない場合に、テーブルオブジェクトに指 定されているパスに従ってリスト操作を行うよう指示します。以下の ALL_RESULTS フラグ と一緒に使用すると、検索の結果を問わずテーブルオブジェクトに指定されているパスに従う ようになります。上の FOLLOW_LINKS フラグと一緒に使用すると、パスに指定されている リンク型のテーブルがポイントするテーブルを見つけ出すまで、リンクが続けられます。サー バを使用できないために、パス内のテーブルに達することができない場合、操作の結果は論理 正常終了または論理異常終了のどちらかとなり、パス中のすべてのテーブルが検索されたわけ ではないことが示されます。パス中の名前が無効であったり、実在しないオブジェクトであっ たりすると、その名前は無視されます。 HARD_LOOKUP このフラグは、明確な結果が戻されるまで ( NIS_NOTFOUND など)、指定したテーブルのあ るサーバと接続を続行するよう指示します。 ALL_RESULTS このフラグは、必ず FOLLOW_PATH およびコールバック関数と一緒に使用します。このフ ラグを指定すると、パス中のすべてのテーブルが強制的に検索されます。 name に検索基準を指定していないと (すべてのエントリが戻される)、このフラグによってパ ス中のすべてのテーブルのすべてのエントリが戻されます。 NO_CACHE このフラグを指定すると、クライアントライブラリはどのクライアントオブジェクトのキャッ シュもバイパスし、マスターサーバまたは指定のテーブルのレプリカサーバから直接情報を得 ます。 MASTER_ONLY このフラグは NO_CACHE よりも強力で、クライアントライブラリは特定のテーブルのマス ターサーバ のみ から情報を得ます。これによって、情報が最新のものであることが保証され ます。ただし、大規模のネットワークではマスターサーバに直接接続することでパフォーマン スの低下を引き起こします。 HARD_LOOKUP フラグと一緒に使用すると、マスターサーバ HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-55 nis_tables(3N) nis_tables(3N) が起動して使用できるようになるまで、リスト操作は開始されません。 EXPAND_NAME このフラグを指定すると、クライアントライブラリは nis_getnames() ( nis_local_names(3N) を 参照) を呼び出し、環境変数 NIS_PATH を用いて部分修飾名を拡張します。 RETURN_RESULT 操作が正常終了したときに戻されるオブジェクトのコピーが nis_result 構造体に入ります。 nis_list() の 3つ目のパラメータ callback はオプションのポインタで、 検索によって戻された エントリ型のオブ ジェクトを処理する関数を指します。このポインタが NULL であると、検索基準と一致するすべてのエントリ は nis_result 構造体に戻されます。そうでない場合は、 1つのエントリが戻されるたびに指定された関数が呼び 出されます。この関数は、他にもオブジェクトが必要なときに 0 を戻し、オブジェクトが必要でないときには 1 を戻します。4つ目のパラメータ userdata は、戻されたエントリオブジェクトとともにコールバック関数に渡 されます。クライアントは、コールバック関数がエントリを処理する上で必要な状態情報またはその他の関連 情報を、このポインタを使用して渡すことができます。 nis_add_entry() は、 NIS+ オブジェクトを NIS+ table_name に追加します。追加操作が異常終了したときの対 処方法を指定するには、 flags パラメータを使用します。デフォルト ( flags = 0) では、追加対象のエントリが既 にテーブルにあると、そのまま異常終了となります。 ADD_OVERWRITE フラグを指定すると、オブジェク トが既にあるときには既存オブジェクトが上書き (変更操作) され 、ないときには新しいエントリが追加され ます。 ADD_OVERWRITE フラグを指定したときに、クライアントに既存オブジェクトを変更する権限がな い場合は、この関数はエラー NIS_PERMISSION で異常終了します。 RETURN_RESULT フラグを指定すると、サーバは操作が正常終了したときに結果のオブジェクトのコピーを 戻します。 nis_remove_entry() は指定されたエントリを table_name に指定されたテーブルまたは一連のエントリから削除 します。パラメータ object がヌル以外の場合は、エントリのキャッシュコピーをポイントするものと想定され ます。削除を開始しようとしたときに、削除対象のオブジェクトが object でポイントされているキャッシュオ ブジェクトと同じではないと、操作は NIS_NOTSAMEOBJ のエラーで異常終了します。この関数でオブジェ クトを渡す場合は、エントリ内の値から検索基準を作成できるので、 name で検索基準を省略してもかまいま せん。ただし、オブジェクトを渡さない場合は、 name パラメータの中に検索基準を含める必要があります。 flags 変数がヌルのときに、検索基準がエントリを一意に識別していない場合は、 NIS_NOTUNIQUE のエラー が戻り、操作は打ち切られます。 flags パラメータに REM_MULTIPLE を指定し、オブジェクトそれぞれに対 して削除の権限が与えられている場合は、検索基準と一致するすべてのオブジェクトが削除されます。検索基 準がヌルのときに REM_MULTIPLE フラグを指定すると、テーブル中のすべてのエントリが削除されること に注意してください。 nis_modify_entry() は、 name で指定されたオブジェクトを変更します。 EN_MODIFIED フラグを設定し、パ ラメータ object は各カラムに新しい情報が入っているエントリをポイントしていなければなりません。これら のカラムの内容が、テーブルに保存されているエントリ内の対応するカラムの内容と置き換えられます。変更 操作が正常終了するためには、渡されるエントリは変更されるカラムと同じカラム数、同じ型、および有効な Section 3-56 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 nis_tables(3N) nis_tables(3N) データになっていなければなりません。 flags パラメーターにフラグ MOD_SAMEOBJ を指定すると、 object でポイントされているオブジェクトは本 来のオブジェクトのキャッシュコピーであるとみなされます。渡されたオブジェクトの OID が、サーバーによ りフェッチされたオブジェクトの OID と違っている場合、 NIS_NOTSAMEOBJ のエラーにより操作は異常終 了します。これは、オブジェクトが変更されている場合に、クライアントがオブジェクトを書き込む前に異常 終了する単純な読み取り/変更/書き込みプロトコルを実現するときに使用できます。 フラグ RETURN_RESULT を指定すると、サーバは操作が正常終了したときに結果のオブジェクトのコピーを 戻します。 nis_first_entry() は、テーブルからエントリを 1つずつフェッチします。この操作モードは非常に非効率的であ るので、できる限りコールバックを使用するようにします。対象とするエントリが入ったテーブルを name で 指定します。name に検索基準があっても、無視されます。呼び出し側は、nis_result 構造体内の cookie の値を ローカルの記憶領域にコピーし、 nis_next_entry( ) への引き数として渡すようにする必要があります。 nis_next_entry() は、 table_name で指定されたテーブルから次のエントリを取り出します。この場合、エント リが戻される順序は保証されません。さらに、 nis_next_entry() の呼び出しと呼び出しの間にテーブルの更新 された場合は、 追加または変更されたエントリがクライアントで検出されるかどうかも保証されません。次の エントリとして戻されるはずだったエントリがテーブルから削除された場合は、 NIS_CHAINBROKEN のエ ラーが戻されます。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ントの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 戻り値 関数は、 nis_result 型の構造体を指すポインタを戻します。 struct nis_result { nis_error status; struct { u_int nis_object HP-UX 11i Version 2: August 2003 objects_len; *objects_val; −4− Hewlett-Packard Company Section 3-57 nis_tables(3N) nis_tables(3N) } objects; netobj cookie; u_long zticks; u_long dticks; u_long aticks; u_long cticks; }; statusメンバーには操作のエラーステータスが入ります。エラーを説明するテキストメッセージを得るには、 nis_sperrno() 関数 ( nis_error(3N) を参照) を呼び出します。 objects 構造体には 2つのメンバーが含まれています。 1つは objects_val で、 nis_object 構造体の配列です。も う 1 つは objects_len で、配列内のセル数を示します。これらのオブジェクトを解放するには nis_freeresult() ( nis_names(3N) を参照) を呼び出します。オブジェクトをいくつか保持したい場合は、 nis_clone_object() 関数で コピーしてから オブジェクトを nis_destroy_object() 関数 ( nis_server(3N) を参照) で解放します。 さまざまな単位時間 (ティック) は、要求に対する処理時間 (マイクロ秒単位) の明細を含みます。これらの時 間明細を使用することによって、高速にアクセスできるようデータの編成方法を調整したり、別の実装方法の データベースと比較したり ( nis_db(3N) を参照) できます。 zticks NIS+ サービス自体にかかった時間。サーバが要求を受信した時点から返答を送信するまでの時間で す。 dticks データベースのバックエンドでかかった時間。データベースへ呼び出しを開始してから結果が戻るま での時間です。要求でデータベースを複数回呼び出す場合は、その呼び出しすべてにかかった時間の 合計です。 aticks 「アクセラレータ」またはキャッシュにかかった時間。要求を解決するために必要なサーバの位置を 見つけ出す時間も含まれます。 cticks 要求にかかった合計時間。このクロックは、クライアントライブラリに入った時点で開始し、結果が 戻った時点で停止します。この値から他の時間の合計を差し引くと、NIS+ 要求を生成するためのロー カルオーバヘッドを得ることができます。 zticks の値から dticks の値を差し引くと、サービスコード自体にかかった時間となります。 cticks の値から zticks の値と aticks の値の合計を差し引くと、クライアントライブラリ自体にかかった時間となります。注 : 時 間はすべてマイクロ秒で測定されます。 エラー クライアントライブラリから種々のエラーや診断が戻ります。一般的なものを以下に説明します。 NIS_BADATTRIBUTE 属性の名前がテーブル内の指定のカラムと合致しません。または属性に値がありませ ん。 Section 3-58 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 nis_tables(3N) NIS_BADNAME nis_tables(3N) 関数に渡された名前は有効な NIS+ 名ではありません。 NIS_BADREQUEST クライアントライブラリに渡された構造体の内部に問題が検出されました。 NIS_CACHEEXPIRED 戻されたエントリは 期限切れ のオブジェクトキャッシュからのものです。有効期間値 は ゼ ロ に なっ て お り、 エ ン ト リ は 変 更 さ れ て い る 可 能 性 が あ り ま す。 フ ラ グ NO_CACHE を参照関数に渡すと、期限の切れていないオブジェクトのコピーを得る操 作が行われます。 NIS_CBERROR サーバがクライアントを呼び戻している間に、サーバで RPC エラーが発生しました。そ の時点でトランザクションは打ち切られ、送信されていないデータは破棄されます。 NIS_CBRESULTS 要求は正常終了していますが、エントリはすべてコールバック関数に送られているの で、この結果には含まれません。 NIS_FOREIGNNS 名前を完全に解決できません。関数に渡された名前が NIS+ 名前ツリーの外側にある ネーム空間で解決されると、このエラーと一緒に ディレクトリ型の NIS+ オブジェクト が戻されます。戻されるオブジェクトにはネーム空間の型と、そのネーム空間内のサー バの接続情報が入っています。 NIS_INVALIDOBJ object でポイントされているオブジェクトは、指定のテーブルの有効な NIS+ エントリ オブジェクトではありません。テーブル内の対応するカラムとカラム数が一致していな い場合や、データ型 (バイナリやテキストなど) が異なっている場合に発生します。 NIS_LINKNAMEERROR 渡された名前は リンク型のオブジェクトとして解決されましたが、オブジェクトの内容 が無効な名前をポイントしています。 NIS_MODFAIL NIS_NAMEEXISTS 何らかの理由で変更が異常終了しました。 既に存在する名前を追加しようとしました。名前を追加するには、まず既存の名前を削 除してから新しい名前を追加するか、既存のオブジェクトを変更します。 NIS_NAMEUNREACHABLE このソフトエラーは、指定のテーブルオブジェクトの目的のディレクトリのサーバに到 達できないことを示します。この状態は、ネットワークパーティションまたはサーバが クラッシュしたときに発生することがあります。もう一度操作してみると、正常に動作 することがあります。 HARD_LOOKUP フラグを参照してください。 NIS_NOCALLBACK サーバがユーザーのマシン上のコールバックサービスに接続できません。そのため、 データは一切戻されません。 NIS_NOMEMORY 通常は、致命的な結果となります。サービスでヒープスペースが不足していることを意 味します。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-59 nis_tables(3N) nis_tables(3N) NIS_NOSUCHNAME このハードエラーは、テーブルオブジェクトには指定されたディレクトリがないことを 示します。このエラーは、当該テーブルに機能するサーバの親サーバが、テーブルの 入っているディレクトリに関する情報を持っていないときに発生します。 NIS_NOSUCHTABLE 指定のテーブルがありません。 NIS_NOT_ME サーバに要求が出されましたが、そのサーバは指定された名前に対して機能しません。 通常、このようなことは起こりませんが、サーバの組み込み位置メカニズムを使用して いない場合に、ユーザー独自のメカニズムが壊れているときに発生することがありま す。 NIS_NOTFOUND テーブル内のどのエントリも検索基準と一致しません。検索基準がヌル (すべてのエン トリを戻す) のときにこの結果となった場合は、テーブルが空なので、 nis_remove() を 呼び出して削除してください。 FOLLOW_PATH フラグを設定した場合は、このエラーはパス中のどのテーブルにも検 索基準と一致するエントリがないことを示します。 NIS_NOTMASTER 指定の名前に機能するサーバに対して変更要求が出されましたが、このサーバはマス ターサーバではありません。これは、ディレクトリオブジェクトを変更したときに、新 しいマスターサーバを指定した場合に発生します。 /var/nis/NIS_SHARED_DIRCACHE ファイルにディレクトリオブジェクトのキャッシュコピーを持つクライアントは、 キャッシュマネージャを再開始して ( nis_cachemgr -i を使用) このキャッシュをフラッ シュする必要があります。 NIS_NOTSAMEOBJ 削除対象のオブジェクトが要求で渡されたオブジェクトと同じではないので、ネーム空 間からオブジェクトを削除する操作が打ち切られました。 NIS_NOTSEARCHABLE テーブル名が NIS+ オブジェクトへと解決されましたが、これは検索不可能です。 NIS_PARTIAL この結果は NIS_NOTFOUND とよく似ています。ただし、要求は正常終了しており、解 決されたエントリがないことを意味します。この状態が発生した場合、サーバはエント リではなく、テーブルオブジェクトのコピーを戻します。そのため、クライアントはパ スを処理するか、他のローカルポリシーを実施できるようになります。 NIS_RPCERROR これは致命的なエラーであり、何らかの形で RPC サブシステムが異常終了したことを示 します。通常は、RPC 要求が異常終了した理由を示す syslog(3C) メッセージがあるはず です。 NIS_S_NOTFOUND 指定のエントリがテーブル内にありません。ただし、パス中のテーブルをすべて検索で きたわけではないので、テーブルのどれかにエントリがある可能性も残っています。 NIS_S_SUCCESS 要求は正常終了していますが、検索パス中の 1つのテーブルが検索できなかったので、 結果は、そのテーブルをアクセスできた場合のものと違っている可能性があります。 Section 3-60 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 nis_tables(3N) nis_tables(3N) 要求は正常終了しました。 NIS_SUCCESS NIS_SYSTEMERROR 要求を処理しようとしたときに、何らかの汎用システムエラーが発生しました。 syslog(3C) のレコードをチェックし、サーバからのエラーメッセージを調べてください。 NIS_TOOMANYATTRS サーバに渡された検索基準の属性の数が、テーブルの検索可能なカラム数より多くなっ ています。 NIS_TRYAGAIN 接続されているサーバがビジーで、ユーザーからの要求を取り扱うことができません。 add_entry() 、 remove_entry() 、 modify_entry() では、マスターサーバが内部状態を更 新中のときにこのエラーが戻されます。また、 nis_list() 関数でコールバックを指定した とき、サーバがコールバックを扱うためのリソースを十分に持っていないと、 nis_list() に戻されることがあります。 NIS_TYPEMISMATCH テーブルに対してエントリの追加または変更をしようとしましたが、渡されたエントリ の型がテーブルの型と違っています。 多言語化対応 環境変数 NIS_PATH この変数を設定していると、フラグ EXPAND_NAME を指定した場合に nis_list() でこの変数 が検索パスとして使用されます。 警告 フラグ HARD_LOOKUP によってネットワークパーティションでアプリケーションが無限にブロックされるこ とがあるので、このフラグを使用する際には十分な注意が必要です。 警告 HP-UX 11i Version 2 は、NIS+ がサポートされる最後の HP-UX リリースです。 NIS+ の代わりに LDAP を推奨します。 HP は、LDAP に基づく業界標準のネームサービスを完全にサポートし ます。 注意 フラグ FOLLOW_PATH を指定したときに使用されるパスは、 検索される 最初 のテーブルにあるパスです。 その後に検索されるテーブルにあるパスの値は無視されます。 ネームサービスをアクセスする関数をリストのコールバック内から呼び出してもかまいません。ただし、それ 自体がコールバックを使用する関数や、コールバックのある nis_list() をリストのコールバック関数内から呼び 出すことは、現在のところサポートされていません。 現在のところ、 nis_first_entry() と nis_next_entry() がマスターサーバのみから答えを得る方法はありません。 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-61 nis_tables(3N) nis_tables(3N) 参照 niscat(1), niserror(1), nismatch(1), nis_cachemgr(1M), nis_error(3N), nis_local_names(3N), nis_names(3N), nis_objects(3N), syslog(3C), Section 3-62 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 nl(3X) nl(3X) 名称 nl, nonl — 改行変換を使用可能または使用不能にする 構文 #include <curses.h> int nl(void); int nonl(void); 説明 nl() 関数は、復帰文字を入力した直後に改行文字に変換するモードを使用可能にします。 nonl() 関数は、この 改行変換を使用不能にします。初期状態では、改行変換は使用可能に設定されています。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 デフォルト変換は、端末を行終了文字として改行文字を使用する環境に適応させます。ただし、 nonl() を使っ て変換を使用不能にすると、アプリケーションで復帰キーの押下を検知できます。 参照 <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。 nl() および nonl() の両関数の引き数リストは、 明示的に void で宣言されています。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-63 nlist(3E) nlist(3E) 名称 nlist( ), nlist64( ) − ネームリストからエントリーを取得 構文 nlist() cc [ flag ... ] cfile ... -lelf [library] ... #include <nlist.h> int nlist(const char *file_name, struct nlist *nl); nlist64() cc [ flag ... ] cfile ... -lelf [library] ... #include <nlist.h> int nlist64(const char* file_name, struct nlist64 *nl); 特記事項 シンボルテーブルの型の情報と値の情報の使い方には、本質的に移植性がありません。そのため、これらの情 報を扱うプログラムの移植は、 nlist() や nlist64() によって簡単にはなりますが、 HP-UX のすべての実装を通 じた完全な移植性は期待できません。 説明 nlist() と nlist64() は、基本的に同じ機能を持っており、SOM ファイルや ELF ファイルを処理することができ ます。 nlist 構造体は nlist64 構造体と同じ構造を持ち、ソースコードの互換性を高めるために使用されます。 nlist/nlist64 関数は、 file_name で名前が指定された実行可能ファイルのネームリストを調べ、そこから値を選 択して抽出し、そのリストを nl が指す nlist/nlist64 構造体の配列に格納します。 nlist/nlist64 構造体の配列に は、初期値として変数の名前だけが格納されています。 nlist/nlist64 関数を呼び出すと、変数名にシンボル情 報が付け加えられます。リストの最後には null ネームが加えられていて、そこでリストが終わっていることを 表しています。null ネームは null 文字列からなる名前で、構造体の変数名の位置に置かれます。各変数名は、 ファイルのネームリストを検索して探されます。名前が見つかると、シンボルのタイプ、有効範囲、および ファイル内の値が、ネームリスト構造体に挿入されます。検索するファイルが ELF ファイルの場合は、セク ションインデックスも挿入されます。 SOM ファイルの場合は、サブスペースインデックスが挿入されます。 シンボルの値は 64 ビットです。検索するファイルが SOM ファイルのときには、値フィールドにゼロが埋めら れます。名前が見つからない場合は、ネームリスト構造体のフィールドには0が設定されます。構造体 nlist お よび nlist64 は、インクルードファイル <nlist.h> で定義されています。シンボルテーブル構造体の詳細につい ては、 a.out(4) と nlist(4) を参照してください。 指定する実行可能ファイルの構造とシンボルテーブルは、 a.out(4) で a.out ファイルに対して説明されている 仕様に合っている必要があります。情報はリンカー ld(1) が使用するシンボルテーブルから抽出されます。 実行可能ファイルがこうした条件を満たしているコンピュータでは、ファイル /stand/vmunix に保持されてい るシステムのネームリストをこの関数を用いて調べることにより、最新のシステムアドレスを得ることができ ます。 Section 3-64 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nlist(3E) nlist(3E) 戻り値 指定のファイルが見つからないか、見つかってもリンカーシンボルテーブルを持った有効なオブジェクトファ イルでない場合は、 nlist 構造体のすべてのフィールドに0が設定されます。 nlist() は、エラーがあったときは −1 を、また正常終了のときは0をそれぞれ返します。 警告 互換性のため、ヘッダーファイルの <a.out.h> をインクルードすると、 <nlist.h> が自動的にインクルードされ ます。ただし、 nlist() で使用する情報だけが必要な場合は、 <a.out.h> のインクルードはお勧めできません。 <a.out.h> をインクルードする場合には、通常 #undef n_name を続けて指定する必要があります。 参照 a.out(4), elf(3E), nlist(4) 標準準拠 nlist(): SVID2, SVID3 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-65 nl_langinfo(3C) nl_langinfo(3C) 名称 nl_langinfo( ) − 言語情報 構文 #include <langinfo.h> char *nl_langinfo(nl_item item); 説明 nl_langinfo() は、プログラムのロケール ( setlocale(3C) を参照) で定義された特定の言語や地域に関連する情報 を含んだ、 nullで終わる文字列へのポインタを返します。 item の定数名や値は <langinfo.h> で定義されていま す。例えば次の文は、現在のロケールが pt_PT.iso88591 ならば 文字列 ‘‘Dom’’ への、 fi_FI.iso88591 ならば文字 列 ‘‘Su’’ へのポインタを返します。 nl_langinfo(ABDAY_1) 無効な item が指定された場合は、空の文字列へのポインタが返されます。 item が有効であっても、現在のロ ケールの言語や慣習では item が適用されない場合は、やはり空の文字列が返される可能性があります。例えば 1000の位の区切りは、アラビア語の慣習に従って数を書くときには使いません。 多言語化対応 Locale 特定の item に対して返される文字列は、 langinfo(5) で指定したロケールカテゴリにより決定されます。 サポートされるコードセット シングル/マルチバイト文字コードセットがサポートされています。 警告 nl_langinfo() は静的な領域へのポインタを返すので、呼出しのたびにオーバライトされます。 著者 nl_langinfo() はOSFおよびHPで開発されました。 参照 localeconv(3C), setlocale(3C), lang(5), langinfo(5) 標準準拠 nl_langinfo(): AES, SVID3, XPG2, XPG3, XPG4 Section 3-66 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 nl_tools_16(3X) nl_tools_16(3X) 名称 nl_tools_16: ADVANCE(), byte_status(), BYTE_STATUS(), CHARADV(), CHARAT(), c_colwidth(), C_COLWIDTH(), firstof2(), FIRSTof2(), secof2(), SECof2(), WCHAR(), WCHARADV() − 16ビット文字処理用ツール (10.30で廃止) 構文 #include <nl_ctype.h> int firstof2(int c); int secof2(int c); int byte_status(int c, int laststatus); int c_colwidth(int c); int FIRSTof2(int c); int SECof2(int c); int BYTE_STATUS(int c, int laststatus); int C_COLWIDTH(int c); int CHARAT(const char *p); int ADVANCE(const char *p); int CHARADV(const char *p); int WCHAR(wchar_t wc, char *p); int WCHARADV(wchar_t wc, char *p); void PCHAR(int c, char *p); void PCHARADV(int c, char *p); 特記事項 上記のインタフェースのうち、大文字で始まるものはマクロで実現されています。それ以外のインタフェース は関数です。 これらのマクロと関数は一般にはもう使用されていません。警告を参照してください。 説明 以下のマクロと関数はロードされている NLS 環境に基づいて処理を行います (setlocale(3C) を参照)。 FIRSTof2() 1バイトの引き数をとり、ロードされている NLS 環境に照らして、2バイト文字の1バ イト目になり得るかどうか判定します。なり得るときは0以外の値を、なり得ないとき は0を返します。 SECof2() 1バイトの引き数をとり、ロードされている NLS 環境に照らして、2バイト文字の2バ イト目になり得るかどうか判定します。なり得るときは0以外の値を、なり得ないとき HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-67 nl_tools_16(3X) nl_tools_16(3X) は0を返します。 BYTE_STATUS() c で与えた現在注目しているバイト値と、直前に呼び出した BYTE_STATUS() の返した 直前のバイト値のステータス laststatus に基づき、以下の値のどれかを返します。これら は <nl_ctype.h> で定義されたステータス値です。 ONEBYTE シングルバイト文字 SECOF2 2バイト文字の2バイト目 FIRSTOF2 2バイト文字の2バイト目 2バイト文字を正しく確認するためには、1バイト目、2バイト目の両方を確認する必 要があります。 laststatus の値が FIRSTOF2 であっても、 SECof2(c) が偽を返せば BYTE_STATUS(c, laststatus) は ONEBYTE を返します。 C_COLWIDTH() 1バイト文字か2バイト文字の1バイト目を引き数にとり、その文字がターミナル画面 で占める文字数を返します。 マクロ BYTE_STATUS(), C_COLWIDTH(), FIRSTof2(), SEC0of2() に与える引き数 c が −1 (EOF) 未満であるか255より大きい場合、これらのマクロの戻り値は定義されていま せん。 1バイト文字か2バイト文字の1バイト目を指すポインター p を引き数にとります。ど CHARAT() ちらの場合も CHARAT() はポインター p の指す文字に対応した wchar_t 型の値を返し ます。 ADVANCE() 引き数に与えたポインターの指す文字の大きさ ( 1バイトか2バイトです) だけポイン ターを進めます。 CHARADV() 関数 CHARAT() と ADVANCE() を1つのマクロで実現したものです。1バイト文字か 2バイト文字の2バイト目を指すポインター p を引き数にとります。どちらの場合も CHARADV() はポインター p の指す文字に対応した wchar_t 型の値を返し、その文字の 次にポインター p を進めます。 wchar_t 型の値 wc を対応する1バイト文字、または2バイト文字に変換し、 p で指定 WCHAR() する場所に書き込みます。 WCHAR() は wchar_t 型の値 wc を返します。 WCHARADV() 関数 WCHAR() と ADVANCE() を1つのマクロで実現したものです。 wchar_t 型の値 wc を対応する1バイト文字、または2バイト文字に変換し、 p で指定する場所に書き 込みます。その後で p をその文字の次に進めます。 WCHARADV() は wchar_t 型の値 wc を返します。 firstof2() secof2() byte_status() c_colwidth() 先に説明した同等のマクロをサブルーチンで実現したものです。これらの関数は C 言語 以外の言語からも呼び出せます。 Section 3-68 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 nl_tools_16(3X) nl_tools_16(3X) 多言語化対応 Locale LC_CTYPE カテゴリがシングル/マルチバイト文字の解釈を決定します。 警告 このマニュアル項目で説明するHP独自の関数とマクロは、一般にはもう使用されていません。それらは、他の ベンダーのシステムに移植性がなく、将来のHP-UXリリースで提供されません。 移植性を最大限に保持するために、マルチバイト文字の処理にはマニュアル項目 multibyte(3C) で説明するルー チンを使ってください。 WCHAR() や WCHARADV() に与える1番目の引き数には、このマニュアル項目で説明した他のマクロは使え ません。たとえば、 *t++ = *f++ を WCHARADV(CHARADV (f),t) で実現することはできません。 代わりにこのようにしてください。 int c; ... c = CHARADV (f), WCHARADV (c,t) 式や文の一部以外に用いられると、 WCHAR() と WCHARADV() は lint(1) による警告 "null effect" を発生させ る可能性があります。これは両方のマクロの機能には影響を与えません。 WCHAR() と WCHARADV() が「文字を置き換える」マクロではないことに注意してください。2バイト文字 の1バイト目にシングルバイト文字をオーバーライトすると2バイト文字の2バイト目が取り残されてしまい ますが、 WCHAR() や WCHARADV() はこのような事態を特に考慮していません。 CHARAT(), ADVANCE(), CHARADV() は引き数のポインターの指す場所の次のバイト値の、 SECof2 などによ る検査は行いません。 著者 nl_tools_16() はHPで開発されました。 参照 setlocale(3C), multibyte(3C), wconv(3C), wctype(3C) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-69 nodelay(3X) nodelay(3X) 名称 nodelay — 読み込み中にブロックを使用可能または使用不能にする 構文 #include <curses.h> int nodelay(WINDOW *win, bool bf); 説明 nodelay() 関数は、指定されたウィンドウに関連するスクリーンについて、Delay Mode または No Delay Mode のいずれを有効にするかを指定します。 bf を TRUE にすると、スクリーンは No Delay Mode に設定されま す。 bf を FALSE にすると、スクリーンは Delay Mode に設定されます。初期状態は FALSE です。 戻り値 正常に終了すると、 nodelay() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 getch(3X), halfdelay(3X), curses_intro(3X) の 「入 力 処 理」 の 項 , <curses.h>, X/Open System Interface Definitions, Issue 4, Version 2 specification, Section 9.2, Parameters That Can Be Set . 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。 Section 3-70 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 noqiflush(3X) noqiflush(3X) 名称 noqiflush, qiflush — 待ち行列の初期化機能を使用可能または使用不能にする 構文 #include <curses.h> void noqiflush(void); void qiflush(void); 説明 qiflush() 関数は、割り込みキー ( 割り込み、一時停止、または中止) が押されるたびに、ディスプレイドライ バー待ち行列内の出力をすべて初期化 (消去) します。 noqiflush() は、この初期化機能を使用不能にします。 デフォルトが使用可能と使用不能のどちらであるかは、ディスプレイドライバーの設定から継承されます。 戻り値 これらの関数は、戻り値を返しません。 エラー エラーは定義されていません。 アプリケーション使用法 qiflush() 関数を使えば、割り込みにより速やかに応答できますが、スクリーン上の事象について Curses に正確 な情報が伝わらないという欠点があります。同じ効果は、Curses の外でも X/Open System Interface Definitions, Issue 4, Version 2 specification (General Terminal Interface ) で指定された NOFLSH ローカルモードフラグを使って 実現できます。 参照 intrflush(3X), curses_intro(3X) の 「入力処理」の項, <curses.h>, X/Open System Interface Definitions, Issue 4, Version 2 specification, Section 9.2, Parameters That Can Be Set (NOFLSH flag) 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-71 notimeout(3X) notimeout(3X) 名称 notimeout, timeout, wtimeout — 入力時のブロック化制御 構文 #include <curses.h> int notimeout(WINDOW *win, bool bf); void timeout(int delay); void wtimeout(WINDOW *win, int delay); 説明 notimeout() 関数は、指定されたウィンドウに関連するスクリーンについて、Timeout Mode または No Timeout Mode のいずれを有効にするかを指定します。 bf を TRUE にすると、スクリーンは No Timeout Mode に設定さ れます。 bf を FALSE にすると、スクリーンは Timeout Mode に設定されます。初期状態は FALSE です。 timeout() および wtimeout() の両関数は、delay の値に基づいて現在のまたは指定のウィンドウについてブロッ ク化読み込みまたは非ブロック化読み込みを設定します。 delay < 0 1 つ以上のブロック化読み込み (入力待ち時間は不定) が使用されます。 delay = 0 1 つ以上の非ブロック化読み込みが使用されます。要求した文字列を構成する各文字 が即座に入力されないと、Curses 入力関数は、正常に動作しません。 delay > 0 Curses 入力関数は、delay ミリ秒間ブロック化読み込みを行い、なお入力がないとき は、正常に動作しません。 戻り値 正常に終了すると、 notimeout() は OK を返します。そうでなければ ERR を返します。 timeout() および wtimeout() の両関数は、戻り値を返しません。 エラー エラーは定義されていません。 参照 getch(3X), halfdelay(3X), nodelay(3X), curses_intro(3X) の 「入力処理」の項 , <curses.h>, X/Open System Interface Definitions, Issue 4, Version 2 specification, Section 9.2, Parameters That Can Be Set 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-72 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 overlay(3X) overlay(3X) 名称 overlay, overwrite — オーバーラップしたウィンドウのコピー 構文 #include <curses.h> int overlay(const WINDOW *srcwin, WINDOW *dstwin); int overwrite(const WINDOW *srcwin, WINDOW *dstwin); 説明 overlay() および overwrite() の両関数は、dstwin の上に srcwin をオーバーレイします。scrwin と dstwin の両引 き数は、同じサイズである必要はありません。2つのウィンドウがオーバーラップする部分にあるテキストだ けがコピーされます。 overwrite() 関数は、文字をコピーします。その効果は、あて先ウィンドウの属性について win_wch() と wadd_wch() を順に使用した後に、バックグラウンド属性をクリアした場合と同様です。 overlay() 関数も同様の効果を有しています。ただし、コピーする文字がソースウィンドウのバックグラウンド 文字であるときは常に、 overlay() は、文字をコピーしないで単にあて先カーソルをバッググラウンド文字の幅 だけ移動します。 オーバーレイするウィンドウ境界が一部でも、マルチカラム文字の最初のカラムでないときは、すべてのカラ ム位置を背景文字と修飾情報で置換した後、オーバーレイします。このとき、デフォルトのバックグラウンド 文字がマルチカラム文字であると、これらの関数は正常に動作しません。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 copywin(3X), <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。引き数 srcwin() のタイプが WINDOW * から WINDOW *CONSTに変更されました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-73 pam(3) pam(3) 名称 PAM − 組み込み可能認証モジュール 構文 #include <security/pam_appl.h> cc [ flag . . . ] file . . . −lpam [ library . . . ] 説明 PAM により、システム管理者はシステムで使用できる任意の認証サービスを柔軟に選択して認証を実行できる ようになります。また、アプリケーションを変更せずに、新しい認証サービスモジュールを組み込んで使用可 能にすることもできるようになります。 PAM フレームワーク libpam は、インタフェースライブラリと複数の認証サービスモジュールで構成されま す。PAM インタフェースライブラリは、アプリケーション プログラミング インタフェース (API) を実現する 階層です。認証サービスモジュールは、PAM API により呼び出される、ユーザー認証の個々のタイプを提供す る動的ロード可能オブジェクトの集まりです。 インタフェース概要 PAM ライブラリインタフェースは、5つのカテゴリにまとめられる関数で構成されます。認証ライブラリ関数 の名前はすべて pam_ で始まります。 第1のカテゴリには、認証アクティビティの確立と終了のための関数 ( pam_start(3) と pam_end(3))、モジュー ル特定のデータを保持する関数 ( pam_[sg]et_data(3))、状態情報を保持する関数 ( pam_[sg]et_item(3))、エラース テータス情報を返す関数 ( pam_strerror(3)) があります。 第2のカテゴリには、個々のユーザーを認証する関数 ( pam_authenticate(3))、そのユーザーの資格認定を設定す る関数 ( pam_setcred(3)) があります。 第3のカテゴリには、アカウント管理を行う関数 ( pam_acct_mgmt(3)) があります。パスワードエージングやア クセス時間制限のためのチェックが含まれます。 第4のカテゴリには、システムへのアクセスが許可された後のセッション管理を行う関数 ( pam_open_session(3) と pam_close_session(3)) があります。 第5のカテゴリには、認証トークンを変更する関数 (pam_chauthtok(3)) があります。認証トークンはユーザー 識別を検査するために使用するオブジェクトです。UNIX では、認証トークンはユーザーのパスワードです。 スマートカードを使う場合でも、PAM フレームワークはスマートカードからパスワードを取り出すため、同様 です。 すべての pam_*() インタフェースはライブラリ libpam により実現されます。前述のリストの各カテゴリに は、第1のカテゴリ (pam_start(), pam_end(), pam_[sg]et_data(), pam_[sg]et_item(), pam_strerror()) を除き、要 求に応じて適切なサービス階層機能を提供する動的ロード可能共有モジュールがあります。サービス階層の関 数エントリーポイントは pam_sm_ 接頭辞で始まります。 pam_sm_*() インタフェースとこれに対応する pam_ インタフェースの違いは、すべての pam_sm_*() インタフェースが、サービス固有のオプションを共有モ ジュールに渡すための特別なパラメータを必要とすることだけです。PAM サービスモジュール API の概要に Section 3-74 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pam(3) pam(3) ついては、 pam_sm(3) を参照してください。 状態にかかわるインタフェース 共通の状態情報を共有する一連の呼び出しを認証トランザクションといいます。認証トランザクションは、 pam_start() への呼び出しで開始されます。 pam_start() はスペースを割り当て、さまざまな初期化アクティビ ティを実行し、以降のライブラリへの呼び出しで使用する PAM 認証ハンドルを割り当てます。 認証トランザクションの初期化後、アプリケーションは pam_authenticate() を呼び出して個々のユーザーを認 証し、 pam_acct_mgmt() を呼び出してシステムエントリー管理を実行できます (アプリケーションでユーザー のパスワードが期限切れかどうか判別したい場合があります)。 ユーザーの認証が成功したら、アプリケーションは pam_setcred() を呼び出して、認証サービスに対応するす べてのユーザー資格認定を設定します。1つの認証トランザクション内 (pam_start() から pam_end() の間) で は、PAM インタフェースへの呼び出しは、すべて pam_start() から返された同一の認証ハンドルを使って行わ なければなりません。これは、あるサービスモジュールが、他のモジュールが使用することを意図したモ ジュール特定のデータをハンドルに保存することがあるためです。たとえば、 pam_authenticate() への呼び出 しの間、サービスモジュールは pam_setcred() が使用することを意図したデータをハンドルに保存することが あります。 セッション管理を実行するには、アプリケーションは pam_open_session() を呼び出します。たとえば、システ ムはセッション全体の時間を保存したい場合があります。関数 pam_close_session() は現在のセッションを閉じ ます。 必要であれば、アプリケーションは pam_get_item() と pam_set_item() を呼び出して、特定の認証情報のアク セスや更新を行えます。このような情報に現在のユーザー名が含まれる場合があります。 認証トランザクションを終了するには、アプリケーションは単に pam_end() を呼び出します。以前に割り当て た、認証情報の保存に使用したスペースが解放されます。 アプリケーション - 認証サービスの対話型インタフェース PAM の認証サービスはユーザーとは直接通信しません。代わりに、このような対話はすべてアプリケーション に依存して実行されます。アプリケーションは、認証トランザクションの初期化 (pam_start() への呼び出しに よる ) のときに、関数 conv() へのポインターを、関連したアプリケーションのデータポインターと一緒に pam_conv 構造体を通じて認証サービスに渡します。認証サービスは関数 conv() を使って、ユーザーにデータ 入 力 を 求 め る プ ロ ン プ ト の 表 示、 エ ラー メッ セー ジ の 出 力、 テ キ ス ト 情 報 の 表 示 を 行 い ま す。 詳 細 は pam_start(3) を参照してください。 複数の方式のスタック PAM アーキテクチャは、 スタックすることにより複数の認証サービスによる認証を可能にします。 login(1) な どのシステムエントリー アプリケーションは、複数のサービスモジュールをスタックし、複数の認証サービス を使ってユーザーを認証します。認証サービスモジュールがスタックされる順序は、構成ファイル pam.conf (4) で指定します。システム管理者はこの順序を決定し、すべての認証サービスに同じパスワードを使えるかどう かも決定します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-75 pam(3) pam(3) 管理上のインタフェース さまざまな認証サービスが、その固有のロード可能モジュールにより実現されます。ロード可能モジュールの パスは pam.conf(4) ファイルで指定します。 ユーザー構成 システム管理者はユーザーごとのポリシーを決定できます。これは構成ファイル pam.conf (4), pam_user.conf (4) で指定します。 アプリケーション使用法 PAM フレームワーク libpam に実装されたすべての pam_*() インタフェースは、スレッドセーフです。スレッ ドがこれらのインタフェースを実行しているときに、キャンセルポイントに達する可能性があります。これら のインタフェースは、キャンセルセーフ、非同期キャンセルセーフ、非同期シグナルセーフのいずれでもあり ま せ ん。 た だ し、 シ ス テ ム 管 理 者 は、 pam_authenticate() 、 pam_open_session() 、 pam_close_session() 、 pam_chauthtok()、 pam_setcred()、および pam_acct_mgmt() インタフェースが、構成ファイル pam.conf (4) に 指定される動的ロード可能モジュールで実現される、これらのインタフェースに対応する pam_sm_*() インタ フェースを起動することに注意する必要があります。したがって、これらのインタフェースがスレッドセーフ かどうかは、サービスモジュールの実装内容によって決まります。この情報については、 pam_unix(5) などの モジュールごとのマンページを参照してください。 戻り値 PAM 関数は以下の一般値のどれか、または特定のマンページで定義された値のどれかを返します。 PAM_SUCCESS 正常終了しました。 PAM_OPEN_ERR サービスモジュールの動的ロードに失敗しました。 PAM_SYMBOL_ERR シンボルが見つかりません。 PAM_SERVICE_ERR サービスモジュールでエラーが発生しました。 PAM_SYSTEM_ERR システムエラーです。 PAM_BUF_ERR メモリーバッファー エラーです。 PAM_CONV_ERR 変換が失敗しました。 PAM_PERM_DENIED パーミッションが拒否されました。 警告 すべての PAM API およびデータ構造は予告なしに変更されることがあるので注意してください。 参照 pam_authenticate(3), pam_open_session(3), pam_chauthtok(3), pam_set_item(3), pam_setcred(3), pam_sm(3), pam_start(3), pam_strerror(3), pam.conf(4), pam_user.conf(4) Section 3-76 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pam_acct_mgmt(3) pam_acct_mgmt(3) 名称 pam_acct_mgmt − PAM アカウント妥当性検査手続きの実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_acct_mgmt(pam_handle_t * pamh, int flags); 説明 関数 pam_acct_mgmt() を呼び出して、現在のユーザーのアカウントが有効かどうかを判別します。パスワード およびアカウントの期限のチェックや、高信頼性モードのためのアクセス時間制限および端末アクセス制限が 含まれます。この関数は、通常、ユーザーが pam_authenticate(3) で認証された後で呼び出します。 pamh 引き数は、以前に pam_start() を呼び出して取得した認証ハンドルです。 flags フィールドには以下のフ ラグを設定できます。 PAM_SILENT アカウント管理サービスのメッセージ作成を禁止します。 PAM_DISALLOW_NULL_AUTHTOK ユー ザー の 認 証 トー ク ン が ヌ ル の 場 合、 ア カ ウ ン ト 管 理 サー ビ ス は PAM_AUTHTOKEN_REQD を返さなければなりません。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了すると、 PAM_SUCCESS が返されます。 pam(3) で説明したエラー戻り値の他に、以下の値が返され ることがあります。 PAM_USER_UNKNOWN 基底のアカウント管理モジュールがユーザーを認識できません。 PAM_AUTH_ERR 認証に失敗しました。 PAM_AUTHTOKEN_REQD 新しい認証トークンが必要です。これは、通常、マシンのセキュリティ方針に より、パスワードが NULL であるか、または期限切れであるためにパスワード を変更する必要がある場合に返されます。 PAM_ACCT_EXPIRED ユーザーアカウントが期限切れです。 PAM_ACCT_DISABLED ユーザーアカウントの使用が禁止されています (高信頼性モードのみ)。 PAM_TERM_DISABLED 端末の使用が禁止されています (高信頼性モードのみ)。 PAM_NOT_AUTHORIZED ユーザーの端末アクセスが許可されていません (高信頼性モードのみ)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-77 pam_acct_mgmt(3) PAM_NOT_RTIME pam_acct_mgmt(3) ログイン時間が不正です (高信頼性モードのみ)。 参照 pam(3), pam_start(3), pam_authenticate(3) Section 3-78 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_authenticate(3) pam_authenticate(3) 名称 pam_authenticate − PAM フレームワーク内での認証の実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_authenticate(pam_handle_t * pamh, int flags); 説明 pam_authenticate() を呼び出して、現在のユーザーを認証します。このユーザーは、通常、システム内で構成 されている認証サービスに基づき、パスワードまたは認証トークンのようなものの入力を要求されます。ス マートカード認証の場合、このトークンは PIN (個人識別番号) になります。対象ユーザーは、以前に呼び出し た pam_start() や pam_set_item() で指定されていなければなりません。 flags フィールドには以下のフラグを設 定できます。 PAM_SILENT 認証サービスのメッセージ作成を禁止します。 PAM_DISALLOW_NULL_AUTHTOK ユーザーの認証トークンがヌルの場合、認証サービスは PAM_AUTH_ERROR を返さなければ なりません。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 注意 ユーザー名またはパスワードが不正であるために認証が失敗した場合、アプリケーションは、 pam_authenticate() を再試行し、リトライ回数を保持しなければなりません。認証サービスモジュールは内部のリトライ回 数を実現し、アプリケーションに再試行を行わせたくない場合はエラー PAM_MAXTRIES を返すことができ ます。 PAM フレームワークが認証モジュールをロードできない場合、 PAM_ABORT を返します。これは重大な失敗 であり、アプリケーションは認証を再試行してはならないことを示します。 セキュリティ上の理由により、認証が失敗した位置はユーザーには知らされません。したがって、複数の認証 サービスがスタックされていて1つのサービスが失敗した場合、 pam_authenticate() は、ユーザーがすべての サービスに対して再認証を行うよう要求します。 PAM_DISALLOW_NULL_AUTHTOK が指定されていない限り、認証データベース内のヌルの認証トークンで 認証は成功します。このような場合、ユーザーに認証トークンの入力を求めるプロンプトは表示されません。 認証はスマートカードで行うことができます。この場合、ユーザーがスマートカード リーダに自分のスマート カードを差し込むと、スマートカードの PIN の入力を求められます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-79 pam_authenticate(3) pam_authenticate(3) 戻り値 正常終了すると、PAM_SUCCESS が返されます。 pam(3) で説明したエラー戻り値の他に、以下の値が返され ることがあります。 PAM_AUTH_ERR 認証に失敗しました。 PAM_CRED_INSUFFICIENT 資格認定が不十分なために認証データにアクセスできません。 PAM_AUTHINFO_UNAVAIL 基底の認証サービスが認証情報を取り出せません。 PAM_USER_UNKNOWN 基底の認証モジュールがユーザーを認識できません。 PAM_MAXTRIES 認証サービスが保持しているリトライ回数が限界になりました。これ以上 は試行できません。 参照 pam(3), pam_start(3), pam_open_session(3), pam_setcred(3) Section 3-80 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_chauthtok(3) pam_chauthtok(3) 名称 pam_chauthtok − PAM フレームワーク内でのパスワード関連関数の実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_chauthtok(pam_handle_t * pamh, int flags, int argc, const char **argv); 説明 pam_chauthtok() を呼び出して、認証ハンドル pamh により参照される特定のユーザーに関連付けられた認証 トークンを変更します。 pam_chauthtok() には、以下のフラグが渡されます。 PAM_SILENT パスワードサービスのメッセージ作成を禁止します。 PAM_CHANGE_EXPIRED_AUTHTOK パスワードサービスは古くなったパスワードだけを更新しなければなりません。このフラグが渡され ない場合、すべてのパスワードサービスはパスワードを更新しなければなりません。 呼び出しが正常終了すると、ユーザーの認証トークンは、 pam.conf (4) によりシステムで構成されているパス ワードサービスに従って変更されます。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 注意 フラグ PAM_CHANGE_EXPIRED_AUTHTOK は、通常、 login アプリケーションがユーザーのパスワードが 古くなった、または期限切れかどうかを判別するために使用します。 login アプリケーションは、ユーザーに ログインを許可する前にこのフラグを使って pam_chauthtok() を実行し、ユーザーがパスワードを更新できる ようにします。通常、 passwd(1) などのアプリケーションはこのフラグを使ってはなりません。 pam_chauthtok() は、パスワードを更新しようとする前に予備検査を実行します。この検査は、 pam.conf (4) に リストされているスタック内のそれぞれのパスワードモジュールに対して実行されます。この検査には、リ モート名サービスが使用可能かどうか判別するために ping の実行が含まれることがあります。 pam_chauthtok() が PAM_TRY_AGAIN を返す場合、チェックは失敗し、パスワードは更新されません。 戻り値 正常終了すると、 PAM_SUCCESS が返されます。 pam(3) で説明したエラー戻り値の他に、以下の値が返され ることがあります。 PAM_PERM_DENIED HP-UX 11i Version 2: August 2003 パーミッションがありません。 −1− Hewlett-Packard Company Section 3-81 pam_chauthtok(3) pam_chauthtok(3) PAM_AUTHTOK_ERR 認証トークン操作のエラーです。 PAM_AUTHTOK_RECOVERY_ERR 認証情報が見つかりません。 PAM_AUTHTOK_LOCK_BUSY 認証トークンのロックがビジーです。 PAM_AUTHTOK_DISABLE_AGING 認証トークンのエージングが禁止されています。 PAM_USER_UNKNOWN パスワードサービスがユーザーを認識できません。 PAM_TRY_AGAIN パスワードサービスによる予備検査に失敗しました。 参照 pam(3), pam_start(3), pam_authenticate(3) Section 3-82 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_get_user(3) pam_get_user(3) 名称 pam_get_user − ユーザー名を取り出すための PAM ルーチン 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_get_user(pam_handle_t * pamh, char **user, const char * prompt); 説明 pam_get_user() は、PAM サービスモジュールが PAM ハンドルから現在のユーザー名を取り出すために使用し ます。ユーザー名が pam_start() または pam_set_item() によって設定されていない場合、PAM 会話関数を使用 して、文字列 "prompt" を使ってユーザーにユーザー名の入力を求めるプロンプトを表示します。 prompt が NULL の場合、 pam_get_item() を呼び出し、プロンプト表示には PAM_USER_PROMPT の値を使用します。 PAM_USER_PROMPT の値が NULL の場合、次のデフォルトのプロンプトを使用します。 Please enter user name: 会話関数によりユーザー名を得たら、 pam_set_item() を呼び出して PAM_USER の値を設定します。 規 約 に よ れ ば、 ユー ザー 名 の 入 力 を 求 め る プ ロ ン プ ト を 表 示 す る 必 要 が あ る ア プ リ ケー ショ ン は、 pam_authenticate() を呼び出す前に、 pam_set_item() を呼び出して PAM_USER_PROMPT の値を設定しなけ ればなりません。その後、このサービスモジュールの pam_sm_authenticate() 関数は pam_get_user() を呼び出 し、ユーザー名の入力を求めるプロンプトを表示します。ある一定の PAM サービスモジュール (スマートカー ド モジュールなど) は、 PAM_USER_PROMPT の値を変更して固有のプロンプトを渡す場合があることに注 意してください。 pam_authenticate() を複数回呼び出すアプリケーションは、ユーザーに毎回新しいユーザー名の入力を求める プロンプトを表示したい場合、 pam_authenticate() を呼び出す前に pam_set_item() で PAM_USER の値を NULL に設定しなければなりません。 pam_get_user() で取り出した user の値は、変更したり解放してはなりません。この項目は pam_end() により解 放されます。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了すると、 pam_get_user() は PAM_SUCCESS を返します。失敗すると、エラーコードを返します。戻 り値に関連したエラーの情報については、 pam(3) を参照してください。 参照 pam(3), pam_start(3), pam_authenticate(3), pam_get_item(3), pam_set_item(3), pam_sm(3), pam_sm_authenticate(3), pam_end(3) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-83 pam_open_session(3) pam_open_session(3) 名称 pam_open_session, pam_close_session − PAM セッションの作成および終了の操作の実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_open_session(pam_handle_t *pamh, int flags); int pam_close_session(pam_handle_t *pamh, int flags); 説明 pam_open_session() は、ユーザーの認証が成功した後で呼び出し ( pam_authenticate(3) と pam_acct_mgmt(3) を 参照)、新しいセッションが開始されたことをセッションモジュールに知らせるために使用します。 pam(3) ラ イブラリを使用するすべてのプログラムは、新しいセッションを開始するときに pam_open_session() を呼び出 さなければなりません。このアクティビティが終了するときは、 pam_close_session() を呼び出して、セッショ ンが終了したことを pam(3) に知らせなければなりません。 pamh 引き数は、以前に pam_start() を呼び出して取得した認証ハンドルです。 pam_open_session( ) および pam_close_session() の flags フィールドには、以下のフラグを設定できます。 PAM_SILENT セッションサービスのメッセージ作成を禁止します。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了すると、 PAM_SUCCESS が返されます。エラーが発生すると、 pam(3) で定義した戻り値の他に、以 下の値が返されることがあります。 PAM_SESSION_ERR 指定されたセッションのためのエントリーを作成 / 削除できません。 参照 pam(3), pam_start(3), pam_authenticate(3), pam_acct_mgmt(3) Section 3-84 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pam_setcred(3) pam_setcred(3) 名称 pam_setcred − 認証サービスのためのユーザー資格認定の変更 削除 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_setcred(pam_handle_t * pamh, int flags); 説明 pam_setcred() を使用して、ユーザー資格認定の設定、変更、削除を行います。 pam_setcred() は、通常、ユー ザー が 認 証 さ れ て セッ ショ ン が 開 か れ た 後 で 呼 び 出 し ま す ( pam_authenticate(3), pam_acct_mgmt(3), pam_open_session(3) を参照)。 ユーザーは以前に呼び出した pam_start() または pam_set_item() で指定され、認証ハンドル pamh で参照され ます。 flags フィールドには以下のフラグを設定できます。最初の4つのフラグは同時に指定できないことに注 意してください。 PAM_ESTABLISH_CRED 認証サービスのためのユーザー資格認定を設定します。 PAM_DELETE_CRED 認証サービスに関連付けられたユーザー資格認定を削除します。 PAM_REINITIALIZE_CRED ユーザー資格認定を再初期化します。 PAM_REFRESH_CRED ユーザー資格認定の期限を延長します。 PAM_SILENT 認証サービスのメッセージ作成を禁止します。 どのフラグも設定されていない場合、デフォルト値として PAM_ESTABLISH_CRED が使用されます。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了すると、 pam_setcred( ) は PAM_SUCCESS を返します。エラーが発生すると、 pam(3) で説明したエ ラー戻り値の他に、以下の値が返されることがあります。 PAM_CRED_UNAVAIL 基底の認証サービスが、使用できないユーザー資格認定を取り出せません。 PAM_CRED_EXPIRED ユーザー資格認定が期限切れです。 PAM_USER_UNKNOWN 基底の認証サービスがユーザーを認識できません。 PAM_CRED_ERR ユーザー資格認定の設定に失敗しました。 参照 pam(3), pam_start(3), pam_authenticate(3), pam_acct_mgmt(3), pam_open_session(3) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-85 pam_set_data(3) pam_set_data(3) 名称 pam_set_data, pam_get_data − モジュール固有の状態を保持するための PAM ルーチン 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_set_data(pam_handle_t * pamh, const char *module_data_name, const void *data, void (*cleanup) (pam_handle_t * pamh, void *data, int pam_end_status)); int pam_get_data(const pam_handle_t * pamh, const char *module_data_name, void **data); 説明 pam_set_data() および pam_get_data() を使用すると、PAM サービスモジュールは必要に応じてモジュール固 有の情報のアクセスや更新を行えます。これらの関数はアプリケーションが使用してはなりません。 pam_s et_data() は、モジュール固有のデータを PAM ハンドル pamh 内に保存します。 module_data_name 引き 数はこのデータを一意に識別し、 data 引き数は実際のデータを表します。 module_data_name はすべてのサー ビス (UNIX など) にわたって重複してはなりません。 cleanup 関数は、 data が使用したすべてのメモリーが不要になった後でこれを解放するために使用され、 pam_end() が呼び出します。 cleanup 関数は、引き数として、PAM ハンドル pamh へのポインター、実際の データ data へのポインター、ステータスコード pam_end_status を使用します。ステータスコードは、パージ する必要がある状態情報を正確に判別するため、それぞれのモジュールに固有のものになります。 pam_set_data() が呼び出されたときに、同じ module_data_name のところにすでにモジュールデータが存在して いる ( 以前の pam_set_data() の呼び出しにより) 場合、既存の data は新しい data で置き換えられ、既存の cleanup 関数は新しい cleanup 関数で置き換えられます。 pam_get_data() は、PAM ハンドル pamh に保存された、固有の名前 module_data_name で識別されるモジュー ル固有のデータを取り出します。 data 引き数には要求されたデータのアドレスが割り当てられます。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 pam(3) にリストした戻り値の他に、以下の値が返されることもあります。 PAM_NO_MODULE_DATA モジュール固有のデータが存在しません。 参照 pam(3), pam_end(3) Section 3-86 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pam_set_item(3) pam_set_item(3) 名称 pam_set_item, pam_get_item − PAM のための認証情報ルーチン 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_set_item(pam_handle_t * pamh, int item_type, const void *item); int pam_get_item(const pam_handle_t * pamh, int item_type, void **item); 説明 pam_get_item() および pam_set_item() を使用すると、アプリケーションや PAM サービスモジュールは必要に 応じて PAM 情報のアクセスや更新を行えます。情報は、 item_type で以下のいずれかを指定できます。 PAM_SERVICE サービス名です。 PAM_USER ユーザー名です。 PAM_AUTHTOK ユーザー認証トークンです。 PAM_OLDAUTHTOK 古いユーザー認証トークンです。 PAM_TTY tty 名です。 PAM_RHOST リモートホスト名です。 PAM_RUSER リモートユーザー名です。 PAM_CONV pam_conv 構造体です。 PAM_USER_PROMPT pam_get_user() が使用するデフォルトのプロンプトです。 item_type PAM_AUTHTOK と PAM_OLDAUTHTOK は、セキュリティ上の理由から、モジュールプロバイダ しか使用できません。認証モジュール、アカウントモジュール、セッション管理モジュールは、 PAM_AUTHTOK を現在の認証トークンとして扱い、 PAM_OLDAUTHTOK は無視しなければなりません。パスワード管 理モジュールは、 PAM_OLDAUTHTOK を現在の認証トークンとして扱い、 PAM_AUTHTOK を新しい認証 トークンとして扱わなければなりません。 pam_set_item() には、 pam_start() から返された認証ハンドル pamh、オブジェクトへのポインター item、その タイプ item_type を渡します。正常終了の場合、 pam_set_item() は、この項目を認証モジュールが割り当てた 内部記憶領域にコピーし、 PAM_SUCCESS を返します。以前設定されていた項目は新しい値で上書きされま す。 pam_get_item() には、 pam_start() から返された認証ハンドル pamh 、 item_type、要求したオブジェクトのア ドレスが割り当てられるポインターのアドレス item を渡します。オブジェクトデータは、基底のサービスモ ジュールのいずれかにより変更されない限り、以降の同じ item_type に対する pam_set_item() の呼び出しに よって変更されるまで有効です。この項目がまだ設定されていない場合、 pam_get_item() は NULL ポイン HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-87 pam_set_item(3) pam_set_item(3) ターを返します。 pam_get_item() で取り出した item は、変更したり解放してはなりません。この項目は pam_end( ) により解放されます。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了すると、 pam_get_item() は PAM_SUCCESS を返します。失敗すると、エラーコードを返します。戻 り値に関連したエラーの情報については、 pam(3) を参照してください。 参照 pam_start(3), pam_authenticate(3), pam_acct_mgmt(3), pam_open_session(3), pam_setcred(3), pam_chauthtok(3), pam_get_user(3), pam(3) Section 3-88 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_sm(3) pam_sm(3) 名称 pam_sm − PAM サービスモジュール API 構文 #include <security/pam_appl.h> #include <security/pam_modules.h> cc [ flag . . . ] file . . . −lpam [ library . . . ] 説明 PAM により、システム管理者はシステムで使用できる任意の認証サービスを柔軟に選択して認証を実行できる ようになります。また、アプリケーションを変更せずに、新しい認証サービスモジュールを組み込んで使用可 能にすることもできるようになります。 PAM フレームワーク libpam は、インタフェースライブラリと複数の認証サービスモジュールで構成されま す。PAM インタフェースライブラリは、アプリケーション プログラミング インタフェース (API) を実現する 階層です。認証サービスモジュールは、PAM API により呼び出される、ユーザー認証の個々のタイプを提供す る動的ロード可能オブジェクトの集まりです。 このマンページではサービスモジュールのための PAM API の概要を説明します。 インタフェース概要 PAM サービスモジュール インタフェースは、4つのカテゴリにまとめられる関数で構成されます。認証ライ ブラリ関数の名前はすべて pam_sm で始まります。 pam_*() インタフェースとこれに対応する pam_sm_*() イ ンタフェースの違いは、すべての pam_sm_*() インタフェースが、サービス固有のオプションを共有モジュー ルに渡すための特別なパラメータを必要とすることだけです。それ以外はすべて同じです。 第1のカテゴリには、個々のユーザーを認証する関数 ( pam_sm_authenticate(3))、そのユーザーの資格を設定す る関数 ( pam_sm_setcred(3)) があります。これらのバックエンド関数は、それぞれ pam_authenticate(3) と pam_setcred(3) の機能を実現します。 第2のカテゴリには、アカウント管理を行う関数 ( pam_sm_acct_mgmt(3)) があります。パスワードエージング やアクセス時間制限のためのチェックが含まれます。このバックエンド関数は、 pam_acct_mgmt(3) の機能を実 現します。 第3のカテゴリには、システムへのアクセスが許可された後のセッション管理を行う関数 ( pam_sm_open_session(3) と pam_sm_close_session(3)) があります。これらのバックエンド関数は、それぞれ pam_open_session(3) と pam_close_session(3) の機能を実現します。 第4のカテゴリには、認証トークンを変更する関数 ( pam_sm_chauthtok(3)) があります。このバックエンド関数 は、 pam_chauthtok(3) の機能を実現します。 状態にかかわるインタフェース 共通の状態情報を共有する一連の呼び出しを認証トランザクションといいます。認証トランザクションは、 pam_start() への呼び出しで開始されます。 pam_start() はスペースを割り当て、さまざまな初期化アクティビ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-89 pam_sm(3) pam_sm(3) ティを実行し、以降のライブラリへの呼び出しで使用する認証ハンドルを割り当てます。サービスモジュール は、 pam_start() の呼び出し時に呼び出されたり初期化されたりしないことに注意してください。モジュール はその関数が初めて使用されるときにロードされ、シンボルが解決されます。 PAM ハンドルは、 pam_get_item() API によりアクセスできる、トランザクションについての一定の情報を保 持します。モジュールは、 pam_set_item() を使って任意の項目情報の変更もできますが、 PAM_AUTHTOK と PAM_OLDAUTHTOK 以外は変更しないことをお勧めします。 モジュールがモジュール特定の状態情報を保存したい場合、 pam_set_data(3) 関数を使って PAM ハンドルと一 緒にその情報を保存できます。このデータは、すべてのモジュールおよびモジュールタイプの中で固有の名前 を使って保存しなければなりません。一部のモジュールでは、この方法を使って2つの異なるモジュールタイ プでデータを共有します。 たとえば、 pam_authenticate() への呼び出しの間、UNIX モジュールは固有の名前を使ってハンドルに認証ス テータス (成功、または失敗の原因) を保存することがあります。この情報は、 pam_setcred() が使用すること を意図しています。 pam_acct_mgmt() への呼び出しの間、アカウントモジュールは古くなったパスワードを示すデータをハンドル に保存することがあります。この情報は、 pam_chauthtok( ) が使用することを意図しています。 モジュールは、データと関連付けたクリーンアップ関数も保存できます。PAM フレームワークは、アプリケー ションが pam_end() を呼び出してトランザクションを閉じるときにこのクリーンアップ関数を呼び出します。 ユーザーとの対話 PAM サービスモジュールはユーザーとは直接通信しません。代わりに、このような対話はすべてアプリケー ションに依存して実行されます。アプリケーションは、認証トランザクションの初期化 (pam_start() への呼び 出しによる) のときに、関数 conv( ) へのポインターを、関連したアプリケーションのデータポインターと一緒 に、 pam_conv 構造体を通じて認証サービスに渡します。サービスモジュールは関数 conv() を使って、ユー ザーにデータ入力を求めるプロンプトの表示、エラーメッセージの出力、テキスト情報の表示を行います。詳 細は pam_start(3) を参照してください。ユーザーへのすべてのメッセージのローカライズはモジュールが行い ます。 規約 規 約 に よ れ ば、 ユー ザー 名 の 入 力 を 求 め る プ ロ ン プ ト を 表 示 す る 必 要 が あ る ア プ リ ケー ショ ン は、 pam_authenticate() を呼び出す前に、 pam_set_item() を呼び出して PAM_USER_PROMPT の値を設定しなけ ればなりません。その後、このサービスモジュールの pam_sm_authenticate() 関数は pam_get_user() を呼び出 し、ユーザー名の入力を求めるプロンプトを表示します。ある一定の PAM サービスモジュール (スマートカー ド モジュールなど) は、 PAM_USER_PROMPT の値を変更して固有のプロンプトを渡すことがあることに注 意してください。 PAM フレームワークでは、モジュール名、位置、オプションなどについての規則は何も強制されませんが、す べてのモジュールプロバイダが従うことが望まれる一定の規約があります。 規約によれば、モジュールは /usr/lib/security ディレクトリになければなりません。 Section 3-90 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_sm(3) pam_sm(3) モジュールは libpam_service_name.1 という名前が付けられます (たとえば libpam_unix.1 モジュール)。 このようなモジュールのすべてについて、モジュールがサポートする service_name やモジュールの機能を、サ ポートするオプションと一緒に説明した、対応するマンページがセクション5になければなりません。制約 は、システム管理者に明確に識別されなければなりません。たとえば、このモジュールが独立したモジュール なのか、それとも他のモジュールの存在に依存しているのかが明らかにされていなければなりません。このモ ジュールがスタックの他のモジュールの前後どちらにあるべきかも指定できなければなりません。 規約によれば、モジュールは以下のオプションをサポートしなければなりません。 debug syslog により、 LOG_DEBUG レベルでデバッグ情報を記録します。パスワードなどの機密情 報は何もログしないよう注意してください。 nowarn "password is about to expire" などの警告メッセージの表示をオフにします。 また、認証モジュールおよびパスワードモジュールは以下のオプションをサポートすることをお勧めします。 use_first_pass 認証のために、ユーザーにパスワードの入力を求める代わりに、ユーザーの初期パスワード ( ユーザーがスタックの最初の認証モジュールに対して認証されたときに入力したもの) を使用 します。パスワードが一致しないか、入力されていなかった場合、「失敗」を返し、ユーザー にパスワード入力を求めるプロンプトは表示しません。この方式をサポートすると、ユーザー は複数の方式に対して1つのパスワードを入力するだけですみます。 try_first_pass 認証のために、ユーザーにパスワードの入力を求める代わりに、ユーザーの初期パスワード ( ユーザーがスタックの最初の認証モジュールに対して認証されたときに入力したもの) を使用 します。パスワードが一致しないか、入力されていなかった場合、どのタイプ ( たとえば UNIX など) のパスワードが要求されているかを識別した後、ユーザーにパスワード入力を求 めるプロンプトを表示します。この方式をサポートすると、ユーザーは複数の方式に対して1 つのパスワードだけを使ってみることができ、必要な場合だけ複数のパスワードを入力するこ とができます。 use_psd ユーザーにパスワードの入力を求める代わりに、スマートカードに関連付けけられたユーザー の PIN (個人識別番号) の入力を求めるプロンプトを表示します。この方式により、スマート カードがアクセスされるようになり、ここからパスワードを取り出すことができます。このオ プションを使用する場合、ユーザーはシステムに接続されたスマートカード リーダに自分の スマートカードを差し込まなければなりません。 サポートされていないオプションがモジュールに渡された場合、syslog により、 LOG_ERR レベルでエラーを 記録しなければなりません。 サービスモジュールのパーミッションビットの設定は、「グループ」および「その他」のどちらからも書き込 み可能であってはなりません。このパーミッション規則が守られていない場合、 PAM フレームワークはモ ジュールをロードしません。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-91 pam_sm(3) pam_sm(3) アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 エラー エラーが発生した場合、モジュールは syslog(3C) を使って LOG_ERR レベルでエラーを記録しなければなりま せん。 戻り値 PAM サービスモジュールの関数は、特定のマンページで指定された任意の PAM エラー番号を返すことができ ます。 PAM_IGNORE エラー番号を返すこともできます。これは、このモジュールが required, optional, sufficient のどれであるかにかかわらず、PAM フレームワークがこれを無視しなければならないことを示します。 このエラー番号は、通常、指定のユーザーをまったく扱いたくない場合に返されます。 参照 pam(3), pam_start(3), pam_set_item(3), pam_get_user(3), pam_authenticate(3), pam_open_session(3), pam_setcred(3), pam_chauthtok(3), pam_strerror(3), pam_sm_authenticate(3), pam_sm_open_session(3), pam_sm_setcred(3), pam_sm_chauthtok(3), pam.conf(4), pam_user.conf(4) Section 3-92 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 pam_sm_acct_mgmt(3) pam_sm_acct_mgmt(3) 名称 pam_sm_acct_mgmt − pam_acct_mgmt のためのサービスプロバイダの実現 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> #include <security/pam_modules.h> int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags, int argc, const char **argv); 説明 pam_acct_mgmt(3) への呼び出しに応えて、 PAM フレームワークは pam.conf (4) ファイルにリストされたモ ジュールから pam_sm_acct_mgmt() を呼び出します。アカウント管理プロバイダは、このインタフェース関数 のバックエンド機能を提供します。アプリケーションは、この API を直接呼び出してはなりません。 関数 pam_sm_acct_mgmt() は、現在のユーザーのアカウントおよびパスワードが有効かどうかを判別します。 パスワードおよびアカウントの期限のチェック、有効なログイン時間などが含まれます。対象ユーザーは以前 に 呼 び 出 し た pam_start() で 指 定 さ れ、 認 証 ハ ン ド ル pamh で 参 照 さ れ ま す。 認 証 ハ ン ド ル は pam_sm_acct_mgmt() への最初の引き数として渡します。 flags フィールドには以下のフラグを設定できます。 PAM_SILENT アカウント管理サービスのメッセージ作成を禁止します。 PAM_DISALLOW_NULL_AUTHTOK ユーザーの認証トークンがヌルの場合、アカウント管理サービスは PAM_AUTHTOKEN_REQD を返 さなければなりません。 argc 引き数は、構成ファイル pam.conf (4) から渡されるモジュールオプションの数を示します。 argv は、モ ジュールオプションを指定します。モジュールオプションはアカウント管理サービスにより解釈され、処理さ れます。使用できるさまざまな options については、特定のモジュールのマンページを参照してください。モ ジュールに未知のオプションが渡された場合、 syslog(3C) によりエラーが記録され、このオプションは無視さ れなければなりません。 アカウント管理モジュールは、ユーザーのパスワードが古い、または期限切れであると判別した場合、 pam_set_data() を 使っ て、 認 証 ハ ン ド ル pamh に こ の 情 報 を 状 態 と し て 保 存 し な け れ ば な り ま せ ん。 pam_chauthtok() は、この情報を使って期限切れのパスワードを判別します。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 ログインが制限されない場合、 PAM_SUCCESS が返されます。エラーが発生すると、以下のエラー値が返さ れることもあります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-93 pam_sm_acct_mgmt(3) pam_sm_acct_mgmt(3) PAM_USER_UNKNOWN 基底の認証モジュールがユーザーを認識できません。 PAM_AUTHTOKEN_REQD 新しい認証トークンが必要です。 PAM_ACCT_EXPIRED ユーザーアカウントが期限切れです。 PAM_PERM_DENIED ユーザーは現時点でアカウントへのアクセスを拒否されました。 PAM_IGNORE 制御フラグが required, optional , sufficient のどれであるかにかかわらず、基 底のアカウントモジュールを無視します。 PAM_ACCT_DISABLED ユーザーアカウントの使用が禁止されています (高信頼性モードのみ)。 PAM_TERM_DISABLED 端末の使用が禁止されています (高信頼性モードのみ)。 PAM_NOT_AUTHORIZED ユーザーの端末アクセスが許可されていません (高信頼性モードのみ)。 PAM_NOT_RTIME ログイン時間が不正です (高信頼性モードのみ)。 参照 pam(3), pam_acct_mgmt(3), syslog(3C), pam.conf(4) Section 3-94 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_sm_authenticate(3) pam_sm_authenticate(3) 名称 pam_sm_authenticate − pam_authenticate 用サービスプロバイダの実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> #include <security/pam_modules.h> int pam_sm_authenticate(pam_handle_t * pamh, int flags, int argc, const char **argv); 説明 pam_authenticate(3) の呼び出しに応じて、 PAM フレームワークが pam.conf (4) ファイルにリストされたモ ジュールから pam_sm_authenticate() を呼び出します。認証プロバイダは、このインタフェース関数のバック エンド機能を提供します。 関数 pam_sm_authenticate() が呼び出されると、現ユーザーの身元を検査します。通常、システム内で構成さ れている認証方式に基づき、ユーザーにパスワードまたは認証トークンの入力を要求します。対象ユーザーは 以前に呼び出した pam_start() で指定され、認証ハンドル pamh で参照されます。 ユーザーが認証サービスに認識されない場合、サービスモジュールはこのエラーをマスクし、続けてユーザー にパスワード入力を求めるプロンプトを表示します。その後で、エラー PAM_USER_UNKNOWN を返しま す。 pam_sm_authenticate() には以下のフラグを渡せます。 PAM_SILENT 認証サービスのメッセージ作成を禁止します。 PAM_DISALLOW_NULL_AUTHTOK ユーザーの認証トークンがヌルの場合、認証サービスは PAM_AUTH_ERROR を返します。 argc 引き数は、構成ファイル pam.conf (4) から渡されるモジュールオプションの数を示します。 argv は、モ ジュールオプションを指定します。モジュールオプションは認証サービスにより解釈され、処理されます。使 用できる各 options については、特定モジュールのマンページを参照してください。未知のオプションが渡さ れた場合、モジュールはエラーを記録し、そのオプションを無視します。 pam_sm_authenticate() は、処理を終える前に pam_get_item() を呼び出して PAM_AUTHTOK を取り出しま す。 こ の 値 が 設 定 さ れ て い な い 場 合 ( す な わ ち、 値 が NULL の 場 合 ) 、 pam_sm_authenticate() は、 pam_set_item() を使ってユーザーが入力したパスワードを設定します。 認証モジュールは、 pam_set_data() を使って、認証ステータス (成功値、または失敗の原因を示す値) を認証 ハンドルに設定することがあります。この値は、 pam_setcred() が使用します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-95 pam_sm_authenticate(3) pam_sm_authenticate(3) アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 注意 モジュールはイベントが失敗した場合でも認証を再試行しません。アプリケーションが認証を再試行し、リト ライ回数を管理します。リトライ回数を制限するには、モジュールから PAM_MAXTRIES エラーを返しま す。 戻り値 正常終了すると、 PAM_SUCCESS が返されます。また、以下の値が返されることがあります。 PAM_MAXTRIES 最大認証試行回数を超えました。 PAM_AUTH_ERR 認証に失敗しました。 PAM_CRED_INSUFFICIENT 権限が不足しているために認証データにアクセスできません。 PAM_AUTHINFO_UNAVAIL 基底の認証サービスが認証情報を取り出せません。 PAM_USER_UNKNOWN 基底の認証モジュールがユーザーを認識できません。 PAM_IGNORE 制御フラグが required, optional, sufficient のどれであるかにかかわらず、基底 の認証モジュールを無視します。 参照 pam(3), pam_authenticate(3), pam.conf(4), pam_user.conf(4) Section 3-96 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_sm_chauthtok(3) pam_sm_chauthtok(3) 名称 pam_sm_chauthtok − pam_chauthtok 用サービスプロバイダの実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> #include <security/pam_modules.h> int pam_sm_chauthtok(pam_handle_t * pamh, int flags, int argc, const char **argv); 説明 pam_chauthtok() の呼び出しに応えて、PAM フレームワークは pam.conf (4) ファイルにリストされたモジュー ルから pam_sm_chauthtok() を呼び出します。パスワード管理プロバイダは、このインタフェース関数のバッ クエンド機能を提供します。 pam_sm_chauthtok() は、認証ハンドル pamh により参照される特定ユーザーに関連付けられた認証トークンを 変更します。 pam_chauthtok() には以下のフラグを渡せます。 パスワードサービスのメッセージ作成を禁止します。 PAM_SILENT PAM_CHANGE_EXPIRED_AUTHTOK パスワードサービスが古いパスワードだけ更新します。このフラグが渡され ない場合、すべてのパスワードを更新します。 PAM_PRELIM_CHECK パスワードサービスが予備検査だけを実行します。パスワードは更新されま せん。 PAM_UPDATE_AUTHTOK パスワードサービスがパスワードを更新します。 PAM_PRELIM_CHECK と PAM_UPDATE_AUTHTOK は同時に設定できないことに注意してください。 呼び出しが正常終了すると、ユーザーの認証トークンはシステムで構成されている認証方式に従って、(フラグ に基づき) 変更できる状態になるか、または変更されます。 argc 引き数は、構成ファイル pam.conf (4) から渡されるモジュールオプション数を示します。 argv は、モ ジュールオプションを指定します。モジュールオプションはパスワード管理サービスにより解釈され、処理さ れます。使用できるさまざまな オプションについては、特定のモジュールのマンページを参照してください。 新 し い パ ス ワー ド が 一 定 の 条 件 規 定 を 満 た す か ど う か の 判 別 は、 pam_sm_chauthtok() が 行 い ま す。 pam_sm_chauthtok() は、入力されたパスワードがその条件規定を満たすまで、ユーザーに再度新しいパスワー ドの入力を求めるプロンプトを (制限回数内で) 続けて表示します。 pam_sm_chauthtok() は、 処 理 を 終 え る 前 に pam_get_item() を 呼 び 出 し て PAM_AUTHTOK と PAM_OLDAUTHTOK の両方を取り出します。両方とも NULL の場合、 pam_sm_chauthtok() は、ユーザーが HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-97 pam_sm_chauthtok(3) pam_sm_chauthtok(3) 入力した新しいパスワードと古いパスワードをそれぞれに設定します。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 注意 PAM フレームワークはパスワードサービスを二度呼び出します。最初は、 PAM_PRELIM_CHECK フラグを 使って呼び出します。この段階では、パスワードモジュールは予備検査 (たとえば、リモート ネームサービス に ping を実行して更新の準備ができているかどうかを調べる) だけを実行します。パスワードモジュールが一 時エラー (たとえば、リモート名サービスが一時的にダウンしているなど) を検出すると、PAM フレームワー クに PAM_TRY_AGAIN が返されます。 PAM フレームワークは直ちにアプリケーションにエラーを返しま す。 す べ て の パ ス ワー ド モ ジュー ル が 予 備 検 査 を 通 過 し た 場 合、 PAM フ レー ム ワー ク は フ ラ グ PAM_UPDATE_AUTHTOK を使ってもう一度パスワードサービスを呼び出します。この段階で、それぞれの パスワードモジュールにより適切なパスワードが更新されます。エラーが発生すると、もう一度アプリケー ションに報告されます。 サービスモジュールが PAM_CHANGE_EXPIRED_AUTHTOK を受け取ると、パスワードが古いか、または期 限切れであるかを調べます。パスワードが古いかまたは期限切れの場合、サービスモジュールによりパスワー ドが更新されます。ステータスが、パスワードがまだ古くない / 期限切れではないことを示している場合、パ スワードモジュールは PAM_IGNORE を返します。 ユーザーのパスワードが古いかまたは期限切れの場合、PAM アカウントモジュールは、 pam_set_data() を 使っ て、 認 証 ハ ン ド ル pamh に こ の 情 報 を 保 存 し ま す。 関 連 す る パ ス ワー ド 管 理 モ ジュー ル は、 pam_get_data() を使ってこの情報を取り出し、特定モジュールのパスワード更新を求めるプロンプトの表示判 別に使用します。 戻り値 正常終了したら、 PAM_SUCCESS が返されます。以下の値が返されることもあります。 PAM_PERM_DENIED パーミッションがありません。 PAM_AUTHTOK_ERR 認証トークンの操作エラーです。 PAM_AUTHTOK_RECOVERY_ERR 古い認証トークンを回復できません。 PAM_AUTHTOK_LOCK_BUSY 認証トークンのロックがビジーです。 PAM_AUTHTOK_DISABLE_AGING 認証トークンのエージングが禁止されています。 PAM_USER_UNKNOWN パスワードサービスがユーザーを認識できません。 PAM_TRY_AGAIN パスワードサービスの予備検査に失敗しました。 参照 pam(3), pam_chauthtok(3), pam.conf(4) Section 3-98 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pam_sm_open_session(3) pam_sm_open_session(3) 名称 pam_sm_open_session, pam_sm_close_session − pam_open_session および pam_close_session それぞれのサービスプ ロバイダの実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> #include <security/pam_modules.h> int pam_sm_open_session(pam_handle_t * pamh, int flags, int argc, const char **argv); int pam_sm_close_session(pam_handle_t * pamh, int flags, int argc, const char **argv); 説明 pam_open_session() および pam_close_session() への呼び出しに応えて、 PAM フレームワークは pam.conf (4) ファイルにリストされたモジュールから、それぞれ pam_sm_open_session() または pam_sm_close_session() を 呼び出します。セッション管理プロバイダは、このインタフェース関数のバックエンド機能を提供します。 pam_sm_open_session() を呼び出して、セッション管理を開始します。 pam_sm_close_session() は、セッション が終了したときに呼び出します。引き数 pamh は認証ハンドルです。 flags フィールドには以下のフラグを設定 できます。 PAM_SILENT セッションサービスのメッセージ作成を禁止します。 argc 引き数は、構成ファイル pam.conf (4) から渡されるモジュールオプションの数を示します。 argv は、モ ジュールオプションを指定します。モジュールオプションはセッション管理サービスにより解釈され、処理さ れます。未知のオプションが渡された場合、 syslog(3C) にエラーを記録し、このオプションを無視しなければ なりません。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了したら、 PAM_SUCCESS が返されます。エラーが発生すると、以下の値が返されます。 PAM_SESSION_ERR PAM_IGNORE 指定したセッションでエントリーを作成 / 削除できません。 制御フラグが required, optional, sufficient のどれかにかかわらず、基底のセッション モジュールを無視します。 参照 pam(3), pam_open_session(3), syslog(3C), pam.conf(4) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-99 pam_sm_setcred(3) pam_sm_setcred(3) 名称 pam_sm_setcred − pam_setcred 用サービスプロバイダの実行 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> #include <security/pam_modules.h> int pam_sm_setcred(pam_handle_t * pamh, int flags, int argc, const char **argv); 説明 pam_setcred() の呼び出しに応えて、PAM フレームワークは pam.conf (4) ファイルにリストされたモジュールか ら pam_sm_setcred() を呼び出します。認証プロバイダは、このインタフェース関数のバックエンド機能を提供 します。 pam_sm_setcred() を呼び出して、認証ハンドル pamh に関連付けられた現在のユーザーの証明を設定します。 flags フィールドには以下のフラグを設定できます。最初の4つのフラグは同時に指定できないことに注意して ください。 PAM_CRED_ESTABLISH 認証サービス用にユーザー資格認定を設定します。 PAM_CRED_DELETE 認証サービス用のユーザー資格認定を削除します。 PAM_CRED_REINITIALIZE ユーザー資格認定を再初期化します。 PAM_CRED_REFRESH ユーザー資格認定の期限を延長します。 PAM_SILENT 認証サービスのメッセージ作成を禁止します。 どのフラグも設定しない場合、デフォルトとして PAM_CRED_ESTABLISH が使用されます。 argc 引き数は、構成ファイル pam.conf (4) から渡されるモジュールオプションの数を示します。 argv は、モ ジュールオプションを指定します。モジュールオプションは認証サービスにより解釈され、処理されます。モ ジュールに未知のオプションが渡された場合、エラーが記録され、そのオプションは無視されます。 PAM_SILENT フラグが設定されていない場合、 pam_sm_setcred() は、対話形式で対応する pam_sm_authenticate() 関数を使用してすべての失敗ステータスを表示します。 認証ステータス (成功、または失敗の原因) は、認証モジュールによりモジュール特定の状態として認証ハンド ルに保存されます。このステータスを pam_get_data() で取り出し、ユーザー資格認定の設定を判別します。 注記 pam_sm_setcred() へは、 pam_sm_authenticate() が使用したモジュールオプションと同じものが渡されます。 Section 3-100 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pam_sm_setcred(3) pam_sm_setcred(3) アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 戻り値 正常終了したら、 PAM_SUCCESS が返されます。エラーが発生すると、以下の値が返されます。 PAM_CRED_UNAVAIL 基底の認証サービスによりユーザー資格認定が拒否されました。 PAM_CRED_EXPIRED ユーザー資格認定が期限切れです。 PAM_USER_UNKNOWN 認証サービスがユーザーを認識できません。 PAM_CRED_ERR ユーザー資格認定の設定に失敗しました。 PAM_IGNORE 制御フラグが required, optional, sufficient のどれかかわらず、基底の認証モ ジュールを無視します。 参照 pam(3), pam_authenticate(3), pam_setcred(3), pam_sm_authenticate(3), pam.conf(4) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-101 pam_start(3) pam_start(3) 名称 pam_start, pam_end − PAM 用の認証トランザクションルーチン 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> int pam_start(const char *service, const char *user, const struct pam_conv * pam_conv, pam_handle_t **pamh); int pam_end(pam_handle_t * pamh, int status); 説明 pam_start() を呼び出して、認証トランザクションを開始します。 pam_start() は、引き数として、現在のサー ビス名 service、認証するユーザー名 user 、対話用構造体へのアドレス pam_conv 、認証ハンドル pamh 用の変 数へのアドレスを使用します。 正常終了すると、 pamh は、以降の認証ライブラリへの呼び出しで使用するために PAM ハンドルを参照しま す。 pam_conv 構造体 pam_conv は、アプリケーションが提供する対話形式の関数のアドレスを含みます。基底の PAM サービスモジュールは、この関数を呼び出してユーザーとの情報の入出力を行います。 pam_conv 構造体 には以下のエントリーがあります。 struct pam_conv { int (∗conv)(); void /* Conversation function */ ∗appdata_ptr; /* Application data */ }; conv の構文は以下のとおりです。 int conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); 関数 conv() は、アプリケーションまたはユーザーと PAM が会話を行うためにサービスモジュールが呼び出し ます。ウィンドウアプリケーションの場合、アプリケーションは対話で使用する新しいポップアップウィンド ウを作成します。 パラメータ num_msg は、呼び出しに関連付けられたメッセージの数です。パラメータ msg は、長さが num_msg の、 pam_message 構造体の配列へのポインターです。 構造体 pam_message は、プロンプトやエラーメッセージ、または任意のテキスト情報を、認証サービスからア プリケーションまたはユーザーへ渡すために使用されます。メッセージのローカライズは PAM サービスモ ジュールが行います。 pam_message が使用するメモリーは、PAM モジュールが割り当て、解放しなければな りません。 pam_message 構造体には以下のエントリーがあります。 Section 3-102 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pam_start(3) pam_start(3) struct pam_message{ int char msg_style; ∗msg; }; メッセージスタイル msg_style には以下の値のどれかを設定できます。 PAM_PROMPT_ECHO_OFF 応答のエコーを禁止して、ユーザーにプロンプトを表示します。 PAM_PROMPT_ECHO_ON 応答のエコーを許可して、ユーザーにプロンプトを表示します。 PAM_ERROR_MSG エラーメッセージを表示します。 PAM_TEXT_INFO 一般的なテキスト情報を表示します。 メッセージ文字列と応答文字列の最大長は、 <security/pam_appl.h> の PAM_MAX_MSG_SIZE で定義されま す。 構造体 pam_response は、認証サービスがアプリケーションまたはユーザーから応答を得るために使用します。 pam_response が使用する記憶領域は、アプリケーションが割り当て、PAM モジュールが解放しなければなりま せん。 pam_response 構造体には以下のエントリーがあります。 struct pam_response{ char int ∗resp; resp_retcode; /* currently not used, should be set to 0 */ }; PAM_PROMPT_ECHO_OFF と PAM_PROMPT_ECHO_ON のメッセージスタイルのための改行文字の除去 や、 PAM_ERROR_MSG と PAM_TEXT_INFO のメッセージスタイルのための改行文字の追加 ( 該当する場 合) は、会話関数が行います。 appdata_ptr は、アプリケーションデータ ポインターです。これは、アプリケーションが PAM サービスモ ジュールへ渡します。 PAM モジュールは会話関数を通じてこのポインターを返すので、アプリケーションは このポインターを使ってアプリケーション特定の任意のデータをポイントできます。 pam_end() を呼び出すと、 pamh で識別される認証トランザクションは終了し、認証モジュールが割り当てた すべての記憶領域を解放します。引き数 status は pam ハンドル内に登録されている cleanup() 関数に渡され、 それぞれのモジュールについて削除すべき物を判断するのに使用されます。 cleanup 関数は、基底の PAM モ ジュールによりこのハンドルに結び付けられ、 pam_set_item(3) の呼び出しを通じてモジュール特定のデータを 解放します。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-103 pam_start(3) pam_start(3) 戻り値 戻り値に関連したエラー情報については、 pam(3) を参照してください。 参照 pam_authenticate(3), pam_set_item(3), pam_acct_mgmt(3), pam_open_session(3), pam_setcred(3), pam_chauthtok(3), pam_strerror(3), pam(3) Section 3-104 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pam_strerror(3) pam_strerror(3) 名称 pam_strerror − PAM エラーメッセージ文字列の取得 構文 cc [ flag . . . ] file . . . −lpam [ library . . . ] #include <security/pam_appl.h> const char *pam_strerror(pam_handle_t * pamh, int errnum); 説明 pam_strerror() は、 errnum の PAM エラー番号を PAM エラーメッセージ文字列にマップし、この文字列への ポインターを返します。アプリケーションは、返された文字列の解放や変更を行ってはなりません。 pamh 引き数は、以前に pam_start() を呼び出して取得した PAM ハンドルです。 pam_start() がエラーを返す 場合、NULL の PAM ハンドルを渡します。 アプリケーション使用法 PAM インタフェースのスレッドへの対応状況については、 pam(3) を参照してください。 エラー errnum が範囲外である場合、 pam_strerror() は NULL を返します。 参照 pam(3), pam_start(3) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-105 pathfind(3G) pathfind(3G) 名称 pathfind() − 名前付きディレクトリ内で名前付きファイルを検索 構文 #include <libgen.h> char *pathfind (const char * path, const char *name, const char *mode); 説明 pathfind は、ファイル name 用に path の中で名前を付けられたディレクトリを検索します。 path の中で名前を 付けられたディレクトリは、コロンで区切られています。 mode は、以下のセット rwxfbcdpugks から選択し たオプション文字の文字列です。 文字 意味 r 読み取り可能 w 書き込み可能 x 実行可能 f 通常ファイル b ブロック型特殊ファイル c キャラクタ型特殊ファイル d ディレクトリ p FIFO (パイプ) u ユーザー ID ビットを設定 g グループ ID ビットを設定 k スティッキービット s 非ゼロサイズ 読み取り、書き込み、および実行の各オプションは、現在のプロセスの実ユーザー ID と実グループ ID (実効 ID ではない) に対してチェックされます。 mode によって指定された特性をすべて備えたファイル name が path によって指定されたディレクトリに見つ かった場合、 pathfind は、 path のメンバーの後にスラッシュ文字 (/) と name が続く文字列へのポインターを 返します。 name がスラッシュで始まる場合、それは絶対パス名として扱われ、 path は無視されます。 空の path メンバーは現在のディレクトリとして扱われます。 . は追加されず、最初に一致した name が返され ます。 戻り値 一致が見つからない場合、 pathname は空のポインター ((char ∗) 0) を返します。 例 PATH 環境変数を使って ls コマンドを見つけるには、次のようにします。 pathfind (getenv ("PATH"), "ls", "rx") Section 3-106 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pathfind(3G) pathfind(3G) 警告 返されたポインターが示す文字列は、 pathfind を後で呼び出したときに再使用される静的領域に保存されま す。 参照 sh(1), test(1), access(2), mknod(2), stat(2), getenv(3C), thread_safety(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-107 pechochar(3X) pechochar(3X) 名称 pechochar, pecho_wchar — 文字と修飾情報の書き出しおよびそのパッドの速やかなリフレッシュ 構文 #include <curses.h> int pechochar(WINDOW *pad, chtype ch); int pecho_wchar(WINDOW *pad, const cchar_t *wch); 説明 pechochar() と pecho_wchar() の両関数は、あるパッドに 1 文字を出力して、ただちにそのパッドをリフレッ シュします。これらの関数は、それぞれ prefresh() の呼び出しを後に付けて waddch() または wadd_wch() を呼 び出した場合に相当します。画面上のパッドの最終的な位置が、 prefresh() への引き数として再使用されま す。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 pechochar() 関数は、各文字が 1バイトで、その属性が A_ で始まる定数だけで表現することができるキャラク ターセットでのみ確実に動作することが保証されています。 参照 echochar(3X), newpad(3X), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-108 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 perror(3C) perror(3C) 名称 perror( ), strerror( ), errno, sys_errlist, sys_nerr − システム エラーメッセージ 構文 #include <stdio.h> void perror(const char *s); #include <string.h> char *strerror(int errnum); #include <errno.h> extern char *sys_errlist[ ]; extern int sys_nerr; 廃止インタフェース #include <string.h> int strerror_r(int errnum, char *buffer, int buflen); 説明 perror() は、システム関数またはライブラリ関数の呼び出し時に発生した最新のエラーを説明する言語依存 メッセージを標準エラー出力に出力します。引き数文字列 s を先頭にコロン、空白、メッセージ、ニューライ ンの順に出力されます。エラーが発生したプログラム名が引き数文字列に含まれていれば、非常に実用的にな ります。エラー番号は、シンボル errno から受け渡されます。 errno はエラーが発生したときに設定され、正 しい呼び出しが行われるまでクリアされません。メッセージの内容は errno を引き数として strerror() 関数を 呼び出したときに返されるものと同じです。 NULL 文字列が与えられたときは、 perror() 関数はメッセージと ニューラインだけを出力します。 メッセージのフォーマットを単純にするために、 strerror() 関数とメッセージ文字列の sys_errlist 配列を使う ことができます。 strerror() 関数は errnum のエラー番号を言語依存エラーメッセージ文字列にマップし、文字 列へのポインターを返します。メッセージ文字列はニューラインなしで返されます。 errno を sys_errlist への インデックスとして使って、未変換のニューラインなしのメッセージ文字列を得ることができます。 sys_nerr はテーブルの中で最大のメッセージ番号です。新しいエラーコードがテーブルよりも先にシステムに追加され ていることがあるので、この値をチェックする必要があります。 strerror() は変換が必要なときにメッセージ を取得するのに使用してください。 廃止インタフェース strerror_r() は、システム エラーメッセージを処理します。 多言語化対応 環境変数 strerror() で返される、または perror() で出力されるメッセージの言語は LANG 環境変数で指定されます。言 語依存メッセージが使用できない、あるいは、 LANG が設定されていないか空の文字列が設定されている場合 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-109 perror(3C) perror(3C) は、「C」言語 (lang(5) を参照) に関連したデフォルトのメッセージが使われます。 サポートされるコードセット シングル/マルチバイトの文字コードセットがサポートされています。 戻り値 perror() は値を返しません。 errnum メッセージ番号が正しければ、 strerror() は言語依存メッセージ文字列へのポインターを返します。ポ イントされている配列はプログラムで変更してはいけません。また、次の関数呼び出しでオーバーライトされ ます。正しい errnum メッセージ番号に対応する言語依存メッセージが存在しない場合は、 strerror() は errnum を sys_errlist へのインデックスとして使ってメッセージ文字列を取得します。 errnum メッセージ番号 が不正な場合は、 strerror() は NULL 文字列に対するポインターを返します。 警告 strerror() の戻り値が指すデータの内容は、次に同じスレッドから strerror() を呼び出すと上書きされます。 strerror_r() インタフェースは廃止され、現在では既存の DCE アプリケーションとの互換性を保つためにだけ サポートされています。新しいマルチスレッドアプリケーションでは、 strerror() を使用してください。 参照 errno(2), lang(5), environ(5), thread_safety(5) 標準準拠 perror(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strerror(): AES, SVID3, XPG3, XPG4, ANSI C sys_errlist(): SVID2, SVID3, XPG2 sys_nerr(): SVID2, SVID3, XPG2 Section 3-110 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pfmt(3C) pfmt(3C) 名称 pfmt(), vpfmt() − 標準形式のメッセージ表示 構文 #include <pfmt.h> int pfmt(FILE *stream, long flags, char *fmt, /* [arg, ] */ ...); #include <stdarg.h> #include <pfmt.h> int vpfmt(FILE *stream, long flags, char *fmt, va_list ap); 説明 pfmt() 関数は、 stream に標準形式のメッセージを書き込みます。また、 stream へローカライズされた文字列 を書き込むこともできます。 pfmt() に対する引き数は、 printf() スタイルの書式でフォーマットされます。 vpfmt() は、引き数が引き数リスト (stdarg(5) を参照) で渡されること以外は、 pfmt() と同じです。 stream に表示される標準形式には、次のフィールドがあります。 label:severity:text label 文字列は、 setlabel(3C) で定義されます。ラベルが定義されていない場合、このフィールドは使用されま せん。 severity 文字列は、 flags の severity グループで制御されます。 text 文字列は、フォーマットされたユー ザー文字列です。 flags は、どのようにフォーマットするかを制御します。制御情報は、いくつかの異なるグループに分けられま す。各グループから、1つのフラグだけを、セットできます。 出力フォーマット MM_NOSTD 標準形式を使用しません。 fmt を printf() 書式文字列として扱います。 このモードでは、カタログアクセスに関連したフラグだけをセットでき ます。 MM_STD 標準形式を使用してフォーマットします (MM_STD は、デフォルトで す)。 カタログアクセス MM_NOGET ローカライズされたメッセージカタログをアクセスしません。書式文字 列として、 def_str ( fmt 中のフィールド) を使用します。 MM_GET ローカライズされたメッセージカタログをアクセスします (MM_GET はデフォルトです)。 重要度 MM_HALT HP-UX 11i Version 2: August 2003 ローカライズされた HALT 文字列を表示します。 −1− Hewlett-Packard Company Section 3-111 pfmt(3C) pfmt(3C) MM_ERROR ローカライズされた ERROR 文字列を表示します (MM_ERROR はデ フォルトです)。 MM_WARNING ローカライズされた WARNING 文字列を表示します。 MM_INFO ローカライズされた INFO 文字列を表示します。 これらの予約された重要度の他に、ユーザーが重要度文字列を追加して定義することもできま す (addsev(3C) を参照 )。ユーザーが定義した重要度を指定するには、 flags は、他の制御グ ループのフラグとユーザーが定義した重要度の数値の論理和でなくてはなりません。 アクション MM_ACTION このフラグは、標準形式メッセージの severity フィールドに TO FIX: と いう形式のローカライズされた文字列を生成します。このフラグと重要 度制御グループのフラグがセットされた場合、このフラグが優先され、 TO FIX: 文字列が表示されます。 fmt 文字列には、次のフィールドがあります。 catalog:msg_number:def_str catalog は、 mkmsgs(1) で作成されたメッセージカタログであり、ローカライズされたメッセージが検索されま す。 msg_number は、メッセージカタログから取り出す文字列を識別する正の索引番号です (1から始まりま す)。 def_str は、 pfmt() が現在のロケールまたはデフォルトのロケールの catalog からメッセージを取り出す ことができなかった場合に使用する、デフォルト文字列です。メッセージカタログが存在しない場合、あるい は、 msg_number が範囲外の値の場合、エラーが発生します。 catalog を指定しなかった場合、 pfmt() は setcat(3C) で定義されたメッセージカタログを使用します。 MM_NOGET を flags にセットした場合、 def_str だけを、指定しなければなりません。 次のような状態の場合、 pfmt() 関数は Message not found!! を表示します。 • メッセージカタログが fmt に指定されていず、カタログが setcat(3C) で定義されていない場合。 • msg_number が、正でない場合。 • メッセージを取り出せず、 def_str が指定されていない場合。 戻り値 pfmt() と vpfmt() は、正常終了すると、書き込んだバイト数を返します。失敗すると、負の値を返します。 例 例1 setlabel("UX:my_appl"); pfmt(stderr, MM_INFO,"MY_cat:1:file is writable"); 次のようなメッセージを生成します。 Section 3-112 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pfmt(3C) pfmt(3C) UX:my_appl: INFO: file is writable 例2 setlabel(""); setcat("MY_cat"); pfmt(stderr, MM_ERROR,":1:%s is writable", "my_file"); 次のようなメッセージを生成します。 ERROR: my_file is writable 例3 setlabel(""); setcat("MY_cat"); pfmt(stderr, MM_NOSTD,":1:%s is writable", "my_file"); 次のようなメッセージを生成します。 my_file is writable 例4 #define MM_USER 10 setlabel(""); addsev(MM_USER, "MY_NOTE"); pfmt(stderr, MM_USER|MM_GET,"MY_cat:1:%s is writable", "my_file"); 次のようなメッセージを生成します。 MY_NOTE: my_file is writable 参照 mkmsgs(1), addsev(3C), gettxt(3C), setcat(3C), setlabel(3C), setlocale(3C), printf(3S), stdarg(5), thread_safety(5) 標準準拠 pfmt(): SVID3 vpfmt(): SVID3 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-113 popen(3S) popen(3S) 名称 popen( ), pclose( ) − プロセスへの、またはプロセスからのパイプ I/O の初期化 構文 #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); 説明 popen() は、呼び出しプログラムと POSIX シェル、 /usr/bin/sh (sh-posix(1) を参照) の間にパイプを作成しま す。 popen() の引き数はnullで終わる文字列へのポインターで、一方はシェルコマンド行です。もう一方はI/Oモー ドで、読み出しの時は r、書き出しの時は w のどちらかです。 popen() はストリームポインターを返します。I/Oモードが w の時はそのファイル stream に書き出すことでコ マンドの標準入力に書き出せます。 I/Oモードが r の時は、そのファイル stream から読み込むことでコマンド の標準出力から読み込めます。 popen() でオープンされたストリームをクローズするには pclose() を使います。この関数は関連したプロセスが 終了するまで待ち、コマンドの終了状態を返します。 開いているファイルは共有されるので、 r 型のコマンドは入力フィルターとして、 w 型のコマンドは出力フィ ルターとして使えます。 アプリケーション使用法 ストリームが popen() によってパイプに関連づけられた後は、ストリームはバイト指向になります (orientation(5) を参照)。 戻り値 popen() はファイルあるいはプロセスが作成できなかったときは NULL ポインターを返します。コマンドの実行 が成功したかどうかは pclose() の戻り値を調べればわかります。 pclose() は、 stream が popen() されたコマンドと関係ないと -1 を返します。 /usr/bin/sh が何らかの理由により 実行されなかったときは127を返します。 警告 本来のプロセスと popen() されたプロセスが同時に共通のファイルに読み書きする場合には、バッファリング は正しく機能しないので、どちらのプロセスからもバッファー I/O は使ってはいけません。出力フィルターで の問題は fflush() などを使って、注意深くバッファーを掃き出すことで防げます。詳しくは fclose(3S) を参照し てください。 参照 pipe(2), wait(2), fclose(3S), fopen(3S), system(3S), orientation(5), thread_safety(5) Section 3-114 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 popen(3S) popen(3S) 標準準拠 popen(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2 pclose(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-115 pow(3M) pow(3M) 名称 pow( ), powf( ), powl( ), poww( ), powq( ), pown( ), pownf( ), pownl( ), pownw( ), pownq( ), powlln( ), powllnf( ), powllnl( ), powllnw( ), powllnq( ) − べき乗関数 構文 #include <math.h> double pow(double x, double y); float powf(float x, float y); Itanium(R)ベース システムのみ long double powl(long double x, long double y); extended poww(extended x, extended y); quad powq(quad x, quad y); double pown(double x, int y); float pownf(float x, int y); long double pownl(long double x, int y); extended pownw(extended x, int y); quad pownq(quad x, int y); double powlln(double x, long long y); float powllnf(float x, long long y); long double powllnl(long double x, long long y); extended powllnw(extended x, long long y); quad powllnq(quad x, long long y); 説明 pow() 関数は、 xy を返します。 powf() は、 pow() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ powl() は、 pow() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返し ます。 poww() は、 pow() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 powq() は、HP-UX システムでは powl() と同等です。 Section 3-116 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pow(3M) pow(3M) pown() 関数は、 xy を返します。 pownf() は、 pown() の float バージョンで、 float 型の (第1) 引き数をとり、 float 型の結果を返します。 pownl() は、 pown() の long double バージョンで、 long double 型の (第1) 引き数をとり、 long double 型の結 果を返します。 pownw() は、 pown() の extended バージョンで、 extended 型の (第1) 引き数をとり、 extended 型の結果を返 します。 pownq() は、HP-UX システムでは pownl() と同等です。 powlln() 関数は xy を返します。 powllnf() は、 powlln() の float バージョンで、 float 型の (第1) 引き数をとり、 float 型の結果を返します。 powllnl() は、 powlln() の long double バージョンで、 long double 型の (第1) 引き数をとり、 long double 型の 結果を返します。 powllnw() は、 powlln() の extended バージョンで、 extended 型の (第1) 引き数をとり、 extended 型の結果を 返します。 powllnq() は、HP-UX システムでは powllnl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itanium ベース システムで poww() 、 powq() 、 pownw() 、 pownq() 、 powllnw() 、または powllnq() を使うに は、 −fpwidetypes オプションも指定してコンパイルしてください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 PA-RISC のみ pow() 関数のミリコードバージョンが提供されています。数学ライブラリ関数のミリコードバージョンは通 常、標準ライブラリのものより処理が高速です。これらのバージョンを使用するには、 +Olibcalls または +Oaggressive 最適化オプションを指定して、プログラムをコンパイルしてください。 特殊な場合に、ミリコードバージョンはその標準ライブラリと同じ値を返しますが、 errno を設定しません ( 「戻り値」の項を参照)。 戻り値 Itaniumベース システム Itaniumベース システムの場合、 pow() 関数は以下の特殊な場合に、C99 仕様に従います。 pow(±0,y) は、0より小さい奇数の整数 y に対して、 ±Inf を返し、ゼロ除算浮動小数点例外が発生します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-117 pow(3M) pow(3M) pow(±0,y) は、0より小さい奇数の整数以外の y に対して、+Inf を返し、ゼロ除算浮動小数点例外が発生しま す。 pow(±0,y) は、0より大きい奇数の整数 y に対して ±0 を返します。 pow(±0,y) は、0より大きい奇数の整数以外の y に対して +0 を返します。 pow(−1,±Inf) は1を返します。 pow(+1,x) は、NaN を含むすべての x に対して1を返します。 pow(x,±0) は、NaN を含むすべての x に対して1を返します。 pow(x,y) は、0より小さい有限値 x および整数でない有限値 y に対して、NaN を返し、無効浮動小数点例外が 発生します。 pow(x,−Inf) は、 |x|<1 に対して +Inf を返します。 pow(x,−Inf) は、 |x|>1 に対して +0 を返します。 pow(x,+Inf) は、 |x|<1 に対して +0 を返します。 pow(x,+Inf) は、 |x|>1 に対して +Inf を返します。 pow(−Inf,y) は、0より小さい奇数の整数 y に対して -0 を返します。 pow(−Inf,y) は、0より小さい奇数の整数以外の y に対して +0 を返します。 pow(−Inf,y) は、0より大きい奇数の整数 y に対して −Inf を返します。 pow(−Inf,y) は、0より大きい奇数の整数以外の y に対して +Inf を返します。 pow(+Inf,y) は、0より小さい y に対して +0 を返します。 pow(+Inf,y) は、0より大きい y に対して +inf を返します。 上記以外で、どちらかの引き数が NaN の場合、 pow() は NaN を返します。 pow() は、値が大きすぎる場合これに代えて無限大を返し、オーバーフロー例外と不正確例外を発生させま す。 pow() では、結果が非常に小さく ( 本質的にはデノーマル値やゼロ) 正確な値でなくなるときには必ず、アン ダーフロー例外と不正確例外が発生します。また、結果が非常に小さいというだけで、これらの例外が発生す ることがあります。 丸めた結果が数学上の結果と等しくないときには必ず、 pow() で不正確例外が発生します。 下記の PA-RISC の動作に相当する、 pow() の戻り値と errno の設定値は、 Itanium ベース システムの場合、 +Olibmerrno オプションを指定してコンパイルすることによって得ることができます。 pown() および powlln() 関数は、適用可能な特殊なケースやエラーが発生した場合には pow() 関数の仕様に従い ます。 Section 3-118 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pow(3M) pow(3M) PA-RISC x と y が両方とも0の場合、 pow() は 1.0 を返します。 x または y が NaN の場合、 pow() は NaN を返します。 x がゼロで、 y が負の有限値の場合、 pow() は −HUGE_VAL (−INFINITY に等しい) を返します。 x が有限値でゼロより小さく、 y が有限値で整数でない場合、 pow() は NaN を返します。 正しい値がオーバーフローする場合、 pow() は ±HUGE_VAL (+/-INFINITY に等しい) を返します。 エラー x がゼロで、 y がゼロより小さい場合、 pow() は errno に [EDOM] を設定します。 x が有限値でゼロより小さく、 y が有限値で整数でない場合、 pow() は errno に [EDOM] を設定します。 正しい値がオーバーフローする場合、 pow() は errno に [ERANGE] を設定します。 Itaniumベース システムでの HP-UX の libm 関数は、デフォルトでは errno を設定しません。 errno を設定す るには、 +Olibmerrno オプションを指定してコンパイルしてください。 参照 cbrt(3M), compound(3M), cpow(3M), exp(3M), log(3M), scalbln(3M), scalbn(3M), sqrt(3M), math(5) 標準準拠 pow() : SVID3, XPG4.2, ANSI C, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) powf(), powl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-119 prcmd(3N) prcmd(3N) 名称 prcmd − 並列リモートコマンドへのストリームのリターン 構文 #include <prcmd.h> void prcmd_init ( struct prc_host *hostp, int num_hosts, int caller_status, char *command, time_t timeout ); int prcmd ( struct prc_host *hostp, int num_hosts ); 特記事項 これらの関数は、libdcに常駐するもので、 ld または cc のコマンドに -ldc オプションを使用してリンクしま す。 説明 prcmd() は、クライアント側の呼び出しプログラムがサーバ側の既存デーモン rcmd() を使用できるようになる 点で、 rcmd() に似ています。ただし、 prcmd() では、コマンドをリモートで実行 (接続、コマンド呼び出し、 およびコマンドの実行/相互動作などのコマンド) することに伴い、時間のかかるステップが複数のシステムの 間で並列的に実行されます。 rcmd() では、コマンドの実行と相互動作だけが呼び出し側プログラムの制御に 置かれるので、呼び出し側プログラムでは独自の select() 呼び出しを実行することにより、複数の並列接続を 管理しなければなりません。 サーバ側の既存リモートシェル デーモン (remshd) の機能には、既知のサービス、アクセス制御、およびコマ ンド行のシェル処理が含まれます。 呼び出し側プログラムでは、インターネットソケット接続を介してリモートコマンド処理を開始したり、続行 したりするホストのリストで、最初にあるノードへのポインタ、 (hostp)を prcmd() に渡します。また、リスト 中のホスト番号 (num_hosts) も送られます。 呼び出し側プログラムでは、 prcmd() を繰り返し呼び出して、ホスト接続のステータスを進行させます。 prcmd() を呼び出すたびに、 select() の各コールで、チェックの必要な接続ステータス ( 存在する場合 ) が チェックされるようになります。読み取り用としての接続 (リモートコマンド) が完了すると、呼び出し側プロ グラムでは読み込みが可能になります。また、オプションとしてここにデータを書き込み、さらにデータを待 機して、再度読み取ることもできます。 Section 3-120 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 prcmd(3N) prcmd(3N) ヘッダファイル <prcmd.h> ヘッダファイルにより、次のフィールドを含む prc_host 構造が定義されます。 char *prc_hostid; /* host name or IP address */ int prc_prev_status; /* previous connection status */ int prc_conn_status; /* connection status */ time_t prc_conn_time; /* time of connection */ int prc_errno; /* for failed connections */ char *prc_errmsg; /* string from remshd */ FILE *prc_fp; /* file ptr to stdin/stdout */ FILE *prc_fp2; /* file pointer to stderr */ int prc_conn_close; /* flag: close connection */ int prc_caller_status; /* caller’s info about conn */ 呼 び 出 し 側 プ ロ グ ラ ム で 変 更 で き る フィー ル ド は、 以 下 の 説 明 の と お り prc_hostid, prc_conn_close, prc_caller_status, および prc_conn_time (該当する場合) だけです。これ以外のフィールドは読み取り専用でな ければなりません。 またヘッダファイルでは、次のマクロも定義されます。 PRC_OK /* function succeeded, check entries PRC_ERR_NETWORKING /* no networking on calling program’s system */ */ PRC_ERR_NOFILE /* cannot get even one file descriptor */ PRC_ERR_RCMD /* cannot get ‘‘shell’’ service num/etc. */ PRC_ERR_SELECT /* select() failed */ PRC_CSBIT_ERR /* connection has errored out */ PRC_CONN_NONE /* needs connection */ PRC_CONN1_WAIT /* waiting for stdio connect() */ PRC_CONN2_WAIT /* waiting for stderr connect() */ PRC_CONN3_WAIT /* waiting for remshd reply */ PRC_READ_WAIT /* waiting for data */ PRC_READ_READY /* data is ready to read */ PRC_CONN_DONE /* connection closed */ PRC_CONN_NO_IPS /* can’t get IP addresses */ PRC_CONN_FAILED /* various causes */ PRC_CONN_REFUSED /* by remote system */ PRC_CONN_TIMEOUT /* during connection attempt */ typedef struct prc_host *prcp_t; HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-121 prcmd(3N) prcmd(3N) #define PRC_NULLP ((prcp_t) 0) #define PRC_SIZE (sizeof (struct prc_host)) データの初期化 prcmd() を呼び出すプログラムでは、各ターゲットシステムごとに1つのノードを持つ一連の prc_host 構造を 作成する必要があります。次に、このアレイ (hostp) と各サイズ (num_hosts) 、各ホストの prc_caller_status フィールドに必要な初期値 (caller_status) 、ホストへのリモート接続を開始するときに実行する command およ び接続のセットアップ時に各ホストに適用する timeout 値を使用して、 prcmd_init() を呼び出します。この呼 び出しにより、各ホストに対する大部分のフィールドの値がセットされます。呼び出し側プログラムでは、 prc_caller_status に対する各ホストの値を変更できますが、通常はすべて同じ値に初期化されます。 最後に、各配列要素にある次のフィールドを初期化してから、最初の prcmd() を呼び出します。 prc_hostid システム名 (ドメインサフィックスの有無を問わず)、またはドット表記で指定したイン ターネットアドレスのいずれか。この値は各ホストごとに異なるので、呼び出し側プロ グラムは、 prcmd_init() にリストを直接渡すよりも、簡単に値をセットすることができ ます。 この値は、呼び出し側プログラムが割り当てるメモリのポインタになります。 prcmd() がホストへの接続を確立するまで、下層のデータを破壊しないようにしてください。接 続が確立された後は、 prc_hostid は必要なくなります。 rcmd() と同様に prcmd() は、ホスト名の参照を指定してインターネットアドレスを確保 しますが、 rcmd() とは異なり、呼び出し側プログラムの prc_hostid 値は変更しません。 共通エラーの処理 prcmd() が呼び出されるごとに、ホストリストをスキャンすることにより、 prc_conn_close フィールドと prc_conn_status フィールドに基づいて取るべき動作を探します (下記参照)。エラーは通常、次のように処理さ れます。 異常終了 あるホストの接続を行っている間にシステムコールが異常終了すると、下記の場合を除 き、 prcmd() は、ホストの prc_conn_status フィールドを PRC_CONN_FAILED にセット し、異常終了した呼び出しから戻される値 errno に prc_errno をセットした後、ファイル ( ソケット) 記述子と、ホストに対応するストリームポインタ ( 存在する場合) をすべてク ローズします。 拒否 接続のリモート側の (remshd) で異常終了が起きた場合 (下記参照)、あるいはホストの標準 エ ラー ポー ト に 不 当 な 接 続 を 試 み た 場 合、 prcmd() は、 prc_conn_status を PRC_CONN_REFUSED にセットして、ホストの prc_fp と prc_fp2 の各フィールドで指定 されたファイルをクローズします。リモート remshd からのメッセージ (最大 BUFSIZ-1 文 字) があり、 malloc() が正常終了の場合、 prcmd() は prc_errmsg が指す位置にメッセージ テキストを保存します。これ以外の場合、そのフィールドにはヌルポインタが残ります。 また、「ローカル」な理由で拒否が起き、 errno がある場合、 prcmd() は、その値を prc_errno にセットします。これ以外の場合は 0 にセットします。 Section 3-122 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 prcmd(3N) prcmd(3N) タイムアウト 接続が PRC_CONN1_WAIT, PRC_CONN2_WAIT, または PRC_CONN3_WAIT のいずれか の状態にあり (下記参照)、 select() によりホストの準備できていないことが報告され、かつ ホストが該当する状態に入ってから timeout 秒が経過すると、接続がタイムアウトになりま す。テストは、 time() を使用して秒単位の精度で行われます。この場合、 prcmd() は、ホ ストに対する prc_conn_status フィールドを PRC_CONN_TIMEOUT にセットし、ホスト の prc_fp と prc_fp2 の各フィールドで指定されたファイルをクローズします。 名前で指定されたホストは、ホストデータベースにある複数の IP アドレスでリストすることができま す。この場合、ホストの IP アドレスの1 つに対する接続が失敗すると、 PRC_READ_WAIT 状態に 入って prcmd() がホストの次の IP アドレス (ホストあたりの最大 IP は5個) への接続オープンを試みる 前に、接続が拒否、あるいはタイムアウトになります。すべての IP アドレスが試行されるまで、異常 終了にはなりません。 ホスト/接続ステータス 呼び出し側プログラムで、次の接続ステータスを処理する形式については、 ‘‘使用上の注意’’ を参照してくだ さい。 PRC_CONN_NONE prcmd() は、名前の prc_hostid 値を1つ以上の IP アドレスにマップします (アド レスとみなされない場合)。さらに、 IP アドレスをバイナリにマップし、ホスト との通信用として予約されたポート番号に対応するインターネットソケットを 受け取り、 fdopen() を使用して、このソケット記述子をストリームポインタに マップした後、リモートホストの「シェル」サービスに対してソケット記述子 のノンブロッキング connect() を実行します。ソケットの送受信バッファサイズ はデフォルトとなります。ただし、呼び出し側プログラムでは必要に応じ setsockopt (fileno (hostp → prc_fp)) を使用して、サイズを変更できます。なお、こ のサイズは setsockopt(2) で説明された制限に従います。 gethostbyname() ( gethostbyname(3N) 参照)、または inet_addr() ( inet_addr(3N) 参 照 ) が 異 常 終 了 す る と、 prcmd() は、 prc_conn_status フィー ル ド を PRC_CONN_NO_IPS にセットします。 rcmd() 接続に必要な情報には、「シェル」サービスのポート番号、およびロー カル/ リモートユーザー名としての実効ユーザー ID のユーザー名があります。 prcmd() は、最初に接続を行う時点でこの情報を探します。 prcmd() がこの情報 を得られない場合は、 PRC_ERR_RCMD を返します (呼び出しのたびに試行し ます)。 socket() が、 EHOSTDOWN, EAFNOSUPPORT, ESOCKTNOSUPPORT, EPROTONOSUPPORT, EPROTOTYPE, または EINVAL のいずれかのローカル ホスト エラーとともに異常終了すると、 prcmd() は PRC_ERR_NETWORKING を返し、ホストリストのステータスは未定義になります。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-123 prcmd(3N) prcmd(3N) socket() が EMFILE または ENFILE とともに異常終了 (すなわちプロセス、ま たはシステムにファイル記述子がないとき ) した場合、あるいは予約された ポートがない場合は、 prc_conn_status フィールドは、後で使用できるように PRC_CONN_NONE として残されます。ホストエントリーをすべてチェックし た後、 prcmd() がいずれのホストについてもオープンファイル ( ソケット) を 持っておらず、かつ、この呼び出しの間にいずれのファイルもクローズしてい ない場合は、 PRC_ERR_NOFILE が返されます。 — すなわちこのプロセスに 全ファイル記述子が使用され、 prcmd() にはファイル記述子がないことになり ます。 connect() が正常終了した場合、あるいは EINPROGRESS とともに異常終了し た 場 合 ( ノ ン ブ ロッ キ ン グ 接 続 要 求 の 場 合 は 正 常 で す ) 、 prcmd() は、 prc_conn_status を PRC_CONN1_WAIT に、また prc_conn_time を現在のシス テムクロック (秒単位) に、さらに prc_fp をソケットのストリームポインタにそ れぞれセットします。次いで、このホストは、 PRC_CONN1_WAIT ごとに select() リストに入れられます (下記参照)。 PRC_CONN1_WAIT prcmd() により、このホストが書き込みレディとして select() リストに入れられ ます。接続が書き込み用として準備できていない場合、 prc_conn_status フィー ルドは変更されません。 接続が書き込み用として準備できている場合、 prcmd() は、「ブロッキング」 にソケットを返し、リモートコマンドから戻される標準エラーの接続を開始し ます。また、この接続に対するファイルポインタに prc_fp2 をセットし、 sigvector() を使用して一時的に無視された SIGPIPE とともにリモートプロセス に対し標準remsh接続情報 ( remshd(1M) および上記の説明を参照) を書き込みま す。 さ ら に、 prc_conn_status を PRC_CONN2_WAIT, に 変 更 し て、 prc_conn_time を現在のシステムクロック (秒単位) にセットします。 接続が拒否されると、 prcmd() は、remsh 接続情報を書き込もうとした時点で ECONNREFUSED または EPIPE を受け取り、 ‘‘ 共通エラーの処理’’ の項で先 述した形式でエラーを処理します。 PRC_CONN2_WAIT prcmd() により、 prc_fp (エラーの場合)、と prc_fp2 (標準エラーポートに接続 成功が戻され場合) の両方に読み取りレディとして select() リストにこのホスト が入れられます。いずれの接続も読み取りレディでない場合は、 prc_conn_status フィールドは変更されません。 標準エラー接続が読み取りレディの場合、 prcmd() は、 accept() を実行して、 もとの prc_fp2 をクローズし、新しいsocket/fdに対する値を更新します。さらに prc_conn_status を PRC_CONN3_WAIT を変更して、 prc_conn_time を現在の システムクロック (秒単位) にセットします。 Section 3-124 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 prcmd(3N) prcmd(3N) 読み取りレディとなるのがstdout接続だけの場合は、 remshd が異常終了したこ とになります。 prcmd() は、この状態を ‘‘ 共通エラーの処理’’ で説明したとお り、接続の拒否として処理します。 ファ イ ル 記 述 子、 ま た は 予 約 ポー ト が 必 要 な と き に、 こ れ が 存 在 し な い 場 合 は、 ホ ス ト が PRC_CONN1_WAIT または PRC_CONN2_WAIT のステータスに置かれます。 PRC_CONN3_WAIT prcmd() により、このホストが読み取りレディとして select() リストに入れられ ます。接続が読み取りレディでない場合、 prc_conn_status フィールドは変更さ れません。 接続が読み取りレディでない場合、 prcmd() は remshd からのstdout中でヌルバ イトを占め、 prc_conn_status を PRC_READ_WAIT にセットします。また、呼 び出し側のプログラムが対話できるように、 prc_conn_time を現在のシステム クロック ( 秒単位) にリセットします。ヌル以外のバイトが返された場合は、 remshd が異常終了したことになります。 prcmd() は、先述のように、この状態 を接続の拒否として処理します。 PRC_READ_WAIT prcmd() により、このホストが読み取りレディとして select() リストに入れられ ます。接続が読み取りレディでない場合、 prc_conn_status フィールドは変更さ れません。リモートコマンドが、呼び出し側プログラムからデータが書き込ま れるまで待っていることがあります。 接 続 が 読 み 取 り レ ディ の 場 合、 は prcmd() prc_conn_status を PRC_READ_READY にセットします。 PRC_READ_READY prcmd() は、この状態のホストを PRC_READ_WAIT と同様に処理します。接 続 が 読 み 取 り レ ディ で な い 場 合、 prcmd() は、 prc_conn_status を PRC_READ_WAIT に戻します。 PRC_CONN_DONE prcmd() は、このホストのエントリーを無視します。 prc_conn_close フィールド (呼び出し側フィールドでセットされる) が非ゼロの 場 合、 prcmd() は、 別 の 状 態 か ら こ の 状 態 に 入 り ま す。 ま た、 prc_fp と prc_fp2 で指定されたファイル ( ヌルでない場合) をクローズし、各フィールド をヌルによりセットし、 prc_conn_close フィールドを 0 にリセットします。 PRC_CONN_NO_IPS PRC_CONN_FAILED PRC_CONN_REFUSED PRC_CONN_TIMEOUT これらのいずれの故障ステータス値の場合、 prcmd() はホストエントリーを無 視します。ただし prc_conn_close がセットされているときは、エントリーの prc_conn_status フィールドが PRC_CONN_DONE にセットされます。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-125 prcmd(3N) prcmd(3N) ホストステータスの変化 prcmd() の呼び出しがあるごとに、各ホストエントリーの prc_prev_status フィールドが prc_conn_status フィールドの前の値にセットされます。呼び出し側プログラムでは、 (prc_prev_status != prc_conn_status) を使 用 し て、 任 意 の ホ ス ト の 新 し い ス テー タ ス を 高 速 で チェッ ク す る こ と が で き ま す。 こ れ は、 PRC_READ_WAIT および PRC_READ_READY を除き、ステータス値を1回限りログ、あるいは表示する場合 に便利です — 各ステータスには、対話中に何度入ってもかまいません)。 ホストに、複数の IP アドレスがあり、いずれかの IP に対する接続が失敗して、ホストの次の IP アドレスを試 すためのファイル、またはポートがない場合、ホストは、 PRC_CONN_NONE をいったん抜けて、再度このス テータスに入ることができます。 呼び出し側プログラムでは、自由に prc_caller_status フィールドを使用して、各接続のステータスに関する追 加情報を記録することができます。 使用上の注意 接続が確立して、ホストがいずれかの PRC_READ_* ステータスに入った後は、呼び出し側プログラムとリ モートホストの間の「対話」は、呼び出し側プログラムが制御します。対話は次のいずれかの形式で行われま す。 1. 最初に、呼び出し側プログラムが通信する。 2. 最初にリモートコマンドが通信する。 呼び出し側プログラムが最初に通信する場合は、 prc_caller_status フィールドを使用する、あるいはその他の 手 段 に よっ て コ マ ン ド に 初 期 デー タ が す で に 送 ら れ て い る か ど う か を 認 識 し、 ホ ス ト が 初 め て PRC_READ_WAIT 状態に入ったと同時にデータを転送しなければなりません。コマンドが最初に通信する場 合、または呼び出し側プログラムが初期データを転送した後の対話では、呼び出し側プログラムが対話を「追 跡」して、追加データを転送する時期 (データがある場合)、および prc_conn_close により対話をクローズする 時期を認識しなければなりません。 呼び出し側プログラムが次の入力を転送する前、あるいは接続をクローズする前に、 PRC_READ_WAIT およ び PRC_READ_READY の各ステータスを待機 (コマンドから1回の応答の全バイトが受信されるまで) しなけ ればならないことがあります。 各 prcmd() 呼び出しの後、呼び出し側プログラムでは戻り値をチェックして、重大なエラーがないかどうかを 確認する必要があります。戻り値が PRC_OK の場合、呼び出し側プログラムでは、次の hostp アレイをスキャ ンして、各ホストに対する prc_prev_status (必要な場合) と prc_conn_status のフィールドをチェックします。 呼び出し側プログラムでは、単に特定のステータス値 (以下の‘‘•’’ のマークの付いたもの). に対応する動作を 実行します。 PRC_CONN_NONE 最初の prcmd() 呼び出しの後。 1つ以上の接続を行った後 (あるいは今回の呼び 出し、または前回の呼び出しでまだオープンされているときに)、プロセスのソ ケット (ファイル) 記述子、または予約済みポートが不足していることを示しま す。このホストに対する接続が、次回の呼び出しで再度試みられます。呼び出 し側プログラムは、ファイルをクローズする、あるいは rlimit() を呼び出すこと Section 3-126 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 prcmd(3N) prcmd(3N) により、可用なファイル記述子の数が増やすか、あるいは既存の接続が通信を 終了するまで待機します。 PRC_CONN1_WAIT PRC_CONN2_WAIT PRC_CONN3_WAIT これらは、呼び出し側プログラムにはほとんど無関係の内部状態です。後で prcmd() を再度呼び出す場合を除き、必要な動作はありません。 (prc_prev_status != prc_conn_status) の場合、呼び出し側プログラムではホストの新しいス テータスをログ/表示することができます。 PRC_READ_WAIT • コマンドが実行中ですが、まだ出力が生成されていません。呼び出し側プログ ラムが最初に通信する場合は、コマンドで何らかの初期入力が必要になるの で、 prc_fp で指定されるファイルに書き込みを行い、 prc_caller_status フィー ルドを使用して書き込みが行われたことを記憶しておきます。これ以外の場合 は、接続ステータスのログ/表示を除き、必要な動作はありません。 PRC_READ_READY • コマンドにより、読み取りレディの出力が生成されました。出力を読み取った 後、コマンドがさらに入力を必要とする場合は、 prc_fp で指定されたファイル に書き込みを行います。代わりに、対話を行う場合は、 prc_conn_close フィー ルドを非ゼロにセットします。 PRC_CONN_DONE コマンドが終了しました。呼び出し側プログラムが prc_conn_close フィールド をセットした後、接続がクローズされました。必要な動作はありません。 呼び出し側プログラムでは、 (prc_conn_status & PRC_CSBIT_ERR) を使用して、エラーステータスを 効率的に検出できます。 1回限りの処理の場合は (prc_prev_status != prc_conn_status) を使用して新し いエラー状態を検出することができます。また、 prc_caller_status を使用して、 prcmd() から最初に 戻された時点で処理されたことを記録することもできます。いずれの場合も、呼び出し側プログラム では、必要に応じてエラーを処理、または報告できなければなりません。 PRC_CONN_NO_IPS • prc_hostid フィールドがアドレスではなく名前とみなされ、対応する gethostbyname() が異常終了、あるいは inet_addr() が prc_hostid の数値で異常終了しま す。 その他の条件は、ホストの IP アドレスの最後 (複数存在する場合) で起きた異常終了の原因だけを参照 します。 PRC_CONN_FAILED • ローカルシステムが故障したことにより、何らかの理由で (ホストの IP アドレ スのいずれか) 接続が開始できません。 prc_errno が異常終了したシステムコー ルの値 errno にセットされます。 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-127 prcmd(3N) prcmd(3N) PRC_CONN_REFUSED • 接続の拒否。 errno(2)ごとに、 ‘‘外部ホストで非アクティブになっているサービ スに接続しようとすると起きます。" また、その他のリモート (remshd) の故障 ( アクセスの拒否など) や標準エラーポートへの不当な接続なども考られます。 呼び出し側プログラムでは、ホストの prc_errmsg フィールドをチェックしなけ ればなりません。ヌルポインタでない場合は、 remshd リモートコマンドから メッセージテキストが送られ、呼び出し側プログラムでは値の使用が終わった 時点でポインタを free() にする必要があります。 PRC_CONN_TIMEOUT • 接続のタイムアウト。接続は、 I/O の準備ができない PRC_CONN1_WAIT 、 PRC_CONN2_WAIT、または PRC_CONN3_WAIT のいずれかの状態に timeout 秒以上の間、置かれます。 呼び出し側プログラムが、ストリームではなく、ソケット (ファイル) 記述子を使用してバッファリン グされていない I/O を行う場合、 fileno(prc_fp) ( fileno(3S) 参照) を参照することができます。 呼び出し側プログラムがリモートコマンドに信号を送信する場合、 prc_fp2 で指定されるファイルに 信号番号を書き込むことができます ( rcmd(3N) 参照)。 prcmd() にすべての接続をクローズさせる場合は、全ホストに prc_conn_close をセットし、 prcmd() を再度呼び出す以外に、方法はありません。これにより、 prc_conn_status が PRC_CONN_DONE に セットされます。 タイムアウトについて prcmd() は、最大限の並列接続数を確保し、呼び出し側プログラムから極力制御できるように設計されていま す。したがって、 prcmd() は必ず、タイムアウト値ゼロ ( 即時ポーリング ) で select() を呼び出します。 prcmd() を必要以上に呼び出して、不要な CPU 時間を消費することがないように、呼び出し側プログラムの方 で制御する必要があります。例えば、 prcmd() の呼び出しの間に、 sleep(1) を呼び出すことがあります ( sleep(3C) 参照)。注記: これは、呼び出し側プログラム自体がタイマ割り込みにより定期的に呼び出される場 合、あるいは prcmd() 呼び出しの間に、その他の時間を要するタスクを実行する場合は、必要ありません。 ホストの接続が次のような待機状態の 1 つになると、タイムアウトが発生します。 I/O の準備ができない PRC_CONN1_WAIT 、 PRC_CONN2_WAIT 、または PRC_CONN3_WAIT のいずれかの状態に timeout 秒以 上、置かれ、このホストで未使用の IP が残っていない場合。ホスト接続が初めて、 PRC_READ_WAIT 状態に なると、 prcmd() は、ホストの prc_conn_time フィールドをセットしますが、ホストのタイムアウトについて は再チェックしません。呼び出し側プログラムでは、これを必要に応じて行うことができます。また、呼び出 し側プログラムでは、通信が進行するに従って ( 例えば、リモートコマンドにデータを書き込むごとに)、 prc_conn_time フィールドをリセット (更新) することができます。 戻り値 PRC_OK 呼び出しの正常終了。ホストリストをチェックして、 prc_prev_status と prc_conn_status フィールドの値を調べます。 select() が EINTR とともに Section 3-128 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 prcmd(3N) prcmd(3N) 異常終了 (信号の着信など) すると、 prcmd() は、 PRC_OK とともに呼び 出し側プログラムに制御を返します。この場合、一部の接続が呼び出し側 プログラムの制御のもとで、開始 ( PRC_CONN1_WAIT 状態) したり、終 了 ( PRC_CONN_DONE 状態) したりすることがありますが、 I/O ステー タスによる変化はありません。通常どおり、再度 prcmd() を呼び出してく ださい。 PRC_ERR_NETWORKING いくつかの重大なネットワークの問題により、 socket() 呼び出しが異常終 了しました (先述のリストを参照してください)。ローカルホストのネット ワークが使用不可能で、 prcmd() が無効になっていることを示します。 prcmd() からの復帰時に errno がセットされます。 PRC_ERR_NOFILE socket() 呼び出しが EMFILE または ENFILE とともに異常終了しまし た。または prcmd() にオープンな接続 ( ソケット) がなくなった時点で、 使用可能な予約ポートがなくなりました。これは、呼び出し側プログラ ム、またはシステムがファイル記述子、または予約ポートの一部を解放し ない限り、これ以上、接続をオープンしようとしても意味がないことにな ります。 PRC_ERR_RCMD 実効ユーザー ID に対する「シェル」サービスポート番号、またはユー ザー名が得られません。この状態を修正しない限り、 prcmd() を呼び出し ても意味がありません。 PRC_ERR_SELECT select() 呼び出しが、 EINTR 以外のコードとともに異常終了しました。 prcmd() からの復帰時に errno がセットされます。ホストリストのデータ は有効ですが、前回の正常な呼び出しで PRC_READ_READY とマークさ れていても、読み取りレディ、または書き込みレディのホストはありませ ん。 診断 rcmd() と異なり、 remshd が異常終了した時点で、 remshd のメッセージをローカル標準エラーにはコピーし ません。単に、ホストが PRC_CONN_REFUSED の状態に置かれるだけです。 例 次のコードフラグメントは、一連のホストを割り当て、初期化する方法、およびホストリスト全体に対して prcmd() を呼び出す方法を示したものです。 int index; struct prc_host prc_host [MAXHOSTS]; prcmd_init (prc_host, argc, 0, REMCMD, TIMEOUT); HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 3-129 prcmd(3N) prcmd(3N) for (index = 0; index < argc; ++index) (prc_host[index].prc_hostid) = argv [index]; if ((rc = prcmd (prc_host, argc)) != PRC_OK) ... 警告 prcmd() は、マルチスレッドアプリケーションについては安全に動作しません。 rcmd() と異なり prcmd() は、特権プロセスからのみ呼び出す必要があります。これ以外の場合は、予約ポート に bind() できなくなるので、ホストがすべて、 errno = 13 (EACCES) とともに PRC_CONN_FAILED の状態に 置かれます。 このとき、 select() 呼び出しは、 prc_fp2 ではなく、 prc_fp で指定されたファイルを対象に行われます。 prcmd() では、リモートコマンドが標準エラーには書き込みを行わずにブロックし、代わりにstdoutを終了、あ るいはクローズすることを前提とします。 stdout読み取りレディの場合、呼び出し側プログラムでは prc_fp に ブロッキング read() を行い、 EOF 、またはエラーと同時に、ブロッキング read() で prc_fp2 をチェックしま す。 ( 例外: PRC_CONN2_WAIT ステータスの場合、先述のとおり、成否に応じて一方のファイルがレディ状態に なってから両方が選択されます。ただし、この例外は prcmd() で内部的に処理されるので、呼び出し側プログ ラムには影響はありません。 prcmd_init() により、値自体ではなく、 command の値に対するポインタが保存されます。したがって、呼び出 し側プログラムでは prcmd() のすべての呼び出しを介して、値を保持しなければなりません。 connect() は、ノンブロッキング I/O の場合でも、約2分間経過すると、タイムアウトになります。これがホス トの接続に起きた場合は、結果が PRC_CONN_REFUSED とは区別できなくなります。いずれの場合も、 write() が EPIPE を返すからです。呼び出し側プログラムで許可される時間が2分以内であれば (すなわち120 以 下 の timeout 値 を 送 り、 頻 繁 に prcmd() を 呼 び 出 す こ と に よっ て、 connect() の 前 に、 PRC_CONN_REFUSED がタイムアウトをキャッチできるようにすれば、問題にはなりません。 バッファリング I/O を使用するときは注意が必要です。要求した量よりデータが少ないときに、無限にブロッ クする可能性のある状況では fgets(), fread(), その他類似した関数の呼び出しは避けてください。また、接続が 読み取りレディになるのを待つ前に、 prc_fp で指定されるファイルを介してホストから可用なデータをすべて 読み取るようにしてください。バッファリングした保留データがすでにstdioライブラリで読み取られ、可用に なっている場合でも、接続の準備ができていないように見える場合があります。こうした問題は、ノンブロッ キング I/Oを使用すれば、避けられる場合があります。 fcntl(2) を参照してください。 リモートコマンドが終了した場合、あるいは接続が失われた場合にクローズされる可能性のあるソケットに書 き込みを行う場合は注意が必要です。これにより、呼び出し側プロセスに SIGPIPE が送られることがありま す。呼び出し側プログラムでは、必要に応じてこの信号を処理できなければなりません。 接続が PRC_CONN_REFUSED とともに異常終了したホストを処理する場合は、必ずホストの prc_errmsg ポ Section 3-130 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 prcmd(3N) prcmd(3N) インタ (非ヌルの場合) を free() するようにしてください。これは、malloc を行ったメモリを取り戻す必要がな ければ、スキップすることができます。 パフォーマンスについて prcmd() は、名前より、インターネットアドレスとして指定されたホスト IDs を使用して呼び出す方が高速で す。これは、 prcmd() が、ホストデータベースの各ホストを逐一調べる必要がないからです。ただし、複数の インターネットアドレスを持つホストにこの方法を使用する場合は、指定されたインターネットアドレスが試 されます。 各システムごとに予約ポートは約512個に制限されます。また、各プロセスについて使用できるファイル記述 子にもソフト上の制限があります。指定するホストごとに、各ステータスをチェックする接続に対する2つの 予約ポートと、2つのファイル記述子が必要になります。いったんポート、またはファイル記述子がすべて使 用されると、 prcmd() は、以降のホストが無視されないように、この後の接続を遅らせ (順番に並べ) ます。た だし、すべての接続が完了するまでの時間は、これ応じて長くなります。パフォーマンスを改善するには、ホ ストの数が多い場合にはオープンファイルの限界を上げなければならないことがあります。 setrlimit(2) を参照 してください。 著者 prcmd() は、HPで開発されました。 参照 remshd(1M), accept(2), bind(2), connect(2), errno(2), fcntl(2), read(2), select(2), setsockopt(2), sigvector(2), socket(2), time(2), fdopen(3S), fileno(3S), gethostbyname(3N), inet_addr(3N), malloc(3C), rcmd(3N), sleep(3C) HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 3-131 printf(3S) printf(3S) 名称 printf(), fprintf(), sprintf(), snprintf() − フォーマットされた出力 構文 #include <stdio.h> int printf(const char *format, /* [arg,] */ ...); int fprintf(FILE *stream, const char *format, /* [arg,] */ ...); int sprintf(char *s, const char *format, /* [arg,] */ ...); int snprintf(char *s, size_t maxsize, const char *format, /* [arg,] */ ...); 説明 printf() は、標準出力ストリーム stdout に出力を送ります。 fprintf() は、 stream として指定された出力ストリームに出力を送ります。 sprintf() は、 *s から始まる連続したバイトに「出力」し、null 文字 (\0) を付加します。充分な記憶領域がある ことをユーザー側で確認して使用してください。 snprintf() は、 sprintf() と同様に動作しますが、あて先のバッファーに書き込む (末尾の NULL 文字も含めた) 文字数を、 maxsize までに制限します。 それぞれの関数は format に従って arg を変換し、フォーマットし、プリントします。 format は2種類の情報 を含んだ文字列です。1つは単なる文字データで、そのまま出力ストリームにコピーされます。もう1つは変 換指定子で、これによって実際の arg の変換、プリントが行われます。 format に対して不適当な arg がある場 合、出力結果は保証されません。 arg の方が format に比べて多い場合は、余分な arg は無視されます。 それぞれの変換指定子は文字 % または %n$ で始まります。ここで、 n は1から {NL_ARGMAX} までの10進 数整数です (NL_ARGMAX は <limits.h> で定義されています)。 %n$ 構文はこの変換を、次の使われていない 引き数ではなく、 n 番目の引き数に適用することを表します。 引き数は %n$ 指定子で何回も参照することができます。 % と %n$ で始まる2つのタイプの変換指定子を、 1つの format 文字列の中で一緒に使うことはできません。番号付けされた引き数指定子を使うとき、N 番目の 引き数を指定すると、すべての先行する引き数を最初からN-1番目までフォーマットつき文字列内に指定する ことが必要です。1つのフォーマット文字列に番号付き引き数と番号なし引き数を混在させて指定した場合の 結果は、定義されていません。 % または %n$ の後には次のものが順番に続きます。 1. 2. 変換指定子の意味を修飾する0個以上の flags。 最小の field width (フィールドの幅) をバイト単位で指定するオプションの文字列の10進数数字。 変換した値の文字数が指定した field width に満たない場合、 field width の左に空白が埋め込まれ て (後で説明する左揃えフラグ (-) が指定されているときは右に空白が埋め込まれて) 表示されま Section 3-132 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 printf(3S) printf(3S) す。 field width を指定する数が0で始まっていると、左側に0が埋め込まれて右揃えになります (下記のゼロ先行フラグ 0 を参照してください)。 3. 変換のタイプが d, i, o, u, x, X のいずれかのときは最小桁数、 a, e または f のときは小数点キャラ クタ以下の桁数、 g のときは有効桁の最大値、 s のときは文字列からプリントするバイトの最大 値を指定する precision (精度)。 precision は、ピリオドの後に10進数数字文字列を記述して表し ます。null 数字文字列はゼロとして扱われます。 4. 英文字の l。これはオプションで、変換タイプが d, i, o, u, x, X のいずれかの場合は、 arg がlong 整数であることを示します。このとき変換タイプが n の場合は、 arg がlong整数へのポインター であることを示します。または h、これもオプションで、変換タイプが d, i, o, u, x, X のいずれか の場合は、 arg が short 整数であることを示します。変換タイプが n の場合は、 arg が short 整数 へのポインターであることを示します。または hL、これもオプションで、変換タイプが a, e, f, g のいずれかの場合は、 arg が extended 型 (Itanium アーキテクチャでの 80 ビットの IEEE-754 double-extended 型) であることを示します。または ll、これもオプションで、変換タイプが d, i, o, u, x, X のいずれかの場合は、 arg がlong long整数であることを示します。あるいは L、これも オプションで、変換タイプが a, A, e, E, f, g, G のいずれかの場合、 arg が長倍精度浮動小数点数 であることを示します。 l, h, ll L が他の変換指定文字の前に現れた場合は無視されます。 5. 変換のタイプを表す文字。 field width および precision は具体的な値の代わりにアスタリスクでも表せます。この場合、 field width あるい は precision は整数の arg で与えられます。実際に変換される arg は変換指定文字の後に位置すると解釈されて います。つまり、 field width または precision あるいはその両方を指定する場合は、変換対象の arg よりも前に 指定しなければなりません。 field width に負の値を指定すると、それは - フラグとフィールド幅を表わす正の 数値の組み合わせと解釈されます。 precision に負の値を指定すると、 precision は指定していないものとみな されます。 %n$ 変換指定子を含むフォーマット文字列も *n$ 指定で field width あるいは precision を表せま す。 n は整数の値を持つ arg の位置を表します。 *n$ 指定では、 field width あるいは precision を指定する arg は、変換対象の arg の前後どちらにでも置くことができます。 フラグ文字とその意味を以下に示します。 ’ 10進数変換 (%i, %d, %u, %f,%g, または %G) の結果の整数部分は、3桁ごとにグルーピング 文字でフォーマットされた書式にする。何千ものグルーピングと区切り文字がある場合 は、それぞれ LC_NUMERIC カテゴリの "grouping" フィールドと "thousands_sep" フィール ドによって決定されます (localedef (4) を参照)。他の変換に対して、動作は定義されていま せん。通貨以外のグルーピング文字が使用されます。 - 変換した結果の値をフィールド内で左詰めにする。 + 符号付きの変換の結果の値に必ず符号 (+ または -) を付ける。 ブランク 符号付きの変換結果の値の最初の文字が符号ではない場合、1文字の空白を付加する。し たがって、ブランクフラグと + フラグの両方が指定された場合は、ブランクフラグは無視 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-133 printf(3S) printf(3S) されます。 このフラグは値を「代替形式」に変換します。変換タイプが c, d, i, s, n, u のいずれかのとき # はこのフラグは意味がなく、 o のときは結果の精度を高くして1桁目が必ず0になるよう にし、 x または X のときは0以外の結果に 0x または 0X が付加され、 p のときは0以外 の結果に 0x が付加され、 a, A, e, E, f, g, G のいずれかのときは、結果の値は、小数部に値 がなくても必ず小数点キャラクタを含むことになります (通常は小数部に数字がある場合に のみ小数点キャラクタが出力されます)。変換タイプが g または G の時、小数部内の後方 の0はそのまま出力されます (通常は除去されます)。 (符号または基底表示の前に) 0を付加すると、すべての変換タイプについて field width を0 0 で埋めます。空白の埋め込みは行われません。 0 と - の両方が指定された場合は、 0 フラ グは無視されます。変換タイプが d, i, o, u, p, x, X, のいずれかの場合は、精度が指定されて いれば、 0 フラグは無視されます。 変換タイプを指定する文字とその意味を以下に示します。 d ,i,o ,u ,x ,X 整数値である arg を (d または i の時) 符号付きの10進数に、 (o の時) 符号なし8進数 に、 (u の時)10進数に、 (x または X の時)16進数に、それぞれ変換します。変換タイ プ x では英文字 abcdef が、 X では英文字 ABCDEF が使われます。 precision で表示 される桁数の最小値を指定します。変換された値をそれより少ない桁数で表示できる 場合、値の先頭に0が付加されます。 (旧バージョンとの互換性を考慮して、この0 を詰める指定は field width を指定する値の前に0を付加することでも行えます。これ は field width の値が8進数であることは意味しません)。 precision のデフォルト値は 1です。 precision が0の場合に0という値を変換した結果は null 文字列になりま す。 f 倍精度数の arg を [-]dddrddd という形式の 10 進数に変換します。ここで r は小数点 キャラクタです。小数点キャラクタの後ろの桁数は、 precision として指定した値と等 しくなります。 precision が省略された場合は小数部の長さは6桁になります。 precision に0を指定したときは、小数点キャラクタは表示されません。 e,E 倍精度数の arg を、 [-]drddde±ddd という形式に変換します。ここで、 r は小数点 キャラクタです。小数点キャラクタの前は1桁、後ろの桁数は precision として指定し た値と等しくなります。 precision を省略した場合は、小数部の長さは6桁になりま す。 precision に0を指定した場合は小数点キャラクタは表示されません。 E フォー マットコードは指数部の前の文字を e の代わりに E にします。指数部の最小の長さは 2桁です。 g,G 倍精度数の arg を、 f または e (G フォーマットコードの場合は E) 形式でプリントし ます。 precision に指定した値が有効桁数になります。形式は変換された値によって決 まります。つまり、指数部の値が −4 より小さいか、または precision の値以上のとき は e が選ばれます。小数部内の後方のゼロは除去されます。また小数点キャラクタは Section 3-134 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 printf(3S) printf(3S) それより下に数字があるときだけ表示されます。 a,A Itanium(R)ベース システム専用。倍精度の arg を、 [-]0xhrhhhp±d という形式に変換 します。ここで r は小数点キャラクタです。小数点キャラクタの前は1桁、後ろの桁 数は precision として指定した値と等しくなります。 precision を省略した場合、 double では 13 桁、 extended では 15 桁、 long double では 28 桁になります (値を正確に 表現するには、この桁数で十分です)。 precision に0を指定した場合は、小数点キャ ラクタは表示されません。 a を指定した場合の変換では、英字 abcdef が使われ、 A を指定した場合の変換では、英字 ABCDEF が使われます。 A 変換指定子では、 x と p の代わりに X と P を使って数が表示されます。指数部は少なくとも1桁表示され、 それ以上必要なときは、指数 (2を基数としたべき乗数) を 10 進数で表現するのに必 要なだけの桁数で表示されます。値が0の場合は、指数は0になります。 c 整数値の arg を符号なし文字に変換し、結果の文字をプリントします。 l (エル) 修飾 子が存在する場合には、 wchar_t arg は、 LC_CTYPE の設定に従って1つのワイド キャラクタを表すバイトの配列に変換されます。結果のバイトがプリントされます。 field width が小さくてワイドキャラクタが分けられるようであれば、ワイドキャラク タをプリントして、 field width はそれに合うように大きくされます。 _INCLUDE__STDC_A1_SOURCE のみ l (エル) 修飾子が存在する場合、引き数 wint_t は ls 変換指定を使ったかのように、精 度を指定せず、2つの要素からなる型 wchar_t を指し示す引き数を指定して変換され ます。この2つの要素とは、 ls 変換指定に対する wint_t 引き数を含む要素と、null ワイドキャラクタを含む要素です。 C s lc と同じです。 arg は文字列 (文字ポインター) であるものとし、文字列内から null 文字 (\0) を検出す るまで、もしくは precision で指定した数の文字をプリントします。 precision が省略 されると無限とみなされ、最初の null 文字までの文字がプリントされます。 arg が NULL のとき結果は保証されません。 l (ell) 修飾子が存在する場合、引き数は型 wchar_t の配列へのポインターでなければ なりません。この配列のワイドキャラクタは、終端 null ワイドキャラクタまで (これ を含む) 変換されます (各文字は wcrtomb() 関数を呼び出したかのように変換され、 変 換 状 態 は、 最 初 の ワ イ ド キャ ラ ク タ が 変 換 さ れ る 前 に ゼ ロ に 初 期 化 さ れ た mbstate_t オブジェクトによって記述されます)。結果として生成される文字は終端 null キャラクタ (バイト) の直前まで書き込まれます。 精度が指定されない場合は、配列に null ワイドキャラクタを1つ含める必要がありま す。精度が指定される場合は、これ以上の文字 (バイト) は書き込まれず (シフトシー ケンスがある場合には、それも含む)、精度によって設定された文字シーケンス長と 等価にするために、関数が配列直後のワイドキャラクタにアクセスする必要がある場 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-135 printf(3S) printf(3S) 合には、配列に null ワイドキャラクタを1つ含めなければなりません。どちらの場合 にも、部分文字の書き込みは行われません。 S ls と同じです。 p void 型のへのポインター arg の値が連続する符号なし16 進数としてプリントされま す。 precision は表示される最小の桁数を指定します。変換した値をそれよりも少ない 桁数で表示できる場合は、値の先頭にゼロが付加されます。 precision のデフォルト値 は1です。 precision が0のときに0という値を変換すると、結果は null 文字列とな ります。 arg は整数へのポインターとみなされます。このポインターは、この関数の呼び出し n で、それまでに出力ストリームにプリントされたバイト数を書き込むために使われま す。引き数の変換は行われません。 % をプリントし、引き数の変換は行いません。変換指定全体が %% でなければなり % ません。 field width に値が指定されていなかったり小さすぎたりしても、変換結果の値が切り捨てられることはありま せん。結果の値が field width よりも長いときは、結果を含むようにフィールドは拡張されます。 変換タイプを指定する文字が a、 e、 f および g である場合、無限大のときは inf を、静的な、およびシグナル 表現の NaN 値は nan をプリントします。 変換タイプを指定する文字が A、 E および G である場合、無限大には INF を、静的な、およびシグナル表現 の NaN 値は NAN をプリントします。変換タイプを指定する文字として新しく設定された F は、 f と同じです が、無限大とNaNをそれぞれ INF および NAN としてプリントする点が異なります。 Itaniumベース システムの場合、変換タイプとして a、 A を指定すると、値は、指定した precision の 16 進浮動 小数点数に正しく丸められます。 Itaniumベース システムの場合、変換タイプとして e, E, f, g, G を指定すると、ISO/IEC C99 の仕様に従って丸め られます。つまり、10 進数での有効桁数が 36 桁以下であれば、結果は正しく丸められます。 printf() fprintf() で生成される文字は putc() を呼び出したときと同じようにプリントされます ( putc(3S) を参 照)。 アプリケーション使用法 _INCLUDE__STDC_A1_SOURCE 機能を使用するには、 _INCLUDE__STDC_A1_SOURCE フラグをコンパイ ラオプションとして引き渡すか、ソースファイルの中でマクロとして定義する必要があります。 printf() または fprintf() がストリームに適用された後で、そのストリームはバイト指向になります (orientation(5) を参照)。 多言語化対応 Section 3-136 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 printf(3S) printf(3S) Locale LC_CTYPE カテゴリには次の特徴があります。 • フォーマット文字列内の普通の文字はシングルバイトまたはマルチバイト、あるいはその両方の文 字として解釈されます。 • field width はバイト単位で指定します。文字が出力ストリームに送られると、シングルバイトまた はマルチバイト文字として解釈され、 field width からその文字の長さが引かれます。 • precision はバイト単位で指定します。文字が出力ストリームに送られると、シングルバイトまたは マルチバイト文字として解釈され、 precision からその文字の長さが引かれます。 • 戻り値はバイト単位で与えられます。文字が出力ストリームに送られると、シングルバイトまたは マルチバイト文字として解釈され、戻り値となるそれまでに送られたバイト数がその文字の長さが 増やされます。 LC_NUMERIC カテゴリは浮動小数点数のプリントで使う小数点キャラクタを決定します。また、グルーピン グフラグ ’ がオンの場合、3桁ごとのグルーピング文字を決定します。 サポートされるコードセット シ ン グ ル バ イ ト 文 字 コー ド セッ ト が サ ポー ト さ れ て い ま す。 マ ル チ バ イ ト 文 字 コー ド も、 上 で 述 べ た LC_CTYPE カテゴリで表現される形でサポートされています。 戻り値 それぞれの関数は送出したバイト数を返します (sprintf() については \0 は含みません)。エラーが発生したとき は負の値を返します。 エラー printf(), fprintf() は stream がバッファリングされていないか、 stream のバッファーを掃き出す必要があって write() を実行するときにはエラーが発生します (write(2) を参照してください)。その他に次のような場合があ ります。 [EAGAIN] O_NONBLOCK フラグが stream であるファイル記述子に設定されていて、書き出し 処理の際にプロセスが遅延させられている場合 [EBADF] [EFBIG] stream であるファイル記述子が正しい書き出し用のファイル記述子でない場合 プロセスのファイルサイズ上限またはファイルサイズの最大値を越えてファイルに書 き出そうとした場合 (ulimit(2) を参照してください) [EINTR] [EIO] write() システムコールの間にシグナルを受け取った場合 プロセスがバックグラウンド プロセスグループにあって制御ターミナルに書き出そう としたとき、 TOSTOP が設定されていて、プロセスが SIGTTOU シグナルを無視ま たはブロックせずに、プロセスのプロセスグループが親なしの場合 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-137 printf(3S) printf(3S) [ENOSPC] [EPIPE] ファイルの存在するデバイスに空きスペースが残っていない場合 読み出しのためにプロセスでオープンされていないパイプまたは FIFO に書き出そう としたとき。 SIGPIPE シグナルがプロセスに送られた場合 [EILSEQ] 入力ストリームから取得したデータは、有効なワイドキャラクタを構成しません。 [ENOMEM] 使用可能な記憶領域が不足しています。 さらに別の errno の値が write() 関数によって設定されます (write(2) を参照)。 例 「Sunday, July 3, 10:02」という形式で日付と時間をプリントする場合、 weekday と month が null で終わる文字 列へのポインターとすると次のようになります。 printf("%s, %s %d, %d:%.2d", weekday, month, day, hour, min); を小数点以下5桁までプリントするには次のようになります。 printf("pi = %.5f", 4 * atan(1.0)); 日付と時刻をプリントするルーチンを言語依存せずに表す場合、次のように書きます。 printf(format,weekday,month,day,hour,min,2,2); アメリカ式にするには、 format を次のような文字列へのポインターにするとよいでしょう。 "%1$s, %2$s %3$d, %4$*6$.*7$d:%5$*6$.*7$d" 出力結果は次のようになります。 "Sunday, July 3, 10:02" ドイツ式にするには、次のような文字列を使います。 "%1$s, %3$s %2$d, %4$*6$.*7$d:%5$*6$.*7$d" 出力結果は次のようになります。 Sonntag, 3 Juli 10:02 警告 c 変換指定文字を使うと、整数の arg は符号なし文字型に変換されます。そのため、マルチバイト文字は単一 の c 変換指定文字ではプリントされません。 s 変換指定文字の precision の指定はマルチバイト文字を切り捨てることがあります。 対応する引き数の型と一致しない変換文字を指定すると、無効なデータが返されます。たとえば d, i, o, u, x, X 変換文字のどれかが、倍長精度整数型 (long long integer) の引き数に対して指定されている場合、適切な結果を 得るには、 ll に修正する必要があります。 Section 3-138 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 printf(3S) printf(3S) 著者 printf(), fprintf(), sprintf() はAT&TとHPで開発されました。 参照 ecvt(3C), ltostr(3C), setlocale(3C), putc(3S), scanf(3S), stdio(3S), orientation(5), thread_safety(5) 標準準拠 printf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C fprintf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C sprintf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-139 pthread(3T) pthread(3T) 名称 pthread − POSIX.1c でのスレッドの概要 説明 HP で開発した POSIX.1c のライブラリにより、アプリケーションおよびマルチプロセッサプラットフォームの 並列処理を利用できるプロセスの作成が可能になります。pthread ライブラリ libpthread は、90 以上の標準化さ れたインタフェースで構成され、並列のアプリケーションの開発とそれらの処理をプロセス内またはプロセス 間で同期させることが可能です。このマンページでは、libpthread の用語およびスレッドを使用するプログラム のコンパイルおよびリンクの方法を含む概要を説明します。 コンパイルの概要 マルチスレッドのアプリケーションでは、コンパイル時に適切な POSIX リビジョンレベル (199506) を定義し て、-lpthread によりpthread ライブラリにリンクしなければなりません。例: cc -D_POSIX_C_SOURCE=199506L -o myapp myapp.c -lpthread すべてのプログラムソースには、ヘッダーファイル <pthread.h> が含まれていなければなりません。 注記: ("-Aa" を指定して) ANSI コンパイルを明示的に指定する場合、POSIX リビジョンレベルを定義すると、 プログラムは POSIX ネームスペース内のインタフェースだけを使用します。より大きな X/Open ネームスペー ス 内 の イ ン タ フェー ス が 呼 び 出 さ れ る 場 合 に は、 −D_POSIX_C_SOURCE=199506L の 他 に、 −D_XOPEN_SOURCE_EXTENDED または −D_HPUX_SOURCE のいずれかのコンパイラオプションの指定が 必要です。-Ae を指定して (あるいは "-A" を指定せずに) コンパイルすると、−D_HPUX_SOURCE が暗黙的に 指定されます。 注記: 一部のドキュメンテーションでは、コンパイルに −D_REENTRANT を使用するようにお薦めしていま す。これも正しく機能しますが、旧形式であると考えられます。 スレッドの概要 スレッドは、プロセス内の独立した制御の流れであり、コンテキスト (レジスタセットおよびプログラムカウ ンターを含む) および一連の実行命令で構成されます。 すべてのプロセスは、最低でも1つのスレッドで構成され、マルチスレッドプロセスは複数のスレッドで構成 されています。すべてのスレッドは、そのプログラムに割り当てられた共通アドレス空間を共有します。 POSIX pthread の API を使用するプログラムは、 ユーザースレッドと呼ばれるものを作成し処理します。 カー ネルスレッドは、カーネルがスケジューリングできるエンティティであり、1つまたは複数のユーザースレッ ドをサポートすることができます。 HP-UX リリース 11i バージョン 1.6 以降では、HP-UX のスレッドの実装 では、ユーザースレッドとカーネルスレッド間で、1対1のマッピングだけでなく N 対 1 のマッピングもサ ポートしています。 各スレッドには、作成時に pthread_t 型の固有の識別子が割り当てられます。スレッド id は、プロセス専用の 値であり、処理系に依存します。この値はスレッドにとって不明瞭なハンドルとみなされますのでアプリケー ションでは使用しないでください。 Section 3-140 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) インタフェースに関する注記 HP-UX システムでは、pthread の API への標準的でない拡張をいくつか行っています。これらの拡張には、他 と区別するために、常に _np または _NP (non-portable) という接尾辞が付いています。 プログラマは、使用する関数について必ずマンページを調べてください。標準的に指定される関数の中には、 使用できないものや、一部の処理系では効果がないものがあります。 スレッドの作成/消去 プログラムは、 pthread_create() 関数を使用してスレッドを作成します。スレッドは、その作業を終了したと きに、 pthread_exit() 関数を呼び出してもかまいませんし、単にその最初の関数から戻ってもかまいません。 スレッドは、 pthread_join() 関数を使用することによって、他のスレッドの完了を検出することができます。 pthread_create() スレッドを作成し、固有の識別子 pthread_t を割り当てます。 呼び出し元は、その スレッドによって実行される関数を与えます。この場合、任意でそのスレッドの属 性を明示的に指定することができます (後で説明する PTHREAD ATTRIBUTES を参 照してください)。 pthread_exit() pthread_join() 完了時にスレッドによって呼び出されます。この関数は戻りません。 これは、 wait() に似ていますが、pthreads 用のものです。スレッドはプロセス内で 他のスレッドと結合する可能性がありますが、親子関係はありません。これは、指 定されたスレッドが終了した時点で戻り、そのスレッドの資源が取得されます。 pthread_detach() スレッドの「結合」を不要にします。スレッドの資源はそのスレッドが終了した時 点でシステムによって取得されます。 PTHREAD の属性 ス レッ ド 属 性 の 集 合 を pthread_create() に 与 え る こ と が で き ま す。 デ フォ ル ト 値 の 変 更 は、 す べ て pthread_create() の呼び出しを行う前に、属性集合に対して行わなければなりません。この呼び出しの後に属性 集合を変更しても、作成されたスレッドには影響を与えません。ただし、属性集合は複数の pthread_create() の呼び出しで使用することができます。 スレッドの "detachstate"、"schedparam"、"schedpolicy"、および "processor" 属性だけは、スレッド作成の後に影 響を受ける可能性があることに注意してください。ただしこれらの属性は、それぞれ、 pthread_detach()、 pthread_setschedparam() および pthread_processor_bind_np() 関数によって変更されます。 pthread_attr_init() pthread_create() 呼び出し内で使用するために属性集合を初期化しま す。 pthread_attr_destroy() 属性集合の内容を消去します。 pthread_attr_getdetachstate(), pthread_attr_getguardsize(), pthread_attr_getinheritsched(), pthread_attr_getprocessor_np(), pthread_attr_getschedparam(), HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-141 pthread(3T) pthread(3T) pthread_attr_getschedpolicy(), pthread_attr_getscope(), pthread_attr_getstackaddr(), pthread_attr_getstacksize(), pthread_attr_setdetachstate(), pthread_attr_setguardsize(), pthread_attr_setinheritsched(), pthread_attr_setprocessor_np(), pthread_attr_setschedparam(), pthread_attr_setschedpolicy(), pthread_attr_setscope(), pthread_attr_setstackaddr(), pthread_attr_setstacksize() これらの pthread_attr_get/set attribute () 関数は、属性集合内の該当する属性を取得/ 設定します。 ス レッド属性の説明については、これらの関数に関するマンページを参照してください。 pthread_default_stacksize_np() これは、後続の属性集合の初期化 (pthread_attr_init() の呼び出し)、または属性が与えられていない場 合の pthread_create() で作成されるスレッドのデフォルトのスタックサイズを設定するために使用しま す。 キャンセル 一部のアプリケーションでは、プロセス全体を終了することなく、特定のスレッドを終了することを要求する 場合があります。キャンセル対象スレッドがシステムコールまたは特定のライブラリルーチンを実行している 間に、そのスレッドが同じプロセス内の別のスレッドによってキャンセルされる可能性があります。 あ る ス レッ ド が 別 の ス レッ ド に 対 し て キャ ン セ ル 要 求 を 発 行 す る 場 合、 キャ ン セ ル 対 象 ス レッ ド は、 pthread_testcancel() インタフェースによって、保留中のキャンセル要求があるかどうかをチェックすることが できます。保留中のキャンセル要求によって呼び出された場合、キャンセル対象スレッドは、インストールさ れたすべてのクリーンアップハンドラーを実行した後に終了します。クリーンアップハンドラーは、このキャ ンセルされるスレッドによって割り当てられている動的記憶領域を削除したり、mutex ロックを解除したり、 またはその他の処理のために使用されます。 一般に、スレッドのキャンセルタイプは、 deferred です。 つまりキャンセル要求は、そのスレッドがライブラ リ関数またはシステムコールのリスト (下記のリストを参照) の1つである キャンセルポイントに到達するま で、保留状態のままです。 スレッドは、そのキャンセルタイプを非同期に設定することができます。この場合、キャンセル要求はその時 点で処理されます。これは、キャンセルポイントとなる関数を呼び出さないコンピュートバウンドのスレッド 内で効果的に使用することができます。 Section 3-142 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) pthread_cancel() 指定したスレッドの実行をキャンセルます。 pthread_testcancel() スレッドによって呼び出され、保留中のキャンセル要求を処理します。 pthread_setcancelstate(), pthread_setcanceltype() スレッドに対するキャンセルの特性を設定します。 有効または無効、あるいは同期的または延期を設 定することができます。 pthread_cleanup_pop(), pthread_cleanup_push() キャンセルクリーンアップ ハンドラーを登録または消去します。 pthread ライブラリ、システム関数、libc でのキャンセルポイントのリストについては、 thread_safety(5) を参照 してください。 libc 関数の場合、スレッドがキャンセルされるかどうかは、関数の実行中にどのような処理が行われたかに よって決まります。スレッドが関数内部でブロックした場合、キャンセルポイントが作成されます (つまり、 そのスレッドはキャンセルされる可能性があります)。その他のライブラリでも、キャンセルポイントがあるこ とがあります。詳細は、ライブラリに添付されているドキュメントを参照してください。 キャンセルポイントのリストは、リリースごとに異なります。 一般に、関数が [EINTR] エラーで戻る場合は、 その関数がキャンセルポイントとなる可能性があります。 スケジューリング スレッドは個々にそれぞれのスケジューリング方針および優先順位を制御することができます。スレッドは、 そのスレッドの実行、または他のスレッドの実行を一時停止することもできます。つまり、スレッドにはプロ セッサの資源の割り当ての他にいくつかの制御が与えられています。 pthread_suspend() この関数は、一時的にスレッドの実行を停止するために使用されます。 pthread_continue(), pthread_resume_np() これらの関数によって、以前に一時停止されていたスレッドの実行が継続します。 pthread_num_processor_np(), pthread_processor_bind_np(), pthread_processor_id_np() これらの関数は、プロセッサの構成を調べたり、スレッドを特定のプロセッサにバインドしたりする ために使用されます。 pthread_getconcurrency(), pthread_setconcurrency() HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-143 pthread(3T) pthread(3T) これらの関数は、境界のないスレッドに対して実際の並列処理を制御するために使用されます。 pthread_getschedparam(), pthread_setschedparam() これらの関数は、スレッドのスケジューリング方針および優先順位を操作するために使用されます。 sched_get_priority_max(), sched_get_priority_min() これらの関数は、指定したスケジューリング方針の優先順位の範囲を調べるために使用されます。 この関数は、スレッドによって使用され、優先順位が等しいかまたは大きな他のスレッ sched_yield ドにプロセッサを渡します。 通信および同期化 マルチスレッドのアプリケーションは、並列に複数の命令を実行します。 プロセス全体にわたる (またはプロ セス内の) 共有資源 (メモリー、ファイル記述子など) へのアクセスには、スレッド間の調整つまり同期のため の制御が必要です。 libpthread ライブラリは、決定性アプリケーションを作成するために必要な同期的基本関 数を提供します。マルチスレッドのアプリケーションは、強制的に非同期スレッドのコンテキストを同期させ たり、順番に実行したり、実行中に管理および処理されるデータ構造および資源にアクセスしたりすることに よって、決定性を保証します。これらは、相互排他 (mutex) ロック、条件変数、および読み込み/書き込みロッ クです。HP-UX オペレーティングシステムでも、POSIX セマフォを提供しています (次の項を参照してくださ い)。 Mutexes は、並列して行われる変更からデータ構造を排他的に保護する手段を与えます。それらのプロトコル は、ロックを行っているスレッドが類似の mutex のロックを解除するまで、保護された構造内容が変更される のを妨ぐことができます。 mutex は、 pthread_mutex_init() の呼び出し、または PTHREAD_MUTEX_INITIALIZER の割り当てという2通りの方法で初期化することができます。 条件変数は、スレッドによって使用され、特定のイベントの発生を待ちます。このようなイベントを検出した り引き起こしたりするスレッドには、 signal または broadcast があり、これらは待ち状態の1つまたは複数の スレッドを発生させます。 読み込み/書き込みロックでは、読み込み/書き込みロックによって保護されている構造への複数のスレッドに よる並列読み込みアクセスが許可されますが、書き込みアクセスを許可されるスレッドは1つだけです。 pthread_mutex_init(), pthread_mutex_destroy() mutex ロックの内容を初期化/消去します。 pthread_mutex_lock(), pthread_mutex_trylock(), pthread_mutex_unlock() Section 3-144 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) mutex をロック/ロック解除します。 pthread_mutex_getprioceiling(), pthread_mutex_setprioceiling() mutex ロックの優先順位を操作します。 pthread_mutexattr_init(), pthread_mutexattr_destroy(), pthread_mutexattr_getprioceiling(), pthread_mutexattr_getprotocol(), pthread_mutexattr_getpshared(), pthread_mutexattr_gettype(), pthread_mutexattr_getspin_np(), pthread_mutexattr_setprioceiling(), pthread_mutexattr_setprotocol(), pthread_mutexattr_setpshared(), pthread_mutexattr_settype(), pthread_mutexattr_setspin_np() pthread_mutex_init() に使用される mutex 属性を管理します。 既存の mutex に対して変更できるの は、"prioceiling" 属性だけです。 pthread_mutex_getyieldfreq_np(), pthread_mutex_setyieldfreq_np() これらの関数は、 spin 属性とともに使用され、mutex パフォーマンスを特定のアプリケーションに調 整します。 pthread_cond_init(), pthread_cond_destroy() 読み込み/書き込みロックの内容を初期化/消去します。 pthread_cond_signal(), pthread_cond_broadcast(), pthread_cond_timedwait(), pthread_cond_wait() 条件変数を待機するか、またはその発生を合図します。 pthread_condattr_init(), pthread_condattr_destroy(), pthread_condattr_getpshared(), pthread_condattr_setpshared() HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-145 pthread(3T) pthread(3T) pthread_cond_init() に使用される条件変数属性を管理します。 pthread_rwlock_init(), pthread_rwlock_destroy() 読み込み/書き込みロック内容を初期化/消去します。 pthread_rwlock_rdlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_wrlock(), pthread_rwlock_trywrlock(), pthread_rwlock_unlock() 読み込み/書き込みロックをロック/ロック解除します。 pthread_rwlockattr_init(), pthread_rwlockattr_destroy(), pthread_rwlockattr_getpshared(), pthread_rwlockattr_setpshared() pthread_rwlock_init() に使用される読み込み/書き込みロック属性を管理します。 POSIX 1.b のセマフォ POSIX 1.b 規格で指定されるセマフォ関数も、マルチスレッドのアプリケーションでの同期化のために使用す ることができます。 sem_init(), sem_destroy() セマフォの内容を初期化/消去します。 sem_post(), sem_wait(), sem_trywait() セマフォ値 (ブロック化が可能possibly blocking) を増加/減少させます。 シグナル マルチスレッド処理では、すべてのスレッドは、シグナル動作を共有します。つまり、あるスレッドによって 設定されたシグナルハンドラーがすべてのスレッドによって使用されます。 ただし、各スレッドに個別のシグ ナルマスクがあり、これによってスレッドは選択的にシグナルをブロックすることができます。 同じプロセス内の他のスレッドまたは他のプロセスにシグナルを送ることができます。シグナルがプロセスに 送られると、そのシグナルをブロックしていないスレッドの1つが処理を行います。同じプロセス内のスレッ ドにシグナルが送られると、おそらく後でそのシグナルがブロックされる場合でも、そのスレッドがそのシグ ナルを処理します。終了、停止、または続行の動作を指すシグナルは、特定のスレッドで指示された場合で も、それぞれ、プロセス全体を終了、停止、または続行します。 Section 3-146 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) pthread_kill() 指定したスレッドにシグナルを送ります。 pthread_sigmask() スレッドに対して選択したシグナルをブロックします。 sigwait(), sigwaitinfo(), sigtimedwait() これらの関数は、指定したシグナルを同期的に待ちます。 スレッド固有データ スレッド固有データ (TSD) は、スレッドに専用の、つまり固有のグローバルデータです。各スレッドは、同じ スレッド固有データ変数に対して異なる値を持ちます。グローバルな errno はスレッド固有のグルーバルデー タの典型的な例です。 各スレッド固有のデータ項目は、キーに関連付けられています。このキーは、すべてのスレッドによって共有 されます。ただし、スレッドがこのキーを参照する場合は、データの独自の専用コピーを参照します。 pthread_key_create(), pthread_key_destroy() これらの関数は、スレッド固有データのキーを管理します。 pthread_getspecific(), pthread_setspecific() これらの関数は、キーに関連付けられているデータ値の検索および割り当てを行います。 HP-UX コンパイラは、 スレッドローカル記憶領域 (TLS) という記憶領域のクラスをサポートします。( これ は、POSIX の標準的な機能ではありません。) TLS は、値の作成/設定/取得のために関数が必要でないこと以 外は、TSD と同じです。TLS 変数は、通常のグローバル変数とまったく同様にアクセスされます。TLS 変数 は、次の構文を使用して宣言することができます。 __thread int zyx; キーワード __thread は、 zyx が TLS 変数であることをコンパイラに指示します。現在、各スレッド次のよう な文によって TLS を設定または取得することができます。 zyx = 21; 各スレッドは、 zyx に異なる値を関連付けます。 TLS 変数は静的に初期化することができます。初期化されていない TLS 変数には0が設定されます。動的に ロードされるライブラリ (shl_load() を使用) は、TLS 変数を宣言して使用することができます。 スレッドが TLS 変数を使用するかどうかにかかわらず、各スレッドのための TLS スペースを割り当てて初期 化しなければならないので、TLS では、スレッド作成/終了処理に負担がかかります。これは、起動時に静的 にリンクされるモジールにあてはまります。 (sh_load() によって) 動的にロードされるライブラリの場合、ス レッドの TLS スペースは、スレッドが TLS 変数にアクセスしたときに割り当てられます。大きな TLS 領域を HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-147 pthread(3T) pthread(3T) 実際に使うスレッドがほとんどない場合は、代わりに POSIX TSD (上記) を使用することをお勧めします。 再入可能な LIBC および STDIO これらは、ライブラリ内部の静的データを指すポンイタを返すので、マルチスレッドのプログラム内では多数 の libc を使用することはできません。この理由は、スレッド内のこれらの関数の呼び出しによって他のスレッ ド内での以前の呼び出しの結果が上書きされるからです。 スレッドプログラムの作成のためには、 接尾辞 _r ( 再入可能を表す) が付いた代わりの関数が libc 内に用意されています。 さらに、標準的な I/O 動作の同期化のために、いくつかの基本関数が用意されています。 asctime_r(), ctime_r(), getgrgid_t(), getgrnam_r(), getlogin_r(), getpwnam_r(), getpwuid_r(), gmtime_t(), localtime_r(), rand_r(), readdir_r(), strtok_r(), ttyname_r() 既存の libc 関数の再入可能バージョンです。 flockfile(), ftrylockfile(), funlock() 標準的な I/O ストリームに対して明示的な同期化を行います。 その他の関数 この項では、これまでに説明していないその他の pthread に関連する関数の概要を示します。 pthread_atfork() fork() 処理の直前および直後に呼びだす特殊関数を設定します。 pthread_equal() 2つの pthread_t 値が同じ pthread を表しているかどうかを調べます。 pthread_once() いくつのスレッドが同じ呼び出しを行っているかにかかわらず、プロセス内で指定 した関数を1度だけ実行します (1回限りのデータの初期化に有効です)。 pthread_self() Section 3-148 呼び出しを行っているスレッドの識別子 (pthread_t) を返します。 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) スレッドのデバッグ マルチスレッドのプログラムのデバッグは、標準的な HP-UX デバッガ dde でサポートされています。 デバッ ガイベントによってあるスレッドが停止すると、デバッガはすべてのスレッドを停止します。任意のスレッド のレジスタの状態、スタック、およびデータを調べて操作することができます。 詳細については、 dde(1) マンページおよび組み込みのグラフィック ヘルプシステムを参照してください。 トレース機能 HP-UX では、pthread の処理のためにトレース機能を用意しています。これを使用するためには、次のように して、トレースバージョンのライブラリを使用してアプリケーションをリンクしなければなりません。 cc -D_POSIX_C_SOURCE=199506L -o myapp myapp.c -lpthread_tr -lcl アプリケーションは、実行されると、pthread イベントに関するスレッド単位のファイルを作成します。これ は、 HP/PAK パフォーマンス アプリケーションキット内で使用可能な ttv スレッドトレース表示機能への入力 として使用されます。 トレースデータ ファイルを制御するために、下記の環境変数が定義されています。 THR_TRACE_DIR トレースデータ ファイルを入れる場所です。これが定義されていない場合、このファイルは現在の ワークディレクトリに入ります。 THR_TRACE_ASYNC デフォルトによって、トレースレコードはバッファーに入れられ、バッファーが一杯になったときに だけファイルに書き込まれます。この変数に NULL でない値が設定されていると、データはただちに トレースファイルに書き込まれます。 THR_TRACE_EVENTS デフォルトによって、すべての pthread イベントがトレースされます。この変数が定義されていると、 定義されいてるカテゴリだけがトレースされます。各カテゴリは ’:’ で分割されます。 可能性のあるカ テゴリとして、以下のものがあります。 thread:cond:mutex:rwlock たとえば、スレッドおよび mutex の処理だけをトレースするには、 THR_TRACE_EVENTS 変数を次 のように設定します。 thread:mutex トレースファイルのレコードフォーマットの詳細説明は、 /usr/include/sys/trace_thread.h にあります。 トレース情報の使用に関する詳細については、 ttv(1) マンページおよび組み込みのグラフィック ヘルプシステ ムを参照してください。 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 3-149 pthread(3T) pthread(3T) パフォーマンスに関する考察 シングルスレッドよりもパフォーマンスを向上させるために、アプリケーションをマルチスレッドにするよう に設計する場合が多くあります。ただし、マルチスレットアプローチでは、シングルスレッドの場合にはほと んど関係のない問題に注意が必要です。これらは、従来からマルチプロセッサシステムのプログラミングに関 連する問題です。 この設計には、データ構造およびアクセスパターンに適した大きさのデータに分けてロックしなければなりま せん。 比較的大量のデータに分けてロックし、保護する場合、不必要なロックの競合を引き起こし、アプリ ケーションの並列処理能力を減少させることがあります。 他方、 非常に少量のデータに分けてロックし、保護 する場合、ロック動作が多きくなり、プロセッサが無駄な処理を行わなければならなくなる可能性がありま す。 スレッド固有データ (TSD) を使用すること、およびスレッドローカル記憶領域 (TLS) を使用することは、上で 説明したように (スレッド固有データを参照)、トレードオフになります。 Mutex の spin および yield frequency 属性を使用すると、アプリケーションへの mutex の動作を調整することが できます。 詳細については、 pthread_mutexattr_setspin_np(3T) および pthread_mutex_setyieldfreq_np(3T) を参照 してください。 default stacksize 属性を設定すると、システムスレッドのキャッシュ動作を向上させることができます。 詳細に ついては、 pthread_default_stacksize_np(3T) を参照してください。 複数のスレッドは、実際には同時に実行しているので、複数のプロセッサから同じデータをアクセスしている 可能性があります。 ハードウェアプロセッサがそれぞれのデータのキャッシュを調整するので、プロセッサが 古いデータを使用することはありません。 あるプロセッサがデータをアクセス ( 特に書き込み処理のために) する場合、他のプロセッサはそれぞれのキャッシュから古いデータを初期化しなければなりません。 複数のプ ロセッサが同一のデータの読み込み/書き込みを繰り返す場合、命令ストリームの実行を低速にするキャッシュ スラッシングを引き起こす可能性があります。これは、複数のスレッドが同じハードウェアのキャッシュ可能 な単位 (キャッシュラインと呼ばれる) にある別々のデータ項目をアクセスする場合にも発生することがありま す。 後者の状況をフォールスシェアリングと呼びますが、これは、データの間隔を開けてこのような一般的な 項目を互いに近くに保存しないようにすることによって、避けることができます。 用語集 以下の用語の定義は、Scott J. Norton、Mark D. DiPasquale 共著によるテキスト「ThreadTime」(Prentice-Hall、 ISBN 0-13-190067-6、1996 年発行) から抽出したものです。 アプリケーション プログラミング インタフェース (API) インタフェースは、エンティティへのアクセスまたはエンティティ間の通信を行なう伝達手段です。プログラ ミングの世界では、インタフェースは、関数とのアクセス (または通信) がどのように行なわれるかを記述しま す。特に、パラメータの数、名前、および目的は、関数へのアクセス方法を表します。API は、関数へのアク セスを行なう機能です。 Section 3-150 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) 非同期キャンセルセーフ キャ ン セ ル 状 態 が PTHREAD_CANCEL_ENABLE に 設 定 さ れ、 キャ ン セ ル タ イ プ が PTHREAD_CANCEL_ASYNCHRONOUS に設定されているスレッドから呼び出すことができる関数です。このような関数の中 の1つでスレッドがキャンセルされた場合、その関数内に状態は残りません。これらの関数は、通常、その関 数のタスクを実行するために資源を獲得することはありません。 非同期シグナルセーフ 非同期シグナルセーフの関数は、シグナルハンドラーによって呼び出すことができる関数です。シグナルハン ドラーによって安全に呼び出すことができる関数は、一連の限定された関数だけです。これらの関数のリスト は、POSIX.1c 規格の 3.3.1.3 項に記載されています。 非同期シグナル 非同期シグナルは、外部イベントにより生成されるシグナルです。 kill() により送信されるシグナルおよびタ イマーの満了または非同期 I/O の完了によって生成されるシグナルは、すべて非同期に生成されるシグナルの 例です。非同期シグナルは、プロセスに配信されます。シグナルは、すべて非同期に生成される可能性があり ます。 fork 時ハンドラー アプリケーションにより提供および登録され、 fork() 処理の前後に呼び出される関数です。これらの関数は、 通常の場合、fork() の前にすべての mutex ロックを獲得し、fork() の後に親プロセスおよび子プロセスの両方 でそれらの mutex ロックを解除します。 最小単位での操作 2つの命令であるかのように完了することが保証される操作、つまり一連のイベント。 バリヤ関数 アプリケーション内の指定した点で一定の数のスレッドを待たせる、つまり集める同期的基本関数。バリヤ関 数は、次の作業に進む前にすべてのスレッドがなんらかの操作を完了していることをアプリケーションが保証 する必要のある場合に使用されます。 バインドされたスレッド カーネルでスケジューリングされるエンティティに直接バインドされているユーザースレッド。このようなス レッドは、システムのスケジューリング範囲を含んでいるので、直接カーネルによってスケジューリングされ ます。 キャッシュスラッシング キャッシュスラッシングは、1つのスレッドが異なるプロセッサ上で実行している状況です。キャッシュされ たデータを異なるプロセッサのキャッシュへ、またはキャッシュから移動させます。キャッシュスラッシング により、重大なパフォーマンスの低下が引き起こされる可能性があります。 キャンセルクリーンアップ ハンドラー アプリケーションにより提供および登録され、スレッドがキャンセルされる際に呼び出される関数です。これ らの関数は、通常の場合、スレッドのキャンセル中に、スレッドのクリーンアップ処理を実行します。これら のハンドラーは、シグナルハンドラーに似ています。 HP-UX 11i Version 2: August 2003 − 12 − Hewlett-Packard Company Section 3-151 pthread(3T) pthread(3T) 条件変数 条件変数は、スレッドがイベントを待つことができるようにするために使用される同期的基本関数です。条件 変数は、作成側のスレッドが1つまたは複数の消費側のスレッドに何かを提供しなければならない、作成側と 消費側のスレッド間の問題の中で使用されることが多くあります。 コンテキストの切り替え 現在実行中のスレッドをプロセッサから削除し別のスレッドを実行する処理。コンテキストの切り替えでは、 現在実行中のスレッドのレジスタの状態を保存して、次の実行のために選択されたスレッドのレジスタの状態 を復元します。 クリティカルセクション 最小単位で割り込みなしに完了しなければならないコードのセクションです。コードのクリティカルセクショ ンは、通常の場合、グローバルな資源 (変数、データ構造、リンクされたリストなど) が変更されるセクション です。実行中の操作は、他のスレッドが矛盾した状態でクリティカルセクションを参照しないように、最小単 位で完了しなければなりません。 デッドロック デッドロックは、1つまたは複数のスレッドが実行できなくなったときに発生します。たとえば、スレッド A がロック1を設定し、ロック2でブロックされているとします。一方、スレッド B がロック2を設定し、ロッ ク1でブロックされているとします。すると、スレッド A および B は、永久にデッドロック状態になります。 デッドロックは、スレッドを持つ任意の数の資源で発生する可能性があります。 相互デッドロックは、2つ以 上のスレッドが関係します。 再帰 (または 自己) デッドロックは1つのスレッドだけが関係します。 アタッチ解除されたスレッド スレッドの終了時にシステムにより自動的に解放される資源を持つスレッド。アタッチ解除されたスレッドは 別のスレッドによって結合することはできません。つまり、アタッチ解除されたスレッドは、終了状態を返す ことはできません。 結合可能なスレッド 別のスレッドが終了を待つことができるスレッド。結合可能なスレッドは、結合を行なうスレッドに終了状態 を返すことができます。結合可能なスレッドは、終了後に別のスレッドによって結合されるまで、その状態を 保持します。 カーネルモード すべての操作が許可される操作モード。スレッドは、システムコールの実行中は、カーネルモードで実行して います。 カーネル空間 カーネルプログラムは、この空間に存在します。カーネルコードは、この空間の中で最高の権限レベルで実行 されます。通常の場合、権限レベルには、ユーザーコード用のレベル (ユーザーモード) とカーネルコード用の レベル (カーネルモード) の2つがあります。 Section 3-152 Hewlett-Packard Company − 13 − HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) カーネルスタック スレッドは、システムコールを行なう場合は、カーネルモードで実行します。カーネルモードの間、スレッド は、アプリケーションによって割り当てられたスタックを使用しません。代わりに、システムコール中は、別 のカーネルスタックが使用されます。カーネルがスケジューリングするそれぞれのエンティティには、それが プロセス、カーネルスレッド、または軽量プロセスのどれでも、カーネルスタックが含まれます。スタックの 一般的な説明については、スタックを参照してください。 カーネルスレッド カーネルスレッドは、スレッドライブラリ内にあるスレッド関数によって作成されます。カーネルスレッド は、オペレーティングシステム カーネルから見ることができる カーネルがスケジューリングするエンティティ です。カーネルスレッドは、通常の場合、1つまたは複数のユーザースレッドをサポートします。カーネルス レッドは、ユーザースレッドに代って、カーネルコードまたはシステムコールを実行します。一部のシステム では、カーネルスレッドを 軽量プロセスと呼ぶ場合があります。スレッドの一般的な説明については、 スレッ ドを参照してください。 軽量プロセス カーネルがスケジューリングするエンティティ。一部のシステムでは、軽量プロセスをカーネルスレッドと呼 ぶ場合があります。それぞれのプロセスには、1つまたは複数の軽量プロセスが含まれます。1つのプロセス の中にいくつの軽量プロセスが含まれるかは、そのプロセスがマルチスレッドプロセスであるかどうかおよび その程度によって決まります。スレッドの一般的な説明については、 スレッドを参照してください。 マルチプロセッサ 2つ以上のプロセッサ (CPU) を持つシステム。マルチプロセッサでは、マルチスレッドアプリケーションが真 の並列処理を行うことができます。 マルチスレッド アプリケーションに複数の実行スレッドを持つことを可能にするプログラミングモード。マルチスレッドによ り、アプリケーションは (マルチプロセッサシステム上で) 同時並列処理を行なうことができます。 Mutex mutex は、相互排他同期的基本関数です。Mutex は、共有されるデータおよび資源へのアクセスを管理、また は順番に実行する機能をスレッドに与えます。あるスレッドが mutex ロックを行なっている場合、このスレッ ドが mutex をロック解除するまで、mutex ロックを行なおうとしている他のスレッドはブロックされます。 POSIX 移植可能なオペレーティングシステム インタフェース。POSIX は、アプリケーションを移植できるようにする ために複数のベンダーが従う一連の規格を定義します。Pthreads の規格 (POSIX 1003.1c) は、アプリケーション 開発担当者に一連の移植可能なマルチスレッド用 API を提供します。 優先順位の逆転 優先順位の低いスレッドが優先順位の高いスレッドにより要求される資源を獲得している状況。この資源を獲 得することができない場合、優先順位の高いスレッドはこの資源を待たなければなりません。最終的な結果と して、優先順位の低いスレッドが優先順位の高いスレッドをブロックします。 HP-UX 11i Version 2: August 2003 − 14 − Hewlett-Packard Company Section 3-153 pthread(3T) pthread(3T) プロセス プロセスは、1つまたは複数のスレッドのための、実行、アドレス空間、および共有プロセスの資源の入れ物 と考えることができます。すべてのプロセスは最低でも1つのスレッドを持ちます。プロセス内の各スレッド はそのプロセスのアドレス空間内で実行します。プロセスが共有する資源の例としては、オープンファイル記 述子、メッセージ待ち行列記述子、mutex、およびセマフォがあります。 プロセス制御ブロック (PCB) この構造体には、プロセスのレジスタコンテキストが保存されます。 プロセス構造体 オペレーティングシステムは、システム内のそれぞれのプロセスごとにプロセス構造体を持っています。この 構造体は、システム内で内部的に実在するプロセスを表します。プロセス構造体情報のサンプルとしては、プ ロセス ID、プロセスのオープンファイルの集合、シグナルベクトルがあります。プロセス構造体およびその中 に含まれる値は、プロセスのコンテキストの一部です。 プログラムカウンター (PC) プログラムカウンターは、プロセスのレジスタコンテキストの一部です。これは、現在実行される命令のアド レスを保存します。 競合状態 ある操作を実行中の2つ以上のスレッドの結果が予測できないタイミング要因によって決まる場合を競合状態 といいます。 読み込み/書き込みロック 読み込み/書き込みロックは、同期的基本関数です。読み込み/書き込みロックは、プロセスが共有するデータ および資源へのアクセスを管理、または順番に実行する機能をスレッドに与えます。読み込み/書き込みロック では、複数の読み込みスレッドが同時に読み込みロックを獲得できるのに対して、同時に書き込みロックを獲 得できる書き込みスレッドは1つだけです。これらのロックは、書き込みがまれにしか行われす、たいていは 読み込みが行われる共有データに有効です。 再入可能関数 再入可能関数は、複数のスレッドによって呼び出され、それぞれのスレッドによって1つずつ順番に呼び出さ れたかのように動作する関数です。これらの関数は並列に実行する場合もあります。 スケジューリングの割り当てドメイン 1つのスレッドがスケジューリングされているプロセッサの集合。このドメインのサイズは、いつでも動的に 変更することができます。スレッドをあるドメインから別のドメインに移動することもできます。 スケジューリングの競合範囲 スケジューリングの競合範囲は、あるスレッドが資源のアクセスを競合するスレッドのグループを定義しま す。非常に多くの場合、競合範囲はプロセッサへのアクセスに該当します。ただし、この範囲は、複数のス レッドが他の資源を競合する場合にも使用することができます。システム範囲のスレッドは、そのシステム内 の他のすべてのスレッドと資源へのアクセスを競合します。プロセス範囲のスレッドは、そのプロセス内の他 のプロセス範囲のスレッドと資源へのアクセスを競合します。 Section 3-154 Hewlett-Packard Company − 15 − HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) スケジューリング方針 スケジューリング方針は、複数のスレッドを実行するために、いつ、どのようにスケジューリングするかを決 定するために使用される一連の規則です。スケジューリング方針は、どれだけ長くスレッドに実行を許可する かについても決定します。 スケジューリングの優先順位 スケジューリングの優先順位は、一部のスケジューリング方針でスレッドに割り当てられる数値による優先順 位の値です。優先順位の高いスレッドには、スケジューリングの決定を行う際に優先権が与えられます。 セマフォ セマフォは mutex に似ています。セマフォは、1つまたは複数の共有オブジェクトへのアクセスを管理しま す。セマフォには値が割り当てられます。この値は、通常の場合、そのセマフォによって管理される共有資源 の数に設定されます。セマフォの値が1の場合には、バイナリセマフォです。基本的に、mutex はバイナリセ マフォです。セマフォの値が1よりも大きい場合、 カウンティングセマフォと呼ばれます。カウンティングセ マフォは、複数のスレッドによって同時にロックされる可能性があります。セマフォがロックされるたびに、 この値は1つずつ減少していきます。この値がゼロになった後、そのセマフォを新たにロックしようとする と、そのセマフォが別のスレッドによってロック解除されるまで、ロックを行なおうとしているスレッドはブ ロックされます。 共有オブジェクト 共有オブジェクトは、プロセスのアドレス空間に存在し、そのプロセス内のすべてのスレッドによってアクセ ス可能な実体のあるエンティティです。マルチスレッドプログラミングの場合、「共有オブジェクト」はグ ローバル変数、ファイル記述子、および、スレッドによるアクセスを同期させることを要求する他のオブジェ クトです。 シグナル シグナルは、プロセスまたはスレッドにイベントを通知できるようにする簡略化された IPC 制御です。シグナ ルは、同期的、または非同期に生成することができます。 シグナルマスク シグナルマスクは、スレッドがどのシグナルを受け入れ、どのシグナルが配信からブロックされるかを決定し ます。同期シグナルは、配信からブロックされた場合、そのスレッドがそのシグナルのブロックを解除するか またはそのスレッドが終了するまで、保留されたままです。プロセスに配信される非同期シグナルがあるス レッドによって配信からブロックされている場合、プロセス内でこのシグナルをブロックしていない別のス レッドがこのシグナルを処理することができます。 シグナルベクトル シグナルベクトルは、各プロセス内に含まれるテーブルで、それぞれのプロセス内のスレッドにシグナルが配 信されたときに実行する動作を表します。それぞれのシグナルは、そのシグナルを無視する、シグナル処理関 数を実行する、そのシグナルのデフォルトの動作 (通常は、プロセスの終了) を実行する、という3つの可能性 のある動作の中の1つの動作を行ないます。 HP-UX 11i Version 2: August 2003 − 16 − Hewlett-Packard Company Section 3-155 pthread(3T) pthread(3T) シングルスレッド プログラムコードを通る 制御の流れが1つだけ存在する (1スレッド) ことを意味します。つまり、同時に実 行される命令は1つだけです。 Spinlock mutex に似た同期的基本関数。mutex ロックを獲得できない場合、そのロックを獲得したいスレッドは、ブ ロックされる代わりに、そのロックを獲得できるまでループ内を回ります。Spinlock は不適切に使用されやす く、これをシングルプロセッサシステムで使用すると、パフォーマンスが著しく低下する可能性があります。 疑似起動 スレッドを間違ってブロック解除すると、そのスレッドが待っていたイベントが発生しない場合でも、疑似起 動が発生します。ブロックされているスレッドが通常のシグナルを受け取ったために、条件待ちが割り込みさ れて戻るのは、疑似起動の例です。 スタック スタックは、スレッドによって、関数呼び出しの実行 (およびこれらの呼び出しからの復帰)、関数呼び出しへ の引き数の引き渡し、および、関数呼び出し時に呼び出された関数内でのローカル変数への空間の割り当てを 行なうために使用されます。バインドされたスレッドには、ユーザースタックとカーネルスタックがありま す。バインドされていないスレッドにはユーザースタックだけがあります。 同期シグナル 同期シグナルは、特定のスレッドのある動作によって生成されるシグナルです。たとえば、あるスレッドがゼ ロによる除算を行なったり、浮動小数点例外を引き起こしたり、不当な命令を実行したりすると、シグナルが 同期的に生成されます。同期シグナルは、そのシグナルを送信させたスレッドに配信されます。 従来のプロセス これは、1つのプロセッサ上で実行をスケジューリングできるシングルスレッドエンティティです。 スレッド スレッドは、プロセス内の独立した制御の流れであり、コンテキスト (レジスタセットおよびプログラムカウ ンターを含む) および一連の実行命令で構成されます スレッドローカル記憶領域 (TLS) スレッドローカル記憶領域は、基本的には、コンパイラからのサポートを要求するスレッド固有データです。 TLS によって、アプリケーションは、スレッド固有のデータキーを使用するのではなく、実際のデータをス レッド固有のデータとして割り当てることができます。さらに、TLS では、スレッド固有データを取得するた めにスレッドが関数呼び出しを行う必要はありません。スレッドは、このデータを直接アクセスすることがで きます。 スレッドセーフの関数 スレッドセーフの関数は、複数のスレッドによって同時に安全に呼び出すことができる関数です。この関数が 共有データまたは資源をアクセスする場合、そのアクセスは mutex または何か別の形式の同期制御によって管 理されます。 Section 3-156 Hewlett-Packard Company − 17 − HP-UX 11i Version 2: August 2003 pthread(3T) pthread(3T) スレッド固有データ (TSD) スレッド固有データは、スレッドに固有のグローバルデータです。すべてのスレッドは、同じデータ変数をア クセスします。ただし、各スレッドは、この変数に対してスレッド独自の値を持ちます。errno は、スレッド固 有データの例です。 スレッド構造体 オペレーティングシステムは、システム内のそれぞれのスレッドごとにスレッド構造体を持っています。この 構造体は、システム内で内部的に実在するスレッドを表します。スレッド構造体情報のサンプルとして、ス レッド ID、スケジューリング方針および優先順位、シグナルマスクがあります。スレッド構造体およびその中 に含まれる値は、スレッドのコンテキストの一部です。 ユーザーモード 操作のサブセットが許可される操作モード。スレッドは、アプリケーションコードの実行中は、ユーザーモー ドで実行しています。スレッドは、システムコールを行なう場合には、モードを変更して、そのシステムコー ルが完了するまでカーネルモードで実行します。 ユーザー空間 ユーザーコードは、この空間に存在します。ユーザーコードは、この空間の中で通常の権限レベルで実行され ます。通常の場合、権限レベルには、ユーザーコード用のレベル (ユーザーモード) とカーネルコード用のレベ ル (カーネルモード) の2つがあります。 ユーザースタック スレッドは、ユーザー空間の中でコードを実行している間、関数呼び出しの実行、パラメータの引き渡し、お よびローカル変数を作成のためにスタックを使用する必要があります。ユーザーモードでは、スレッドはカー ネルスタックを使用しません。代わりに、それぞれのユーザースレッドによって別々のユーザースタックが使 用するために割り当てられます。スタックの一般的な説明については、 スタックを参照してください。 ユーザースレッド pthread_create() が呼び出されると、ユーザースレッドが作成されます。カーネルがスケジューリングするエン ティティ ( カーネルスレッドまたは軽量プロセス ) も作成されるかどうかは、そのユーザースレッドのスケ ジューリングの競合範囲によって決まります。バインドされたスレッドが作成されると、ユーザースレッドと カーネルがスケジューリングするエンティティの両方が作成されます。バインドされていないスレッドが作成 されると、通常の場合、ユーザースレッドだけが作成されます。スレッドの一般的な説明については、 スレッ ドを参照してください。 参照 thread_safety(5) Scott J. Norton、Mark D. DiPasquale 共著 『ThreadTime』 (Prentice-Hall、ISBN 0-13-190067-6、1996 年発行) HP-UX 11i Version 2: August 2003 − 18 − Hewlett-Packard Company Section 3-157 pthread_atfork(3T) pthread_atfork(3T) 名称 pthread_atfork() − forkハンドラーの登録 構文 #include <pthread.h> int pthread_atfork( void (*prepare)(void), void (*parent)(void), void (*child)(void) ); パラメータ prepare この関数は、 fork() を実行する前に呼び出されます。 parent この関数は、 fork() を実行した後に、親プロセスで呼び出されます。 child この関数は、 fork() を実行した後に、子プロセスで呼び出されます。 説明 pthread_atfork() 関数は、アプリケーション固有のforkハンドラーをインストールします。 forkハンドラーは、 fork() 実行の前後に、 fork() を呼び出しているスレッドのコンテキスト内で呼び出されます。 atexit() ハンド ラーの場合と同様、これらのforkハンドラーが呼び出されるための特別な処理を、アプリケーションで行う必 要はありません。ハンドラーは、 fork() が実行されたとき、システムから呼び出されます。 prepare() 関数は、 fork() 実行の前に、親プロセスで呼び出されます。 parent() 関数は、 fork() 実行の後に、 親プロセスで呼び出されます。 child() 関数は、 fork() 実行の後に、子プロセスで呼び出されます。 処理上フォークハンドラーが不要の場合は、対応するフォークハンドラーのパラメータを NULL に設定しま す。 プロセスは、フォークハンドラー関数を複数インストールできます。 parent() および child() フォークハンド ラーは、インストールされた順序で呼び出されます ( 「 ファーストイン、ファーストアウト」)。 prepare() フォークハンドラーは、インストールとは逆の順序で呼び出されます (「 ラストイン、ファーストアウト」)。 戻り値 正常終了すると、 pthread_atfork() は、0を返します。それ以外の場合、エラーの内容を表すエラー番号を返 します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_atfork() 関数は、該当するエラー番号を返します。 [ENOMEM] フォークハンドラーをインストールするのに十分なテーブル領域がない場合。 著者 pthread_atfork() は、IEEE POSIX P1003.1c標準から派生しました。 Section 3-158 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_atfork(3T) pthread_atfork(3T) 参照 fork(2), atexit(3) 標準準拠 pthread_atfork(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-159 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) 名称 pthread_attr_getdetachstate(), pthread_attr_getguardsize(), pthread_attr_getinheritsched(), pthread_attr_getprocessor_np(), pthread_attr_getschedparam(), pthread_attr_getstacksize(), pthread_attr_getschedpolicy(), pthread_attr_setdetachstate(), pthread_attr_getscope(), pthread_attr_setguardsize(), pthread_attr_getstackaddr(), pthread_attr_setinheritsched(), pthread_attr_setprocessor_np(), pthread_attr_setschedparam(), pthread_attr_setschedpolicy(), pthread_attr_setscope(), pthread_attr_setstackaddr(), pthread_attr_setstacksize() − スレッド属性の取得と設定 構文 #include <pthread.h> int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate); int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize); int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr); int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr); int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize); int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize); int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched); int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched); int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy); int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param); int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param); int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope); int pthread_attr_getscope(const pthread_attr_t *attr, int *contentionscope); int pthread_attr_setprocessor_np(pthread_attr_t *attr, pthread_spu_t processor, int binding_type); Section 3-160 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) int pthread_attr_getprocessor_np(const pthread_attr_t *attr, pthread_spu_t *processor, int *binding_type); パラメータ attr detachstate 設定/取得するスレッド属性オブジェクトへのポインター。 このパラメータには、 detachstate 属性の新しい値 (set 関数)、または attr の detachstate 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 stacksize このパラメータには、 stacksize 属性の新しい値 (set 関数)、または attr の stacksize 属 性が返されるメモリー領域へのポインター (get 関数) を指定します。 stackaddr このパラメータには、 stackaddr 属性の新しい値 (set 関数)、または attr の stackaddr 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 guardsize このパラメータには、 guardsize 属性の新しい値 (set 関数)、または attr の guardsize 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 inheritsched このパラメータには、 inheritsched 属性の新しい値 (set 関数)、または attr の inheritsched 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 policy このパラメータには、 schedpolicy 属性の新しい値 (set 関数)、または attr の schedpolicy 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 param このパラメータには、 schedparam 属性の新しい値 (set 関数)、または attr の schedparam 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 contentionscope このパラメータには、 contentionscope 属性の新しい値 (set 関数)、または attr の contentionscope 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 processor このパラメータには、 processor 属性の新しい値 (set 関数)、または attr の processor 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 binding_type このパラメータには、 binding_type 属性の新しい値 (set 関数)、または attr の binding_type 属性が返されるメモリー領域へのポインター (get 関数) を指定します。 説明 これらの関数は、以下で説明するように、属性の設定や取得を行います。 pthread_attr_setdetachstate() − detachstate属性を設定します。 pthread_attr_getdetachstate() − detachstate属性を取得します。 pthread_attr_setstacksize() − stacksize属性を設定します。 pthread_attr_getstacksize() − stacksize属性を取得します。 pthread_attr_setstackaddr() − stackaddr属性を設定します。 pthread_attr_getstackaddr() − stackaddr属性を取得します。 pthread_attr_setguardsize() − guardsize属性を設定します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-161 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) pthread_attr_getguardsize() − guardsize属性を取得します。 pthread_attr_setinheritsched() −inheritsched属性を設定します。 pthread_attr_getinheritsched() −inheritsched属性を取得します。 pthread_attr_setschedpolicy() − schedpolicy属性を設定します。 pthread_attr_getschedpolicy() − schedpolicy属性を取得します。 pthread_attr_setschedparam() − schedparam属性を設定します。 pthread_attr_getschedparam() − schedparam属性を取得します。 pthread_attr_setscope() − contentionscope属性を設定します。 pthread_attr_getscope() − contentionscope属性を取得します。 pthread_attr_setprocessor_np() − processor属性とbinding_type属性を設定します。 pthread_attr_getprocessor_np() − processor属性とbinding_type属性を取得します。 これらの関数を呼び出す前に、属性オブジェクト attr は、 pthread_attr_init() 関数で事前に初期化されていな ければなりません。 属性:detachstate detachstate 属性で使用可能な値は、以下のとおりです。 PTHREAD_CREATE_DETACHED このオプションは、 attr で作成されるすべてのスレッドをデタッチ状態にします。スレッドに 関連付けされたデタッチ状態のリソースは、スレッドが終了すると、システムによって自動的 に 利 用 さ れ ま す。 こ の 属 性 で 作 成 さ れ た ス レッ ド に 対 し て pthread_detach() ま た は pthread_join() 関数を呼び出すと、エラーになります。 PTHREAD_CREATE_JOINABLE このオプションは、 attr で作成されるすべてのスレッドを結合可能状態にします。スレッドに 関連付けされた結合可能状態のリソースは、スレッドが終了しても、利用されません。この属 性で作成されたスレッドのシステムリソースを再生するには、 pthread_detach() または pthread_join() 関数を呼び出さなければなりません。 detachstate のデフォルト値は、 PTHREAD_CREATE_JOINABLE です。 pthread_attr_setdetachstate() は、初期化済の属性オブジェクト attr の detachstate 属性を設定します。 detachstate 属性の新しい値をこの関数の detachstate パラメータに渡します。 pthread_attr_getdetachstate() は、スレッド属性オブジェクト attr から detachstate 属性の値を取得します。この 値は、 detachstate パラメータに返されます。 属性: stacksize stacksize 属性で使用可能な値は、以下のとおりです。 Section 3-162 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) PTHREAD_STACK_MIN このオプションは、当該属性オブジェクトで作成されるスレッドのユーザースタックのサイズ を、デフォルトのスタックサイズにすることを指定します。この値は、スレッドで必要とされ る最小のスタックサイズ (バイト単位) です。この最小値では、スレッドによっては十分では ない可能性があります。 stacksize 当該属性オブジェクトで作成されたスレッドのユーザースタックのサイズ (バイト単位) を定 義します。この値は、最小スタックサイズ PTHREAD_STACK_MIN 以上になっていなければ なりません。 POSIX.1cは、デフォルト値を定義しません。 PA-RISC プラットフォーム用の HP-UX リリースでは、 stacksize 属性のデフォルト値は 64Kです。また、Itanium(R)ベース プラットフォーム用の HP-UX リリースでは 256K で す。 pthread_attr_setstacksize() は、初期化済の属性オブジェクト attr の stacksize 属性を設定します。 stacksize 属性 の新しい値をこの関数の stacksize パラメータに渡します。 pthread_attr_getstacksize() は、スレッド属性オブジェクト attr から stacksize 属性の値を取得します。この値 は、 stacksize パラメータに返されます。 属性:stackaddr stackaddr 属性で使用可能な値は、以下のとおりです。 NULL このオプションは、当該属性オブジェクトで作成されるすべてのスレッドのユーザースタック 用記憶領域が、スレッドライブラリで処理されることを指定します。アプリケーションは、ス レッド用スタックの割り当てや管理を行う必要はありません。 stack_address このオプションは、作成されるスレッドが使用するスタックのベースアドレスを指定します。 スタックの割り当て管理割り当て解除は、すべてアプリケーションが行います。記憶領域の割 り当て機能には、 malloc(3C)、 brk(2)、 mmap(2) などがあります。注意:このオプションが使 用される場合、当該属性オブジェクトで作成するスレッドは、1つだけにする必要がありま す。複数のスレッドを作成すると、すべて同じスタックが使用されます。 stackaddr 属性のデフォルト値は NULL です。 pthread_attr_setstackaddr() は、初期化済の属性オブジェクト attr の stackaddr 属性を設定します。 stackaddr 属性の新しい値をこの関数の stackaddr パラメータに渡します。 pthread_attr_getstackaddr() は、スレッド属性オブジェクト attr から stackaddr 属性の値を取得します。この値 は、 stackaddr パラメータに返されます。 stackaddr で与えられるスタックのサイズが、デフォルトのスタック サイズと異なる場合、アプリケーションは、 pthread_attr_setstacksize() を呼び出して新しいスタックサイズを 設定する必要があります。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-163 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) pthread_attr_getstackaddr() は、スレッド属性オブジェクト attr から stackaddr 属性の値を検索します。この値 は、 stackaddr パラメータに返されます。 スレッドのユーザースタック用記憶領域をライブラリが割り当てない (stackaddr 属性が NULL でない) 場合、 guardsize 属性は無視されます。 属性: guardsize guardsize 属性は、この属性オブジェクトで作成されるスレッドでガードする領域のサイズを、アプリケーショ ンから指定するものです。 ガードする領域のサイズは、バイト単位で指定します。大部分のシステムでは、ガードする領域のサイズを、 システムで設定可能な変数である PAGESIZE の倍数に切り上げます。値0が指定された場合、ガードする領 域は作成されません。 guardsize のデフォルト値は、 PAGESIZE バイトです。 PAGESIZE の実際の値は実装方式に依存し、同じとは 限りません。ユーザースタック用記憶領域を p スレッドライブラリで割り当てない場合、 guardsize 属性は無 視されます。アプリケーションは、スタックオーバーフローが発生しないよう処置する必要があります。 pthread_attr_setguardsize() は、初期化済の属性オブジェクト attr の guardsize 属性を設定します。 guardsize 属 性の新しい値をこの関数の guardsize パラメータに渡します。 pthread_attr_getguardsize() は、スレッド属性オブジェクト attr から guardsize 属性の値を取得します。この値 は、 guardsize パラメータに返されます。ガードする領域のサイズが PAGESIZE の倍数に切り上げられている 場合、この関数呼び出しは、前回の pthread_attr_setguardsize() 関数呼び出しで指定されたサイズを、 guardsize パラメータに格納します。 属性: inheritsched inheritsched 属性で使用可能な値は、以下のとおりです。 PTHREAD_INHERIT_SCHED このオプションは、スケジューリング方針とその関連属性を、作成元のスレッドから継承する ことを指定します。スレッドを attr 引き数付きで作成すると、 attr のスケジューリング方針と 関連属性は無視されます。 PTHREAD_EXPLICIT_SCHED このオプションは、作成するスレッドのスケジューリング方針と関連属性を、当該属性オブ ジェクトから取得することを指定します。各属性値は、作成元のスレッドからは継承されませ ん。 POSIX.1c で は、 inheritsched 属 性 の デ フォ ル ト 値 を 定 義 し て い ま せ ん。 HP-UX で の デ フォ ル ト 値 は、 PTHREAD_INHERIT_SCHED です。 pthread_attr_setinheritsched() は、初期化済の属性オブジェクト attr の inheritsched 属性の値を設定します。 inheritsched 属性の新しい値をこの関数の inheritsched パラメータに渡します。 pthread_attr_getinheritsched() は、スレッド属性オブジェクト attr から inheritsched 属性の値を取得します。こ Section 3-164 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) の値は、 inheritsched パラメータに返されます。 属性:schedpolicy schedpolicy 属性は、特定のスケジューリング方針を使用するスレッドを作成するためのものです。この属性を 使用するには、 inheritsched 属性が PTHREAD_EXPLICIT_SCHED に設定されていなければなりません。使用 可能なスケジューリング方針の全一覧は、 rtsched(2) と <sched.h> を参照してください。 POSIX.1cでは、 schedpolicy 属性のデフォルト値を指定していません。 HP-UXでの、システム適用範囲を持つ スレッドのデフォルト値は、 SCHED_TIMESHARE です。 pthread_attr_setschedpolicy() は、初期化済の属性オブジェクト attr の schedpolicy 属性の値を設定します。 schedpolicy 属性の新しい値をこの関数の policy パラメータに渡します。 pthread_attr_getschedpolicy() は、スレッド属性オブジェクト attr から schedpolicy 属性の値を取得します。こ の値は、 policy パラメータに返されます。 属性:schedparam 有効な schedparam 属性の値は、スケジューリング方針に応じて、 schedpolicy 属性との関連で変化します。ス ケジューリング方針 SCHED_FIFO と SCHED_RR では、 schedparam 属性の sched_priority メンバーだけが必 要です。有効な sched_priority の値は、 sched_get_priority_max() と sched_get_priority_min() を使って取得する ことができます。他のスケジューリング方針で要求される schedparam の内容は、不定です。すべてのスケ ジューリング方針での、必須な、または妥当なスケジューリングパラメータの全一覧は、 rtsched(2) と <sched.h> を参照してください。 pthread_attr_setschedparam() は、初期化済の属性オブジェクト attr の schedparam 属性の値を設定します。 schedparam 属性の新しい値をこの関数の param パラメータに渡します。 pthread_attr_getschedparam() は、スレッド属性オブジェクト attr から schedparam 属性の値を取得します。こ の値は、 param パラメータに返されます。 属性:contentionscope contentionscope 属性で使用可能な値は、以下のとおりです。 PTHREAD_SCOPE_SYSTEM この競合範囲で作成されたスレッドは、システム中の (同じスケジューリング範囲内の) すべ てのスレッドと、リソースを争奪します。この属性は通常、カーネルでスケジューリングされ るエンティティにユーザースレッドが直接バインドする必要があることを指示するために使用 されます。 PTHREAD_SCOPE_PROCESS この競合範囲で作成されたスレッドは、同じスケジューリング競合範囲で作成されたプロセス 内のスレッド間で、直接リソースを争奪します。この属性は通常、ユーザースレッドがアンバ インドされる (つまり、カーネルでスケジューリングされる特定のエンティティにユーザース レッドがバインドされない) 必要があることを指示するために使用されます。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-165 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) contentionscope 属性のデフォルト値は、POSIX.1cでは定義されていません。 HP-UX リリース 11i バージョン 1.6 以降では、 contentionscope 属性のデフォルト値は、 PTHREAD_SCOPE_PROCESS です。 pthread_attr_setscope() は、初期化済の属性オブジェクト attr の contentionscope 属性の値を設定します。 contentionscope 属性の新しい値をこの関数の contentionscope パラメータに渡します。 pthread_attr_getscope() は、スレッド属性オブジェクト attr から contentionscope 属性の値を取得します。この 値は、 contentionscope パラメータに返されます。 属性:processorおよびbinding_type processor 属性で使用可能な値は、以下のとおりです。 PTHREAD_SPUINHERIT_NP この processor 属性で作成されたスレッドは、プロセッサバインディング属性を、作成元のス レッドから継承します。これは、 processor 属性のデフォルト値です。 PTHREAD_LDOMINHERIT_NP または PTHREAD_SPUINHERIT_NP を指定すると、プロセッサバインディング とローカリティドメイン バインディングの両方の属性が継承されます。 binding_type 属性は無 視されます。 PTHREAD_SPUFLOAT_NP この processor 属性で作成されたスレッドは、システムが選択するどのプロセッサでも実行可 能です。プロセッサバインディングは、維持されません。 PTHREAD_LDOMFLOAT_NP また は PTHREAD_SPUFLOAT_NP を指定すると、プロセッサバインディングとローカリティドメ イン バインディングの両方の属性が削除されます。スレッドは、システム内のどのプロセッサ でも実行可能となります。 binding_type 属性は、無視されます。 (pthread_spu_t) processor_id この processor 属性で作成されたスレッドは、 processor パラメータで指定されたプロセッサに バインドされます。バインディング型 (勧告的または強制的) は、 binding_type 属性で指定され ます。 PTHREAD_LDOMINHERIT_NP この processor 属性で作成されたスレッドは、作成元のスレッドのプロセッサバインディング およびローカリティドメイン バインディングの属性を継承します。 PTHREAD_LDOMINHERIT_NP または PTHREAD_SPUINHERIT_NP を指定すると、プロセッサバインディング とローカリティドメイン バインディングの両方の属性が継承されます。 binding_type 属性は無 視されます。関数定義におけるデータ型が異なるため、この値を型 (pthread_spu_t) に変換す る必要があります。 PTHREAD_LDOMFLOAT_NP この processor 属性で作成されたスレッドは、システムが選択するどのプロセッサでも実行可 能 で す。 ロー カ リ ティ ド メ イ ン バ イ ン ディ ン グ は 維 持 さ れ ま せ ん。 PTHREAD_LDOMFLOAT_NP または PTHREAD_SPUFLOAT_NP を指定すると、プロセッサバインディングと Section 3-166 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) ローカリティドメイン バインディングの両方の属性がクリアされます。スレッドは、システム 内のどのプロセッサでも実行可能です。 binding_type 属性は無視されます。関数定義における データ型が異なるため、この値は、型 (pthread_spu_t) に変換する必要があります。 (pthread_ldom_t)locality_domain_id この processor 属性で作成されたスレッドは、 processor パラメータで指定されたローカリティ ドメインにバインドされます。スレッドは、指定されたローカリティドメイン内のどのプロ セッ サ で も 実 行 可 能 で す。 関 数 定 義 に お け る デー タ 型 が 異 な る た め、 こ の 値 は、 型 (pthread_spu_t) に変換する必要があります。 binding_type 属性で使用可能な値は、 ( processor 属性が、 PTHREAD_SPUINHERIT_NP, PTHREAD_SPUFLOAT_NP, PTHREAD_LDOMINHERIT_NP でも PTHREAD_LDOMFLOAT_NP でもない場合) 以下のとお りです。 PTHREAD_BIND_ADVISORY_NP この binding_type 属性で作成されたスレッドには、 processor 属性に指定されたプロセッサに 対する勧告プロセッサバインディングが設定されています。勧告バインディングの詳細につい ては、 pthread_processor_bind_np(3T) を参照してください。 PTHREAD_BIND_FORCED_NP この binding_type 属性で作成されたスレッドには、 processor 属性で指定されたプロセッサに 対する強制的なプロセッサバインディングが設定されています。強制バインディングの詳細に ついては、 pthread_processor_bind_np(3T) を参照してください。 PTHREAD_BIND_LDOM_NP この binding_type で作成されたスレッドは、 processor 属性で指定されたローカリティドメイ ン に バ イ ン ド さ れ ま す。 ロー カ リ ティ ド メ イ ン バ イ ン ディ ン グ の 詳 細 に つ い て は、 pthread_ldom_bind_np(3T) を参照してください。 PTHREAD_BIND_NONE_NP この binding_type で作成されたスレッドは、どのプロセッサまたはローカリティドメインにも バインドされません。 processor 属性は無視されます。これは、 binding_type 属性のデフォル ト値です。 processor 属性のデフォルト値は、 PTHREAD_SPUINHERIT_NP です。 binding_type 属性のデフォルト値は、 PTHREAD_BIND_NONE_NP. です。 pthread_attr_setprocessor_np() は、初期化済の属性オブジェクト attr の processor と binding_type 属性の値を設 定します。 processor と binding_type 属性の新しい値をこの関数の processor と binding_type パラメータにそれ ぞれ渡します。 pthread_attr_getprocessor_np() は、スレッド属性オブジェクト attr から processor と binding_type 属性の値を取 得します。これらの値は、それぞれ、 processor と binding_type パラメータに返されます。 processor 属 性 の 値 が HP-UX 11i Version 2: August 2003 PTHREAD_SPUINHERIT_NP 、 −8− PTHREAD_SPUFLOAT_NP 、 Hewlett-Packard Company Section 3-167 pthread_attr_getdetachstate(3T) pthread_attr_getdetachstate(3T) PTHREAD_LDOMINHERIT_NP、または PTHREAD_LDOMFLOAT_NP の場合は、 binding_type 属性の値を 無視する必要があります (float は作成されたスレッドにバインディングが設定されていないことを意味し、 inherit は新しいスレッドが作成元スレッドの属性に基づいて作成されたときに属性が設定されることを意味し ます)。 binding_type 属性の値が PTHREAD_BIND_NONE_NP の場合は、 processor 属性を無視する必要があります。 戻り値 正 常 終 了 す る と、 次 の 関 数 は 0 を 返 し ま す。 pthread_attr_setstacksize(), pthread_attr_getstacksize(), pthread_attr_setstackaddr(), pthread_attr_getstackaddr(), pthread_attr_setguardsize(), pthread_attr_getguardsize(), pthread_attr_setdetachstate(), pthread_attr_getdetachstate(), pthread_attr_getinheritsched(), pthread_attr_setinheritsched(), pthread_attr_setschedpolicy(), pthread_attr_getschedpolicy(), pthread_attr_setschedparam(), pthread_attr_getschedparam(), pthread_attr_setprocessor_np(), pthread_attr_getprocessor_np(), pthread_attr_setscope(), pthread_attr_getscope()。それ以外の場合、エラーの内容を表すエラー 番号を返します (errno 変数は使用しません)。 エラー 次 の 場 合 に は、 pthread_attr_setscope(), pthread_attr_getscope(), pthread_attr_setinheritsched(), pthread_attr_getinheritsched(), pthread_attr_setschedpolicy(), pthread_attr_getschedpolicy() 関数は、該当するエ ラー番号を返します。 [ENOSYS] _POSIX_THREAD_PRIORITY_SCHEDULING が未定義で、これらの関数がサポート されていない場合。 次の場合には、 pthread_attr_getstackaddr() と pthread_attr_setstackaddr() 関数は、該当するエラー番号を返し ます。 [ENOSYS] _POSIX_THREAD_ATTR_STACKADDR が未定義で、これらの関数がサポートされ ていない場合。 次の場合には、 pthread_attr_getstacksize() と pthread_attr_setstacksize() 関数は、該当するエラー番号を返しま す。 [ENOSYS] _POSIX_THREAD_ATTR_STACKSIZE が未定義で、これらの関数がサポートされて いない場合。 次 の 場 合 に は、 pthread_attr_setstacksize(), pthread_attr_getstacksize(), pthread_attr_setstackaddr(), pthread_attr_getstackaddr(), pthread_attr_setguardsize(), pthread_attr_getguardsize(), pthread_attr_setdetachstate(), pthread_attr_getdetachstate(), pthread_attr_setinheritsched(), pthread_attr_getinheritsched(), pthread_attr_setschedpolicy(), pthread_attr_getschedpolicy(), pthread_attr_setschedparam(), pthread_attr_getschedparam(), pthread_attr_setprocessor_np(), pthread_attr_getprocessor_np(), pthread_attr_setscope(), pthread_attr_getscope() 関数は、該当するエラー番号を返します。 [EINVAL] Section 3-168 attr で指定された値が無効の場合。 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 pthread_attr_getdetachstate(3T) [EINVAL] pthread_attr_getdetachstate(3T) stacksize で指定された値が、要求最小値 PTHREAD_STACK_MIN より小さい場合、 またはシステムの制限を越えた場合。 [EINVAL] detachstate, guardsize, inheritsched, processor, binding_type, policy, param, scope のどれか に、無効な値が含まれている場合。 [ENOTSUP] policy が、サポートされた値ではない場合。 著者 pthread_attr_setstacksize(), pthread_attr_getstacksize(), pthread_attr_setstackaddr(), pthread_attr_getstackaddr(), pthread_attr_setdetachstate(), pthread_attr_getdetachstate(), pthread_attr_setinheritsched(), pthread_attr_getinheritsched(), pthread_attr_setschedpolicy(), pthread_attr_getschedpolicy(), pthread_attr_setschedparam(), pthread_attr_getschedparam(), pthread_attr_setscope(), pthread_attr_getscope() は、IEEE POSIX P1003.1c標準か ら派生しました。 pthread_attr_setguardsize() と pthread_attr_getguardsize() は、X/Openで開発されました。 pthread_attr_setprocessor_np() と pthread_attr_getprocessor_np() は、HPで開発されました。 参照 pthread_create(3T), pthread_attr_init(3T), pthread_processor_bind_np(3T) 標準準拠 pthread_attr_setstacksize(): POSIX 1003.1c. pthread_attr_getstacksize(): POSIX 1003.1c. pthread_attr_setstacksize(): POSIX 1003.1c. pthread_attr_getstacksize(): POSIX 1003.1c. pthread_attr_setstackaddr(): POSIX 1003.1c. pthread_attr_getstackaddr(): POSIX 1003.1c. pthread_attr_setguardsize(): X/Open. pthread_attr_getguardsize(): X/Open. pthread_attr_setdetachstate(): POSIX 1003.1c. pthread_attr_getdetachstate(): POSIX 1003.1c. pthread_attr_setinheritsched(): POSIX 1003.1c. pthread_attr_getinheritsched(): POSIX 1003.1c. pthread_attr_setschedpolicy(): POSIX 1003.1c. pthread_attr_getschedpolicy(): POSIX 1003.1c. pthread_attr_setschedparam(): POSIX 1003.1c. pthread_attr_getschedparam(): POSIX 1003.1c. pthread_attr_setscope(): POSIX 1003.1c. pthread_attr_getscope(): POSIX 1003.1c. pthread_attr_setprocessor_np(): なし pthread_attr_getprocessor_np(): なし HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 3-169 pthread_attr_getdetachstate(3T) Section 3-170 Hewlett-Packard Company pthread_attr_getdetachstate(3T) − 11 − HP-UX 11i Version 2: August 2003 pthread_attr_init(3T) pthread_attr_init(3T) 名称 pthread_attr_init(), pthread_attr_destroy() − スレッド属性オブジェクトの初期化または消去 構文 #include <pthread.h> int pthread_attr_init( pthread_attr_t *attr ); int pthread_attr_destroy( pthread_attr_t *attr ); パラメータ attr 初期化または消去するスレッド属性オブジェクトへのポインター。 説明 pthread_attr_init() は、すべてのスレッド属性にデフォルト値を設定して、 attr が示すスレッド属性オブジェ クトを初期化します。 スレッド属性オブジェクトを使用してスレッドを作成すると、新しいスレッドの属性はオブジェクトの設定値 で決まります。属性オブジェクトは、オブジェクト作成時の追加パラメータのような役割を果たします。 pthread_create() 呼び出しでは、1つの属性オブジェクトを何度でも使用することができます。 いったんスレッド属性オブジェクトでスレッドを初期化すると、その後属性オブジェクトをどのように操作し ても、すでに作成されたスレッドに影響を与えません。 スレッド属性とそのデフォルト値は、次のとおりです。 stacksize POSIX.1cでは、デフォルト値は定義されていません。 PA-RISC プラットフォー ム用の HP-UX リリースでは、デフォルトは 64K です。 Itanium(R) ベース プ ラットフォーム用の HP-UX リリースでは、デフォルトは 256K です。 guardsize デフォルト値は PAGESIZE バイトです。 stackaddr デフォルト値は NULL です。 detachstate デフォルト値は PTHREAD_CREATE_JOINABLE です。 contentionscope POSIX.1cでは、デフォルト値は定義されていません。 HP-UX 11i バージョン 1.6 以降では、デフォルトの競合範囲は PTHREAD_SCOPE_PROCESS です。 HPUX 11i バー ジョ ン 1.6 よ り 前 の リ リー ス で は、 デ フォ ル ト の 競 合 範 囲 は PTHREAD_SCOPE_SYSTEM です。 inheritsched POSIX.1cでは、デフォルト値は定義されていません。 HP-UXでのデフォルト値 は PTHREAD_INHERIT_SCHED です。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-171 pthread_attr_init(3T) schedpolicy pthread_attr_init(3T) POSIX.1cでは、デフォルト値は定義されていません。 HP-UXでのデフォルト値 は SCHED_TIMESHARE です。 schedparam POSIX.1cでは、デフォルト値は定義されていません。 processor デフォルト値は PTHREAD_SPUINHERIT_NP です。 binding_type デフォルト値は PTHREAD_BIND_ADVISORY_NP です。 初期化済みのスレッド属性オブジェクトを再度初期化した場合、結果は不定です。 pthread_attr_destroy() は、スレッド属性オブジェクト attr を消去します。スレッド属性オブジェクトの実体が 消去され、そのリソースは再利用されます。消去された属性オブジェクトを参照した場合、結果は不定です。 属性オブジェクトは、消去されてもスレッド属性初期化ルーチン pthread_attr_init() で再び初期化できます。 すでに作成済みのスレッドは、作成時に使用した属性オブジェクトを消去しても影響を受けません。 戻り値 正常終了すると、 pthread_attr_init() と pthread_attr_destroy() は0を返します。それ以外の場合、エラーの内 容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_attr_init() 関数は、該当するエラー番号を返します。 [ENOMEM] p スレッド属性オブジェクトの初期化に必要なメモリーが足りない場合。 [EINVAL] attr で指定された値が無効の場合。 以下の条件の場合、 pthread_attr_destroy() 関数は、該当するエラー番号を返します。 [EINVAL] attr で指定された値が無効の場合。 著者 pthread_attr_init() と pthread_attr_destroy() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_create(3T) 標準準拠 pthread_attr_init(): POSIX 1003.1c. pthread_attr_destroy(): POSIX 1003.1c. Section 3-172 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_cancel(3T) pthread_cancel(3T) 名称 pthread_cancel() − スレッドの実行のキャンセル 構文 #include <pthread.h> int pthread_cancel( pthread_t thread ); パラメータ thread キャンセル対象のスレッド。 説明 pthread_cancel() は、 thread (ここでは対象のスレッドを指しています) で指定されるスレッドをキャンセルす るよう要求します。プロセス内のどのスレッドの実行も、統一された方法で終了させることができます。 対象となるスレッドのキャンセル可能状態と形式は、キャンセルが行われた時点で決定します。対象となるス レッドのキャンセル可能状態が PTHREAD_CANCEL_ENABLE のときだけ、キャンセルが行われます。ス レッドのキャンセル可能状態が PTHREAD_CANCEL_DISABLE の場合、キャンセル要求は保留され、キャン セルが有効になったときに実行されます。 対象スレッドのキャンセル可能形式が PTHREAD_CANCEL_ASYNCHRONOUS の場合、新規または保留キャ ン セ ル 要 求 は、 い つ で も 実 行 さ れ ま す。 対 象 ス レッ ド の キャ ン セ ル 可 能 形 式 が PTHREAD_CANCEL_DEFERRED の場合、スレッドの実行が以下で説明するキャンセルポイントに到達するまで、キャンセル 要求は保留されます。 対象スレッドのキャンセル可能状態が無効の場合、キャンセル可能形式は何でもかまいません。対象スレッド のキャンセル可能状態が有効の場合、キャンセル可能形式も有効になります。 キャンセルが行われると、 thread に対するキャンセルクリーンアップ ハンドラーが呼び出されます。キャン セルクリーンアップ ハンドラーは、インストールとは逆の順序で呼び出されます。最後のキャンセルクリーン アップ ハンドラーから戻ると、 thread 用のデータデストラクタ関数が呼び出されます。最後のデストラクタ関 数から戻ると、 thread は終了させられます。 pthread_cancel() の呼び出しは、対象となるスレッドがキャンセルされるのを待ちません。 キャンセルポイント 「キャンセルポイント」とは、特定の関数がブロックされている場合に、キャンセルが有効になった時点で、 保留中のキャンセル要求が実行される、関数内の位置をいいます。 戻り値 正常終了すると、 pthread_cancel() は、0を返します。それ以外の場合、エラーの内容を表すエラー番号を返 します (errno 変数は使用しません)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-173 pthread_cancel(3T) pthread_cancel(3T) エラー 以下の条件の場合、 pthread_cancel() 関数は、該当するエラー番号を返します。 [ESRCH] thread に対応するスレッドが見つからない場合。 警告 解放する必要のあるリソースを保持したままの非同期キャンセルは、リソースを減少させます。アプリケー ションは、実行中の動作が、静的な文法上の適用範囲に従うよう注意しなければなりません。たとえば、適用 範囲の取り出し処理を行うことなく、 setjmp()、 return、goto等を使用してユーザー定義のキャンセル適用範 囲から抜け出すと、結果の動作は不定です。 著者 pthread_cancel() は、IEEE POSIX P1003.1c 標準から派生しました。 参照 pthread_exit(3T), pthread_join(3T), pthread_setcancelstate(3T), pthread_cleanup_pop(3T), pthread_cond_wait(3T) 標準準拠 pthread_cancel(): POSIX 1003.1c. Section 3-174 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_cleanup_pop(3T) pthread_cleanup_pop(3T) 名称 pthread_cleanup_pop(), pthread_cleanup_push() − 取り消しクリーンアップハンドラーの削除と登録 構文 #include <pthread.h> void pthread_cleanup_push( void (*routine)(void *), void *arg ); void pthread_cleanup_pop( int execute ); パラメータ routine 取り消しクリーンアップハンドラーとして登録されるルーチン。 arg 取り消しクリーンアップハンドラー routine() に渡されるパラメータ。 execute 削除する取り消しクリーンアップハンドラーを実行させるかどうかの指示。 説明 pthread_cleanup_push() は、呼び出しスレッドの取り消しクリーンアップスタック上に、 routine 取り消しク リーンアップハンドラーをインストールします。このハンドラーは、以下のどれかが成立すると、呼び出しス レッドの取り消しクリーンアップスタックから取り出され、 arg をパラメータとして呼び出されます。 (a) スレッドが、 pthread_exit() を呼び出すか、開始ルーチンから戻った場合。 (b) スレッドが、取り消し要求に応じて動作する場合。 (c) スレッドが、0以外の値を execute 引き数に設定して pthread_cleanup_pop() を呼び出した場 合。 スレッドは、終了時に、取り消しクリーンアップスタックの各取り消しクリーンアップハンドラーを実行しま す。これらのハンドラーは、インストールとは逆順に取り出され、実行されます (「ラストイン、ファースト アウト」)。 pthread_cleanup_pop() は、呼び出しスレッドの取り消しクリーンアップスタックの一番上にある取り消しク リーンアップハンドラーを削除します。 execute が0以外の場合、取り消しクリーンアップハンドラーは、取 り消しクリーンアップスタックから削除された後で、呼び出されます。 execute がゼロの場合、取り消しク リーンアップハンドラーは削除されるだけで、呼び出されません。 pthread_cleanup_push() と pthread_cleanup_pop() は、文として、同じ適用範囲ブロック内で、対になって処理 されなければなりません。これらの関数は、登録関数に’{’を、削除関数に’}’を含むマクロにすることができま す。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-175 pthread_cleanup_pop(3T) pthread_cleanup_pop(3T) 対応する pthread_cleanup_push() または pthread_cleanup_pop() 呼び出しがない場合、ジャンプバッファーが 満杯になると、 longjmp() または siglongjmp() を呼び出したときの動作は不定です。 取り消しクリーンアップハンドラー内部から longjmp() または siglongjmp() を呼び出す場合、対応する setjmp() または sigsetjmp() が取り消しクリーンアップハンドラーの内部で実行されていないと、結果として起 こる動作は不定です。 戻り値 pthread_cleanup_push() と pthread_cleanup_pop() 関数は、文として使用されなければなりません。どちらに も、戻り値およびエラーはありません。 エラー なし。 警告 pthread_cleanup_push() と pthread_cleanup_pop() 関数は、同じ適用範囲ブロック内で呼び出されなければなり ません。それ以外の場合、結果として起こる動作は不定です。 著者 pthread_cleanup_push() と pthread_cleanup_pop() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_cancel(3T), pthread_setcancelstate(3T) 標準準拠 pthread_cleanup_push(): POSIX 1003.1c. pthread_cleanup_pop(): POSIX 1003.1c. Section 3-176 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_condattr_getpshared(3T) pthread_condattr_getpshared(3T) 名称 pthread_condattr_getpshared(), pthread_condattr_setpshared() − プロセス共有属性の取得と設定 構文 #include <pthread.h> int pthread_condattr_getpshared( const pthread_condattr_t *attr, int *pshared ); int pthread_condattr_setpshared( pthread_condattr_t *attr, int pshared ); パラメータ attr プロセス共有属性の設定または取得の対象である条件変数属性オブジェクトへのポイン ター。 pshared このパラメータは、 プロセス共有属性の新しい値を指定する (set 関数)、または attr の プ ロセス共有属性の戻り先となるメモリー位置を指します (get 関数)。 説明 属性オブジェクト attr は、これらの関数を呼び出す前に、関数 pthread_condattr_init() で、事前に初期化して おかなければなりません。 関数は、条件変数属性オブジェクトの プロセス共有属性を設定したり、取り出すために使用されます。 プロセ ス共有属性の正当な値は、次のとおりです。 PTHREAD_PROCESS_SHARED このオプションにより、条件変数は、条件変数が割り当てられているメモリーにアクセスでき る任意のスレッドによって操作されるようになります。アプリケーションは、複数のプロセス がアクセスできるメモリーへの条件変数の割り当てを処理しなければなりません。 PTHREAD_PROCESS_PRIVATE 条件変数は、条件変数を初期化したスレッドと同じプロセス内で作成されたスレッドによって のみ、操作されます。異なるプロセスのスレッドがそのような条件変数を操作しようと試みた 場合、動作は不定です。 プロセス共有のデフォルト値は PTHREAD_PROCESS_PRIVATE です。 pthread_condattr_setpshared() は、 attr の プロセス共有属性を設定します。 attr の新しい プロセス共有属性値 は、 pshared パラメータで指定された領域に設定されます。 pthread_condattr_getpshared() は、 attr から プロセス共有属性値を取得します。 attr の プロセス共有属性値 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-177 pthread_condattr_getpshared(3T) pthread_condattr_getpshared(3T) は、 pshared パラメータに返されます。 戻り値 正常終了すると、 pthread_condattr_getpshared() と pthread_condattr_setpshared() は0を返します。それ以外 の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_condattr_getpshared() と pthread_condattr_setpshared() 関数は、該当するエラー 番号を返します。 [ENOSYS] _POSIX_THREAD_PROCESS_SHARED が未定義で、これらの関数がサポートされて いない場合。 以下の条件の場合、 pthread_condattr_setpshared() 関数は、該当するエラー番号を返します。 [EINVAL] attr が、有効な条件変数属性オブジェクトでない場合。 [EINVAL] pshared で指定された値が、正当な値でない場合。 以下の条件の場合、 pthread_condattr_getpshared() 関数は、該当するエラー番号を返します。 [EINVAL] attr または pshared で指定された値が無効の場合。 警告 PTHREAD_PROCESS_SHARED で定義された プロセス共有属性で条件変数を作成した場合、協調プロセス は、条件変数が割り当てられているメモリーにアクセスできる必要があります。 著者 pthread_condattr_setpshared() と pthread_condattr_getpshared() は、IEEE POSIX P1003.1c規格から派生しまし た。 参照 pthread_create(3T), pthread_condattr_init(3T), pthread_cond_init(3T), pthread_mutex_init(3T) 標準準拠 pthread_condattr_setpshared(): POSIX 1003.1c. pthread_condattr_getpshared(): POSIX 1003.1c. Section 3-178 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_condattr_init(3T) pthread_condattr_init(3T) 名称 pthread_condattr_init(), pthread_condattr_destroy() − 条件変数属性オブジェクトの初期化と消去 構文 #include <pthread.h> int pthread_condattr_init( pthread_condattr_t *attr ); int pthread_condattr_destroy( pthread_condattr_t *attr ); パラメータ attr 初期化または消去する条件変数属性オブジェクトへのポインター。 説明 pthread_condattr_init() は、条件変数属性オブジェクト attr のすべての属性を、デフォルト値で初期化しま す。属性オブジェクトは、条件変数を詳細に説明するものであり、条件変数初期化関数に渡されます。 条件変数属性オブジェクトを使用して条件変数を初期化すると、各属性の値によって、新しい条件変数の特性 が決まります。属性オブジェクトは、オブジェクト初期化の際の追加パラメータの役割を果たします。 pthread_cond_init() 関数の呼び出しでは、1つの属性オブジェクトを何度でも使用することができます。 属性オブジェクトで条件変数を初期化すると、属性は条件変数の中にコピーされるのと同じことになります。 結果として、属性オブジェクトにどのような変更を加えても、前回初期化された条件変数には影響ありませ ん。特定の属性オブジェクトを必要とするすべての条件変数の初期化が済んでしまえば、属性オブジェクトは もう必要ありません。 条件変数属性とそのデフォルト値は、次のとおりです。 プロセス共有 デフォルト値は PTHREAD_PROCESS_PRIVATE です。 初期化済みの条件変数属性オブジェクトを再度初期化すると、動作は不定になります。 pthread_condattr_destroy() は、条件変数属性オブジェクト attr を消去します。消去された条件変数属性オブ ジェクトは実体が消去され、そのリソースは再生されます。消去された後で attr を使用した場合、結果は不定 です。条件変数属性オブジェクトは、消去されても関数 pthread_condattr_init() で再び初期化できます。 すでに作成済みの条件変数は、作成時に使用した条件変数属性オブジェクトを消去しても影響を受けません。 戻り値 正常終了すると、 pthread_condattr_init() と pthread_condattr_destroy() は0を返します。それ以外の場合、エ ラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-179 pthread_condattr_init(3T) pthread_condattr_init(3T) エラー 以下の条件の場合、 pthread_condattr_init() 関数は、該当するエラー番号を返します。 [ENOMEM] 条件変数属性オブジェクトの初期化に必要なメモリーが足りない場合。 [EINVAL] attr が、有効な条件変数属性オブジェクトでない場合。 以下の条件の場合、 pthread_condattr_destroy() 関数は、該当するエラー番号を返します。 [EINVAL] attr が、有効な条件変数属性オブジェクトでない場合。 著者 pthread_condattr_init() と pthread_condattr_destroy() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_create(3T), pthread_condattr_getpshared(3T), pthread_cond_init(3T) 標準準拠 pthread_condattr_init(): POSIX 1003.1c. pthread_condattr_destroy(): POSIX 1003.1c. Section 3-180 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_cond_init(3T) pthread_cond_init(3T) 名称 pthread_cond_init(), pthread_cond_destroy() − 条件変数の初期化と消去 構文 #include <pthread.h> int pthread_cond_init( pthread_cond_t *cond, const pthread_condattr_t *attr ); pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_destroy( pthread_cond_t *cond ); パラメータ cond attr 初期化または消去する条件変数へのポインター。 初期化する条件変数の特性を定義する属性オブジェクトへのポインター。ポインターが NULL の場合、デフォルトの属性が使用されます。 説明 pthread_cond_init() 関数は、条件変数 cond を属性 attr で初期化します。 attr が NULL の場合、属性オブジェ クトを初期化するために、デフォルトの条件変数属性が使用されます。デフォルトの条件変数属性の一覧につ いては、 pthread_condattr_init() を参照してください。条件変数は、初期化が成功した後で、条件変数に対す る操作で使用することができます。条件変数の初期化は一度だけにしなければなりません。そうしないと、不 測の動作が生じる結果となります。 pthread_once() 関数は、条件変数が一度だけ初期化されていることを確実 にする手段を提供します。 マクロ PTHREAD_COND_INITIALIZER は、静的に割り付けられた条件変数の初期化に使用することができ ま す。 こ の 場 合、 条 件 変 数 は デ フォ ル ト の 属 性 で 初 期 化 さ れ ま す。 静 的 に 初 期 化 さ れ た 変 数 に 対 し て pthread_cond_init() 関数を呼び出す必要はありません。 attr で参照される条件変数属性オブジェクトの プロセス共有属性が、 PTHREAD_PROCESS_SHARED として 定義される場合、条件変数は、条件変数を共有するプロセスがアクセスできるように割り当てられなければな りません。これは、メモリーマップ関数 (mmap(2) を参照) または共有メモリー関数 (shmget(2) を参照) によっ て実行することができます。 pthread_cond_destroy() は、条件変数 cond を消去します。この関数は、 cond に無効な値を設定する可能性が あります。消去した条件変数は、 pthread_cond_init() 関数を使用して再度初期化することができます。 条件変数を消去した後で条件変数呼び出しを使用すると、結果は不定となります。条件変数は、現在そこでブ ロックされているスレッドが存在しない場合しか消去できません。現在使用されている条件変数を消去する と、結果は不定となります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-181 pthread_cond_init(3T) pthread_cond_init(3T) 戻り値 正常終了すると、 pthread_cond_init() と pthread_cond_destroy() は0を返します。それ以外の場合、エラーの 内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_cond_init() 関数は、該当するエラー番号を返します。 [EAGAIN] 条件変数を初期化するために使用可能なリソース (メモリー以外) が、システムにない 場合。 [ENOMEM] 条件変数の初期化で使用可能なメモリー容量が不十分の場合。 以下の条件の場合、 pthread_cond_init() 関数は、該当するエラー番号を返します。 [EINVAL] cond または attr で指定された値が無効の場合。 [EBUSY] 指定された条件変数が、すでに初期化済みの条件変数の場合。 [EFAULT] cond パラメータが、無効なアドレスを指している場合。 以下の条件の場合、 pthread_cond_destroy() 関数は、該当するエラー番号を返します。 [EINVAL] cond が、有効な条件変数でない場合。 [EBUSY] 別のスレッドで使用中の cond を消去しようとした場合。 警告 条件変数の領域は、 pthread_cond_init() を呼び出す前に割り当てなければなりません。 attr の プロセス共有 属性が PTHREAD_PROCESS_SHARED であり、条件変数に割り当てられた領域に協調スレッドがアクセスで きない場合、動作は不定となります。 著者 pthread_cond_init() と pthread_cond_destroy() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_cond_wait(3T), pthread_cond_signal(3T) 標準準拠 pthread_cond_init(): POSIX 1003.1c. pthread_cond_destroy(): POSIX 1003.1c. Section 3-182 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_cond_signal(3T) pthread_cond_signal(3T) 名称 pthread_cond_signal(), pthread_cond_broadcast() − 条件変数で待ち状態になっている1つあるいはすべてのスレッ ドのブロックの解除 構文 #include <pthread.h> int pthread_cond_signal( pthread_cond_t *cond ); int pthread_cond_broadcast( pthread_cond_t *cond ); パラメータ cond シグナル状態にするかブロードキャストされる条件変数へのポインター。 説明 pthread_cond_signal() 関数は、条件変数 cond に関連付けられた条件の成立を待っているスレッドの1つを再開 するために使用されます。 cond でブロックされているスレッドがない場合、この関数は何も処理しません。 cond で複数のスレッドがブロックされている場合、どのスレッドのブロックを解除するかは、スケジューリン グ方針によって決まります。疑似再開によって複数のスレッドをブロック解除することが可能です。 pthread_cond_broadcast() 関数は、条件変数 cond に関連付けられた条件の成立を待っているすべてのスレッド を再開するために使用されます。 cond でブロックされているスレッドがない場合、この関数は何も処理しま せん。 cond で複数のスレッドがブロックされている場合、どのような順序でスレッドのブロックを解除する かは、スケジューリング方針によって決まります。 cond によって表される条件変数は、 pthread_cond_init() の呼び出しで動的に初期化されるか、マクロ PTHREAD_COND_INITIALIZER で静的に初期化されなければなりません。 ブロック解除されたスレッドは、 pthread_cond_wait() または pthread_cond_timedwait() から戻る場合、条件待 機を始めたときに所持していたmutexを再度取得します。ブロック解除されたスレッドは、スケジューリング 方針と優先順位に応じて、mutexを取得しようとします。 pthread_cond_signal() または pthread_cond_broadcast() 関数は、条件変数に関連付けられたmutexを現在所有し ているかどうかにかかわらず、スレッドから呼び出すことができます。予想できないスケジューリング動作の 発生を防ぎ、再開の失敗を予防するためには、条件変数をシグナル状態にするときにmutexを保持する必要が あります。 使用法 条件変数を使用するときは、各条件待機に関連付けられた論理型の述語を用意します。この述語が偽の場合、 スレッドは条件待機する必要があります。条件変数で待機しているときには、疑似再開が発生する可能性もあ ります。 pthread_cond_wait() と pthread_cond_timedwait() からの戻り値は、この述語の値を何も示さないの HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-183 pthread_cond_signal(3T) pthread_cond_signal(3T) で、必ず述語を再評価する必要があります。 条件変数を使用するアプリケーションは通常mutexを取得しており、述語をチェックするループに入ります。 スレッドは、述語の値に応じて、ループを終了するか、条件待機のどちらかを行います。条件待機から戻る と、述語は再評価されます。 戻り値 正常終了すると、 pthread_cond_signal() と pthread_cond_broadcast() は0を返します。それ以外の場合、エ ラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_cond_signal() と pthread_cond_broadcast() 関数は、該当するエラー番号を返しま す。 [EINVAL] cond が、有効な条件変数でない場合。 [EFAULT] cond パラメータが、無効なアドレスを指している場合。 著者 pthread_cond_signal() と pthread_cond_broadcast() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_cond_init(3T), pthread_cond_wait(3T) 標準準拠 pthread_cond_signal(): POSIX 1003.1c. pthread_cond_broadcast(): POSIX 1003.1c. Section 3-184 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_cond_wait(3T) pthread_cond_wait(3T) 名称 pthread_cond_wait(), pthread_cond_timedwait() − 条件変数に対する待機または一定時間待機 構文 #include <pthread.h> int pthread_cond_wait( pthread_cond_t *cond, pthread_mutex_t *mutex ); int pthread_cond_timedwait( pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime ); パラメータ cond 待機する条件変数へのポインター。 mutex 条件変数 cond に関連付けたmutexへのポインター。 abstime 条件にシグナルが送られたり、ブロードキャストされなくても待機が時間切れになる絶対 時間。 説明 pthread_cond_wait() 関数は、条件変数 cond に関連付けした条件の成立を待つために使用されます。 pthread_cond_timedwait() 関数は、条件変数 cond に関連付けした条件の成立を、時間制限をつけて待つために 使用されます。 abstime パラメータは、この関数が時間切れになる時間を指定します。 abstime パラメータで指 定された絶対時間を過ぎても、提示した条件がシグナル状態にならなかった場合、関数は呼び出し元にエラー を返します。注意: abstime は待機が期限切れになる時間であり、スレッドが待機する時間の長さではありませ ん。 cond によって表される条件変数は、 pthread_cond_init() の呼び出しで動的に初期化されるか、マクロ PTHREAD_COND_INITIALIZER で静的に初期化されていなければなりません。 どちらの関数も、呼び出しスレッドによってロックされた mutex を用いて呼び出される必要があります。 mutex が呼び出しスレッドによってロックされていないと、不測の動作が生じます。これらの関数は、 mutex をアトミックに解放し、条件変数 cond によって呼び出しスレッドをブロックさせます。ブロックしようとし ているスレッドがmutexを解放した後 (ただし実際のブロックはまだ行われない)、別のスレッドがmutexを取得 することが可能な場合、それ以後に他のスレッドによって pthread_cond_signal() または pthread_cond_broadcast() の呼び出しが行われると、ブロックしようとしているスレッドがブロックされた後で呼び出しが行われ たのと同様の動作になります。 条件にシグナルが送られるか、時間待機が満了すると、呼び出し元のブロックは解除され、戻る前に mutex を HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-185 pthread_cond_wait(3T) pthread_cond_wait(3T) 再度取得します。これらの関数は、呼び出しの成否にかかわらず、呼び出し元へ戻る前に必ず mutex が再度取 得されます。 同じ条件変数でこれらの関数を同時に呼び出しすために異なるmutexを使用すると、動作は不定になります。 条件変数を使用するときは、各条件待機に関連付けられた論理型の述語を用意します。この述語が偽の場合、 スレッドは条件待機する必要があります。条件変数で待機しているときには、疑似再開が発生する可能性もあ ります。疑似再開は、スレッドが本当は待機を続けなければならないのに、条件待機から戻ってしまうときに 発生します。条件待機しているスレッドへ配信される通常のシグナルは、疑似再開を発生させることがありま す。 pthread_cond_wait() と pthread_cond_timedwait() からの戻り値は、この述語の値を何も示さないので、必 ず述語を再評価する必要があります。 条件待機は、1つの キャンセルポイントとなります。呼び出しスレッドの遅延取り消しが可能な場合、取り消 し要求がキャンセルポイントで実行されます。これらの関数の1つでスレッドがブロックされている間に取り 消し要求が作動した場合、 mutex が再度取得され、それから取り消しクリーンアップハンドラーが呼び出され ます。取り消しクリーンアップハンドラーは、アプリケーションでデッドロックを発生させないように mutex を解放する必要があります。条件シグナルと取り消し要求が両方とも発生する場合、取り消されたスレッドは 条件シグナルを消費しません (条件シグナルでは別のスレッドがブロック解除されます)。 条件変数を待つスレッドにシグナルが配送される場合、シグナルハンドラーから戻るとスレッドは、疑似再開 のために0を返すか、継続して条件を待つ可能性があります。 戻り値 正常終了すると、 pthread_cond_wait() と pthread_cond_timedwait() は0を返します。それ以外の場合、エラー の内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_cond_timedwait() 関数は、該当するエラー番号を返します。 [ETIMEDOUT] abstime が経過したが条件シグナルが受信されていない場合。 以下の条件の場合、 pthread_cond_wait() と pthread_cond_timedwait() 関数は、該当するエラー番号を返しま す。 [EINVAL] cond 、 mutex または abstime で指定された値が無効の場合。 mutex は 呼 び 出 し ス レッ ド に 所 有 さ れ て は い ま せ ん。 HP-UX で は、 PTHREAD_MUTEX_NO_OWNER_NP 、 PTHREAD_MUTEX_NORMAL ま た は PTHREAD _MUTEX_DEFAULT の mutex においてこのようなエラーは返されませ ん。 [EFAULT] cond 、 mutex または abstime パラメータが無効なアドレスを指している場合。 [EINVAL] 異なるmutex が cond に使用されている場合。このエラーはHP-UX では検出されませ ん。 Section 3-186 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_cond_wait(3T) pthread_cond_wait(3T) 警告 pthread_cond_wait() または pthread_cond_timedwait() がエラーなしで戻ったときでも、関連付けられた述語が 偽である可能性に注意することが重要です。 pthread_cond_timedwait() がタイムアウトエラーで戻るとき、関 連付けられた述語は真である可能性があります。述語をチェックする「whileループ」等の中に、条件待機を組 み込むことをお推めします。 これらの関数を、 PTHREAD_MUTEX_RECURSIVE のmutexで呼び出すと、動作は不定となります。 例 pthread_cond_wait() は、それと関連付けられた述語を判定するループで使用するようお推めします。これによ り、発生する可能性のある疑似再開への対処ができます。 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; (void)pthread_mutex_lock(&mutex); while (predicate == FALSE) { (void)pthread_cond_wait(&cond, &mutex); } (void)pthread_mutex_unlock(&mutex); pthread_cond_timedwait() も、ループで使用するようお推めします。この関数は、述語が真でなくても成功を 返すことがあります。そのため、述語をチェックするループ内で呼び出す必要があります。時間切れで関数が 終了しても、述語は真になっている可能性があります。時間切れの判定を行う前に、述語のチェックを行って ください。以下の例では、その他のエラーチェックは何も行っていません。 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; struct timespec abstime; (void)pthread_mutex_lock(&mutex); abstime = absolute time to timeout. while (predicate == FALSE) { ret = pthread_cond_timedwait(&cond, &mutex, &abstime); if (ret == ETIMEDOUT) { if (predicate == FALSE) { /* Code for time-out condition */ } else { /* success condition */ break; } HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-187 pthread_cond_wait(3T) pthread_cond_wait(3T) } } (void)pthread_mutex_unlock(&mutex); Code for success condition. 著者 pthread_cond_wait() と pthread_cond_timedwait() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_cond_init(3T), pthread_cond_signal(3T) 標準準拠 pthread_cond_wait(): POSIX 1003.1c. pthread_cond_timedwait(): POSIX 1003.1c. Section 3-188 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 pthread_create(3T) pthread_create(3T) 名称 pthread_create() − 新しい実行用スレッドの作成 構文 #include <pthread.h> int pthread_create( pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg ); パラメータ thread attr 作成されたスレッドIDの格納位置へのポインタ。 作成されるスレッドの特性を記述した属性オブジェクトへのポインタ。値が NULL である 場合、デフォルトの属性が使用されます。 start_routine 作成される新しいスレッドで実行される関数。 arg 作成されたスレッドの start_routine に渡されるパラメータ。 説明 pthread_create() 関数は、呼び出したプロセス内で、新しく独立したスレッドを作成するために使用されます。 スレッドは、 attr で指定された属性に応じて作成されます。 attr が NULL である場合、デフォルトの属性が 使用されます。 attr の属性値は、作成するスレッドの特性を詳細に記述するものです。デフォルトの属性値の 一覧は、関数 pthread_attr_init() を参照してください。 1つの属性オブジェクトは、 pthread_create() 関数で何 回でも使用することができます。 スレッドが属性オブジェクトを使用して作成されると、属性は、作成されたスレッド中にコピーされるのと同 じことになります。結果として、属性オブジェクトにどのような変更を加えても、前回初期化された条件変数 には影響ありません。特定の属性オブジェクトを必要とするすべての条件変数の初期化が済んでしまえば、属 性オブジェクトはもう必要ありませんので、消去してもかまいません。 新しいスレッドが作成されるときには、 arg を唯一のパラメータとする start_routine() を実行します。 start_routine() が戻ると、 pthread_exit() への暗黙の呼び出しが行われたものとされます。その際、 start_routine() の戻り値は、スレッドの終了ステータスコードとして使用されます。 作成されたスレッドのスケジューリング方針、優先順位、競合適用範囲、デタッチ状態、スタックサイズ、ス タックアドレスは、 attr 中の該当属性に応じて初期化されます。スレッドのシグナルマスクは、作成元のス レッドから受け継がれます。スレッドの保留シグナル集合は、クリアされます。 ス レッ ド の 終 了 や 終 了 す る ス レッ ド と の 同 期 に 関 す る 詳 細 は、 pthread_exit(3T), pthread_detach(3T), pthread_join(3T) を参照してください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-189 pthread_create(3T) pthread_create(3T) pthread_create() の呼び出しに成功すると、作成されたスレッドのIDが thread に返されます。失敗すると、ス レッドは作成されず、 thread の内容は不定です。 スレッドIDは、プロセス内でのみその一意性が保証されます。 注意 : メインスレッドが main() から戻ると、暗黙の exit() 呼び出しが行われたものとされます。その際、 main() の 戻 り 値 が、 プ ロ セ ス の 終 了 ス テー タ ス コー ド と し て 使 用 さ れ ま す。 メ イ ン ス レッ ド は、 pthread_exit() を呼び出してプロセスを終了させなくても、終了できます。 戻り値 正常終了すると、 pthread_create() は、0を返します。それ以外の場合、エラーの内容を表すエラー番号を返し ます (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_create() 関数は、該当するエラー番号を返します。 [EINVAL] attr が、無効なスレッド属性オブジェクトの場合。 [EINVAL] thread で指定された値が、無効な場合。 [EAGAIN] 別のスレッドを作成するために必要なリソースが使用できない場合、または呼び出し たプロセスでのスレッドの数が、すでに PTHREAD_THREADS_MAX に達している 場合。 [EINVAL] [EPERM] attr で指定されたスケジューリング方針またはスケジューリング属性が無効な場合。 attr で指定されたスケジューリング方針やパラメータでスレッドを作成するのに適切 な特権を、呼び出し元が持っていない場合。 注意 終了時に結合しなかった結合可能スレッドが、 PTHREAD_THREADS_MAX 値としてカウントするかどうか は規定されません。 著者 pthread_create() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_exit(3T), pthread_join(3T), fork(2). 標準準拠 pthread_create(): POSIX 1003.1c. Section 3-190 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_default_stacksize_np(3T) pthread_default_stacksize_np(3T) 名称 pthread_default_stacksize_np() − デフォルトのスタックサイズの変更 構文 #include <pthread.h> int pthread_default_stacksize_np( size_t new_size, size_t *old_size ); パラメータ new_size 新しいデフォルトスタックサイズ。 old_size 以前のデフォルトスタックサイズを格納する領域を指すポインタ。 説明 pthread_default_stacksize_np() 関数により、アプリケーションは、 stacksize 属性のデフォルト値を変更するこ とができます。この関数は、スレッドを1つも作成していないときに呼び出さなければなりません。新しいデ フォルトスタックサイズは、 new_size パラメータに渡します。 NULL でなければ、前回のデフォルトスタッ クサイズが、 old_size に返されます。 new_size を0とすると、この関数を使用して、現在のデフォルトスタッ クサイズを照会することができます(いつでも使用可能)。 HP-UX では、デフォルトスタックサイズのスレッドは、終了後キャッシュに入れられます。そして、次にデ フォルトスタックサイズのスレッドを作成するときに、キャッシュに入れられたスレッド( およびそのスタッ ク)が再使用されます。これにより、 pthread_create() の性能が大きく改良される可能性があります。 しかし、デフォルトスタックサイズがアプリケーションにとって適切でないと、このような性能向上の利点は ありません。 pthread_default_stacksize_np() 関数を使用することで、スレッドライブラリは、アプリケーショ ンの要求に調和するように、デフォルトスタックサイズを変更します。これにより、アプリケーションは、 キャッシュされたスレッド性能の恩恵に浴することができます。 戻り値 正常終了すると pthread_default_stacksize_np() は0 を返します。それ以外の場合、エラーの内容を表すエラー 番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_default_stacksize_np() 関数は、該当するエラー番号を返します。 [EINVAL] [EPERM] new_size で指定された値が PTHREAD_STACK_MIN 未満の場合。 呼び出したプロセスがすでにスレッドを作成している場合( 関数は、スレッドを何も 作成しない時点で呼び出さなければなりません)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-191 pthread_default_stacksize_np(3T) pthread_default_stacksize_np(3T) 著者 pthread_default_stacksize_np() は、HPが開発しました。 参照 pthread_attr_getstacksize(3T), pthread_attr_setstacksize(3T). 標準準拠 pthread_default_stacksize_np(): None. Section 3-192 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_detach(3T) pthread_detach(3T) 名称 pthread_detach() − スレッド終了時にリソースを再利用するためのデタッチされるスレッドの登録 構文 #include <pthread.h> int pthread_detach( pthread_t thread ); パラメータ thread 終了時にリソースを即座に再生させるスレッド。 説明 pthread_detach() は、スレッド thread をデタッチするために、使用されます。 thread が終了すると、そのリ ソースはシステムによって自動的に再生されます。すでに thread が終了している場合は、 thread のリソースを システムで強制的に再生します。 pthread_detach() は、 thread を強制的に終了させません。 デタッチされたスレッドが終了すると、スレッドIDも含めたそのリソースが、システムで再利用されます。デ タッチされたスレッドのリターンステータスは、スレッドが終了するときに失われます。 この関数を同じスレッドに対し何回も呼び出すと、結果は不定になります。 戻り値 正常終了すると pthread_detach() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を返しま す (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_detach() 関数は、該当するエラー番号を返します。 [EINVAL] thread が、結合可能なスレッドを見つけられなかった場合。 [ESRCH] thread に対応するスレッドを見つけられなかった場合。 著者 pthread_detach() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_create(3T), pthread_join(3T), wait(2) 標準準拠 pthread_detach(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-193 pthread_equal(3T) pthread_equal(3T) 名称 pthread_equal() − 2つのスレッド識別子の比較 構文 #include <pthread.h> int pthread_equal( pthread_t t1, pthread_t t2 ); パラメータ t1 比較する最初のスレッド ID。 t2 比較する2番目のスレッド ID。 説明 pthread_equal() は、スレッドID t1 と t2 を比較します。 スレッドID は、非公開のデータ型です。 IDを比較す る場合は、この関数で行う必要があります。 戻り値 pthread_equal() は、2つのスレッドIDが等しい場合にゼロでない値を、等しくない場合にゼロを返します。 この関数は、 t1 または t2 が妥当なスレッドIDかどうかを確認しません。 エラー なし。 著者 pthread_equal() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_create(3T), pthread_self(3T) 標準準拠 pthread_equal(): POSIX 1003.1c. Section 3-194 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_exit(3T) pthread_exit(3T) 名称 pthread_exit() − 呼び出し元スレッドの終了 構文 #include <pthread.h> void pthread_exit( void *value_ptr ); パラメータ value_ptr 呼び出し元スレッドの終了ステータス。 説明 pthread_exit() は、呼び出したスレッドを終了させます。呼び出し元スレッドは、終了ステータスとして value_ptr 内の値を返します。この値は、終了スレッドに対して pthread_join() 呼び出しを行った結合スレッド に返されます。 detachstate 属性を PTHREAD_CREATE_JOINABLE にして作成されたスレッドだけが、終了 ステータスを pthread_join() に返すことができます。デタッチされたスレッドの終了ステータスは、スレッド が終了するときに失われます。 スレッドが終了しても、プロセス共有リソースは解放されません。プロセス共有リソースには、mutex、条件 変数、セマフォ、メッセージ待ち行列記述子、ファイル記述子などがあります。プロセスの終了と同様の手順 でスレッドが終了しても、 atexit() ルーチンは呼び出されません。 スレッドがその開始ルーチンから戻ると、 pthread_exit() への暗黙の呼び出しが行われます。関数の終了ス テータスは、スレッドの終了ステータスとして使用されます ( pthread_create(3T) を参照)。 pthread_exit() を呼 び出さずに main() から戻ると、メインスレッドは main() の戻り値を終了ステータスにしてプロセスを終了さ せます。メインスレッドで pthread_exit() を呼び出すと、最後のスレッドが終了するか、スレッドが exit() を 呼び出すまで、プロセスは実行を継続します。プロセスの最後のスレッドが終了すると、プロセスは終了ス テータスをゼロにして終了します。 登録されたすべての取り消しクリーンアップハンドラーが取り出され、登録とは逆順に実行されます。取り消 しクリーンアップハンドラーの実行が完了すると、デストラクタ関数に結び付けられたスレッド固有データ値 が NULL でない場合は、対応するデストラクタ関数が呼び出されます。デストラクタ関数が呼び出される順序 は、規定されていません。 スレッドを終了させるために、取り消しクリーンアップハンドラーまたはデストラクタ関数から pthread_exit() を呼び出すと、結果は不定になります。 スレッドが終了した後で、スレッドのローカル (自動) 変数をアクセスすると、結果は不定になります。終了す るスレッドは、 value_ptr パラメータでローカル変数を指定してはいけません。 戻り値 なし。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-195 pthread_exit(3T) pthread_exit(3T) エラー なし。この関数は戻りません。 著者 pthread_exit() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_create(3T), pthread_join(3T), exit(2), wait(2) 標準準拠 pthread_exit(): POSIX 1003.1c. Section 3-196 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_getconcurrency(3T) pthread_getconcurrency(3T) 名称 pthread_getconcurrency(), pthread_setconcurrency() − アンバインドされたスレッドの並列性レベルの取得と設定 構文 #include <pthread.h> int pthread_setconcurrency( int new_level ); int pthread_getconcurrency(void); パラメータ new_level 呼び出しプロセスでアンバインドされたスレッドの新しい並列性レベル。 説明 プロセスでアンバインドされたスレッドには、同時にアクティブになる必要がある場合と、その必要がない場 合があります。デフォルトでは、プロセスを進行し続けるのに十分な数のスレッドがアクティブであると保証 されます。この方法ではシステムリソースは節約されますが、最も効果的なレベルでの並列性が発揮されない 可能性があります。 pthread_setconcurrency() 関数を使用することで、アプリケーションの並列性レベルを new_level にしてスレッドを実行するよう要請できます。この関数呼び出しの結果としてシステムが提供する実 際の並列性レベルは、規定されません。 new_level が0の場合、 pthread_setconcurrency() がまったく呼び出されなかったかのように、システムが設定 する任意の並列性レベルで実行が持続されます。 pthread_getconcurrency() 関数は、前回の pthread_setconcurrency() 呼び出しで設定された値を返します。 pthread_setconcurrency() 関数が呼び出されていない場合は、システムが並列性レベルを維持していることを示 すために0を返します。 注意: アプリケーションで pthread_setconcurrency() を呼び出すと、希望する並列性レベルで実行するようシス テムに通知されます。しかし、必ずしも指定した並列性レベルで実行されるわけではなく、ヒントとして使用 されるにすぎません。 pthread_setconcurrency() を呼び出したあとで即座に pthread_getconcurrency() を呼び出 すと、 pthread_setconcurrency() で指定したものとは異なる並列性レベルが返される可能性があります。 カーネルでスケジューリングされる複数の要素の最上位階層においてユーザースレッドの多重化がサポートさ れていない場合、ソースコードの互換性のために pthread_getconcurrency() 関数と pthread_setconcurrency() 関 数が提供されますが、これらの関数を呼び出しても何の影響もありません。関数の機能を維持するために、 pthread_setconcurrency() が呼び出されたときの new_level パラメータの値は保存されます。したがって、次に pthread_getconcurrency() を呼び出すと、前に設定した値が返されます。 戻り値 正常終了すると、 pthread_setconcurrency() は0を返します。それ以外の場合、エラーの内容を表すエラー番 号を返します (errno 変数は使用しません)。 pthread_getconcurrency() 関数は常に、前回の pthread_setconcurrency() の呼び出しで指定された並列性レベル HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-197 pthread_getconcurrency(3T) pthread_getconcurrency(3T) を返します。 pthread_setconcurrency() 関数が一度も呼び出されていない場合、 pthread_getconcurrency() は0 を返します。 エラー 次の場合、 pthread_setconcurrency() 関数は、対応するエラー番号を返します。 [EINVAL] new_level で指定された値が無効の場合。 [EAGAIN] new_level で指定された値が、システムリソースを超過する場合。 アプリケーション使用法 これらの関数を使用すると、アプリケーションが依存している並列性レベルの状態が変わります。ライブラリ 開発者の方には、 pthread_getconcurrency() と pthread_setconcurrency() 関数を使用しないようお奨めします。 安易に使用すると、アプリケーションで使用しているものと衝突する危険性があります。 著者 pthread_getconcurrency() と pthread_setconcurrency() は、X/Openで開発されました。 参照 pthread_num_processors_np(3T), pthread_processor_bind_np(3T), pthread_processor_id_np(3T) 標準準拠 pthread_getconcurrency(): X/Open. pthread_setconcurrency(): X/Open. Section 3-198 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_getschedparam(3T) pthread_getschedparam(3T) 名称 pthread_getschedparam(), pthread_setschedparam() − スケジューリング方針と関連パラメータの取得/設定 構文 #include <pthread.h> int pthread_getschedparam( pthread_t thread, int *policy, struct sched_param *param ); int pthread_setschedparam( pthread_t thread, int policy, const struct sched_param *param ); パラメータ thread policy スケジューリング方針と関連パラメータの設定または取得の対象となるスレッド。 このパラメータは、 thread のスケジューリング方針が格納されるメモリー位置を指す (get 関数) か、または thread の新しいスケジューリング方針の値を指定す (set 関数)。 param このパラメータは、 thread のスケジューリングパラメータが格納されるメモリー位置を指 します (get 関数) か、 thread の新しいスケジューリングパラメータを指定します (set 関 数)。 説明 これらの関数により、マルチスレッドプロセス内の個々のスレッドにおけるスケジューリング方針とその関連 パラメータを取り出して変更することができます。有効なスケジューリング方針とそれに関連付けられたスケ ジューリングパラメータの値は、 <sched.h> で定義されています。 pthread_setschedparam() は、 thread のスケジューリング方針と関連スケジューリングパラメータを、それぞれ policy および param で指定された方針とパラメータに変更します。 HP-UXでスレッドのスケジューリングパラ メータを変更するときには、適切な特権が必要です。 pthread_setschedparam() を正常に呼び出すためには、 呼び出したプロセスが適切な特権を持っているか、 PRIV_RTSCHED アクセス権のあるグループのメンバーで あることが必要です。 pthread_getschedparam() 関数は、 thread のスケジューリング方針と関連パラメータを取り出して、それぞれ policy と param に格納します。返される値は、実際のスケジューリング内容を表しています。優先順位の継承 や最高優先順位属性で影響を受ける可能性のある一時的な値ではありません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-199 pthread_getschedparam(3T) pthread_getschedparam(3T) 戻り値 正常終了すると、 pthread_setschedparam() と thread_getschedparam() は0を返します。それ以外の場合、エ ラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 次の場合、 pthread_getschedparam() と pthread_setschedparam() 関数は、対応するエラー番号を返します。 [ENOSYS] _POSIX_THREAD_PRIORITY_SCHEDULING が未定義で、これらの関数がサポート されていない場合。 次の条件が成立する場合、 pthread_setschedparam() 関数は、対応するエラー番号を返します。 [EINVAL] [ENOTSUP] policy または param 中のあるスケジューリングパラメータが無効である場合。 policy またはスケジューリングパラメータに、サポートされていない値が指定されて いる場合。 [EPERM] 呼び出し元に、 policy で指定されたスケジューリング方針または param で指定された スケジューリングパラメータを、 thread に設定するためのパーミッションがない場 合。 [ESRCH] thread に対応するスレッドが見つからない場合。 次の条件が成立する場合、 pthread_getschedparam() 関数は、対応するエラー番号を返します。 [ESRCH] thread に対応するスレッドが見つからない場合。 [EINVAL] policy または param で指定された値が無効である場合。 注意 スケジューリング方針が SCHED_FIFO または SCHED_RR の場合、スケジューリングパラメータには、 sched_param 構造体の sched_priority メンバーだけに値が指定されていれば十分です。他のすべてのスケジュー リング方針は、実装方式ごとに定義されます。使用している実装方式で定義されるスケジューリング方針の詳 細については、 rtsched(2) と <sched.h> のマニュアルを参照してください。 著者 pthread_getschedparam() と pthread_setschedparam() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_attr_setschedparam(3T), pthread_attr_setschedpolicy(3T), pthread_attr_getschedparam(3T), pthread_attr_getschedpolicy(3T), rtsched(2) 標準準拠 pthread_getschedparam(): POSIX 1003.1c. pthread_setschedparam(): POSIX 1003.1c. Section 3-200 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_getspecific(3T) pthread_getspecific(3T) 名称 pthread_getspecific(), pthread_setspecific() − キーに関連付けられたスレッド固有データの取得と設定 構文 #include <pthread.h> void *pthread_getspecific( pthread_key_t key ); int pthread_setspecific( pthread_key_t key, const void *value ); パラメータ key 呼び出しスレッドで値の設定や取得を行うスレッド固有データキー。 value 呼び出しスレッドでスレッド固有データキーに割り当てる値。 説明 pthread_getspecific() 関数は、 key に関連付けられているスレッド固有データの値を返します。呼び出しスレッ ドでの key に関連付けられた値がない場合は、 NULL が返されます。 pthread_setspecific() 関数は、スレッド固有データ value を key に関連付けます。各スレッドごとに、異なる値 を key に関連付けることができます。この値には通常、呼び出しスレッドによって動的に割り当てられたメモ リーへのポインターが使用されます。 key は、 pthread_key_create() 呼び出しで作成された有効なスレッド固有データキーでなければなりません。有 効ではないスレッド固有データキーを key に指定した場合、動作は不定になります。 これらの関数は、スレッド固有データに関連付けられたデストラクタ関数から呼び出すことができます。しか し、デストラクタ関数から pthread_setspecific() を呼び出すと、記憶領域が失われる可能性があります。 戻り値 関数 pthread_getspecific() は、 key に関連付けられたスレッド固有データ値を返します。現時点で key に関連付 けられているスレッド固有データ値が存在しない場合は、 NULL が返されます。 pthread_setspecific() は、正常終了すると0を返します。それ以外の場合、エラーの内容を表すエラー番号を返 します (errno 変数は使用しません)。 エラー pthread_getspecific() 関数は何もエラーを返しません。 次の場合、 pthread_setspecific() 関数は、対応するエラー番号を返します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-201 pthread_getspecific(3T) [ENOMEM] pthread_getspecific(3T) key に value を関連付けるために使用できるメモリー容量が足りない場合。 次の条件が成立する場合、 pthread_setspecific() 関数は、対応するエラー番号を返します。 [EINVAL] key が無効なスレッド固有データキーの場合。 著者 pthread_getspecific() と pthread_setspecific() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_key_create(3T), pthread_key_delete(3T) 標準準拠 pthread_getspecific(): POSIX 1003.1c. pthread_setspecific(): POSIX 1003.1c. Section 3-202 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_gettimeslice_np(3T) pthread_gettimeslice_np(3T) 名称 pthread_gettimeslice_np(), pthread_settimeslice_np() − ス ケ ジュー リ ン グ 方 針 が SCHED_TIMESHARE で あ る PTHREAD_SCOPE_PROCESS スレッドのスケジューリングタイムスライス値の設定/取得 構文 #include <pthread.h> int pthread_gettimeslice_np( int *tslice ); int pthread_settimeslice_np( int tslice ); パラメータ tslice このパラメータには、設定するタイムスライス値をミリ秒単位で指定します。 説明 この関数は、タイムシェア型プロセスを競合範囲とするスレッドのタイムスライス値 (ミリ秒単位) を設定した り取得したりするために使用します。スレッドに設定したタイムスライス値は、そのスレッドが現在のタイム スライスを使い切るまで、有効になりません。 pthread_settimeslice_np() は、プロセスの中でタイムシェア型プロセスを競合範囲とするすべてのスレッドのタ イムスライス値を tslice にします。 pthread_gettimeslice_np() は、 プ ロ セ ス の タ イ ム ス ラ イ ス 値 を 取 得 し ま す。 tslice の 値 の 範 囲 は、 0 〜 PTHREAD_MAXTSLICE_NP です。 戻り値 pthread_gettimeslice_np() は、現在のタイムスライス値を tslice に入れて返します。 正常終了すると、 pthread_settimeslice_np() は0を返します。失敗すると、エラーの内容を示すエラー番号を 返します (errno 変数には、設定しません)。 エラー 以下のいずれかの状況が発生すると、 pthread_settimeslice_np() 関数は、対応するエラー番号を返します。 [EINVAL] タイムスライス値が負か、または PTHREAD_MAXTSLICE_NP より大きい場合。 警告 タイムスライス値としてデフォルトのタイムスライス値より小さい値を設定すると、性能が低下することがあ ります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-203 pthread_gettimeslice_np(3T) pthread_gettimeslice_np(3T) 著者 pthread_settimeslice_np() と pthread_gettimeslice_np() は、HP で開発されました。 参照 pthread_getschedparam(3T), pthread_attr_setschedpolicy(3T), pthread_attr_getschedparam(3T), pthread_attr_getschedpolicy(3T), rtsched(2) 標準準拠 pthread_settimeslice_np(): なし pthread_gettimeslice_np(): なし Section 3-204 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_join(3T) pthread_join(3T) 名称 pthread_join() − 指定されたスレッドの終了の待ち合わせ 構文 #include <pthread.h> int pthread_join( pthread_t thread, void **value_ptr ); パラメータ thread 呼び出し元で終了を待ち合わせるスレッド。 value_ptr thread の終了ステータスが返される領域へのポインター。 説明 pthread_join() 関数は、 thread の終了を待ち合わせます。対象となる thread がすでに終了してしまっている場 合、この関数はすぐに戻ります。 thread パラメータには、 detachstate 属性を PTHREAD_CREATE_JOINABLE にして作成されたスレッドだけが指定できます。 pthread_join() が正常終了すると、 value_ptr 引き数が ヌルポインターでなければ、終了スレッドが pthread_exit() に渡した値がvalue_ptr引き数で示される領域に設 定されます。 pthread_join() 呼び出しが正常終了した時点では、対象スレッドは必ず終了しています。同じスレッドに対し て複数のスレッドが pthread_join() を呼び出した場合、その中の1つのスレッドに対してだけ正常終了するこ とが保証されます。同じスレッドを指定して pthread_join() を呼び出したその他の呼び出し元の動作は、規定 されません。 pthread_join() を呼び出したスレッドが取り消されると、対象スレッドは結合されません。 thread の終了ス テータスは、 pthread_join() を呼び出す別のスレッドで使用できるよう維持されます。 thread が取り消された場合、その終了ステータスは PTHREAD_CANCELED になります。 スレッドの実行は終了しているが、まだ結合していない場合、 {_POSIX_THREAD_THREADS_MAX} と比較 する値に含まれるかどうかは規定されません。 戻り値 正常終了すると pthread_join() はゼロを返します。それ以外の場合、エラーの内容を表すエラー番号を返しま す (errno 変数は使用しません)。 エラー 次の場合、 pthread_join() 関数は、対応するエラー番号を返します。 [EINVAL] thread で指定された値が、結合可能なスレッドを示していない場合。 [ESRCH] thread に対応するスレッドが見つからない場合。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-205 pthread_join(3T) pthread_join(3T) 次の条件が成立する場合、 pthread_join() 関数は、対応するエラー番号を返します。 [EDEADLK] この操作を行うとプロセスがデッドロックする場合、または thread に呼び出し元自身 が指定されている場合。 著者 pthread_join() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_create(3T), wait(2) 標準準拠 pthread_join(): POSIX 1003.1c. Section 3-206 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_key_create(3T) pthread_key_create(3T) 名称 pthread_key_create(), pthread_key_delete() − スレッド固有データキーの作成または削除 構文 #include <pthread.h> int pthread_key_create( pthread_key_t *key, void (*destructor)(void *) ); int pthread_key_delete( pthread_key_t key ); パラメータ key 新しいキーの値を受け取るメモリー領域 (create 関数) へのポインター、または削除するス レッド固有データキー (delete 関数)。 destructor スレッドが終了するときに、 key と結びついたデータを消去するために呼び出される関 数。 説明 pthread_key_create() は、重複しないスレッド固有データとして key を作成します。 key は、スレッド固有デー タを管理するために、プロセス内のスレッドで使用されます。キーはすべてのスレッドで同じものを使用しま すが、 key と結びついたスレッド固有データは、スレッドごとに値が保持されます。各スレッドでは、 key に 結びついたデータは、スレッドが存在するかぎり存続します。 プロセスはスレッド固有データキーを、 PTHREAD_KEYS_MAX 個まで作成できます。新しいスレッド固有 データキーが作成されると、各スレッドでは、初期値として NULL が新しいキーに結びつけられます。スレッ ドが作成されると、新しいスレッドでは、プロセスで作成されたすべてのスレッド固有データキーの値に NULL が 割 り 当 て ら れ ま す。 各 ス レッ ド の ス レッ ド 固 有 デー タ キー に 結 び つ い た 値 を 変 え る に は、 pthread_setspecific() を使用します。注意: pthread_key_t は、不明瞭データ型です。 スレッドが終了する時点で、そのスレッド固有データキーの一部またはすべてに、 NULL 以外の値が結びつけ られている可能性があります。通常、これらの値は動的に割り当てられたメモリーへのポインターになりま す。スレッドを終了するときにこれらのメモリーを解放しないと、プロセスで使用できるメモリーが減ってし まいます。終了するスレッドのスレッド固有データを消去する目的で、任意のデストラクタ関数を、キーの作 成時に指定することができます。スレッドの終了時には、スレッドに結びついたスレッド固有データの値が調 べられます。スレッド固有データの値もデストラクタ関数もともに NULL でないキーが存在すると、そのデス トラクタ関数は、スレッド固有データの値を唯一の引き数にして呼び出されます。デストラクタ関数が呼び出 される順序は、不定です。 すべてのデストラクタ関数が呼び出されると、終了するスレッドのスレッド固有データの値が、再び調べられ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-207 pthread_key_create(3T) pthread_key_create(3T) ます。キーにデストラクタ関数が登録されていて NULL でない値がまだ結びつけられている場合、デストラク タ関数の呼び出し処理が繰り返されます。このループを PTHREAD_DESTRUCTOR_ITERATIONS 回繰り返 した後でもデストラクタ関数と結びついていて NULL でない値が存在する場合、システムはデストラクタ関数 の呼び出しをやめることもありますが、 NULL でない値が存在しなくなるまでデストラクタ関数を呼び出し続 ける可能性もあります。注意:これにより、無限ループが生じる危険があります。 key のデストラクタ関数が不要の場合は、 destructor パラメータに NULL を指定します。 pthread_key_delete() 関数は、スレッド固有データである key を削除します。 key は、 pthread_key_create() に よって以前に作成されたものでなければなりません。 key に結びついたスレッド固有データの値は、この関数 が呼び出されるときに NULL である必要はありません。削除した後で key を使用すると、結果は不定です。 デストラクタ関数が key に登録されていても、 pthread_key_delete() 関数では呼び出されません。 key が削除さ れると、 key に登録されたどのデストラクタ関数も、スレッドの終了時に呼び出されません。 key を使用して いる各スレッドでのアプリケーション用記憶領域は、アプリケーション自身で解放しなければなりません。 pthread_key_delete() 関数は、デストラクタ関数から呼び出すことができます。 戻り値 正常終了すると、 pthread_key_create() と pthread_key_delete() は0を返します。それ以外の場合、エラーの内 容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_key_create() 関数は対応するエラー番号を返します。 [EINVAL] [EAGAIN] key で指定された値が無効な場合。 新しいスレッド固有データキーを作成するために必要なリソースが使用不能か、プロ セスのキーの総数が PTHREAD_KEYS_MAX を超える場合。 [ENOMEM] key を作成するために必要なメモリー領域が足りない場合。 以下の条件の場合、 pthread_key_delete() 関数は該当するエラー番号を返します。 [EINVAL] key で指定された値が無効の場合。 著者 pthread_key_create() と pthread_key_delete() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_getspecific(3T), pthread_setspecific(3T) 標準準拠 pthread_key_create(): POSIX 1003.1c. pthread_key_delete(): POSIX 1003.1c. Section 3-208 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_kill(3T) pthread_kill(3T) 名称 pthread_kill() − スレッドへのシグナル送信 構文 #include <signal.h> int pthread_kill( pthread_t thread, int sig ); パラメータ thread シグナルが送信されるスレッド。 sig thread に送信されるシグナル。 説明 pthread_kill() 関数は、シグナルを thread に送信するように要求します。シグナルは、呼び出しプロセス中の thread へ非同期に送られます。シグナルは、指定スレッドのコンテキストで扱われます。たとえばシグナルの 動作が終了または停止の場合、この動作はプロセス全体に適用されます。 sig が0である場合、エラーのチェックは行なわれますが、シグナルは送られません。 戻り値 正常終了すると pthread_kill() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_kill() 関数は、該当するエラー番号を返します。 [EINVAL] sig が、無効またはサポートされていないシグナル番号の場合。 [ESRCH] thread に対応するスレッドが見つからない場合。 著者 pthread_kill() は、IEEE POSIX P1003.1c標準から派生しました。 参照 kill(2), sigaction(2), pthread_self(3T), raise(2) 標準準拠 pthread_kill(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-209 pthread_launch_policy_np(3T) pthread_launch_policy_np(3T) 名称 pthread_launch_policy_np() − スレッド起動ポリシーの設定 構文 #include <pthread.h> int pthread_launch_policy_np( int request, int *answer, pthread_t tid ); パラメータ request answer このパラメータは、これらの機能によって実行される正確なアクションを決定します。 このパラメータは出力パラメータであり、値が戻されます。 answer の意味は、 request パ ラメータに依存します。 このパラメータは、特定の要求に対するスレッド ID の値を提供します。 tid 説明 各プロセスには、起動ポリシーが1つ割り当てられていなければなりません。各スレッドには、起動ポリシー が1つ割り当てられていなければなりません。スレッド用の起動ポリシーとプロセス用の起動ポリシーが一致 している必要はありません。 ccNUMA システムでは、起動ポリシーは、新規に作成されるプロセスやスレッ ドのローカリティドメインを決定します。プロセスやスレッドのプロセッサセットでされているローカリティ ドメインを使用することができます。 pthread_launch_policy_np() 関数は、特定のスレッドに対するスレッド起動ポリシーを設定します。 tid によっ て指定されたスレッドは、起動ポリシーが変更されたターゲットスレッドです。値 PTHREAD_SELFTID_NP を使用して、呼び出しスレッドを参照することができます。 pthread_launch_policy_np() は現在、 PTHREAD_SCOPE_PROCESS スレッドでははサポートされていませ ん。 pthread_launch_policy_np() は、 PTHREAD_SCOPE_PROCESS スレッドで使用した場合に無視され、ゼ ロを戻して正常終了します。 プロセスが (fork() または vfork()を使って) 別のプロセスを作成すると、子プロセスは親プロセスの起動ポリ シーを継承します 子プロセスの初期スレッドでは、そのプロセスの起動ポリシーではなく、作成スレッドの起動ポリシーを継承 します。マルチスレッド プロセスでは、初期スレッド以外のスレッドは、作成スレッドの起動ポリシーを継承 します。 すべての起動ポリシーに関して、ターゲットスレッドは、起動時に使われたローカリティドメインにバインド されます。ターゲットは、そのローカリティドメイン内の任意のプロセッサで実行可能です。 Section 3-210 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_launch_policy_np(3T) pthread_launch_policy_np(3T) 起動ポリシーを設定する際に、ターゲットがプロセッサまたはローカリティドメインにすでにバインドされて いる場合、既存のバインディングは上書きされません。代わりに、ターゲットがバインドされているローカリ ティドメイン (ローカリティドメイン バインディングまたはプロセスバインディングには関係なく) が起動ポ リシーを実行するための開始ローカリティドメインとして使用されます。 起動ポリシーの詳細については、 mpctl(2) のマンページを参照してください。 注: ローカリティドメインは、基礎となるシステムの物理コンポーネントに密接に結合されています。その結 果、ローカリティドメインに基づいて起動ポリシーを実行した場合の性能は、システムによって異なることが あります。たとえば、それぞれが 32 プロセッサをもつ4個のローカリティドメインを含むシステムは、それ ぞれ4プロセッサをもつ 32 個のローカリティドメインを含むシステムとは異なる動作を示します。アプリ ケーションが同じ場合に、あるシステムで最適な性能を提供する起動ポリシーによって、別のシステムでも最 適な性能が得られるとは限りません。 request パラメータは、実行するアクションを指定します。以下にそれらを示します。 PTHREAD_GET_POLICY_NP ターゲットスレッドの現在の起動ポリシーが answer パラメータによって戻されます。現在 は、 こ の 要 求 に よっ て PTHREAD_POLICY_RR_NP 、 PTHREAD_POLICY_FILL_NP 、 PTHREAD_POLICY_PACKED_NP 、 PTHREAD_POLICY_RR_TREE_NP 、 PTHREAD_POLICY_LEASTLOAD_NP PTHREAD_POLICY_FILL_TREE_NP 、 ま た は PTHREAD_POLICY_NONE_NP が戻され、 tid によって指定されたスレッドの現在の起動ポ リシーがわかります。将来のリリースで新たな起動ポリシーが追加されることも考えられま す。このオプションを使用するアプリケーションは、将来のリリースでも引き続き機能するた めに、上記以外の戻り値も処理できるように作成する必要があります。 PTHREAD_POLICY_RR_NP この要求は、指定されたスレッドに対してラウンドロビンポリシーを設定します。指定された スレッドの後続の子スレッドは、起動ツリー内のスレッドですべての使用可能なローカリティ ドメインが使用されるまで、ラウンドロビン方式によって、異なるローカリティドメインで起 動されます。すべての使用可能なローカリティドメインを使い切った時点で、最初のローカリ ティドメインからローカリティドメインの選択が再開されます。 answer パラメータは無視さ れます。 PTHREAD_POLICY_FILL_NP この要求は、指定されたスレッドに対してプロセッサ優先ポリシーを設定します。指定された スレッドの子スレッドは、ドメイン内で使用可能なプロセッサごとに1つのスレッドが作成さ れるまで、その親スレッドと同じローカリティドメインで起動されます。その後、別のローカ リティドメインが選択され、プロセッサごとに1つのスレッドが起動されるまで、後続のス レッドはそのドメインで起動されます。システム内のローカリティドメインがすべて使用され ると、最初のドメインが再度選択されます。 answer パラメータは無視されます。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-211 pthread_launch_policy_np(3T) pthread_launch_policy_np(3T) PTHREAD_POLICY_PACKED_NP この要求は、指定されたスレッドに対してドメイン優先ポリシーを設定します。このスレッド によって作成された新規スレッドは、作成スレッドと同じローカリティドメインで起動されま す。 answer パラメータは無視されます。 PTHREAD_POLICY_LEASTLOAD_NP この要求は、指定されたスレッドに対して最小負荷ポリシーを設定します。このスレッドに よって作成された新規スレッドは、作成スレッドのドメインには関係なく、システム内の最小 負荷のローカリティドメインで起動されます。 answer パラメータは無視されます。 PTHREAD_POLICY_RR_TREE_NP この要求は、指定されたスレッドに対して、ツリー形式のラウンドロビンポリシーをを設定し ます。この要求は、スレッドが起動ツリーの一部となる点で、 PTHREAD_POLICY_RR_NP と異なります。この起動ポリシーでは、対象スレッドの、起動ツリー内のすべての子孫が含ま れます。 answer パラメータは無視されます。 PTHREAD_POLICY_FILL_TREE_NP この要求は、指定されたスレッドに対して、ツリー形式のプロセッサ優先ポリシーを設定しま す。この要求は、スレッドが起動ツリーの一部となる点で、 PTHREAD_POLICY_FILL_NP と異なります。この起動ポリシーでは、対象スレッドの、起動ツリー内のすべての子孫が含ま れます。 answer パラメータは無視されます。 PTHREAD_POLICY_NONE_NP この要求は、スレッドの起動ポリシー設定をすべて解除します。新規スレッドの起動には、デ フォルトの最適なポリシーが適用されます。スレッドの既存のバインディングは変更されませ ん。 answer パラメータは無視されます。 戻り値 正常終了した時点で、 pthread_launch_policy_np() はゼロを戻します。それ以外の場合は、エラー番号を戻し てエラーを示します (errno 変数は設定されません)。 エラー 以下のいずれかが発生した場合に、 pthread_launch_policy_np() 関数は対応するエラー番号を戻します。 [EINVAL] request パラメータに不正な値が含まれています。 [EINVAL] answer によって指定された値は正しくありません。 [ESRCH] 現在のプロセスには、 tid で指定されたスレッド ID と一致するスレッドが見つかりま せん。 警告 pthread_launch_policy_np() は現在、 PTHREAD_SCOPE_PROCESS スレッドに対してサポートされていませ ん。 pthread_launch_policy_np() は、 PTHREAD_SCOPE_PROCESS スレッドで使用された場合に無視され、 ゼロを戻して正常に終了します。 request パラメータが PTHREAD_GET_POLICY_NP の場合には、 answer は Section 3-212 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread_launch_policy_np(3T) pthread_launch_policy_np(3T) PTHREAD_POLICY_NONE_NP に設定されます。その他のすべての request 値に対して、 answer パラメータ は 無 視 さ れ ま す。 pthread_launch_policy_np() の 完 全 な 実 装 に 依 存 す る ア プ リ ケー ショ ン は、 PTHREAD_SCOPE_SYSTEM スレッドを使用する必要があります。 著者 pthread_launch_policy_np() は、HP により開発されました。 参照 mpctl(2), sleep(3C), rtsched(2) 標準準拠 pthread_launch_policy_np(): なし HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-213 pthread_mutexattr_getprotocol(3T) pthread_mutexattr_getprotocol(3T) 名称 pthread_mutexattr_getprotocol(), pthread_mutexattr_setprotocol(), pthread_mutexattr_getprioceiling(), pthread_mutexattr_setprioceiling() − protocol 属性と prioceiling 属性の取得/設定 構文 #include <pthread.h> int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr, int prioceiling); int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *attr, int *prioceiling); int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, int protocol); int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr, int *protocol); パラメータ attr 属性を設定または取得するmutex属性オブジェクトへのポインター。 prioceiling このパラメータは、属性 prioceiling の新しい値を指定する (set 関数) か、 attr の属性 prioceiling が返されるメモリー領域を指します (get 関数)。 このパラメータは、属性 protocol の新しい値を指定する (set 関数) か、 attr の属性 proto- protocol col が返されるメモリー領域を指します (get 関数)。 説明 こ れ ら の 関 数 を 使 用 す る 前 に は、 必 ず _POSIX_THREAD_PRIO_PROTECT と _POSIX_THREAD_PRIO_INHERIT の定義を調べてください。すべてのシステムがこれらの関数をサポートし ているとはかぎりません。 これらの関数を呼び出す前に、関数 pthread_mutexattr_init() で、属性オブジェクト attr を前もって初期化しな ければなりません。 属性: protocol ロックされたmutex によって起こり得る、優先順位の逆転現象を防止または最小にするのに役立てるため、 mutexを優先順位プロトコルで初期化できます。 mutex属性オブジェクトの属性 protocol は、mutexがスレッド でロックされるときに使用される優先順位プロトコルを示します。属性 protocol の有効な値は、次のとおりで す。 PTHREAD_PRIO_NONE この型のmutexをロックしても、スレッドのスケジューリング優先順位は変わりません。 Section 3-214 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_mutexattr_getprotocol(3T) pthread_mutexattr_getprotocol(3T) PTHREAD_PRIO_PROTECT これらの型のmutexには、属性 prioceiling に関連付けた優先順位値があります。スレッドがこ の型のmutexをロックすると、そのスケジューリング優先順位は、属性 prioceiling に含まれる 値に変わります。 prioceiling の値は、ロックするスレッドのスケジューリング優先順位より高 くなければなりません。 mutexのロックが解除されると、スレッドの前回のスケジューリング 優先順位が復元されます。 スレッドがこの型のmutexを複数所有している場合、そのスケジューリング優先順位は、該当 するmutexの全 prioceiling 属性のうち、もっとも高いものに変えられます。 PTHREAD_PRIO_INHERIT スレッドがこの型のmutexでブロック待ちしなければならないとき、システムは、mutexを所有 するスレッドのスケジューリング優先順位を、自身の優先順位と、mutexでブロックされてい るスレッド中最も高い優先順位のどちらか高い方に変えます。 mutex のロックが解除される と、スレッドの前回のスケジューリング優先順位が復元されます。 protocol 属性が PTHREAD_PRIO_PROTECT または PTHREAD_PRIO_INHERIT である1個以上のmutexをス レッドが所有している場合、元の優先順位が変更されるかmutexのロックが解除される場合、スレッドは優先 順位リストの最後尾に移動させられることはありません。 プロトコル優先順位の異なるmutexをスレッドが所有している場合、スレッドはこれらのプロトコルのうち最 高の優先順位で実行します。このスレッドが別のmutex でブロックされると、優先順位がこのスレッドをブ ロックしたmutexを所有するスレッドへ、再起的に渡されます。 POSIX.1c で は、 protocol 属 性 の デ フォ ル ト 値 を 定 義 し て い ま せ ん。 HP-UX で は、 デ フォ ル ト 値 は PTHREAD_PRIO_NONE になっています。 pthread_mutexattr_setprotocol() は、初期化された属性オブジェクト attr の protocol 属性を設定するために使用 されます。 attr の新しい protocol 属性の値は、 protocol パラメータで指定された値に設定されます。 pthread_mutexattr_getprotocol() は、mutex属性オブジェクト attr から protocol 属性の値を取得します。 attr の protocol 属性の値は、 protocol パラメータに返されます。 属性:prioceiling protocol 属性の値が PTHREAD_PRIO_PROTECT の場合、 prioceiling 属性は、mutexの最高優先順位を示しま す。それ以外の場合、この属性は、mutexを初期化するときには使用されません。 この属性で有効な優先順位の値は、 SCHED_FIFO スケジューリング方針の有効な値と同じです。 POSIX.1c で は、 prioceiling 属 性 の デ フォ ル ト 値 を 定 義 し ま せ ん。 HP-UX で は、 デ フォ ル ト 値 を、 SCHED_FIFO スケジューリング方針で最低の優先順位の値としています。 pthread_mutexattr_setprioceiling() は、初期化された属性オブジェクト attr に prioceiling 属性を設定します。 attr の prioceiling 属性の新しい値は、 prioceiling パラメータで指定された値に設定されます。 pthread_mutexattr_getprioceiling() は、mutex 属性オブジェクト attr から prioceiling 属性の値を取得します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-215 pthread_mutexattr_getprotocol(3T) pthread_mutexattr_getprotocol(3T) attr の prioceiling 属性の値は、 prioceiling パラメータに返されます。 戻り値 正常終了すると、 pthread_mutexattr_setprioceiling() 、 pthread_mutexattr_getprioceiling() 、 pthread_ mutexattr_ setprotocol()、 pthread_ mutexattr_ getprotocol() は0を返します。それ以外の場合、エラーの内容を表す エラー番号を返します (errno 変数は使用しません)。 エラー 以 下 の 現 象 が 発 生 し た 場 合、 pthread_mutexattr_setprioceiling() 、 pthread_mutexattr_getprioceiling() 、 pthread_mutexattr_setprotocol() 、 pthread_ imutexattr_ getprotocol() 関数は、該当するエラー番号を返しま す。 [ENOSYS] _POSIX_THREAD_PRIO_PROTECT が未定義で、これらの関数がサポートされない 場合。 [ENOTSUP] protocol に、サポートされない値が含まれている場合。 以下の条件の場合、 pthread_mutexattr_setprioceiling()、 pthread_mutexattr_getprioceiling()、 pthread_ mutexattr_ setprotocol()、 pthread_mutexattr_getprotocol() 関数は、該当するエラー番号を返します。 [EINVAL] [EPERM] attr 、 prioceiling または protocol で指定された値が無効な場合。 呼び出し元に、最高優先順位または優先順位プロトコルを指定の値に設定するための 適切な特権がない場合。 著者 pthread_mutexattr_setprioceiling(), pthread_mutexattr_getprioceiling(), pthread_mutexattr_setprotocol(), pthread_mutexattr_getprotocol() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_create(3T), pthread_mutexattr_init(3T), pthread_mutex_init(3T) 標準準拠 pthread_mutexattr_setprioceiling(): POSIX 1003.1c. pthread_mutexattr_getprioceiling(): POSIX 1003.1c. pthread_mutexattr_setprotocol(): POSIX 1003.1c. pthread_mutexattr_getprotocol(): POSIX 1003.1c. Section 3-216 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread_mutexattr_getpshared(3T) pthread_mutexattr_getpshared(3T) 名称 pthread_mutexattr_getpshared(), pthread_mutexattr_setpshared(), pthread_mutexattr_gettype(), pthread_mutexattr_settype() − プロセス共有属性とtype属性の取得/設定 構文 #include <pthread.h> int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared); int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *pshared); int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type); int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type); パラメータ attr 属性の設定または取得の対象とするmutex属性オブジェクトへのポインター。 pshared このパラメータは、 プロセス共有属性の新しい値を指定する (set 関数) か、 attr の プロセ ス共有属性が返されるメモリー領域を指します (get 関数)。 type このパラメータは、 type 属性の新しい値を指定する (set 関数) か、 attr の type 属性が返さ れるメモリー領域を指します (get 関数)。 説明 これらの関数を呼び出す前に、属性オブジェクト attr を関数 pthread_mutexattr_init() で前もって初期化してい なければなりません。 属性:pshared mutexは、1つのプロセス内のスレッドでのみ使用することも、複数のプロセスのスレッド間で共有すること もできます。 mutex属性オブジェクトの プロセス共有属性は、そのmutexが使用できるスレッドの範囲を指定 します。 プロセス共有属性の正当な値は、次のとおりです。 PTHREAD_PROCESS_SHARED このオプションにより、mutexが割り当てられているメモリーにアクセスできる任意のスレッ ドによって、mutexを操作できます。アプリケーションでは、複数のプロセスがアクセスでき るメモリー上にmutexを割り当てます。 PTHREAD_PROCESS_PRIVATE mutexを初期化したスレッドと同じプロセス内で作成されたスレッドでのみ、mutexを操作でき ます。異なるプロセスのスレッドがそのmutexを操作しようとした場合、結果は不定です。 プロセス共有のデフォルト値は、 PTHREAD_PROCESS_PRIVATE です。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-217 pthread_mutexattr_getpshared(3T) pthread_mutexattr_getpshared(3T) pthread_mutexattr_setpshared() は、 attr に プロセス共有属性を設定するために使用されます。 attr の プロセ ス共有属性の新しい値は、 pshared パラメータで指定された値に設定されます。 pthread_mutexattr_getpshared() は、 attr から プロセス共有属性の値を取得します。 attr の プロセス共有属性 の値は、 pshared パラメータに返されます。 属性:type mutexは、異なる4つの形式で作成することができます。 mutexの形式は、mutex属性オブジェクトの type 属性 に含まれます。 type 属性の有効な値は、次のとおりです。 PTHREAD_MUTEX_NORMAL この形式のmutexでは、デッドロックの検出は行われません。スレッドがこのmutexを、最初に ロックを解除しないまま再度ロックしようとすると、そのスレッドはデッドロックします。呼 び出し元にはエラーは返されません。別のスレッドがロックしたmutexのロックを解除しよう とすると、結果は不定です。ロックを解除されたmutexに対して再度ロック解除しようとする と、結果は不定です。 PTHREAD_MUTEX_ERRORCHECK この形式のmutexでは、エラーチェックが行われます。所有者フィールドはそのまま保持され ます。 mutexのロックの所有者だけが、このmutexのロックを正常に解除できます。このmutex を再度ロックしようとするスレッドには、エラーが返されます。別のスレッドがロックした mutexのロックを解除しようとしたスレッドには、エラーが返されます。ロックが解除された mutex を再度ロック解除しようとするスレッドには、エラーが返されます。この形式のmutex は、デバッグに便利です。 PTHREAD_MUTEX_RECURSIVE この形式のmutexでは、デッドロックは起こり得ません。所有者フィールドはそのまま保持さ れます。スレッドがこのmutexを再度ロックしようとすると、mutexは正常にロックされます。 このmutexを複数回ロックする場合は、mutexを解放して別のスレッドがmutexをロックできる ようにするため、同じ回数ロックを解除する必要があります。別のスレッドがロックした mutexのロックを解除しようとしたスレッドには、エラーが返されます。ロックが解除された mutexを再度ロック解除しようとするスレッドには、エラーが返されます。 PTHREAD_MUTEX_NO_OWNER_NP この形式の mutex では、デッドロックの検出は行われません。スレッドがこの mutex を、最初 にロックを解除しないまま再度ロックしようとすると、そのスレッドはデッドロックします。 呼び出し元にはエラーは返されません。この形式の mutex は、所有者以外のスレッドでもロッ ク解除することができます。ロック解除された mutex に対して再度ロック解除しようとする と、結果は不定です。 PTHREAD_MUTEX_DEFAULT この形式のmutexを再帰的にロックしようとすると、結果は不定です。別のスレッドがロック したmutexのロックを解除しようとすると、結果は不定です。ロックが解除されたmutexを再度 Section 3-218 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_mutexattr_getpshared(3T) pthread_mutexattr_getpshared(3T) ロック解除しようとすると、結果は不定です。このmutexを他のいずれかの形式のmutexにマッ ピングする実装も許可されています。 type 属性のデフォルト値は、 PTHREAD_MUTEX_DEAFULT です。 pthread_mutexattr_settype() は、 attr に type 属性を設定するために使用されます。 attr の type 属性の新しい値 は、 type パラメータで指定された値に設定されます。 pthread_mutexattr_gettype() は、 attr から type 属性の値を取り出します。 attr の type 属性の値は、 type パラ メータに返されます。 PTHREAD_MUTEX_RECURSIVE のmutexには絶対に条件変数を使用しないでください。複数回ロックされて いる場合、 pthread_cond_wait() または pthread_cond_timedwait() で暗示的にロックを解除しても、mutexが実 際には解放されないことがあるからです。この状況に陥ると、他のスレッドで述語の条件を満足させることが できなくなります。 戻り値 正常終了すると pthread_mutexattr_getpshared(), pthread_mutexattr_setpshared(), pthread_mutexattr_gettype(), pthread_ mutexattr_ settype() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_mutexattr_getpshared() と pthread_mutexattr_setpshared() 関数は、該当 するエラー番号を返します。 [ENOSYS] _POSIX_THREAD_PROCESS_SHARED が未定義で、これらの関数がサポートされて いない場合。 以下の条件の場合、 pthread_mutexattr_getpshared(), pthread_mutexattr_setpshared(), pthread_mutexattr_gettype(), pthread_mutexattr_settype() 関数は、該当するエラー番号を返します。 [EINVAL] attr が、有効なmutex属性オブジェクトではない場合。 [EINVAL] pshared または type で指定された値が、正当な値ではない場合。 [EINVAL] pshared または type で指定された値が、無効なアドレスを指している場合。 警告 PTHREAD_PROCESS_SHARED に確定した プロセス共有属性で mutex を作成する場合、協調プロセスは、 mutex が割り当てられたメモリーにアクセスできなければなりません。 著者 pthread_mutexattr_setpshared() と pthread_mutexattr_getpshared() は、IEEE POSIX P1003.1c 規格から派生しま した。 pthread_mutexattr_settype() と pthread_mutexattr_gettype() は、X/Open で開発されました。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-219 pthread_mutexattr_getpshared(3T) pthread_mutexattr_getpshared(3T) 参照 pthread_create(3T), pthread_mutexattr_init(3T), pthread_mutex_init(3T) 標準準拠 pthread_mutexattr_setpshared(): POSIX 1003.1c. pthread_mutexattr_getpshared(): POSIX 1003.1c. pthread_mutexattr_settype(): X/Open. pthread_mutexattr_gettype(): X/Open. Section 3-220 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 pthread_mutexattr_getspin_np(3T) pthread_mutexattr_getspin_np(3T) 名称 pthread_mutexattr_getspin_np(), pthread_mutexattr_setspin_np(), pthread_mutex_getyieldfreq_np(), pthread_mutex_setyieldfreq_np(), pthread_mutexattr_disable_handoff_np(), pthread_mutex_disable_handoff_np() − mutex の spin 属性および yield frequency 属性の取得/設定、特定の mutex またはプロセスワイドの mutex のハンドオ フモード無効化 構文 #include <pthread.h> int pthread_mutexattr_setspin_np( pthread_mutexattr_t *attr, int spin ); int pthread_mutexattr_getspin_np( const pthread_mutexattr_t *attr, int *spin ); int pthread_mutex_setyieldfreq_np( int yield ); int pthread_mutex_getyieldfreq_np( int *yield ); int pthread_mutexattr_disable_handoff( pthread_mutexattr_t *attr );" int pthread_mutex_disable_handoff_np(); パラメータ attr spin 設定/検索の属性を持つ mutex 属性オブジェクトへのポインター。 このパラメータは、 spin 属性の新しい値を指定する (set 関数) か、または attr の spin 属性を返すメ モリー位置を指します (get 関数)。 yield このパラメータは、プロセス全体にわたる yield frequency 属性の新しい値を指定する (set 関数) か、 またはプロセス全体にわたる yield frequency 属性を返すメモリー位置を指します (get 関数)。 説明 これらの属性を使用すると、マルチプロセッサシステム上でアプリケーションのパフォーマンスを最大にする ために、mutex ロックの動作を調整することができます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-221 pthread_mutexattr_getspin_np(3T) pthread_mutexattr_getspin_np(3T) pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np() および pthread_mutexattr_disable_hand- off_np() 関数の場合、これらの関数を呼び出す前に、関数 pthread_mutexattr_init() によって属性オブジェクト attr をあらかじめ初期化しておかなければなりません。 属性: spin mutex は、mutex ロックが占有待ち状態の場合、 pthread_mutex_lock() が処理を繰り返すために使用するスピ ン値によって初期化することができます。これは、マチルプロセッサシステムの場合だけ有効です。単一プロ セッサシステムでは、無視されます。 バインドされたスレッドの場合、ビジー状態の mutex をブロックする手続きには、非常に負担がかかります。 マルチプロセッサシステムでは、mutex を設定しているスレッドは、少ない回数の命令サイクルで mutex を解 放することができます。実際にブロックを行う前に短時間の占有待ち状態を作ることによって、ロックパスは このような状況での大量のオーバーヘッドを避けることができます。 多くのアプリケーションの場合、このような状況はまれではありません。短いコード列 ( たとえば、カウン ターを増加させる) を保護するために使用される mutex について考えてみましょう。この場合の mutex は、少 ない回数の命令サイクル (pthread_mutex_unlock() 関数の呼び出しのためのオーバーヘッドを加えて) で設定さ れます。 spin 属性を設定できると、アプリケーションの作成者は、各 mutex によって保護される、重要なコードの実行 時間に合わせて、占有待ち状態を調整することができます。 spin 属性の有効な値は、次のとおりです。 正の整数 pthread_mutex_lock() 関数は、すぐにロックを設定できない場合、そのスレッドをブロックする前 に、指定した回数の繰り返しの分だけ mutex ロック に対して占有待ち状態になります。 mutexes が、長時間かかって実行される重要なコードセクションに関連付けられている場合、 spin 値を大き く設定すると良いでしょう。 PTHREAD_MUTEX_SPINONLY_NP mutex ロックのブロックを完全に禁止します。 pthread_mutex_lock() 関数は、mutex ロックを設定 できるまで、占有待ち状態になります。 PTHREAD_MUTEX_SPINDEFAULT_NP 占有待ち状態の繰り返し回数に対して、組み込みのデフォルト値を使用します。 属性: yield yield 属性は、mutex 単位の属性ではなく、プロセス全体にわたる属性であることに注意してください。つま り、これはすべての mutex の動作に影響を与えます。 yield 属 性 は、 pthread_mutex_lock() の 占 有 待 ち 状 態 に 対 し て、 他 の ス レッ ド が 実 行 で き る よ う に (sched_yield() を使用して) プロセッサを解放する頻度を指定します。 スレッドの数がシステム内のプロセッサの数を超えると、mutex ロックに対する占有待ち状態が反対の影響を 及ぼすことが多くあります。占有待ち状態そのものは、ロックを設定しているスレッドに関連する重要なコー Section 3-222 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_mutexattr_getspin_np(3T) pthread_mutexattr_getspin_np(3T) ドセクションの実行を妨げる可能性があります。ロックを行おうとしているスレッドは、ときどきプロセッサ を解放することによって、ロックを解除できるポイントに到達するのを可能にします。それでも、この方法は mutex をブロックするという負担のかかる手続きを回避します。 yield 属性の有効な値は、次のとおりです。 正の整数 pthread_mutex_lock() 内の占有待ち状態のループは、スピンループのそれぞれ指定された繰り返し 回数 (ここで、繰り返しの合計数は mutex 単位の spin 属性によって制御されます) の後、プロセッ サを解放します。 PTHREAD_MUTEX_YIELDNEVER_NP mutex ロックで、プロセッサの解放を完全に禁止します。 PTHREAD_MUTEX_YIELDFREQDEFAULT_NP 占有待ち状態のループ内でのプロセッサの解放の頻度に対して、組み込みのデフォルト値を使用し ます。 リアルタイムスレッドによる mutex の取得に関して、POSIX で規定されている要件を厳密に遵守する必要がな けれは、そのシステムでは、mutex の性能を向上させることができます。すなわち、 pthread_mutexattr_disable_handoff_np() 関数または pthread_mutex_disable_handoff_np() 関数を使えば、こうした要件の強制が厳密 ではなくなるため、実際のシステムで、mutex の性能を向上させることができます。 pthread_mutexattr_disable_handoff_np() 関数を使うと、特定の mutex の性能を向上させることができます。こ の関数は、mutex 属性を初期化した 後に呼び出す必要があります。 pthread_mutex_disable_handoff_np() 関数を使うと、プロセス内のすべての mutex の性能を向上させることが できます。この関数は、他のスレッドが生成される 前に、初期スレッドから呼び出す必要があります。 戻り値 pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np(), pthread_mutex_getyieldfreq_np(), pthread_mutexattr_disable_handoff_np(), pthread_mutex_setyieldfreq_np(), お よ び pthread_mutex_dis- able_handoff_np() は、次の値を返します。 0 <>0 正常終了 失敗。返される値は、「エラー」の項に定義されているエラー番号です (errno 変数には設定されませ ん)。 エラー エ ラー が 検 出 さ れ る と、 pthread_mutexattr_setspin_np(), pthread_mutexattr_getspin_np(), pthread_mutex_setyieldfreq_np(), および pthread_mutex_getyieldfreq_np() は、以下のエラー番号のいずれかを 返します。 [EINVAL] [EINVAL] attr, spin, または yield によって指定された値が正しくない場合。 プロセスがマルチスレッドになった 後に pthread_mutex_disable_handoff_np() が呼び出された 場合。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-223 pthread_mutexattr_getspin_np(3T) pthread_mutexattr_getspin_np(3T) 警告 spin および yield 属性の設定値は、アプリケーションのパフォーマンスを向上させることができますが、同時 に、パフォーマンスを簡単に低下させる可能性もあります。アプリケーションによる CPU の消費量が増大す る可能性があります。小量のスレッドの場合にうまく働く設定値が、大量のスレッドの場合にはうまく働かな い可能性があります。最適な設定値は、ハードウェアおよびオペレーティングシステムの構成によって異なり ます。アプリケーションそのものの小さな変更により、これらの属性を調整し直すことが必要になる場合があ ります。 プログラマは、パフォーマンスを注意深く分析して、アプリケーション内での mutex の競合について理解しな ければなりません。その後、さまざまな属性値を試して、mutex の競合にどのような影響があるか、応答時 間、および CPU の消費量を評価します。 著者 pthread_mutexattr_getspin_np(), pthread_mutexattr_setspin_np(), pthread_mutex_getyieldfreq_np(), pthread_mutex_setyieldfreq_np(), pthread_mutexattr_disable_handoff_np() および pthread_mutex_disable_handoff_np() は HP で開発されました。 参照 pthread_create(3T), pthread_mutex_init(3T), pthread_mutexattr_init(3T), rtsched(2) 標準準拠 pthread_mutexattr_setspin_np(): なし pthread_mutexattr_getspin_np(): なし pthread_mutex_setyieldfreq_np(): なし pthread_mutex_getyieldfreq_np(): なし pthread_mutexattr_disable_handoff_np(): なし pthread_mutex_disable_handoff_np(): なし Section 3-224 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 pthread_mutexattr_init(3T) pthread_mutexattr_init(3T) 名称 pthread_mutexattr_init(), pthread_mutexattr_destroy() − mutex属性オブジェクトの初期化と消去 構文 #include <pthread.h> int pthread_mutexattr_init( pthread_mutexattr_t *attr ); int pthread_mutexattr_destroy( pthread_mutexattr_t *attr ); パラメータ attr 初期化または消去するmutex属性オブジェクトへのポインター。 説明 pthread_mutexattr_init() は、mutex属性オブジェクト attr のすべての属性を、デフォルト値で初期化します。 属性オブジェクトは、mutexを詳細に説明するものであり、mutex初期化関数に渡されます。 mutex属性オブジェクトを使用してmutexを初期化すると、各属性の値によって、新しいmutexの特性が決まり ま す。 属 性 オ ブ ジェ ク ト は、 オ ブ ジェ ク ト 初 期 化 の 際 の 追 加 パ ラ メー タ の 役 割 を 果 た し ま す。 pthread_mutex_init() 関数の呼び出しでは、1つの属性オブジェクトを何度でも使用することができます。 属性オブジェクトでmutexを初期化すると、属性はmutexの中にコピーされるのと同じことになります。結果と して、属性オブジェクトにどのような変更を加えても、前回初期化されたmutexには影響ありません。特定の 属性オブジェクトを必要とするすべてのmutexの初期化が済めば、属性オブジェクトは必要ありません。 mutex属性とそのデフォルト値は、次のとおりです。 プロセス共有 デフォルト値は PTHREAD_PROCESS_PRIVATE です。 type デフォルト値は PTHREAD_MUTEX_DEFAULT です。 初期化済みのmutex属性オブジェクトを再度初期化すると、動作は不定になります。 pthread_mutexattr_destroy() は、mutex属性オブジェクト attr を消去します。消去されたmutex属性オブジェク トは実体が消去され、そのリソースは再生されます。消去された後で attr を使用した場合、結果は不定です。 mutex属性オブジェクトは、消去されても関数 pthread_mutexattr_init() で再び初期化できます。 すでに作成済みのmutexは、作成時に使用したmutex属性オブジェクトを消去しても影響を受けません。 戻り値 正常終了すると、 pthread_mutexattr_init() と pthread_mutexattr_destroy() は0を返します。それ以外の場合、 エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-225 pthread_mutexattr_init(3T) pthread_mutexattr_init(3T) エラー 以下の条件の場合、 pthread_mutexattr_init() と pthread_mutexattr_destroy() 関数は、該当するエラー番号を返 します。 [ENOMEM] attr の初期化で使用可能なメモリー領域が足りない場合。 [EINVAL] attr で指定された値が無効な場合。 著者 pthread_mutexattr_init() と pthread_mutexattr_destroy() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_create(3T), pthread_mutexattr_getpshared(3T), pthread_mutexattr_setpshared(3T), pthread_mutexattr_get- type(3T), pthread_mutexattr_settype(3T), pthread_mutex_init(3T) 標準準拠 pthread_mutexattr_init(): POSIX 1003.1c. pthread_mutexattr_destroy(): POSIX 1003.1c. Section 3-226 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_mutex_getprioceiling(3T) pthread_mutex_getprioceiling(3T) 名称 pthread_mutex_getprioceiling(), pthread_mutex_setprioceiling() − mutex の prioceiling 属性の取得と設定 構文 #include <pthread.h> int pthread_mutex_getprioceiling( pthread_mutex_t *mutex, int *prioceiling ); int pthread_mutex_setprioceiling( pthread_mutex_t *mutex, int prioceiling, int *old_ceiling ); パラメータ mutex prioceiling 属性 prioceiling を設定または取得するmutexへのポインター。 このパラメータは、 mutex の属性 prioceiling が返されるメモリー領域を指すか (get 関 数)、または mutex の属性 prioceiling の新しい値を指定します (set 関数)。 old_ceiling このパラメータは、 mutex の以前の属性 prioceiling が返されるメモリー領域を指します (set 関数のみ)。 説明 pthread_mutex_setprioceiling() 関数は、最初に mutex をロックします。 mutex が現在ロックされている場合、 mutex がロックできるまで、呼び出しスレッドはブロックされます。 mutex がロックされると、 mutex の属性 prioceiling は prioceiling パラメータで指定された値に変更され、 mutex はロック解除されます。 mutex の以前 の最高優先順位は、 old_prioceiling に返されます。 pthread_mutex_getprioceiling() 関数は、 mutex の現在の prioceiling 属性値を prioceiling パラメータに返しま す。 これらの関数を使用する前に、必ず _POSIX_THREAD_PRIO_PROTECT の定義を調べてください。すべての システムでこれらの関数がサポートされているとはかぎりません。 戻り値 正常終了すると、 pthread_mutex_getprioceiling() と pthread_mutex_setprioceiling() は0を返します。それ以外 の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_mutex_getprioceiling() と pthread_mutex_setprioceiling() 関数は、該当す るエラー番号を返します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-227 pthread_mutex_getprioceiling(3T) [ENOSYS] pthread_mutex_getprioceiling(3T) _POSIX_THREAD_PRIO_PROTECT が未定義で、これらの関数がサポートされてい ない場合。 以下の条件の場合、 pthread_mutex_getprioceiling() と pthread_mutex_setprioceiling() 関数は、該当するエラー 番号を返します。 [EINVAL] 優先順位値 prioceiling が正当な値ではない場合。 [EINVAL] mutex が、有効なmutexではない場合。 [ENOSYS] prioceiling プロトコルが mutex でサポートされていない場合。 [EPERM] 呼び出し元に、 mutex の最高優先順位を変更するための適切な特権がない場合。 [EFAULT] mutex パラメータが無効なアドレスを指している場合。 著者 pthread_mutex_getprioceiling() と pthread_mutex_setprioceiling() は、IEEE POSIX P1003.1c規格から派生しまし た。 参照 pthread_create(3T), pthread_mutex_init(3T), pthread_mutexattr_setprioceiling(3T), pthread_mutexattr_getprioceiling(3T), pthread_mutex_lock(3T), pthread_mutex_trylock(3T), pthread_mutex_unlock(3T) 標準準拠 pthread_mutex_getprioceiling(): POSIX 1003.1c. pthread_mutex_setprioceiling(): POSIX 1003.1c. Section 3-228 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_mutex_init(3T) pthread_mutex_init(3T) 名称 pthread_mutex_init(), pthread_mutex_destroy() − mutexの初期化と消去 構文 #include <pthread.h> int pthread_mutex_init( pthread_mutex_t *mutex, const pthread_mutexattr_t *attr ); pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int pthread_mutex_destroy( pthread_mutex_t *mutex ); パラメータ mutex attr 初期化または消去するmutexへのポインター。 初期化するmutexの特性を定義する属性オブジェクトへのポインター。ポインターが NULL の場合、デフォルトの属性が使用されます。 説明 pthread_mutex_init() 関数は、 mutex で指定されたmutexを属性 attr で初期化します。パラメータ attr が NULL の 場 合、 デ フォ ル ト の mutex 属 性 が 使 用 さ れ ま す。 デ フォ ル ト の mutex 属 性 の 一 覧 は、 pthread_mutexattr_init(3T) を参照してください。初期化が正常終了すると、 mutex は初期化され、ロックが解除されて、 mutex 操作関数で使用する準備ができます。 mutex の初期化は一度だけにする必要があります。それ以外の場 合、どのような動作が生じるかは不定です。 pthread_once() 関数は、mutexが一度だけ初期化されていること を確実にする方法を提供します。 マクロ PTHREAD_MUTEX_INITIALIZER は、静的に割り当てられたmutexを初期化するために使用すること ができます。この場合、 mutex はデフォルトの属性で初期化されます。静的に初期化された mutex には、 pthread_mutex_init() 関数を使用する必要はありません。 attr で参照されるmutex属性オブジェクトのプロセス共有属性が PTHREAD_PROCESS_SHARED で定義され ている場合、mutex は、mutex を共有するプロセスからアクセスできるように割り当てられなければなりませ ん。これは、メモリーマップ関数 (mmap(2) 参照)、または共有メモリー関数 (shmget(2) 参照) によって実行す ることができます。 pthread_mutex_destroy() 関数は、 mutex で参照されるmutexを消去します。この関数は、 mutex に無効な値を 設定する可能性があります。消去されたmutexは、関数 pthread_mutex_init() を使用して、再度初期化すること ができます。消去後、 mutex 関数でmutexを使用すると、どのような動作が生じるかは不定です。 mutexの消去は、ロックが解除されているときにのみ行う必要があります。現在使用されているmutexを消去す ると、不定の動作が生じる結果になります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-229 pthread_mutex_init(3T) pthread_mutex_init(3T) 戻り値 正常終了すると pthread_mutex_init() と pthread_mutex_destroy() は0を返します。それ以外の場合、エラーの 内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_mutex_init() 関数は、該当するエラー番号を返します。 [EAGAIN] mutex を初期化するために必要なリソース (メモリー以外) が使用できない場合。 [ENOMEM] mutex の初期化で使用可能なメモリー領域が足りない場合。 [EPERM] 呼び出し元に、mutexを初期化するのに必要なパーミッションがない場合。 以下の条件の場合、 pthread_mutex_init() 関数は、該当するエラー番号を返します。 [EINVAL] mutex または attr で指定された値が無効な場合。 [EBUSY] mutex がすでに初期化済みのmutexの場合。 [EFAULT] mutex パラメータが、無効なアドレスを指している場合。 以下の条件の場合、 pthread_mutex_destroy() 関数は、該当するエラー番号を返します。 [EINVAL] mutex が、有効なmutexでない場合。 [EBUSY] mutex が現在ロックされているか、別のスレッドによって使用中の場合。 警告 mutex用の領域は、 pthread_mutex_init() 呼び出しの前に割り当てなければなりません。 attr の プロセス共有 属性が PTHREAD_PROCESS_SHARED であり、mutex用に割り当てられている領域が協調スレッドからアク セスできない場合、結果は不定になります。 著者 pthread_mutex_init() と pthread_mutex_destroy() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_mutex_lock(3T), pthread_mutex_unlock(3T), pthread_mutex_trylock(3T) 標準準拠 pthread_mutex_init(): POSIX 1003.1c. pthread_mutex_destroy(): POSIX 1003.1c. Section 3-230 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_mutex_lock(3T) pthread_mutex_lock(3T) 名称 pthread_mutex_lock(), pthread_mutex_trylock() − mutexのロックまたはロックの試行 構文 #include <pthread.h> int pthread_mutex_lock( pthread_mutex_t *mutex ); int pthread_mutex_trylock( pthread_mutex_t *mutex ); パラメータ mutex ロックするmutexへのポインター。 説明 pthread_mutex_lock() 関数は、mutexオブジェクトの mutex をロックします。呼び出しスレッドがmutexを取得 する方法は、mutexの type 属性で異なります。この操作は、 mutex で示されるmutexオブジェクトをロック状態 にし、その所有者を呼び出しスレッドにして戻ります。 mutexの type 属性が PTHREAD_MUTEX_NORMAL の場合、デッドロックの検出は行われません。 mutexを再 度ロックしようとすると、デッドロックが発生します。スレッドが、自分でロックしていないmutexやロック 解除されているmutexのロックを解除しようとすると、結果は不定になります。 mutex の type 属性が PTHREAD_MUTEX_ERRORCHECK の場合、 mutex の所有者情報は保持されます。ス レッドが、すでにロック済みのmutexを再度ロックしようとすると、エラーが返されます。スレッドが、自分 でロックしていないmutex やロック解除されているmutex のロックを解除しようとすると、エラーが返されま す。 mutex の type 属性が PTHREAD_MUTEX_RECURSIVE の場合、mutex の所有者情報とロックカウントが保持 されます。スレッドが最初にmutexの取得に成功すると、countフィールドに1が設定されます。スレッドがこ のmutexをロックするたびに、countフィールドは1ずつ増やされます。スレッドがmutexのロックを解除するた びに、countフィールドは1ずつ減らされます。 countフィールドが0に達すると、mutexは、他のスレッドから 取得できるようになります。スレッドが、自分でロックしていないmutex をロック解除しようとすると、エ ラーが返されます。 mutex の type 属性が PTHREAD_MUTEX_NO_OWNER_NP の場合、デッドロックの検出は行われません。 mutex を再度ロックしようとすると、デッドロックになります。スレッドは、自分でロックしていない mutex をロック解除することができます。ロック解除されている mutex のロックを解除しようとすると、結果は不定 になります。 mutex の type 属性が PTHREAD_MUTEX_DEFAULT の場合、mutex を再帰的にロックしようとすると、結果 は不定になります。スレッドが、自分でロックしていない mutex をロック解除しようとすると、結果は不定で HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-231 pthread_mutex_lock(3T) pthread_mutex_lock(3T) す。ロックされていない mutex のロックを解除しようとすると、結果は不定です。 関数 pthread_mutex_trylock() は、最初の試みで mutex で示されるmutexオブジェクトを取得することができな い場合には、呼び出しがエラーで即座に戻るという点を除いては、 pthread_mutex_lock() 関数とまったく同じ です。 mutexを待っているスレッドにシグナルが配信された場合、シグナルハンドラーから戻ると、スレッドは中断 がなかったかのようにmutex待機を再開します。 戻り値 正常終了すると pthread_mutex_lock() と pthread_mutex_trylock() は0を返します。それ以外の場合、エラーの 内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_mutex_lock() と pthread_mutex_trylock() 関数は、該当するエラー番号を 返します。 [EINVAL] mutex が PTHREAD_PRIO_PROTECT のmutex であり、呼び出し元の優先順位が、 mutex の最高優先順位より高い場合。 以下の現象が発生した場合、 pthread_mutex_trylock() 関数は、該当するエラー番号を返します。 [EBUSY] mutex が、別のスレッドによって現在ロックされている場合。 以下の現象が発生した場合、 pthread_mutex_lock() と pthread_mutex_trylock() 関数は、該当するエラー番号を 返します。 [EAGAIN] mutex の再帰的ロックの最大値を超えたので、 mutex が取得できなかった場合。この エラーは、HP-UXでは検出されません。 [EINVAL] mutex が、初期化されたmutexではない場合。 [EFAULT] mutex パラメータが、無効なアドレスを指している場合。 以下のいずれかのエラーが発生した場合、 pthread_mutex_lock() 関数は該当するエラー番号を返します。 [EDEADLK] 現在のスレッドが、mutex をすでに所有している場合。このエラーは、HP-UX では PTHREAD_MUTEX_ERRORCHECK のmutexでのみ発生します。 警告 再帰的なmutexは、スレッドをデッドロックさせることなく、同じスレッドによって一度以上ロックさせられ ます。再帰的なmutexの所有者がmutexをロックしようと試みる回数があまりにも多くなると、結果が不定にな る可能性があります。 著者 pthread_mutex_lock() と pthread_mutex_trylock() は、IEEE POSIX P1003.1c規格とX/Openから派生しました。 Section 3-232 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_mutex_lock(3T) pthread_mutex_lock(3T) 参照 pthread_mutex_init(3T), pthread_mutex_destroy(3T), pthread_mutex_unlock(3T) 標準準拠 pthread_mutex_lock(): POSIX 1003.1c. pthread_mutex_trylock(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-233 pthread_mutex_unlock(3T) pthread_mutex_unlock(3T) 名称 pthread_mutex_unlock() − mutexのロックの解除 構文 #include <pthread.h> int pthread_mutex_unlock( pthread_mutex_t *mutex ); パラメータ mutex ロックを解除するmutexへのポインタ。 説明 関数 pthread_mutex_unlock() は、 mutex で示されるmutexのロックを解除するため、mutexの所有者によって呼 び出されます。 mutexの解放の詳細は、mutexの type 属性で異なります。 PTHREAD_MUTEX_NORMAL また は PTHREAD_MUTEX_DEFAULT のmutex の場合、mutex のロックが解除されていたり、mutex の現在の所有 者 で は な い ス レッ ド か ら pthread_mutex_unlock() が 呼 び 出 さ れ た り す る と、 結 果 は 不 定 で す。 PTHREAD_MUTEX_RECURSIVE または PTHREAD_MUTEX_ERRORCHECK mutexの場合、mutexのロック が解除されていたり、mutexの現在の所有者ではないスレッドから pthread_mutex_unlock() が呼び出されたり すると、エラーが戻されます。 PTHREAD_MUTEX_RECURSIVE mutexの場合、別のスレッドがmutexをロックできるようにするには、mutex をロックしたのと同じ回数だけ、所有者が pthread_mutex_unlock() を呼び出さなければなりません。 pthread_mutex_unlock() でmutexを解放する際、 mutex でブロックされたスレッドが存在すると、次にmutexを 取得するスレッドは、スケジューリング方針で決まります。 戻り値 正常終了すると pthread_mutex_unlock() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を 返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_mutex_unlock() 関数は、該当するエラー番号を返します。 [EINVAL] mutex が、初期化されたmutexではない場合。 [EPERM] 呼び出しスレッドが mutex を所有していない場合。 HP-UX では、このエラーは、 PTHREAD_MUTEX_FAST または PTHREAD_MUTEX_DEFAULT のmutex では発生 しません。 [EFAULT] mutex パラメータが、無効なアドレスを指している場合。 著者 pthread_mutex_unlock() は、IEEE POSIX P1003.1c標準とHP拡張機能から派生しました。 Section 3-234 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_mutex_unlock(3T) pthread_mutex_unlock(3T) 参照 pthread_mutex_init(3T), pthread_mutex_destroy(3T), pthread_mutex_lock(3T), pthread_mutex_trylock(3T). 標準準拠 pthread_mutex_unlock(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-235 pthread_once(3T) pthread_once(3T) 名称 pthread_once() − 初期化ルーチンの一度だけの呼び出し 構文 #include <pthread.h> pthread_once_t once_control = PTHREAD_ONCE_INIT; int pthread_once( pthread_once_t *once_control, void (*init_routine)(void) ); パラメータ once_control ア プ リ ケー ショ ン で 一 度 だ け 実 行 さ れ る 初 期 化 関 数 init_routine() に 関 連 付 け る、 once_controlオブジェクトへのポインター。 init_routine 一度だけ実行される初期化ルーチン。このルーチンは、このパラメータやこれに関連付 けられた once_control が pthread_once() に何度渡されても、ただ一度だけ呼び出されま す。 説明 pthread_once() 関数は、アプリケーションで init_routine() が1回だけ呼び出されることを保証します。この関 数は、 init_routine() が pthread_once() を介して以前に呼び出されたか判断するために、 once_control オブジェ クトを使用します。 最初に once_control と init_routine() を指定して pthread_once() を呼び出すと、引き数無しで init_routine() が 呼び出されます。それ以降、同じ once_control で pthread_once() を呼び出しても、 init_routine() は呼び出され ません。 pthread_once() から戻った時には、 init_routine() が (前回の呼び出しの場合でも今回の呼び出しの場 合でも) 呼び出されたことを保証されます。 マクロ PTHREAD_ONCE_INIT は、once control ブロックを静的に初期化するのに使用されます。この初期化 は、 pthread_once() 呼び出しの前に行われなければなりません。 pthread_once() は、取り消し地点ではありません。しかし、呼び出し元にとっては init_routine() は取り消し地 点であるかもしれません。 init_routine() を実行するスレッドが取り消された場合、 once_control 引き数には init_routine() が呼び出されなかったことを示すステータスが設定されます ( pthread_cancel(3T) を参照してくだ さい)。その次に once_control を指定して pthread_once() 関数が呼び出されると、 init_routine() 関数が呼び出 されます。 once_control に自動記憶領域を指定した場合、または PTHREAD_ONCE_INIT で初期化されない場合の、 pthread_once() の動作は不定です。 戻り値 正常終了すると pthread_once() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 Section 3-236 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_once(3T) pthread_once(3T) エラー 以下の条件の場合、 pthread_once() 関数は、該当するエラー番号を返します。 [EINVAL] once_control または init_routine が無効の場合。 例 いくつかのモジュールが動的に初期化されるよう設計される場合、例としては、モジュールの最初の関数が実 行されるとき、グローバルな初期化を行います。この処理は、単一スレッドのプログラムでは、一般に次のよ うに実現されます。 static int initialized = FALSE; extern void initialize(); if (!initialized) { initialize(); initialized = TRUE; } 省略 マルチスレッド化されたプロセスでは、単純な初期化フラグでは十分ではないので、フラグを他のスレッドに よる変更から保護しなければなりません。つまりこのフラグは、一度だけ初期化しなければならないmutexで 保護する必要があります。マルチスレッドプログラムでは、次のように初期化を行う必要があります。 static pthread_once_t once_control = PTHREAD_ONCE_INIT; extern void initialize(); (void)pthread_once(&once_control, initialize); 省略 著者 pthread_once() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_create(3T) 標準準拠 pthread_once(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-237 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) 名称 pthread_processor_bind_np(), pthread_num_processors_np(), pthread_num_ldomprocs_np(), pthread_spu_to_ldom_np(), pthread_processor_id_np(), pthread_ldom_bind_np(), pthread_num_ldoms_np(), pthread_ldom_id_np(), pthread_pset_bind_np() − 使用できるプロセッサの数の調査、プロセッサへのスレッドのバインド、プロセッサ ID の調査、使用できるローカリティドメインの数の調査、ローカリティドメインへのスレッドのバインド、 ローカリティドメイン ID の調査、スレッドのプロセッサセットバインディングの変更 構文 #include <pthread.h> int pthread_num_processors_np(void); int pthread_num_ldoms_np(void); int pthread_num_ldomprocs_np( int *answer, pthread_ldom_t ldom ); int pthread_processor_id_np( int request, pthread_spu_t *answer, pthread_spu_t spu ); int pthread_ldom_id_np( int request, pthread_ldom_t *answer, pthread_ldom_t ldom ); int pthread_spu_to_ldom_np( pthread_spu_t spu, pthread_ldom_t *ldom ); int pthread_processor_bind_np( int request, pthread_spu_t *answer, pthread_spu_t spu, pthread_t tid ); int pthread_ldom_bind_np( Section 3-238 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) pthread_ldom_t *answer, pthread_ldom_t ldom, pthread_t tid ); int pthread_pset_bind_np( psetid_t *answer, psetid_t pset, pthread_t tid ); パラメータ request answer このパラメータは、これらの関数で行われる正確な機能を規定します。 このパラメータは、値が返される出力パラメータです。 answer の意味は、 request パラ メータによって異なります。 spu このパラメータは、一部の request で使用する spu の値を指定します。 ldom このパラメータは、一部の request で使用するローカリティドメインの値を指定します。 tid このパラメータは、一部の request で使用するスレッド ID の値を指定します。 pset このパラメータは、一部の request で使用するプロセッサセットの値を指定します。 特記事項 この関数の機能の多くは、対象となるハードウェアに大きく依存します。そのため、これらの関数を使用する アプリケーションは、アーキテクチャまたは実装方法の異なるシステムへの移植が困難です。 一部のハードウェアプラットフォームでは、オンラインでのプロセッサの追加と削除をサポートしています。 この機能により、システムの実行中にプロセッサとローカリティドメインを追加または削除することができま す。動的に出現または消失するプロセッサ ID とローカリティドメイン ID を処理できるようなアプリケーショ ンを作成する必要があります (たとえば、システム内のすべてのプロセッサの ID を取得してからしばらくし て、アプリケーションはこれらのプロセッサの1つにスレッドをバインドしようとします。そのプロセッサが 削除されている場合に、これらの関数はエラーを返します)。 プロセッサ ID とローカリティドメイン ID が数値順に存在するとは限りません。 ID の順次リストには、欠落 した番号がある場合があります。一部のプラットフォームではプロセッサをオンラインで追加および削除でき るため、これらのインタフェースを使用して得た ID が後になって無効となることがあります。同様に、シス テムにおけるプロセッサの数とローカリティドメインの数も、プロセッサが追加または削除されることで変化 する可能性があります。 プロセッサセットは、アプリケーションを実行できるプロセッサを、指定したプロセッサのグループに制限し ます。これらの関数は、呼び出し元アプリケーションが利用できるプロセッサの情報およびローカリティドメ インの情報を返します。システムワイドのトポロジ情報については、 mpctl(2) を参照してください。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-239 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) 説明 これらの関数を使うことで、アプリケーションで利用できるプロセッサの数とローカリティドメインの数を調 べたり、特定のプロセッサまたはローカリティドメインで実行させるスレッドを割り当てたりすることができ ます。 ローカリティドメインは、システムの基本的な構築ブロックを構成する、互いに関連し合うプロセッサ、メモ リー、および周辺リソースの集まりです。1つのローカリティドメインに含まれているメモリーに対する待ち 時間は、そのローカリティドメインにあるすべてのプロセッサと周辺機器で同じです。 プロセッサセットを使用すると、アプリケーションのスケジューリング割り当てドメインを別のものにするこ とができます。プロセッサセットは、そのプロセッサセットに割り当てられたアプリケーションが排他的に使 用するプロセッサのグループです (詳細は、 pset_create(2) を参照)。システムでプロセッサセット機能が有効に なっていて使用できるかどうかを確認するには、 _SC_PSET_SUPPORT を指定した sysconf() を使用します。 トポロジ情報 pthread_num_processors_np() 関数は、呼び出し元スレッドのプロセッサセット内にあるプロセッサの数を返し ます。 pthread_num_ldoms_np() 関数は、呼び出し元スレッドのプロセッサセット内にあるローカリティドメインの数 を返します。 pthread_num_ldomprocs_np() 関数は、ローカリティドメイン ldom から呼び出し元スレッドのプロセッサセッ トに割り当てられているプロセッサの数を返します。返される値は、 ldom 内にあるプロセッサの総数より少 ない場合があります。プロセッサ数は、 answer パラメータに返されます。 pthread_processor_id_np() 関数は、システムの特定のプロセッサのプロセッサIDを取得します。プロセッサID は、 answer に返されます。 request パラメータは、行われるべき具体的な機能を規定します。これは、下記の いずれかになります。 PTHREAD_GETFIRSTSPU_NP この要求は、呼び出し元スレッドのプロセッサセット内にある最初のプロセッサの ID を、 answer パラメータに保存します。 spu 引き数は無視されます。 PTHREAD_GETNEXTSPU_NP この要求は、呼び出し元スレッドのプロセッサセット内にある、 spu の次のプロセッサの ID を、 answer パラメータに保存します。 通常は、最初の spu を取得するために PTHREAD_GETFIRSTSPU_NP が呼び出されます。そ の後、残りの spu の ID を取得するために、 PTHREAD_GETNEXTSPU_NP がループ中で (呼 び出しが [EINVAL] を返すまで) 呼び出されます。 PTHREAD_GETCURRENTSPU_NP この要求は、スレッドが現在実行されているプロセッサの ID を、 answer パラメータに保存し ます。 spu 引き数は無視されます。注意: このオプションは、現在呼び出し元が動作している Section 3-240 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) プロセッサを返します。呼び出し元のプロセッサ割り当てを返すのではありません。 この情報は、スケジューラが呼び出し元を別のプロセッサに切り替えた段階で使えなくなりま す。したがってこの呼び出しの終了直後に無意味となることもあります。 pthread_ldom_id_np() 関数は、システム上の特定のローカリティドメインのローカリティドメイン ID を取得 します。このローカリティドメイン ID は answer に返されます。 request パラメータは実行する正確なアク ションを決定します。以下のいずれかになります。 PTHREAD_GETFIRSTLDOM_NP この要求は、呼び出し元スレッドのプロセッサセット内にある最初のローカリティドメインの ID を、 answer パラメータに保存します。 ldom 引き数は無視されます。 PTHREAD_GETNEXTLDOM_NP この要求は、呼び出し元スレッドのプロセッサセット内で、 ldom の次にあるローカリティド メインの ID を answer パラメータに保存します。 通常は、最初の ldom を決定するために PTHREAD_GETFIRSTLDOM_NP が呼び出されま す。そのあとで、 PTHREAD_GETNEXTLDOM_NP が ( 呼び出しが [EINVAL] を返すまで ) ループで呼び出されて、その他の ldom の ID を決定します。 pthread_spu_to_ldom_np() 関数は、 spu によって指定されたプロセッサを含んでいるローカリティドメインの ID を返します。ローカリティドメイン ID は ldom に返されます。 プロセッサセットバインディング すべてのスレッドは、プロセッサセットにバインドされ (または対応付けられ) ており、そのセット内のプロ セッサ上で実行されます。 pthread_pset_bind_np() 関数を使用することで、スレッドのバインディング先を他 のプロセッサセットに変更することができます。ただし、バインディング先を他のプロセッサセットに変更し ようとするスレッドには、そのプロセッサセットに対する EXEC バーミッションが必要です ( 詳細は、 pset_bind(2) を参照)。また、スレッドのプロセッサセットバインディングを変更できるのは、そのスレッドの 競合範囲が PTHREAD_SCOPE_SYSTEM になっている場合だけです。 tid で指定するスレッドは、バインディングを変更する対象のスレッドです。 pset パラメータには、 tid の新し いバインド先プロセッサセットを指定します。スレッドの新しいバインド先プロセッサセットが、 answer に返 されます。 tid として PTHREAD_SELFTID_NP を指定することにより、呼び出し元スレッドを対象スレッドにすること ができます。 pset として PTHREAD_PSETNOCHANGE_NP を指定することにより、スレッドに割り当てられ ている現在のプロセッサセットを読み取ることができます。 プロセッサバインディング プロセッサバインディングは、キャッシュスラッシングを防止したり、異なるプロセッサ上でスレッドを並列 に実行させたりするために、あるアプリケーションでの性能を増大させる、という目的での使用法を想定され ています。アプリケーションの正確さを確実にするために使用されるものではありません。特に協調スレッド HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-241 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) は、同期機構 (mutex など) の代りとしてプロセッサ割り当てに依存すべきではありません。 プロセッサバインディングとローカリティドメイン バインディングは互いに排他的であり、常にどちらか一方 だけが有効になります。ローカリティドメイン バインディングが有効になっている場合は、そのローカリティ ドメイン内の任意のプロセッサでターゲットを実行することができます。 一部のプラットフォームにはプロセッサをオンラインで追加および削除できる機能があるため、プロセッサが 使用できなくなる場合があります。その場合には、該当プロセッサにバインドしているスレッドは、同じバイ ンディングタイプの別のプロセッサに再バインドされます。 pthread_processor_bind_np() 関数は、特定のプロセッサにスレッドを結び付けます。 tid で指定されたスレッ ドは、結び付けを変更させられる対象スレッドです。 spu パラメータは、 tid の新しいプロセッサの結び付け を指定します request パラメータは、行われるべき具体的な機能を規定します。これは、下記のいずれかにな ります。 PTHREAD_BIND_ADVISORY_NP この呼び出しは 勧告です。この要求は、プロセッサ spu にスレッド tid を割り当てます。新規 プロセッサ割り当てが answer に返されます。 tid PTHREAD_SELFTID_NP を使用して、呼び出し元スレッドを参照することができます。 spu PTHREAD_SPUNOCHANGE_NP を渡して、現在の割り当てを読み取ることができます。 spu PTHREAD_SPUFLOAT_NP を 使 用 し て、 任 意 の プ ロ セッ サ 割 り 当 て を 解 除 し、 ス ケ ジュール時にスレッドを実行するプロセッサを実装システムが選択できるようにします。これ により、実装システムが選択する任意のプロセッサでスレッドを実行させることができます。 この要求は、勧告にすぎません。スレッドのスケジューリング方針がこのプロセッサ割り当て と対立する場合、プロセッサ割り当てよりもスケジューリング方針が優先します。たとえば、 あるプロセッサで新しく実行するスレッドを選択しようとしているとき、実行待ち行列で優先 順位の最も高い SCHED_FIFO スレッドが異なるプロセッサに結び付けられていても、そのス レッドは、自分が結びついているプロセッサを待つのではなく、使用可能なそのプロセッサで 実行されます。 PTHREAD_BIND_FORCED_NP この要求は、スレッドに対するプロセッサの結び付けが、スケジューリング方針より優先する という点を除いては、 PTHREAD_BIND_ADVISORY_NP とまったく同じです。たとえば、あ るプロセッサで新しく実行するスレッドを選択をしようとしているとき、実行待ち行列で優先 順位の最も高い SCHED_FIFO スレッドが異なるプロセッサに結びついていると、そのスレッ ドは使用可能なプロセッサには選択されません。そのスレッドは、 結び付けられたプロセッサ が使用可能になるまで待ちます。使用可能なプロセッサは、スケジューリング方針を完全に遵 守するのではなく、低い優先順位のスレッドを実行するよう選択します。 注意: スレッドを特定のプロセッサに結び付けると、そのスレッドのスケジューリング割り当て領域サイズが 1に変わります。スレッドを浮動させ、システムが選択するどのプロセッサにもスケジューリングできるよう Section 3-242 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) にすると、スレッドのスケジューリング割り当て領域サイズは1より大きい値に設定されます (一般に、シス テムのプロセッサの数と同じになります)。 ローカリティドメイン バインディング ローカリティドメイン バインディングは、キャッシュスラッシングを防止したり、スレッドを複数のプロセッ サで並列実行してアプリケーションのパフォーマンスを向上させるために使われるものであり、アプリケー ションの正確さを保証するためのものではありません。とくに協調スレッドは、同期機構 (mutex など) の代わ りとしてローカリティドメイン割り当てに依存すべきではありません。 プロセッサバインディングとローカリティドメイン バインディングは互いに排他的であり、常にどちらか一方 だけが有効になります。ローカリティドメイン バインディングが有効になっている場合は、そのローカリティ ドメイン内の任意のプロセッサでターゲットを実行することができます。 一部のプラットフォームにはプロセッサをオンラインで追加および削除できる機能があるため、ローカリティ ドメインが使用できなくなる場合があります。ローカリティドメイン内の最後のプロセッサが削除されると、 該当ローカリティドメインにバインドされているスレッドは別のローカリティドメインに再バインドされま す。 pthread_ldom_bind_np() 関数は、スレッドを特定のローカリティドメインにバインドします。新規のローカリ ティドメイン バインディングは、 answer に返されます。 tid に よっ て 指 定 さ れ た ス レッ ド は、 バ イ ン ディ ン グ が 変 更 さ れ る ター ゲッ ト ス レッ ド で す。 値 PTHREAD_SELFTID_NP を使用して、呼び出し元スレッドを参照することができます。 ldom パ ラ メー タ は、 tid に 対 し て 新 規 ロー カ リ ティ ド メ イ ン バ イ ン ディ ン グ を 指 定 し ま す。 値 PTHREAD_LDOMNOCHANGE_NP を 渡 し て、 現 在 の 割 り 当 て だ け を 読 み 取 る こ と が で き ま す。 値 PTHREAD_LDOMFLOAT_NP を渡して任意のローカリティドメイン割り当てを解除し、スレッドが実行され るローカリティドメインを実装システムが選択できるようにします。これによって、スレッドは実装システム が選択した任意のプロセッサで実行できます。それ以外の場合は、 ldom が、 tid にバインドされるローカリ ティドメインの ID を指定します。 ローカリティドメイン バインディングは、スケジューリング方針よりも優先されます。たとえば、プロセッサ が別のスレッドを実行するよう選択できるときに、実行待ち行列で最も優先順位の高い SCHED_FIFO スレッ ドが別のローカリティドメインにバインドされている場合、使用可能なプロセッサはそのスレッドを選択しま せん。そのスレッドは、 目的のローカリティドメイン内のプロセッサが使用可能になるまで待機します。使用 可能になったプロセッサは、スケジューリング方針に従うのではなく、優先順位の低いスレッドを実行するよ うに選択します。 戻り値 pthread_num_processors_np() は、常にシステムのプロセッサの数を返します。失敗することはありません。 pthread_num_ldoms_np() は常に、システム上のローカリティドメイン数を返します。これは失敗することはあ りません。 正 常 終 了 し た 時 点 で、 pthread_processor_id_np() 、 pthread_ldom_id_np() 、 pthread_spu_to_ldom_np() 、 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-243 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) pthread_num_ldomprocs_np() 、 pthread_processor_bind_np() 、 pthread_pset_bind_np() 、 お よ び pthread_ldom_bind_np() はゼロを返します。それ以外の場合は、エラーを示すためにエラー番号が返されます (errno 変数は使用しません)。 注意: pthread_processor_bind_np() および pthread_ldom_bind_np() が answer フィールドに -1 以外の負数を返 して、正常終了であることを示す場合があります。戻り値の定義については、 mpctl(2) を参照してください。 エラー 以 下 の 現 象 が 発 生 し た 場 合、 pthread_processor_id_np(), pthread_ldom_id_np(), pthread_spu_to_ldom_np(), pthread_num_ldomprocs_np(), pthread_processor_bind_np(), pthread_pset_bind_np(), お よ び pthread_ldom_bind_np() 関数は、該当するエラー番号を返します。 [EINVAL] request パラメータに、無効な値が含まれている場合。 [EINVAL] spu パラメータまたは ldom パラメータに無効な ID が含まれている場合。 [EINVAL] request パラメータが PTHREAD_GETNEXTSPU_NP であり、 spu が最後のプロセッ サを指している場合。 [EINVAL] request パラメータが PTHREAD_GETNEXTLDOM_NP であり、 ldom が最後のロー カリティドメインを識別する場合。 [EINVAL] [ESRCH] answer で指定された値が無効である場合。 現在のプロセスで、 tid で指定されたスレッドIDに合致するスレッドが見つからない 場合。 [EPERM] request が PTHREAD_BIND_ADVISORY_NP あ る い は PTHREAD_BIND_ADVISORY_NP であり、 spu が PTHREAD_SPUNOCHANGE_NP でなく、呼び出し元 が、スレッドの結び付けを特定のプロセッサに変更するための適切なパーミッション を持たない場合。 [EPERM] pthread_pset_bind_np() 関数で、スレッド tid が、 pset にバインドするために必要な パーミッションを持っていない場合。 著者 pthread_num_processors_np(), pthread_num_ldoms_np(), pthread_num_ldomprocs_np(), pthread_spu_to_ldom_np(), pthread_processor_id_np(), pthread_ldom_id_np(), pthread_processor_bind_np(), pthread_ldom_bind_np() および pthread_pset_bind_np() は、HP で開発されました。 参照 sleep(3C), rtsched(2), mpctl(2), pset_create(2), pset_bind(2), sysconf(2) 標準準拠 pthread_num_processors_np(): なし pthread_num_ldoms_np(): なし Section 3-244 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 pthread_processor_bind_np(3T) pthread_processor_bind_np(3T) pthread_num_ldomprocs_np(): なし pthread_spu_to_ldom_np(): なし pthread_processor_id_np(): なし pthread_ldom_id_np(): なし pthread_processor_bind_np(): なし pthread_ldom_bind_np(): なし pthread_pset_bind_np(): なし HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-245 pthread_resume_np(3T) pthread_resume_np(3T) 名称 pthread_resume_np(), pthread_continue(), pthread_suspend() − スレッドの実行の再開、スレッドの実行の継続、ス レッドの実行の一時停止 構文 #include <pthread.h> int pthread_continue( pthread_t thread ); int pthread_resume_np( pthread_t thread, int flags ); int pthread_suspend( pthread_t thread ); パラメータ thread 実行を一時停止または再開するスレッド。 flags thread_resume_np() で使用するフラグ。有効な値は、次のとおりです。 PTHREAD_COUNT_RESUME_NP 対象スレッドの一時停止カウントを1つ減らします。対象スレッドが一時停止され ており、一時停止カウントが1より大きい場合、スレッドは実行を再開しません。 PTHREAD_FORCE_RESUME_NP 対象スレッドの一時停止カウントを0に設定します。その一時停止カウントが1よ り大きいとしても、対象スレッドは実行を再開します。 説明 pthread_suspend() 関数は、 thread で指定された対象スレッドを一時的に停止させます。対象スレッドは、す ぐに (その瞬間に) 一時停止しない可能性があります。 pthread_suspend() 関数が正常終了して戻ると、 thread はもう実行を停止しています。いったんスレッドが一時停止すると、それ以後の pthread_suspend() 関数呼び 出しでは、スレッドごとの一時停止カウントが増加され、呼び出しは即座に戻ります。 thread に呼び出しスレッドを指定して pthread_suspend() を呼び出すこともできます。この場合、呼び出しス レッ ド は pthread_suspend() 関 数 の 実 行 中 に 一 時 停 止 し、 別 の ス レッ ド が、 thread に対して pthread_resume_np() または pthread_continue() 関数を呼び出した後でなければ関数から戻りませんので、ご注 意ください。 pthread_continue() 関数は、対象スレッド thread の実行を再開します。 pthread_suspend() を複数回呼び出して thread が一時停止している場合でも、 thread の実行を再開するのに必要なのは、1回の pthread_continue() の Section 3-246 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_resume_np(3T) pthread_resume_np(3T) 呼び出しだけです。一時停止していない対象スレッドに pthread_continue() を呼び出しても、何の影響もな く、 エ ラー も 返 さ れ ま せ ん。 pthread_continue() の 呼 び 出 し は、 flags パ ラ メー タ に PTHREAD_FORCE_RESUME_NP を指定して pthread_resume_np() を呼び出すのと同じです。 pthread_resume_np() 関 数 は、 thread で 指 定 さ れ た 対 象 ス レッ ド の 実 行 を 再 開 し ま す。 flags 引 き 数 が PTHREAD_COUNT_RESUME_NP の場合、対象スレッドの一時停止カウントが1つ減ります。 flags 引き数が PTHREAD_FORCE_RESUME_NP の場合、対象スレッドの一時停止カウントは0に設定されます。対象ス レッドの一時停止カウントが0に達すると、対象スレッドは実行を継続できます。一時停止していない対象ス レッドに pthread_resume_np() を呼び出しても、何の影響もなく、エラーも返されません。 戻り値 正常終了すると pthread_continue()、 pthread_suspend()、 pthread_resume_np() は0を返します。それ以外の 場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_suspend() 関数は、該当するエラー番号を返します。 [ESRCH] [EDEADLK] 対象スレッド thread が現在のプロセス中に存在しない場合。 対象スレッド thread が、プロセスで最後に実行するスレッドの場合。操作すると、プ ロセスがデッドロックする結果になります。 以下の現象が発生した場合、 pthread_continue() と pthread_resume_np() 関数は、該当するエラー番号を返し ます。 [ESRCH] 対象スレッド thread が現在のプロセス中に存在しない場合。 [EINVAL] flags に指定された値が無効の場合。 アプリケーション使用法 この機能により、マルチスレッドプロセスのすべての活動を一時的に停止し、単一スレッド制御にすることが できます。プロセスが単一スレッドであるとき、アドレス空間に変更はなく、プロセスに対する一貫した概観 を得られます。一例に、ガベージコレクションのための使用があります。ガベージコレクタはプロセス内で非 同期に実行し、実行の間、プロセスには変更がないと想定します。 スレッドを一時停止すると、アプリケーションに悪い影響が及ぶ可能性があります。 mutex または読み書き ロックなどの重大なリソースを持っているスレッドを一時停止すると、スレッドが再開するまでアプリケー ションが止まる可能性があり、デッドロックさえ発生するかもしれません。スレッドが一時停止している間、 同じリソースを取得しようとしている可能性のある他のスレッドを、停止スレッドが再開するまでブロックし なければなりません。アプリケーションの動作によっては、この結果デッドロックが発生することさえありま す。アプリケーションプログラマの方には、a) 非同期シグナルに対して害のない関数を呼び出すスレッドのみ を一時停止する、または b) 一時停止したスレッドが取得した可能性のあるリソースを、一時停止させているス レッドが取得しようとしないことを確実にする、のどちらかの方法をとるようお奨めします。注意: これに は、ライブラリが取得する可能性のあるリソースも含まれます。 pthread_suspend()、 pthread_continue()、 pthread_resume_np() 関数は、スレッド同期の目的で確実に使用する HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-247 pthread_resume_np(3T) pthread_resume_np(3T) ことはできません。その代わりに、mutex、セマフォ、読み書きロック、条件変数などの基本的な同期処理関 数を使用する必要があります。 著者 pthread_suspend() と pthread_continue() は、X/Openが開発しました。 pthread_resume_np() は、HPが開発しました。 参照 pthread_create(3T) 標準準拠 pthread_continue(): X/Open. pthread_resume_np(): なし pthread_suspend(): X/Open. Section 3-248 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 pthread_rwlockattr_getpshared(3T) pthread_rwlockattr_getpshared(3T) 名称 pthread_rwlockattr_getpshared(), pthread_rwlockattr_setpshared() − プロセス共有属性の取得と設定 構文 #include <pthread.h> int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared); int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *pshared); パラメータ attr pshared 属性の設定または取得の対象とする読み書きロック属性オブジェクトへのポインター。 このパラメータは、 プロセス共有属性の新しい値を指定する (set 関数) か、 attr の プロセ ス共有属性が返されるメモリー領域を指します (get 関数)。 説明 属性オブジェクト attr は、これらの関数を呼び出す前に、関数 pthread_rwlockattr_init() で事前に初期化して おかなければなりません。 読み取り書き込みロックは、プロセス内のスレッドによってのみ使用することも、複数のプロセスのスレッド 間で共有することもできます。読み書きロック属性オブジェクトの プロセス共有属性は、読み書きロックを使 用できるスレッドの範囲を規定します。 プロセス共有属性の有効な値は、次のとおりです。 PTHREAD_PROCESS_SHARED このオプションにより、読み書きロックは、読み書きロックが割り当てられているメモリーに アクセスできる任意のスレッドによって操作されるようになります。アプリケーションは、複 数のプロセスがアクセスできるメモリーへの読み書きロックの割り当てを処理しなければなり ません。 PTHREAD_PROCESS_PRIVATE 読み書きロックは、読み書きロックを初期化したスレッドと同じプロセス内で作成されたス レッドによってのみ、操作されます。異なるプロセスのスレッドがそのような読み書きロック を操作しようと試みた場合、動作は不定です。 プロセス共有のデフォルト値は PTHREAD_PROCESS_PRIVATE です。 pthread_rwlockattr_setpshared() は、初期化済みの属性オブジェクト attr の プロセス共有属性を設定します。 attr の新しい プロセス共有属性値は、 pshared パラメータで指定された領域に設定されます。 pthread_rwlockattr_getpshared() は、読み書きロック属性オブジェクト attr から プロセス共有属性値を取得し ます。 attr の プロセス共有属性値は、 pshared パラメータに返されます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-249 pthread_rwlockattr_getpshared(3T) pthread_rwlockattr_getpshared(3T) 戻り値 正常終了すると pthread_rwlockattr_getpshared() と pthread_rwlockattr_setpshared() は0を返します。それ以 外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_rwlockattr_getpshared() と pthread_rwlockattr_setpshared() 関数は、該当するエ ラー番号を返します。 [ENOSYS] _POSIX_THREAD_PROCESS_SHARED が未定義で、これらの関数がサポートされて いない場合。 以下の条件の場合、 pthread_rwlockattr_getpshared() と pthread_rwlockattr_setpshared() 関数は、該当するエ ラー番号を返します。 [EINVAL] attr で指定された値が無効である場合。 [EINVAL] pshared で指定された値が無効である場合。 [EINVAL] 値 pshared が無効なアドレスを指している場合。 警告 PTHREAD_PROCESS_SHARED で定義された プロセス共有属性で読み書きロックを作成した場合、協調プロ セスは、読み書きロックが割り当てられているメモリーにアクセスできる必要があります。 著者 pthread_rwlockattr_setpshared() と pthread_rwlockattr_getpshared() は、X/Openが開発しました。 参照 pthread_create(3T), pthread_rwlockattr_init(3T), pthread_rwlock_init(3T) 標準準拠 pthread_rwlockattr_setpshared(): X/Open. pthread_rwlockattr_getpshared(): X/Open. Section 3-250 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_rwlockattr_init(3T) pthread_rwlockattr_init(3T) 名称 pthread_rwlockattr_init(), pthread_rwlockattr_destroy() − 読み書きロック属性オブジェクトの初期化と消去 構文 #include <pthread.h> int pthread_rwlockattr_init( pthread_rwlockattr_t *attr ); int pthread_rwlockattr_destroy( pthread_rwlockattr_t *attr ); パラメータ attr 初期化または消去する読み書きロック属性オブジェクトへのポインター。 説明 pthread_rwlockattr_init() は、読み書きロック属性オブジェクト attr のすべての属性を、デフォルト値で初期化 します。属性オブジェクトは、読み書きロックを詳細に説明するものであり、読み書きロック初期化関数に渡 されます。 読み書きロック属性オブジェクトを使用して読み書きロックを初期化すると、各属性の値によって、新しい読 み書きロックの特性が決まります。属性オブジェクトは、オブジェクト初期化の際の追加パラメータの役割を 果たします。 読み書きロック属性オブジェクトを使用して1つ以上の読み書きロックを初期化した後では、属性オブジェク トに影響するどのような関数も、以前に初期化された読み書きロックには影響ありません。 読み書きロック属性とそのデフォルト値は、次のとおりです。 プロセス共有 デフォルト値は PTHREAD_PROCESS_PRIVATE です。 初期化済みの読み書きロック属性オブジェクトを再度初期化した場合、動作は不定です。 pthread_rwlockattr_destroy() は、読み書きロック属性オブジェクト attr を消去します。消去された読み書き ロック属性オブジェクトは実体が消去され、そのリソースは再生されます。消去された後でオブジェクトを参 照すると、動作は不定になります。読み書きロック属性オブジェクトは、消去されても関数 pthread_rwlockattr_init() で再び初期化できます。 すでに作成済みの読み書きロックは、作成時に使用したロック属性オブジェクトを消去しても影響を受けませ ん。 戻り値 正常終了すると pthread_rwlockattr_init() と pthread_rwlockattr_destroy() は0を返します。それ以外の場合、 エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-251 pthread_rwlockattr_init(3T) pthread_rwlockattr_init(3T) エラー 以下の条件の場合、 pthread_rwlockattr_init() と pthread_rwlockattr_destroy() 関数は、該当するエラー番号を 返します。 [ENOMEM] attr の初期化で使用可能なメモリー領域が足りない場合。 [EINVAL] attr で指定された値が無効の場合。 著者 pthread_rwlockattr_init() と pthread_rwlockattr_destroy() は、X/Openが開発しました。 参照 pthread_create(3T), pthread_rwlockattr_getpshared(3T), pthread_rwlockattr_setpshared(3T), pthread_rwlock_init(3T) 標準準拠 pthread_rwlockattr_init(): X/Open. pthread_rwlockattr_destroy(): X/Open. Section 3-252 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_rwlock_init(3T) pthread_rwlock_init(3T) 名称 pthread_rwlock_init(), pthread_rwlock_destroy() − 読み書きロックの初期化と消去 構文 #include <pthread.h> int pthread_rwlock_init( pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr ); pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER; int pthread_rwlock_destroy( pthread_rwlock_t *rwlock ); パラメータ rwlock attr 初期化または消去する読み書きロックへのポインター。 初期化する読み書きロックの特性を定義する属性オブジェクトへのポインター。ポイン ターが NULL の場合、デフォルトの属性が使用されます。 説明 pthread_rwlock_init() は、 rwlock で参照される読み書きロックを、属性 attr で初期化します。 attrが NULL の 場合、デフォルトの読み書きロック属性が使用されます。初期化が正常終了すると、読み書きロックは初期化 され、ロックも解除された状態になります。すでに初期化済みの読み書きロックオブジェクトを初期化しよう とすると、結果は不定になります。 マクロ PTHREAD_RWLOCK_INITIALIZER は、静的に割り当てられた読み書きロックを初期化するのに使 用できます。その結果は、エラーチェックが行われないことを除いては、 attr パラメータを NULL にして pthread_rwlock_init() を呼び出した場合の動的な初期化と同じです。その際、読み書きロックは、デフォルト の属性で初期化されます。 attr で参照される読み書きロック属性オブジェクトの プロセス共有属性が、 PTHREAD_PROCESS_SHARED に定義されている場合、読み書きロックは、読み書きロックを共有するプロセスがアクセスできるよう割り当 てられてなければなりません。これは、 メモリーマッピング関数 (mmap(2) 参照 ) や 共有メモリー関数 (shmget(2) 参照) で行うことができます。 pthread_rwlock_destroy() は、 rwlock で参照される読み書きロックを消去します。この関数は、 rwlock に無効 な値を設定する可能性があります。消去された読み書きロックは、関数 pthread_rwlock_init() で再度初期化で きます。消去後、読み書きロック関数呼び出しで読み書きロックを参照した場合、結果は不定になります。 読み書きロックの消去は、それを現在使用しているスレッドがないときのみにする必要があります。現在使用 中の読み書きロックを消去すると、結果は不定になります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-253 pthread_rwlock_init(3T) pthread_rwlock_init(3T) 戻り値 正常終了すると pthread_rwlock_init() と pthread_rwlock_destroy() は0を返します。それ以外の場合、エラー の内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_rwlock_init() 関数は、該当するエラー番号を返します。 [EAGAIN] rwlock を初期化するのに必要なリソース (メモリー以外) が使用できない場合。 [ENOMEM] 読み書きロック rwlock の初期化に使用可能なメモリー領域が足りない場合。 [EPERM] 呼び出し元に、操作を実行するための特権がない場合。 以下の条件の場合、 pthread_rwlock_init() 関数は、該当するエラー番号を返します。 [EINVAL] rwlock または attr で指定された値が無効の場合。 [EBUSY] rwlock が、すでに初期化済みの読み書きロックである場合。 以下の条件の場合、 pthread_rwlock_destroy() 関数は、該当するエラー番号を返します。 [EINVAL] rwlock で指定された値が無効の場合。 [EBUSY] rwlock が現在ロックされているか、他のスレッドによって使用されている場合。 警告 読み書きロックの領域は、 pthread_rwlock_init() 呼び出しの前に割り当てられていなければなりません。 attr の プロセス共有属性が PTHREAD_PROCESS_SHARED であり、読み書きロックに割り当てられた領域が協調 スレッドからアクセスできない場合、結果は不定です。 著者 pthread_rwlock_init() と pthread_rwlock_destroy() は、X/Openが開発しました。 参照 pthread_rwlock_rdlock(3T), pthread_rwlock_wrlock(3T), pthread_rwlock_unlock(3T), pthread_rwlock_tryrdlock(3T), pthread_rwlock_trywrlock(3T) 標準準拠 pthread_rwlock_init(): X/Open. pthread_rwlock_destroy(): X/Open. Section 3-254 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_rwlock_rdlock(3T) pthread_rwlock_rdlock(3T) 名称 pthread_rwlock_rdlock(), pthread_rwlock_tryrdlock() − 読み書きロックへの読み取りロックまたはロックの試行 構文 #include <pthread.h> int pthread_rwlock_rdlock( pthread_rwlock_t *rwlock ); int pthread_rwlock_tryrdlock( pthread_rwlock_t *rwlock ); パラメータ rwlock 読み取りでロックする読み書きロックへのポインター。 説明 pthread_rwlock_rdlock() 関数は、 rwlock で参照される読み書きロックオブジェクトに読み取りロックを適用し ます。書き込みプロセスがロックをもたず、ロックでブロックされている書き込みプロセスがない場合、呼び 出しスレッドが読み取りロックを取得します。書き込みプロセスがロックをもたず、ロックを待っている書き 込みプロセスがある場合、呼び出しスレッドがロックを取得するかどうかは規定されません。書き込みプロセ スがロックをもっている場合、呼び出しスレッドは読み取りロックを取得できません。読み取りロックが取得 さ れ な い 場 合、 呼 び 出 し ス レッ ド は、 ロッ ク を 取 得 で き る よ う に な る ま で ブ ロッ ク し ま す ( つ ま り、 pthread_rwlock_rdlock() 呼び出しから戻りません)。呼び出しスレッドが現在 rwlock の書き込みロックを所有 している場合、結果は不定です。 書き込みプロセス不足を回避するため、読み取りプロセスで書き込みプロセスをサポートする実装方式もあり ます。 スレッドは、 rwlock に複数の同時ロックを持つことができます (つまり、 pthread_rwlock_rdlock() 関数が正常 に n 回呼び出せます)。その場合、スレッドは、対応する分のロック解除を実行しなければなりません ( つま り、 pthread_rwlock_unlock() 関数を n 回呼び出さなければなりません)。 関数 pthread_rwlock_tryrdlock() は、 rwlock に書き込みロックをもっているスレッドがある場合や、 rwlock で ブロックされている書き込みプロセスがある場合に実行が失敗することを除いて、 pthread_rwlock_rdlock() 関 数と同じように読み取りロックを処理します。 これらの関数のどちらも、初期化されていない読み書きロックで呼び出した場合、結果は不定です。 シグナルが、シグナルハンドラーから戻った後で、読み書きロックを待っているスレッドに送信される場合、 スレッドは、中断がなかったかのように読み書きロックの待機を再開します。 戻り値 正常終了すると pthread_rwlock_rdlock() と pthread_rwlock_tryrdlock() は0を返します。それ以外の場合、エ ラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-255 pthread_rwlock_rdlock(3T) pthread_rwlock_rdlock(3T) エラー 以下の現象が発生した場合、 pthread_rwlock_tryrdlock() 関数は、該当するエラー番号を返します。 [EBUSY] 書き込みプロセスがロックをもっているか、読み書きロック rwlock でブロックされて いるので、rwlockの読み取りロックを取得することができなかった場合。 以下の条件の場合、 pthread_rwlock_rdlock() と pthread_rwlock_tryrdlock() 関数は、該当するエラー番号を返 します。 [EINVAL] rwlock で指定された値が、初期化済みの読み書きロックを参照していない場合。 [EDEADLK] 現在のスレッドがすでに、書き込みで読み書きロックを所有している場合。 [EAGAIN] rwlock が読み取りロックの最大値を超えているので、読み取りロックを取得できな かった場合。このエラーは、HP-UXでは検出されません。 著者 pthread_rwlock_rdlock() と pthread_rwlock_rdlock() は、X/Openが開発しました。 参照 pthread_rwlock_init(3T), pthread_rwlock_destroy(3T), pthread_rwlock_trywrlock(3T), pthread_rwlock_wrlock(3T), pthread_rwlock_unlock(3T) 標準準拠 pthread_rwlock_rdlock(): X/Open. pthread_rwlock_tryrdlock(): X/Open. Section 3-256 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_rwlock_unlock(3T) pthread_rwlock_unlock(3T) 名称 pthread_rwlock_unlock() − 読み書きロックの解除 構文 #include <pthread.h> int pthread_rwlock_unlock( pthread_rwlock_t *rwlock ); パラメータ rwlock ロックを解除する読み書きロックへのポインタ。 説明 関数 pthread_rwlock_unlock() は、 rwlock で参照される読み書きロックを解放するため、所有者から呼び出さ れます。読み書きロック rwlock が呼び出し元のスレッドにより保たれていない場合、結果は不定です。 読み書きロック rwlock の読み取りロックを解放するためにこの関数を呼び出し、読み書きロックに他の読み取 りロックが存在する場合、読み書きロック上の読み取りロックは、現在のスレッドが所有者になっているもの 以外は残ったままとなります。この読み書きロックの最後の読み取りロックが解放されると、このロックは所 有者のない、ロックが解除された状態になります。 この関数が読み書きロック rwlock の書き込みロックを解放するため呼び出されると、このロックは所有者のな い、ロックが解除された状態になります。 pthread_rwlock_unlock() 関数を呼び出して読み書きロックrwlockに所有者がなくなり、読み書きロックに対す る書き込みロックの取得で待機しているスレッドが存在する場合、スケジューリング方針を使って、読み書き ロックに書き込みロックが取得できるスレッドを決定します。読み書きロックに対する読み取りロックの取得 で待機しているスレッドが存在する場合、スケジューリング方針を使って、読み書きロックに読み取りロック が取得できるスレッドを決定します。読み取りロックや書き込みロックで rwlock にブロックされているスレッ ドが複数個あった場合、ロックの取得の順序には特に規定はありません。 この関数が初期化されていない読み書きロックで呼び出される場合、結果は不定です。 戻り値 正常終了すると pthread_rwlock_unlock() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を 返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_rwlock_unlock() 関数は、該当するエラー番号を返します。 [EINVAL] rwlock で指定された値が、初期化された読み書きロックにオブジェクトを引用しない 場合。 [EPERM] HP-UX 11i Version 2: August 2003 現在のスレッドが、読み書きロックを所有していない場合。 −1− Hewlett-Packard Company Section 3-257 pthread_rwlock_unlock(3T) pthread_rwlock_unlock(3T) 著者 pthread_rwlock_unlock() は、X/Openで開発されました。 参照 pthread_rwlock_init(3T), pthread_rwlock_destroy(3T), pthread_rwlock_rdlock(3T), pthread_rwlock_wrlock(3T), pthread_rwlock_tryrdlock(3T), pthread_rwlock_trywrlock(3T). 標準準拠 pthread_rwlock_unlock(): X/Open. Section 3-258 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_rwlock_wrlock(3T) pthread_rwlock_wrlock(3T) 名称 pthread_rwlock_wrlock(), pthread_rwlock_trywrlock() − 読み書きロックへの書き込みロックまたはロックの試行 構文 #include <pthread.h> int pthread_rwlock_wrlock( pthread_rwlock_t *rwlock ); int pthread_rwlock_trywrlock( pthread_rwlock_t *rwlock ); パラメータ rwlock 書き込みでロックする読み書きロックへのポインター。 説明 pthread_rwlock_wrlock() 関数は、 rwlock で参照される読み書きロックオブジェクトに書き込みロックを適用 します。他のスレッド (読み取りプロセスまたは書き込みプロセス) がどれも読み書きロック rwlock を保持し ていない場合、呼び出しスレッドが書き込みロックを取得します。それ以外の場合、スレッドはロックが取得 できるようになるまでブロックします (つまり、 pthread_rwlock_wrlock() 呼び出しから戻りません)。呼び出 しスレッドが現在rwlockの読み書きロック (読み取りロックでも書き込みロックでも) を所有している場合、結 果は不定です。 関数 pthread_rwlock_trywrlock() は、何らかのスレッドが現在 rwlock (読み取りまたは書き込み) を保持してい る場合に実行が失敗する点を除いて、 pthread_rwlock_wrlock() 関数と同じように書き込みロックを処理しま す。 これらの関数のどちらも、初期化されていない読み書きロックで呼び出した場合、結果は不定です。 シグナルが、シグナルハンドラーから戻った後で、読み書きロックを待っているスレッドに送信される場合、 スレッドは、中断がなかったかのように読み書きロックの待機を再開します。 戻り値 正常終了すると pthread_rwlock_wrlock() と pthread_rwlock_trywrlock() は0を返します。それ以外の場合、エ ラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の現象が発生した場合、 pthread_rwlock_trywrlock() 関数は、該当するエラー番号を返します。 [EBUSY] 読み取りまたは書き込みですでにロックされているため、書き込みで読み書きロック rwlock を取得することができなかった場合。 以下の条件の場合、 pthread_rwlock_wrlock() と pthread_rwlock_trywrlock() 関数は、該当するエラー番号を返 します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-259 pthread_rwlock_wrlock(3T) [EINVAL] [EDEADLK] pthread_rwlock_wrlock(3T) rwlock で指定された値が、初期化済みの読み書きロックを参照していない場合。 現在のスレッドが、読み取りまたは書き込みの読み書きロックをすでに所有している 場合。 著者 pthread_rwlock_wrlock() と pthread_rwlock_trywrlock() は、X/Openが開発しました。 参照 pthread_rwlock_init(3T), pthread_rwlock_destroy(3T), pthread_rwlock_tryrdlock(3T), pthread_rwlock_rdlock(3T), pthread_rwlock_unlock(3T) 標準準拠 pthread_rwlock_wrlock(): X/Open. pthread_rwlock_trywrlock(): X/Open. Section 3-260 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 pthread_self(3T) pthread_self(3T) 名称 pthread_self() − 呼び出し元スレッドのスレッドIDの取得 構文 #include <pthread.h> pthread_t pthread_self(void); パラメータ なし。 説明 pthread_self() は、呼び出し元スレッドの スレッドID を返します。返されたスレッドIDは、 スレッドの作成時 に返されるのと同じIDです。スレッドIDは、プロセス内で一意であることが保証されます。 戻り値 pthread_self() は、現在のスレッドのスレッドIDを常に返します。 エラー なし。 著者 pthread_self() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_create(3T), pthread_equal(3T), getpid(2) 標準準拠 pthread_self(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-261 pthread_setcancelstate(3T) pthread_setcancelstate(3T) 名称 pthread_setcancelstate(), pthread_setcanceltype() − 現在のスレッドの取り消し可能状態や形式の設定と取得 構文 #include <pthread.h> int pthread_setcancelstate( int state, int *oldstate ); int pthread_setcanceltype( int type, int *oldtype ); パラメータ state 呼び出しスレッドの取り消し可能状態の設定値。 oldstate 呼び出しスレッドの以前の取り消し可能状態が返される領域へのポインター。 type 呼び出しスレッドの取り消し可能形式の設定値。 oldtype 呼び出しスレッドの以前の取り消し可能形式が返される領域へのポインター。 説明 pthread_setcancelstate() はアトミックに、呼び出しスレッドの取り消し可能状態を state に設定し、前回の取り 消し可能状態を oldstate に返します。 state の有効な値は次のとおりです。 PTHREAD_CANCEL_DISABLE 呼び出しスレッドの取り消し可能性を無効にします。呼び出しスレッドに対する取り消し要求 は、保留されます。 PTHREAD_CANCEL_ENABLE 呼び出しスレッドの取り消し可能性を有効にします。呼び出しスレッドに対する取り消し要求 は、受け付けられます。保留のキャンセル要求がいつ受け付けられるかは、スレッドの取り消 し可能形式によって異なります。 デフォルトでは、スレッドの取り消し可能状態は、作成時に PTHREAD_CANCEL_ENABLE に設定されま す。 pthread_setcanceltype() はアトミックに、呼び出しスレッドの取り消し可能形式を type に設定し、前回の取り 消し可能形式を oldtype に返します。 type の有効な値は、次のとおりです。 PTHREAD_CANCEL_ASYNCHRONOUS 呼び出しスレッドへの新規または保留された取り消し要求は、いつでも受け付けることができ ます (呼び出しスレッドで取り消しが有効になっている場合)。 Section 3-262 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_setcancelstate(3T) pthread_setcancelstate(3T) PTHREAD_CANCEL_DEFERRED 呼び出しスレッドへの取り消し要求は、取り消し位置に達するまで保留されます。 スレッドの取り消し可能形式は、作成時に PTHREAD_CANCEL_DEFERRED に設定されます。 スレッドの取り消し可能状態が無効にされた場合、スレッドの取り消し可能形式の設定は、すぐには影響を及 ぼしません。取り消し要求はすべて保留のままです。しかし、取り消し可能を再び使用可能にすれば、新しい 取り消し可能形式が有効になります。 戻り値 正常終了すると pthread_setcancelstate() と pthread_setcanceltype() は0を返します。それ以外の場合、エラー の内容を表すエラー番号を返します (errno 変数は使用しません)。 エラー 以下の条件の場合、 pthread_setcancelstate() と pthread_setcanceltype() 関数は、該当するエラー番号を返しま す。 [EINVAL] state に無効な値が含まれている場合。 [EINVAL] type に無効な値が含まれている場合。 注意 非同期に取り消しが可能なスレッドからは、非同期の取り消しに対して害のない関数のみ呼び出すようにする 必要があります。 著者 pthread_setcancelstate() と pthread_setcanceltype() は、IEEE POSIX P1003.1c規格から派生しました。 参照 pthread_exit(3T), pthread_join(3T), pthread_cancel(3T), pthread_cond_wait(3T), pthread_cond_timedwait(3T) 標準準拠 pthread_setcancelstate(): POSIX 1003.1c. pthread_setcanceltype(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-263 pthread_sigmask(3T) pthread_sigmask(3T) 名称 pthread_sigmask() − 呼び出し元スレッドのシグナルマスクの調査/変更 構文 #include <pthread.h> int pthread_sigmask( int how, const sigset_t *set, sigset_t *oset ); パラメータ how このパラメータは、呼び出し元スレッドでのシグナルマスクの変更方法を指定します。 set 現在ブロックされているシグナル集合から変更するシグナル集合へのポインター。 oset 前回のシグナルマスクを格納する領域へのポインター。 説明 pthread_sigmask() は、呼び出し元スレッドのシグナルマスクの調査や変更を行います。 ヌルポインターでない場合、引き数 set は、現在ブロックされているシグナル集合から変更する新しいシグナ ル集合を指します。 引き数 how は、シグナル集合の変更方法を指定します。有効な値は次のとおりです。 SIG_BLOCK 現在のシグナル集合と set が指すシグナル集合を結合したものになります。 SIG_UNBLOCK 現在のシグナル集合と、 set が指すシグナル集合の補集合との共通部分になりま す。 SIG_SETMASK set が指すシグナル集合になります。 引き数 oset がヌルポインターでない場合、前回のシグナルマスクが oset に返されます。 set がヌルポインター の場合、引き数 how の値は無視され、スレッドのシグナルマスクは変わりません。このようにすると、現在ブ ロックされているシグナルを調べるのに使用できます。 pthread_sigmask() 呼び出しの後で、非ブロックの保留シグナルが存在した場合、 pthread_sigmask() から戻る 前に、1つ以上のシグナルが送信されます。 SIGKILL または SIGSTOP シグナルをブロックすることはできません。これは、エラー表示されることもな く、システムによって実施されます。 pthread_sigmask() が何らかの理由により失敗した場合、スレッドのシグナルマスクは変更されません。 戻り値 正常終了すると pthread_sigmask() は0を返します。それ以外の場合、エラーの内容を表すエラー番号を返し ます (errno 変数は使用しません)。 Section 3-264 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 pthread_sigmask(3T) pthread_sigmask(3T) エラー 以下の現象が発生した場合、 pthread_sigmask() 関数は、該当するエラー番号を返します。 [EINVAL] how に無効な値が含まれている場合。 [EFAULT] set または oset が無効なアドレスを指している場合。このエラーの信頼性のある検出 ができるか否かは、実装方式に依存します。 著者 pthread_sigmask() は、IEEE POSIX P1003.1c標準から派生しました。 参照 sigprocmask(2) 標準準拠 pthread_sigmask(): POSIX 1003.1c. HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-265 pthread_testcancel(3T) pthread_testcancel(3T) 名称 pthread_testcancel() − 保留中の取り消し要求の処理 構文 #include <pthread.h> void pthread_testcancel(void); パラメータ なし。 説明 pthread_testcancel() 関数は、呼び出しスレッドで保留になっている取り消し要求を調べます。保留中の取り消 し要求が存在し、呼び出しスレッドの取り消し可能状態が有効の場合、その取り消し要求が受け付けられま す。呼び出しスレッドの取り消し状態が無効の場合、この関数は何の影響も及ぼしません。 戻り値 なし。 pthread_testcancel() 関数は、値を返しません。 呼び出しスレッドが取り消し要求を受け付けた場合、この関数は戻りません。呼び出しスレッドは、終了され ます。 エラー なし。 著者 pthread_testcancel() は、IEEE POSIX P1003.1c標準から派生しました。 参照 pthread_exit(3T), pthread_join(3T), pthread_setcancelstate(3T), pthread_setcanceltype(3T), pthread_cleanup_push(3T), pthread_cleanup_pop(3T), pthread_cond_wait(3T), pthread_cond_timedwait(3T) 標準準拠 pthread_testcancel(): POSIX 1003.1c. Section 3-266 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ptsname(3C) ptsname(3C) 名称 ptsname, ptsname_r − スレーブptyのパス名の取得(pseudo-terminal) 構文 #include <stdlib.h> char * ptsname (int fildes); char * ptsname_r (int fildes, char *slavename, int len); 特記事項 ptsname() および ptsname_r() は、STREAMS pty をサポートし( ptm(7) および pts(7) を参照)、また、別のデバ イス命名規則を持っている 非STREAMS pty ( pty(7) を参照) もサポートしています。 STREAMS pty は、オプ ションの機能であり、そのシステムがインストールされている場合のみサポートされます。 ptsname() および ptsname_r() が使用できるのは、ptyの命名規則に insf (1M) を採用しているシステムに限られ ます。 説明 パラメータ fildes は、開いているマスターptyのファイル記述子です。 ptsname() は、スレーブptyに、マスター ptyに対応する名前を付けます。したがって、両者のマイナー番号は同じになります。 ptsname_r() は、 ptsname() 関数のリエントラント版です。入力パラメータ slavename は、結果としてnullで終 了するスレーブptyのパス名が格納される文字配列へのポインタです。入力パラメータ len は、この文字配列の 長さを示しています。少なくとも32バイトの長さでなければなりません。 戻り値 ptsname() は、正常終了するとスレーブptyのフルパス名を格納した文字列を返します。異常終了すると NULL ポインタを返します。戻り値が静的データ領域を指すこともありますが、これは ptsname() を呼び出すたびに オーバライトされるので、保存したいときはあらかじめコピーしておいてください。 正常終了の場合は、 ptsname_r() は、 slavename パラメータが指す文字配列の中に結果のスレーブ名を格納 し、値0を返します。異常終了の場合は、値 -1を返します。 エラー ptsname() は次の条件のいずれかを満たす場合に異常終了し、 NULL ポインタを返します。 • ファイル記述子が開いているマスターptyのものでない場合 • 要求がpty ネームスペースを超える場合 • Pty のデバイスの命名規則が採用されていない場合 • マスターに対応するptyが見つからなかった場合 ptsname_r() もまた、上述の条件のいずれかを満たす場合に異常終了しますが、-1 を返し [ENXIO] を errno に 設定します。 ptsname_r() は、 slavename パラータが無効または len パラメータが小さ過ぎる場合、-1 を返し [ERANGE] を HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-267 ptsname(3C) ptsname(3C) errno に設定します。 例 次の例では、pty clone をオープンして取得したマスターpty に対応するスレーブpty のパス名を、非STREAMS pty が取得するために ptsname() を使用する典型的な方法を示しています。 int fd_master; char *path; ... fd_master = open("/dev/ptym/clone", O_RDONLY); path = ptsname(fd_master); 次の例は、 STREAMS マスターptyに対応する STREAMS スレーブptyのパス名を取得するのに ptsname() が使 用される典型的な方法を示しています。 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"); 著者 ptsname() および ptsname_r() は、HP および OSF で開発されました。 参照 insf(1M), devnm(3), pty(7), grantpt(3C), unlockpt(3C), ptm(7), pts(7), ptem(7), ldterm(7) Section 3-268 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 putc(3S) putc(3S) 名称 putc( ), putchar( ), fputc( ), putw( ) − ストリーム上に文字またはワードを出力 構文 #include <stdio.h> int putc(int c, FILE *stream); int putchar(int c); int fputc(int c, FILE *stream); int putw(int w, FILE *stream); int putc_unlocked(int c, FILE *stream); int putchar_unlocked(int c); 廃止インタフェース int putw_unlocked(int w, FILE *stream); 説明 putc() ファイルポインターが定義されていれば、出力 stream 上のポインターが指している位置に、 文字 c を書き込みます。 putchar(c) は、 putc(c, stdout) として定義されます。 putc() および putchar() は、どちらもマクロおよび関数として定義されます。 fputc() putc() と同じです。ただし、マクロではなく関数なので、引き数として使うことができます。 fputc() は、 putc() よりも実行速度が遅くなりますが、実行のたびに使われるスペースが小さ く、名前を引き数として関数に引き渡すことができます。 putw() w というワード (すなわち、C では int 型) を、出力 stream (ファイルポインターが定義されて いれば、そのポインターが指している位置) に出力します。ワードの大きさは整数の大きさで あり、使用機種によって変わります。 putw() は、ファイルに対し特別な境界を仮定すること も、作成することもありません。 標準エラーストリーム stderr を除く出力ストリームは、デフォルトで、ファイルに出力される場合にはバッ ファー化され、ターミナルに出力される場合にはラインバッファー化されます。標準エラー出力ストリーム stderr は、デフォルトでバッファー化されませんが、 freopen() ( fopen(3S) 参照) を使用すると、バッファー化 もしくはラインバッファー化されます。 setbuf() もしくは setvbuf() (setbuf (3S) 参照) を使用すると、ストリー ムのバッファリング方針を変更できます。 putc_unlocked() と putchar_unlocked() は、ストリームに文字を出 力します。 廃止インタフェース putw_unlocked() は、ストリームに文字またはワードを出力します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-269 putc(3S) putc(3S) アプリケーション使用法 putc(), fputc(), putchar(), または putw() がストリームに適用された後は、ストリームはバイト指向になります (orientation(5) を参照)。 戻り値 正常終了すると、 putc(), putc_unlocked(), fputc(), putchar(), putchar_unlocked() は、それぞれの書き出した値を 返します。失敗すると、定数 EOF を返し、ストリームにエラーを示し、エラーを示す値を errno に設定しま す。 正常終了すると、 putw() と putw_unlocked() は0を返します。失敗すると、0でない値を返し、ストリームに 対してエラーを示し、エラーを示す値が errno に設定されます。 エラー putc(), putc_unlocked(), putchar(), putchar_unlocked(), fputc(), putw(), putw_unlocked() は、 stream が バッ ファー化されていないか、 stream バッファーが掃き出される必要がある場合に失敗し、その下の write() コマ ンドを実行します。 [EAGAIN] stream の下のファイル記述子に対して O_NONBLOCK フラグが立てられ、プロセス は write 操作の間遅延されます。 [EBADF] stream の下のファイル記述子が、書き込み用に開かれた、有効なファイル記述子では ないことを示します。 [EFBIG] 書き込もうとしたファイルが、プロセスのファイルサイズ上限、もしくは最大ファイ ルサイズを超えていることを示します (ulimit(2) 参照)。 [EINTR] [EIO] write() システムコールの最中にシグナルが発生したことを示します。 物理的なI/Oエラーが発生している場合か、またはプロセスがバックグラウンド プロ セスグループの中にある状態で、制御ターミナルへ書き出そうとしていることを示し ます。 TOSTOP が設定されますが、プロセスは SIGTTOU シグナルを無視も、妨害 もしていません。そのプロセスのプロセスグループは、親なしにされます。 [ENOSPC] [EPIPE] ファイルを格納しているデバイスに空きスペースがないことを示します。 読み込み用に開かれていないパイプもしくは FIFO に対して、書き込もうとしている ことを示します。 SIGPIPE シグナルがプロセスに送られます。 下の write() 関数によって、その他の errno 値が設定されることもあります (write(2) 参照)。 警告 putc() および putchar() ルーチンは、いずれもライブラリ関数とマクロの両方として実現されたものです。マ クロ版は、デフォルトで使用されており、 <stdio.h> で定義されています。ライブラリ関数を取得するには、 #undef を使ってマクロの定義を取り除きます。あるいは、 ANSI-C モードでコンパイルを行う場合は、関数名 をかっこで囲むか、関数アドレスを使ってください。以下の例で、これらの方法を示します。 #include Section 3-270 <stdio.h> Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 putc(3S) putc(3S) #undef putc ... main() { int (*put_char()) (); ... return_val=putc(c,fd); ... return_val=(putc)(c,fd1); ... put_char = putchar; }; 標準 I/O ルーチンを使っているのに、標準入力からの読み込みには read() を直接使っているようなプログラム では、ラインバッファリングが混乱を招いたり、誤動作の原因になることがあります。行の一部を出力ターミ ナルに出力した後で大量の計算を行う場合、計算を始める前に標準出力に対して fflush() ( fclose(3S) 参照) 処理 を行う必要があります。 putc() のマクロ版は、副作用によって、引き数 stream を正しく処理できません。特に以下のコマンドは、期待 したとおりには実行されないことがあります。 putc(c, *f++); 関数版の putc() か fputc() を使ってください。 機種によってワードの長さやバイト順序に違いがあるため、 putw() を使って作成したファイルは、機種に依存 したものとなります。したがって、違うプロセッサ上で getw() を使っても、ファイルが読めないことがありま す。 putw_unlocked() インタフェースは廃止され、現在では既存のDCEアプリケーションとの互換性を保つために だけサポートされています。新しいマルチスレッドアプリケーションでは、 putc(), putchar() および putw() を 使用してください。 リエントラントインタフェース _REENTRANT が定義されている場合、 putc() および putchar() に対してライブラリ関数のロック付きの版 が、デフォルトで使われます。 参照 fclose(3S), ferror(3S), flockfile(3S), fopen(3S), getc(3S), fread(3S), printf(3S), puts(3S), setbuf(3S), orientation(5), thread_safety(5) 標準準拠 putc(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C fputc(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-271 putc(3S) putc(3S) putchar(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C putw(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 Section 3-272 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 putenv(3C) putenv(3C) 名称 putenv( ) − 環境の値の変更、もしくは環境への値の追加 構文 #include <stdlib.h> int putenv(const char *string); 説明 string は、 name=value の形式の文字列を指します。 putenv() は、既存の変数の変更、または新規の変数の作成 によって環境変数 name の値を、 value に等しくします。いずれの場合でも string で指定された文字列は環境 の一部となるので、文字列を変更すれば環境が変わります。新たに文字列を定義する name が putenv() に引き 渡されると string が使用したスペースは、使用されなくなります。 多言語化対応 ロケール LC_CTYPE カテゴリは、 string にある文字のコード変換を、シングル/マルチバイト文字として識別します。 サポートされるコードセット シングル/マルチバイトの文字コードがサポートされています。 診断 putenv() は、拡張された環境に対して、 malloc() により十分なスペースが取得できなかった場合、または文字 列引き数の中に、無効なマルチバイト文字があった場合は、0でない値を返します。取得できた場合は0を返 します。 エラー putenv() は次の条件を満たす場合に失敗します。 [ENOMEM] 環境を拡張するために十分なスペースがない場合 [EILSEQ] 文字列引き数の中に、無効なマルチバイト文字がある場合 警告 putenv() は、 environ で指定された環境を操作し、 getenv() と組み合わせて使用できます。ただし、 main に対 する3つめの引き数 envp は変更できません。 このルーチンは、 malloc() で環境を拡張します (malloc(3C) 参照)。 putenv() が呼び出された後、環境変数はアルファベット順にはなりません。 起こりやすいエラーとしては、自動変数を引き数として putenv() を呼び出し、 string を環境の一部のままにし て関数から抜ける、ということがあります。 参照 exec(2), getenv(3C), malloc(3C), environ(5), thread_safety(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-273 putenv(3C) putenv(3C) 標準準拠 putenv(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 1 Section 3-274 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 putp(3X) putp(3X) 名称 putp, tputs — コマンドの端末への出力 構文 #include <term.h> int putp(const char *str); int tputs(const char *str, int affcnt, int (*putfunc)(int)); 説明 これらの関数は、terminfo データベース内に入っているコマンドを端末に出力します。 putp() 関数は、tputs(str, 1, putchar) と同じ機能があります。 putp() の出力は、 setupterm() 内に指定されている fildes ではなく、常に、stdout に行われます。 tputs() 関数は、端末に str を出力します。 str 引き数は、terminfo 文字列変数、あるいは tgetstr(), tgoto(), tigetstr() または tparm() からの戻り値でなければなりません。 affcnt 引き数には、影響を受ける行数、または、適 用不能の場合には 1 を指定します。 terminfo データベースで、使用中の端末が生成された文字列で任意のコマ ンドの後にパディングを要求することを示す場合には、 tputs() は、端末に送信される文字列の中の terminfo データベースによって示される位置にパッド文字を挿入します。 tputs() 関数は、ユーザー提供関数 putfunc を 呼び出すことによって、生成された文字列の各文字を出力します (下記を参照してください)。 ユーザー提供関数 putfunc (tputs への引き数として指定される) は、 putchar() または同じプロトタイプの関数 のいずれかです。 tputs() 関数は、 putfunc の戻り値を無視します。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 これらの関数のいずれかを使った後、Curses が保持している端末の状態のモデルが端末の実際の状態と一致し ないことがあります。 Curses の従来どおりの使用を再開する前に、アプリケーションはウィンドウをタッチし てリフレッシュする必要があります。 これらの関数を使うには、アプリケーションに、Curses を使う本来の目的を無効にできるほど多くの特定のク ラスの端末に関する情報があることが要求されます。 一部の端末では、修飾情報を変更するためのコマンドが、概念的に、スクリーンバッファ (幅のあるものまた はないもの) 内のスペースを占有します。したがって、端末を新しい修飾情報に設定するためのコマンドは、 既に表示されている一部の文字の修飾情報を変更することになります。 参照 doupdate(3X), is_linetouched(3X), tgetent(3X), tigetflag(3X), putchar() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <term.h> HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-275 putp(3X) putp(3X) 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-276 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 putpwent(3C) putpwent(3C) 名称 putpwent( ) − パスワードファイル エントリーの記入 構文 #include <pwd.h> #include <stdio.h> int putpwent(const struct passwd *p, FILE *f); 説明 putpwent() は getpwent() の反対です (getpwent(3C) 参照)。 getpwent(), getpwuid(), または getpwnam() によって 作成された構造体 passwd に対するポインターを与えられると、 putpwent() はストリーム f に、 /etc/passwd に 一致する書式で行を書き出します。 putpwent() は、構造体 passwd 内の監査 ID および監査フラグを無視します。 putpwent() は、このパスワード ファイルに対応する、保護されたパスワードデータベースで用いられ、高信頼性システムで用いられるエント リーの作成は行いません。高信頼性パスワードデータベース ファイルの書式を持つエントリーの作成には、 putprpwnam() を使用してください。 getprpwent(3) を参照してください。 診断 操作の最中にエラーが生じると、 putpwent() は0でない値を返します。正常終了すると、0を返します。 ファイル /etc/passwd システム パスワードファイル 参照 getpwent(3C), getprpwent(3), passwd(4), prpwd(4), stdio(3S), fopen(3S), thread_safety(5) 標準準拠 putpwent(): SVID2, SVID3, XPG2 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-277 puts(3S) puts(3S) 名称 puts( ), fputs( ) − ストリーム上に文字列を出力 構文 #include <stdio.h> int puts(const char *s); int fputs(const char *s, FILE *stream); 廃止インタフェース int puts_unlocked(const char *s); int fputs_unlocked(const char *s, FILE *stream); 説明 puts() は、 s で指された null で終わる文字列にニューライン文字を付け加えて、標準出力ストリーム stdout に 書き込みます。 fputs() は、 s で指されたnullで終わる文字列を、指定した出力 stream に書き出します。ただし、ニューライン 文字は付け加えません。 どちらの関数も、終りにnull文字は付け加えません。 廃止インタフェース puts_unlocked() および fputs_unlocked() は、ストリームに文字列を出力します。 戻り値 正常終了すると、これらのルーチンは、負でない数を返します。失敗すると EOF を返し、ストリームにエラー を示し、エラーを示す値を errno に設定します。 エラー これらのルーチンは、 stream がバッファー化されていない場合、または stream バッファーが掃き出される必 要がある場合に失敗し、その下の write() コマンドを実行します。 [EAGAIN] stream の下のファイル記述子に対して O_NONBLOCK フラグが立てられ、プロセス は write 操作の間遅延されます。 [EBADF] stream の下のファイル記述子が、書き込み用に開かれた、有効なファイル記述子では ないことを示します。 [EFBIG] 書き込もうとしたファイルが、プロセスのファイルサイズ上限、もしくは最大ファイ ルサイズを超えていることを示します (ulimit(2) 参照)。 [EINTR] write() システムコールの最中にシグナルが発生したことを示します。 [EIO] プロセスがバックグラウンド プロセスグループの中にある状態で、制御ターミナルへ 書き出そうとしていることを示します。 TOSTOP が設定されますが、プロセスは SIGTTOU シグナルを無視も妨害もしてません。そのプロセスのプロセスグループ Section 3-278 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 puts(3S) puts(3S) は、親なしにされます。 [ENOSPC] ファイルを格納しているデバイスに空きスペースがないことを示します。 [EPIPE] 読み込み用に開かれていないパイプもしくは FIFO に対して、書き込もうとしている ことを示します。 SIGPIPE シグナルがプロセスに送られます。 下の write() 関数によって、その他の errno 値が設定されることもあります (write(2) 参照)。 警告 puts_unlocked() および fputs_unlocked() インタフェースは廃止され、現在では既存のDCEアプリケーションと の互換性を保つためにだけサポートされています。新しいマルチスレッドアプリケーションでは、 puts() およ び fputs() を使用してください。 注記 puts() および puts_unlocked() はニューライン文字を付け加えます。 fputs() および fputs_unlocked() はニュー ライン文字を付け加えません。 参照 ferror(3S), flockfile(3S), fopen(3S), fread(3S), printf(3S), putc(3S), orientation(5), thread_safety(5) 標準準拠 puts(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C fputs(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-279 putspent(3C) putspent(3C) 名称 putspent − シャドウパスワードファイルのエントリーの書き込み 構文 #include <shadow.h> int putspent (const struct spwd *sp, FILE *f); 説明 putspent() は、 getspent() の逆の操作を行う関数です。 getspent(3C) を参照してください。 getspent() や getspnam() 関数で作成された spwd 構造体へのポインターを指定して putspent() を呼び出すと、 /etc/shadow の形式 と合った1行のデータが、ストリーム f に書き込まれます。 アプリケーション使用法 マルチスレッドアプリケーションで、 putspent() はスレッドセーフです。この関数は、非同期キャンセルセー フではありません。スレッドが putspent() を実行しているときに、キャンセルポイントに達する可能性があり ます。 戻り値 putspent() は、動作中にエラーが発生すると0以外の値を返します。その他の場合には、0を返します。 ファイル シャドウパスワードファイル /etc/shadow 参照 getspent(3C), shadow(4) Section 3-280 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 putwc(3C) putwc(3C) 名称 putwc( ), putwchar( ), fputwc( ) − ストリームファイルへのワイドキャラクタ出力 構文 #include <wchar.h> wint_t putwc(wint_t wc, FILE *stream); wint_t putwchar(wint_t wc); wint_t fputwc(wint_t wc, FILE *stream); _INCLUDE__STDC_A1_SOURCE のみ wint_t putwc(wchar_t wc, FILE *stream); wint_t putwchar(wchar_t wc); wint_t fputwc(wchar_t wc, FILE *stream); 廃止インタフェース wint_t putwc_unlocked(wint_t wc, FILE *stream); wint_t putwchar_unlocked(wint_t wc); wint_t fputwc_unlocked(wint_t wc, FILE *stream); 特記事項 これらの関数は、 XPG4 Worldwide Portability Interface ワイドキャラクタ I/O 関数に従います。これらは、 putc(3S) で定義される、8ビット文字に対する I/O 関数と同じ働きをします。 説明 putwc() 出力 stream 上の、ファイルポインターが指している位置に、ワイドキャラクタ wc に対応す る文字を書き込みます。 putwchar(wc) は、 putwc(wc, stdout) として定義されます。 putwc() および putwchar() は、どちらもマクロおよび関数として定義されます。 fputwc() putwc() と同じです。ただし、マクロではなく関数なので、引き数として使うことができま す。 標準エラーストリーム stderr を除く出力ストリームは、デフォルトで、ファイルに出力される場合にはバッ ファー化され、ターミナルに出力される場合にはラインバッファー化されます。標準エラー出力ストリーム stderr は、デフォルトではバッファー化されませんが、 freopen() ( fopen(3S) 参照) を使用すると、バッファー 化もしくはラインバッファー化されます。 setbuf() もしくは setvbuf() (setbuf (3S) 参照) を使用すると、スト リームのバッファーリング対象を変更できます。 これらの関数、型 wint_t 、値 WEOF は、ヘッダー <wchar.h> で定義されています。 廃止インタフェース putwc_unlocked(), putwchar_unlocked(), fputwc_unlocked() は、ストリームファイルにワイドキャラクタを出力 します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-281 putwc(3C) putwc(3C) アプリケーション使用法 _INCLUDE__STDC_A1_SOURCE プロトタイプを使用するには、 _INCLUDE__STDC_A1_SOURCE フラグを コンパイラオプションとして渡すか、ソースファイルでマクロとして定義する必要があります。 ストリームに fputwc()、 putwc()、または putwchar() を適用すると、ストリームがバイト指向になります (orientation(5) を参照)。 多言語化対応 ロケール LC_CTYPE カテゴリによって、ワイドキャラクタ変換の方法が決まります。 サポートされるコードセット シングル/マルチバイト文字がサポートされています。 戻り値 正 常 終 了 す る と、 putwc(), putwc_unlocked(), fputwc(), fputwc_unlocked(), putwchar(), お よ び putwchar_unlocked() は、それぞれの書き出した値に対応するワイドキャラクタを返します。失敗すると、定数 WEOF を返し、ストリームにエラーを示し、エラーを示す値を errno に設定します。 エラー putwc(), putwc_unlocked(), putwchar(), putwchar_unlocked(), fputwc(), および fputwc_unlocked() は、 stream が バッファー化されていないか、 stream バッファーが掃き出される必要がある場合に失敗し、 write() コマンド を実行します。 [EAGAIN] stream の下のファイル記述子に対して O_NONBLOCK フラグが立てられ、プロセス は write 操作の間遅延されます。 [EBADF] stream の下のファイル記述子が、書き込み用に開かれた、有効なファイル記述子では ないことを示します。 [EFBIG] 書き込もうとしたファイルが、プロセスのファイルサイズ上限、もしくは最大ファイ ルサイズを超えていることを示します (ulimit(2) 参照)。 [EINTR] [EIO] write() システムコールの最中にシグナルが発生したことを示します。 物理的な I/O エラーが発生しているか、またはプロセスがバックグラウンド プロセス グループの中にある状態で、制御ターミナルへ書き出そうとしていることを示しま す。 TOSTOP が設定されますが、プロセスは SIGTTOU シグナルを無視も妨害もし ていません。そのプロセスのプロセスグループは、親なしにされます。 [ENOSPC] ファイルを格納しているデバイスに空きスペースがないことを示します。 [EPIPE] 読み込み用に開かれてないパイプもしくは FIFO に対して、書き込もうとしているこ とを示します。 SIGPIPE シグナルがプロセスに送られます。 [EILSEQ] Section 3-282 ワイドキャラクタ wc が、有効な文字ではありません。 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 putwc(3C) putwc(3C) write() 関数が実行されて、その他の errno 値が設定されることもあります (write(2) 参照)。 警告 ワイドキャラクタ I/O ルーチンを使っているのに、標準入力からの読み込みには read() 自身を使っているよう なプログラムでは、ラインバッファリングが混乱を招いたり、誤動作の原因になることがあります。行の一部 を 出 力 ター ミ ナ ル に 出 力 し た 後 で 大 量 の 計 算 を 行 う 場 合、 計 算 を 始 め る 前 に 標 準 出 力 に 対 し て fflush() ( fclose(3S) 参照) 処理を行う必要があります。 putwc_unlocked(), putwchar_unlocked(), fputwc_unlocked() インタフェースは廃止され、現在では既存の DCE アプリケーションとの互換性を保つためにだけサポートされています。新しいマルチスレッドアプリケーショ ンでは、 putwc(), putwchar() および fputwc() を使用してください。 著者 putwc() は、OSF および HP で開発されました。 参照 fclose(3S), ferror(3S), flockfile(3S), fopen(3S), getwc(3C), fread(3S), printf(3S), putws(3C), setbuf(3S), orientation(5), thread_safety(5) 標準準拠 putwc(): XPG4 fputwc(): XPG4 putwchar(): XPG4 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-283 putws(3C) putws(3C) 名称 putws( ), fputws( ) − ワイドキャラクタ文字列のストリームファイルへの書き込み 構文 #include <wchar.h> int putws(const wchar_t *ws); int fputws(const wchar_t *ws, FILE *stream); 廃止インタフェース int putws_unlocked(const wchar_t *ws); int fputws_unlocked(const wchar_t *ws, FILE *stream); 特記事項: fputws は、XPG4 Worldwide Portability Interface のワイドキャラクタ I/O 関数に準拠しています。これらの関数 は、 puts(3S) で定義されている8ビットキャラクタの I/O 関数に相当するものです。 説明 putws() は、 ws が指す null で終わるワイドキャラクタ文字列を対応する文字列にして、改行文字を追加して、 標準出力ストリーム stdout に書き出します。 fputws() は、 ws が指す null で終わるワイドキャラクタ文字列を対応する文字列にして、 stream で指定された 出力に書き出しますが、改行文字や終端のヌル文字を追加することは ありません。 どちらの関数も、終端のヌル文字を書き込みません。 これらの関数の定義にある型 wchar_t および値 WEOF は、ヘッダー <wchar.h> で定義されています。 廃止インタフェース ワイドキャラクタ文字列をストリームファイルに書き込む putws_unlocked() および fputws_unlocked() アプリケーション使用法 putws() または fputws() がストリームに適用された後は、ストリームはワイド指向になります (orientation(5) を 参照)。 多言語化対応 ロケール LC_CTYPE カテゴリにより、ワイドキャラクタの変換方法が決まります。 サポートされる文字コードセット シングル/マルチバイト文字コードセットが、サポートされます。 戻り値 putws(), putws_unlocked(), fputws(), および fputws_unlocked() は、正常終了すると、負でない数を返します。失 敗すると、 WEOF を返し、ストリームのエラーインジケーターをセットし、エラーを示す値を errno にセッ トします。 Section 3-284 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 putws(3C) putws(3C) エラー putws(), putws_unlocked(), fputws(), および fputws_unlocked() は、 stream がバッファーされていないとき、あ るいは、 stream のバッファー内に write() 呼び出しを実行してフラッシュするデータがあるときに、以下の条 件で失敗します。 [EAGAIN] O_NONBLOCK フラグが stream のファイル記述子にセットされていて、プロセスが 書き込み操作に間に合わなかった場合。 [EBADF] [EFBIG] stream のファイル記述子が、書き込みオープンのファイル記述子として無効な場合。 プロセスのファイルサイズ上限あるいは最大ファイルサイズ (ulimit(2) 参照) を越えて ファイルに書き込もうとした場合。 [EINTR] [EIO] write() システムコールの中でシグナルを受け取った場合。 プロセスがバックグラウンド プロセスグループで、 TOSTOP がセットされている制 御ターミナルに書き込もうとした場合、プロセスが SIGTTOU シグナルを無視もブ ロックもしていない場合、プロセスのプロセスグループが親無しの場合。 [ENOSPC] [EPIPE] ファイルのあるデバイスに空きスペースが残っていない場合。 どのプロセスからも読み取りオープンされていないパイプあるいは FIFO に書き込も うとした場合。 SIGPIPE シグナルが、プロセスに送られます。 [EILSEQ] ws のワイドキャラクタが、有効な文字に対応しない場合。 中で呼び出される write() 関数によって、これ以外の errno 値がセットされることがあります (write(2) 参照)。 警告 putws_unlocked() および fputws_unlocked() インタフェースは廃止され、現在では既存の DCE アプリケーショ ンとの互換性を保つためにだけサポートされています。新しいマルチスレッドアプリケーションでは、 putws() および fputws() を使用してください。 著者 putws() および fputws() は、OSF と HP で開発されました。 参照 ferror(3S), flockfile(3S), fopen(3S), fread(3S), printf(3S), putwc(3C), orientation(5), thread_safety(5) 標準準拠 fputws(): XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-285 qsort(3C) qsort(3C) 名称 qsort( ) − クイックソート 構文 #include <stdlib.h> void qsort( void *base, size_t nel, size_t size, int (*compar)(const void *, const void *) ); 説明 qsort() は、クイックソートのアルゴリズムのインプリメンテーションです。これは、データの表をソートしま す。 base テーブル中の比較開始要素に対するポインター nel テーブル中の要素の数 size テーブル中の各要素の大きさ compar 比較を実行する関数の名前。比較される2つの要素を指すポインターを引き数として呼 び出されます。 compar として引き渡された関数は、最初の引き数が、2番目の引き数よ り小さいか、等しいか、大きいかによって、それぞれ、負の整数、0、正の整数を返さな ければなりません。 strcmp() は、同じ規約に従って値を返します (string(3C) 参照)。 注記 テーブル中の比較開始点に対するポインターは、必ず、要素へのポインターでなければならず、 void へのポイ ンターに型変換されなければなりません。 比較の関数は、1バイトずつ比較を行う必要はありません。したがって、テーブルの要素としては、比較の対 象になる値のほかに、任意のデータが含まれていてもかまいません。 等しいと判断された2つの要素が出力される順番は不確定です。 警告 size が0だと、0による除算のエラーが生じることがあります。 参照 sort(1), bsearch(3C), lsearch(3C), string(3C), thread_safety(5) 標準準拠 qsort(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-286 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rand(3C) rand(3C) 名称 rand( ), rand_r( ), srand( ) − 単純な乱数発生ルーチン 構文 #include <stdlib.h> int rand(void); int rand_r(unsigned int *seed); void srand(unsigned int seed); 説明 rand() は、乗法が可能な、同値周期 232 の乱数発生ルーチンで、0から 215−1 の範囲の連続疑似乱数を返しま す。 srand() は、乱数発生ルーチンを、発生開始点にリセットする関数で、任意の時点で呼び出すことができます。 乱数発生ルーチンに与えられる種の初期値は1です。 rand_r() は、 randval パラメータが指すアドレスに乱数を返します。いつでも、 seed パラメータを設定するこ とにより、任意の時点で、乱数ジェネレータに乱数の生成を再開させることができます。 戻り値 seed または randval が NULL の場合は、 rand_r() は、0を返します。そうでない場合は、 rand_r() は、擬似的 にランダムな整数を返します。 例 int x, y; srand(10); x = rand(); y = rand(); 上の例と下の例は同じ結果になります。 int x, y, s = 10; x=rand_r(&s); y=rand_r(&s); 注記 rand() の特性の多くは、満足のいかないものです。 drand48() の方が精密で高性能な関数発生ルーチンです (drand48(3C) 参照)。 警告 rand_r() を使用する際は、現在 rand_r() が POSIX.1c に準拠していることに注意してください。 rand_r() の旧 プロトタイプは、既存の DCE アプリケーションとの互換性を保つためにのみサポートされています。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-287 rand(3C) rand(3C) 参照 drand48(3C), random(3M), thread_safety(5) 標準準拠 rand(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C rand_r(): POSIX.1c srand(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-288 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 random(3M) random(3M) 名称 random( ), srandom( ), initstate( ), setstate( ) − 擬似乱数の生成 構文 #include <stdlib.h> long random(void); void srandom(unsigned seed); char *initstate(unsigned seed, char *state, size_t size); char *setstate(char *state); 説明 random() および srandom() 関数は、実質的に、 rand() および srand() 関数と同じ呼出し手順と初期化特性を 持っていますが、生成シーケンスがよりランダムな乱数ジェネレータです。 rand() 関数によって生成された下 位12ビットは周期的なパターンになっていますが、 random() 関数で生成されたすべてのビットは使用可能で す。例えば、 random() & 01 は、ランダムなバイナリ値を生成します。 random() 関数は、0から 231-1 の範囲の連続した擬似乱数を返すために、デフォルトで31個のlong 整数の状態 配列サイズを使って、非線形加法フィードバック乱数ジェネレータを使用します。この乱数ジェネレータの周 期は、約16 x (231-1) です。状態配列のサイズが、乱数ジェネレータの周期を決定します。状態配列サイズを増 加すると、周期も増加します。 256バイトの状態情報で、乱数ジェネレータの周期は、 269 より大きくなります。 rand() 関数と同じように、デフォルトで、 random() 関数は、種の値を1として srandom() 関数を呼び出したと きに生成される一連の数を生成します。 srandom() 関数は、 seed の値を使用して、現在の状態配列を初期化します。 initstate() および setstate() 関数は、乱数ジェネレータの再起動と変更を行ないます。 initstate() 関数は、将来 の使用に備えて、 state 引き数が指す状態配列を初期化します。状態配列のサイズをバイト単位で指定する size 引き数は、乱数ジェネレータをどのくらい複雑にするかを決めるために、 initstate() 関数で使用されます。状 態配列が大きいほど、数がランダムになります。状態情報のサイズは、8、32、64、128 および256 バイトで す。これ以外のサイズは、最も近い値に切り捨てられ、8バイトより小さい値はエラーになります。 seed 引き 数は、乱数シーケンスの起点を指定し、同じ場所から再開可能にします。 initstate() 関数は、以前の状態情報 配列へのポインタを返します。 一度 、状態が初期化されると、 setstate() 関数により状態配列間の切り替えができます。 initstate() 関数を呼び 出すか、あるいは、 setstate() 関数を再び呼び出すまで、 state 引き数で定義された配列は、次の乱数生成のた めに使用されます。 setstate() 関数は、以前の状態配列へのポインタを返します。 初期化の後に、状態配列は、次の2通りの方法のうちの1つの方法で、異なる場所から再起動できます。 initstate() 関数は、好みの種、状態配列および配列サイズで、使用できます。 setstate() 関数は、好みの状態で HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-289 random(3M) random(3M) 使用し、その後で好みの種を指定して srandom() 関数を呼び出すことができます。この2つの関数を使用する 利点は、一度状態配列を初期化すれば、状態配列のサイズを保存しておかなくてもよいということです。 戻り値 random() 関数は、生成した擬似乱数を返します。 srandom() 関数は、値を返しません。 initstate() および setstate() 関数は、正常終了すると、以前の状態配列へのポインタを返します。異常終了する と、nullポインタを返します。 エラー initstate() 関数が8より小さい size で呼び出された場合、あるいは setstate() 関数が、状態情報が壊れているこ とを検出した場合、エラーメッセージが標準エラーに書き込まれます。 参照 drand48(3C), rand(3C), random(7) 標準準拠 random()COSE API, XPG 4.2 srandom()COSE API, XPG 4.2 initstate()COSE API, XPG 4.2 setstate()COSE API, XPG 4.2 Section 3-290 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rcmd(3N) rcmd(3N) 名称 rcmd(), rcmd_af(), rresvport(), rresvport_af(), ruserok() − リモートコマンドにストリームを返す 構文 int rcmd( char **ahost, int remport, const char *locuser, const char *remuser, const char *cmd, int *fd2p); int rcmd_af( char **ahost, int remport, const char *locuser, const char *remuser, const char *cmd, int *fd2p, int af); int rresvport(int *port); int rresvport_af(int *port,int af); int ruserok( const char *rhost, int superuser, const char *ruser, const char *luser); 説明 rcmd() rcmd() 機能は、リモートホスト上でコマンドを実行する、特権プログラムに使用されます。 rcmd() は、コマ ンドの標準入力と標準出力が接続されたソケットのファイル記述子を返します。 rcmd() に対するコマンドレ ベル インタフェースは、BSD rsh と同じコマンドの remsh によって提供されます (remsh(1) 参照)。 ahost はリモートホスト名アドレスのポインターです。リモートホストの名前は、公式のホスト名か、 gethostbyname() によって識別されるのであれば、エイリアスであってもかまいません (gethostent(3N), named(1M), お よび hosts(4) 参照)。 remport は、リモートシステムのインターネットポートで、 rcmd() が接続しようとします。 locuser および remuser は、それぞれローカルホストとリモートホストのユーザーログイン名を示します。これ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-291 rcmd(3N) rcmd(3N) らのログイン名により、リモート ホストサーバーがユーザーを認証します。 (以下の ruserok() 参照)。 cmd は、リモートホストで実行すべきコマンドを指定する文字列です。 fd2p は、整数のポインターです (このポインターはヌルであることもあります)。 rcmd() は gethostbyname() を使用してホスト *ahost を調べますが、ホストが存在しない場合は、−1 を返しま す。ホストが存在する場合、 *ahost は、ホストの標準名にセットされ、ポート remport に常駐しているサー バーへの接続が行われます。サーバーとの接続に5回以上失敗した場合、あるいはポートが使用中ではないの に接続が行われない場合は、 rcmd() により −1 が返されます。 呼び出しが実行されると、 SOCK_STREAM タイプのソケットが呼び出し側に返され、リモートコマンドに stdin および stdout として渡されます。 fd2p がヌルでない場合、 rcmd() は呼び出しプロセス (ローカル) と制 御プロセス (リモート) 間の2番目のソケットをオープンして、その記述子を * fd2p に入れます。この接続で は、制御プロセスが cmd から呼び出しプロセスへ診断出力 (stderr) を送ると同時に、 cmd に転送する UNIXシ グナルを呼び出しプロセスから受取ります。予備のポートが確立できなかった場合、 rcmd() は −1 を返しま す。 fd2p がヌルの場合、リモートコマンドの stderr は、 stdout と同じにされ、任意のシグナルをリモートプ ロセスに送信するための準備はされません。 このプロトコルの詳細は、 remshd(1M) の項で説明してあります。 rcmd() を使用するプログラムはスーパーユーザーが実行しなければなりません。 rcmd_af() rcmd_af() 関数は rcmd() と同じように動作しますが、それ以外に TCP ソケット AF_INET6 を作成することも できます。作成するソケットのタイプは、 af 引き数で指定します。 rcmd_af() は、アドレスファミリー af が サポートされていないと失敗します。このときのエラーは EAFNOSUPPORT として報告されます。 rresvport() rresvport() 関数はソケットを作成し、予約されたポートに結び付けます。このソケットは rcmd() および他の いくつかのルーチンで使用できるようになっています。 発信側は、 * port の初期値を512から IPPORT_RESERVED−1 までの数値で設定します (IPPORT_RESERVED の 値 は netinet/in.h で 定 義 さ れ て お り、 1024 と なっ て い ま す ) 。 多 く の 場 合、 * port の 初 期 値 は IPPORT_RESERVED−1. に設定されています。セットされた値が有効な範囲にない場合は、 rresvport() がそ の値を IPPORT_RESERVED−1 に警告なくリセットします。関数は * port の初期値を最初のポート番号として 使います。これにより、関数は作成されたソケットに 結合します。この操作が失敗した場合、 rresvport() は * port を減らして、ソケットの新規ポート番号を 結合します。操作が正常終了するまで、または 512 から IPPORT_RESERVED−1 までのポート番号がなくなるまで、プロセスが繰り返されます。 呼び出しが正常終了すると、ソケット記述子が発信側に返され、 port が指す位置にポート番号が返されます。 呼び出しが失敗の場合には、−1 が発信側に返されます。 rresvport() によって返されたソケットでは SO_KEEPALIVE オプションがオンになります。 ソケットに特権アドレスを結合できるのは、スーパーユーザーのみです。したがって、 rresvport() を使用した Section 3-292 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rcmd(3N) rcmd(3N) プログラムは、スーパーユーザーとして実行しなければなりません。 rresvport_af() rresvport_af() 関数は rresvport() と同じように動作しますが、それ以外に TCP ソケット AF_INET6 を作成する こともできます。作成するソケットのタイプは、 af 引き数で指定します。 rresvport_af() は、アドレスファミ リー af がサポートされていないと失敗します。このときのエラーは、 EAFNOSUPPORT として報告されま す。 ruserok() ruserok() 関数は、 rcmd() を使用して、サービスを要求するクライアントをサーバーが認証するためのもので す。 ruserok() は rhost 上の ruser が、ローカルホスト上で luser として振る舞うことを許されているかどうか を確認します。 superuser は整数フラグで、ローカルユーザー名がスーパーユーザーに対応していれば0以外になります。 superuser フラグが立てられていない場合、 ruserok() は、まずファイル /etc/hosts.equiv をチェックしてサービ スが受けられるかどうか確認します。確認できると ruserok() は0を返します。 superuser フラグが立てられて いるか、ファイル /etc/hosts.equiv が存在しないか、ユーザーチェックができなかった場合、 ruserok() は、引 き続きローカルユーザーのホームディレクトリ内のファイル .rhosts を (存在すれば) 調べます。 ruserok() は、 ユーザーチェックができた場合は0を返します。チェックできない場合は −1 を返します。 通常、 /etc/hosts.equiv ファイルには、ホスト名のリストが格納されており、また、ユーザーの .rhosts ファイ ル に は、 ホ ス ト 名 / ユー ザー 名 の 対 が 格 納 さ れ て い ま す。 リ モー ト ユー ザー は、 リ モー ト ホ ス ト 名 が /etc/hosts.equiv に含まれており、リモートユーザー名とローカルユーザー名が一致しているか、またはリモー トホスト名とリモートユーザー名が、ローカルユーザーのホームディレクトリ内の .rhosts に対で出現する場 合、 ruserok() によってチェックされます。 ruserok() が理解する構文についての、詳しい解説は、 hosts.equiv(4) を参照してください。 診断 rcmd() 診断メッセージ rcmd() は、以下の診断メッセージを返します。 hostname: Unknown host gethostbyname が、サーバーの名前と一致するエントリーを、ホストデータベースの中から見 つけられなかったことを表します (gethostent(3N) および hosts(4) 参照)。 対処法: ホストのシステム管理者に、リモートホストのエントリーが hosts データベースにあ るかどうか調べてもらってください (hosts(4) 参照)。 connect: hostname: ... 予約されたポートへの接続が行われないことを表します。この診断メッセージには、接続が行 われない理由を明記したメッセージが付けられます。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-293 rcmd(3N) rcmd(3N) write: Setting up stderr エラーメッセージを、送出用にセットアップされたソケット接続へ書き出す際にエラーが起き たことを表します。 system call: ... システムコールを実行する際にエラーが起きたことを表します。このメッセージには、エラー の原因を明記したメッセージが付けられます。 socket: Protocol failure in circuit setup 予約されたポート上で、ソケットの接続が行われなかったか、ソケットアドレスがインター ネットファミリー タイプのものでなかったことを表します。 read: hostname: ... 標準ソケット接続から情報を読み込む際にエラーが生じたことを表します。このメッセージに は、エラーの原因を明記したメッセージが付けられます。 Connection timeout エラー接続用の第2のソケットがセットアップされてから30秒以内に、リモートホストからこ のソケットへの接続が行われなかったことを表します。 Lost connection ソケットからの読み込みを、プログラムが行えなかったことを表します。これは、リモートホ ストからのソケット接続が切れたことを意味します。 message... デーモンからのエラーメッセージが、ソケット接続を通じて転送されることがあります。その メッセージは、 stderr に送られます。 primary connection shutdown 第2のソケットがセットアップされるまでの間に、 rcmd() によって、第1の接続がシャット ダウンされたことを表します。これは、 inetd の保護の失敗によるものかもしれません。 recv: ... 第2の (stderr) ソケット接続が行われるまでの間に、第1の接続において rcmd() がエラー状 態に陥ったことを表します。 accept: Interrupted system call 第2のソケット接続が行われるまでの間に、 rcmd() の何らかのリリースが不足して、接続が タイムアウトになったことを表します。 Section 3-294 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rcmd(3N) rcmd(3N) 対処法: コマンドを繰り返してください。 rresvport() 診断メッセージ rresvport() は次の診断メッセージを生成します。 rcmd() が rresvport() を呼び出すため、メッセージは rcmd() にも送られます。 system call: ... システムコールを実行する際にエラーが生じたことを表します。このメッセージには、システ ムコールによって返されるエラーメッセージが付けられます。 socket: All ports in use 予約されたポートのすべてが使用中であることを表します。タイムアウトが生じた場合には、 インターネットサービスがインストールされているかどうか、また inetd が実行されているか どうか調べてください。 例 下記のように、 rcmd() を呼び出して、リモートアカウント chm により、リモートホスト hpxzgy に対し date コマンドを実行します。このプログラムは、スーパーユーザー特権を必要とし、リモートアカウントが、プロ グラムを実行するローカルアカウントと等しいことが条件となります (hosts.equiv(4) 参照)。 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <pwd.h> struct passwd *getpwuid(); char *host[] = { "hpxzgy" }; char *cmd = "date"; char *ruser = "chm"; main(argc,argv) int argc; char **argv; { struct servent *sp; struct passwd *pwd; FILE *fp; char ch; int rem; sp = getservbyname("shell","tcp"); HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-295 rcmd(3N) rcmd(3N) pwd = getpwuid(getuid()); rem = rcmd(host, sp−>s_port, pwd−>pw_name, ruser, cmd, 0); if (rem < 0) exit(1); /* rcmd が自己のエラーメッセージを出します */ fp = fdopen(rem, "r"); while ((ch = getc(fp)) != EOF) putchar(ch); } 警告 rcmd() が socket() の呼び出しに対して行うオプションを特定する方法はありません。 rcmd() は、スタティッ クデータ領域内で、 (*ahost) に対するポインターを、ホストの標準名に対するポインターで置き換えてしまう ので、もとの値を後から使いたい場合には、あらかじめユーザーのデータ領域にその値をコピーしておかなけ ればなりません。そうしないと、予想外の結果が生じます。 IPv6 は、HP-UX 11i バージョン 1.0 にオプションの IPv6 ソフトウェアをインストールすることで利用できま す。HP-UX 11i バージョン 1.6 を実行するシステムでは、現在サポートされていません。 著者 rcmd() は、カリフォルニア大学バークレイ校で開発されました。 参照 login(1), rlogin(1), remsh(1), named(1M), remshd(1M), rexecd(1M), gethostent(3N), rexec(3N), hosts.equiv(4), thread_safety(5) Section 3-296 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 realpath(3X) realpath(3X) 名称 realpath − パス名の解釈 構文 #include <stdlib.h> char *realpath(const char *file_name, char *resolved_name); 説明 realpath() 関数は、 file_name がポイントするパス名から、同じファイルを指し示す絶対パス名 ( 解釈結果が "."、 ".."、 またはシンボリックリンクを含まない) を取得します。生成されたパス名は、 resolved_name がポイ ントするバッファーに、最大 {PATH_MAX} バイトまで保存されます。 戻り値 正常終了の場合、 realpath() は、解釈した名前へのポインターを返します。失敗の場合、 realpath() は null ポ インターを返し、エラーを示す値を errno へセットします。その場合、 resolved_name がポイントするバッ ファーの内容は規定されていません。 エラー realpath() 関数は、次の場合に失敗します。 [EACCES] file_name の構成要素に対して読み取りまたは検索パーミッションがない場 合。 [EINVAL] 引き数file_nameまたはresolved_nameがnullポインターである場合 [EIO] ファイルシステムからの読み取り中に、エラーが発生した場合 [ELOOP] pathの解釈において、シンボリックリンクが多すぎる場合 [ENAMETOOLONG] 引き数 file_name の長さが {PATH_MAX} バイトよりも長いか、またはパス 名の構成要素が {NAME_MAX} バイトよりも長い場合 [ENOENT] file_name の構成要素が既存のファイルを指定していない場合。または、 file_name が空の文字列へポイントしている場合 [ENOTDIR] パスプリフィックスの構成要素がディレクトリではない場合 realpath() 関数は、次の場合に失敗することがあります。 [ENAMETOOLONG] シンボリックリンクのパス名解釈の途中で、長さが {PATH_MAX} を超え てしまった場合 [ENOMEM] 使用可能な記憶スペースが十分にない場合 参照 getcwd(3C), sysconf(2), thread_safety(5), <stdlib.h> HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-297 realpath(3X) realpath(3X) 変更履歴 第4刷バージョン2で第1回リリース Section 3-298 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 redrawwin(3X) redrawwin(3X) 名称 redrawwin, wredrawln — 行のアップデートステータス関数 構文 #include <curses.h> int redrawwin(WINDOW *win); int wredrawln(WINDOW *win, int beg_line, int num_lines); 説明 redrawwin() および wredrawln() の両関数は、指定したウィンドウに対して物理的に表示される情報の一部ま たはすべてが破壊された可能性があることを処理系に通知します。 redrawwin() 関数は、ウィンドウ全体に マークを付けます。 wredrawln() は、行番号 beg_line から始まる num_lines 行だけにマークを付けます。これ らの関数は、そのウィンドウに対する次のリフレッシュ操作でウィンドウに物理的に何が表示されているかを 前提としたいかなる最適化も行わないようにします。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 redrawwin() および wredrawln() の両関数をテキストエディタ内で使うと、画面の一部またはすべてを再描画 するコマンドを実行することができます。 参照 clearok(), doupdate(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-299 regcmp(3X) regcmp(3X) 名称 regcmp( ), regex( ) − 正規表現のコンパイルと実行 構文 #include <libgen.h> char *regcmp( const char *string1, /* string2, */ ... /*, (char *)0 */ ); char *regex(const char *re, const char *subject, ...); extern char *__loc1; 特記事項 ANSI C ", ... " 構文は、可変長の引き数リストを意味し、そのオプションの(または必須の) メンバーは、対応す るコメント (/* */) の中に与えられます。 この項目に関して、このマニュアルに書かれている特徴はもはや旧式であり、将来の HP-UX の版では削除さ れるかもしれません。 regcomp(3C) の使用を勧めます。 説明 regcmp() は、正規表現をコンパイルし、コンパイルされたフォームに対するポインタを返します。ベクタ用の スペースは malloc(3C) で作ります。割り当てられたスペースのうち、不必要なものはユーザーが解除しなけれ ばなりません。引き数に誤りがあると、 regcmp() は NULL を返します。 regex() は、目的の文字列に対して、コンパイル済みのパターンを実行します。戻り値を格納するために、追加 で引き数が引き渡されます。 regex() は、異常終了すると NULL を返し、正常終了すると、次に続く照合操作 を行っていない文字に対するポインタを返します。グローバル文字ポインタの _ _loc1 は、マッチする文字列の 始まりを指します。 regcmp() と regex() は、エディタ ed(1) からの影響を多く受けています。ただし、構文や 意味には、多少変更が加えられています。以下は、有効な記号と、その意味です。 []*.ˆ これらの記号は、現在の意味を保持しています。 $ 文字列の終わりにマッチ。 \n はニューラインにマッチ ブラケットの中で、文字の範囲を示します。例えば、 [a-z] は、 [abcd. . .xyz] と同じで - す。最初または最後の文字である場合のみ、 - は、それ自身としての意味を持ちま す。例えば、文字クラス式 []-] は、文字 ] と - にマッチします。 正規表現の後に + があると、その正規表現複数個を表します。例えば、 [0−9]+ は、 + [0-9][0-9]* を意味します。 {m} {m,} {m,u} { } で囲まれた整数値は、前出の正規表現が適用されてもよい回数を表します。値 m は最小値を、 u は最大値を表します。ただし、これらは256を超えてはなりません。 Section 3-300 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 regcmp(3X) regcmp(3X) 構文 {m} は、正規表現が、ちょうど m 回だけ適用されてもよいことを表します。構 文 {m,} は、 {m,無限大} と同じ意味です。プラス記号 (+) およびアスタリスク (*) の 操作は、各々 {1,} および {0,} と同じです。 ( . . . )$n" 囲まれた正規表現の値が返されます。その値は、目的の引き数の後の (n+1) 番目の引 き数に格納されます。最大で 10 個まで正規表現をかっこで囲むことができます。 regex() は、無条件でこれらの正規表現を実行します。 かっこは、複数の文字をひとまとめにするのに使われます。 *, +, および { } などの操 (...) 作は、単独の文字あるいは、かっこで囲まれた正規表現に対して実行されます。 (a∗(cb+)∗)$0 は、かっこで囲まれた式の例です。 上で定義された記号は、すべて特殊文字なので、それ自身を表すときはエスケープしなければなりません。 例 cursor が指している、目的の文字列の中の、最初のニューラインを検索します。 char *cursor, *newcursor, *ptr; ... newcursor = regex((ptr = regcmp("ˆ\n", 0)), cursor); free(ptr); 文字列 Testing3 上を検索し、最後に検索された文字(cursor+11)の次に来る文字のアドレスを返します。文字列 Testing3 は、文字配列 ret0 にコピーされます。 char ret0[9]; char ∗newcursor, *name; ... name = regcmp("([A−Za−z][A−Za−z0−9_]{0,7})$0", 0); newcursor = regex(name, "123Testing321", ret0); 警告 ユーザーがプログラムに regcmp() を使う場合、不要になったベクタを解除しないまま繰り返し regcmp() を呼 び出すと、メモリが不足する可能性があります。 廃止インタフェース regcmp() および regex() は、将来廃止される予定です。 参照 ed(1), malloc(3C), regcomp(3C) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-301 regcomp(3C) regcomp(3C) 名称 regcomp( ), regerror( ), regexec( ), regfree( ) − 正規表現の照合 (マッチング) ルーチン 構文 #include <regex.h> int regcomp(regex_t *preg, const char *pattern, int cflags); int regexec( const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[ ], int eflags ); void regfree(regex_t *preg); size_t regerror( int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size ); 説明 これらの関数は、 regexp(5) で述べられている正規表現を変換します。これらは、 基本正規表現および 拡張正 規表現の両方をサポートしています。 構造体 regex_t および regmatch_t は、いずれもヘッダー <regex.h> で定義されています。 構造体 regex_t は、少なくとも以下のメンバーを含んでいます (他のメンバーを使用すると、互換性のないコー ドが発生します)。 size_t re_nsub かっこで囲まれた部分式の数 構造体 regmatch_t は、少なくとも以下のメンバーを含みます。 regoff_t rm_so 文字列の始まりからサブストリングの始まりまでの、オフセットのバイト 数 regoff_t rm_eo 文字列の始まりから、サブストリングが終わった次の文字までの、オフ セットのバイト数 regcomp() は、 pattern で指定した正規表現をコンパイルし、その結果を preg が指す位置に置きます。引き数 cflags は、以下のフラグ (<regex.h> で定義) のうち、0個以上をビットごとの論理 OR でつないだものです。 Section 3-302 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 regcomp(3C) regcomp(3C) REG_EXTENDED 拡張正規表現を使用 REG_NEWLINE cflags で REG_NEWLINE が立っていない場合、 pattern または string の中の ニューライン文字は、普通の文字として扱われます。 REG_NEWLINE が立てら れている場合、以下の場合を除き、ニューライン文字は普通の文字として扱われ ます。 1. string の中のニューライン文字は、ブラケットに囲まれた式の外側のピリオド および任意の不一致表現にはマッチしません。 2. REG_NOTBOL の設定いかんにかかわらず、 pattern の中で、式の固定を表す のに使われたサーカムフレクス (ˆ) は、 string のニューライン文字の直後の、 長さ0の文字列にマッチします。 3. REG_NOTEOL の設定いかんにかかわらず、 pattern の中で、式の固定を表す のに使われたドル符号 ($) は、 string のニューライン文字の直前の、長さ0の 文字列にマッチします。 REG_ICASE 照合の際、大文字/小文字を区別しません。 pattern に含まれる文字に対して、現在 の LC_CTYPE locale で、1つまたは複数の大文字/小文字の対が定義されている場 合、指定した文字と、その対の両方が照合の対象になります。これは、バックリ ファレンス式 (\n) を通して照合されるように指定された文字を含め、パターンの すべての部分について適用されます。 ブラケットに囲まれた式については、照合範囲、文字クラス、および等価クラス は、効果的に拡張され、照合要素や照合文字の等価リストが作られます。1つ1 つの照合要素および文字に対しては、大文字/小文字の対が作られ、ブラケットに 囲まれた式に対する完全な一致リストもしくは不一致リストが作成されます。複 数の文字からなる照合要素に対する大文字/小文字の対は、照合要素に含まれる個 々の文字に対する大文字/ 小文字の対の、すべての可能な組み合わせからなりま す。これら個々の文字は結合され、有効な複数の文字からなる新しい照合要素に なります。たとえば、 [.ch.] に対する大文字/小文字の対としては、 [.Ch.], [.cH.], および [.CH.] が考えられます。 デ フォ ル ト で、 pattern の 正 規 表 現 の 型 は 基 本 正 規 表 現 で す。 ア プ リ ケー ショ ン に で は、 cflags 値、 REG_EXTENDED を使うことで、拡張正規表現に指定できます。 regcomp() は、正常終了すると0を返します。失敗するとエラーを示す0でない値を返します。 cflags 内に REG_NOSUB フラグが立てられていなかった場合に regcomp() が正常終了すると、 regcomp() は、 re_nsub の値を、 pattern 内の、かっこで囲まれた部分式 (基本正規表現では、 \( と \) によって、また、拡張正 規表現では、 ( と ) によって囲まれます) の数に設定します。 regexec() は前 regcomp() を呼び出した際に初期化され、コンパイルされた正規表現 preg に対して、 string で指 定した null で終わる文字列をマッチさせます。マッチするものが見つかった場合、 regexec() は、0を返しま HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-303 regcomp(3C) regcomp(3C) す。失敗の場合には、マッチするものが見つからなかったか、エラーが発生したかを示す0でない値を返しま す。引き数 eflags は、以下のフラグの、ビットごとの論理和です。 REG_NOTBOL string で指している文字列の最初の文字が、行の先頭でないことを表します。した がって、サーカムフレクス文字 (ˆ) は、特殊文字として扱われた場合、絶対に一致 しません。 REG_NOTEOL string で指している文字列の最後の文字が、行の終りでないことを表します。した がって、ドル符号 ($) は、特殊文字として扱われた場合、絶対に一致しません。 nmatch が0でなく、 regcomp() の引き数 cflags 内に REG_NOSUB が立てられていない場合、 regexec() は、 pattern のかっこで囲まれた部分式に対応する、 string のサブストリングに対するオフセットのバイト数で配列 pmatch を埋めます。 pmatch[i].rm_so は、サブストリング i の始まりのオフセットバイト数、 pmatch[i].rm_eo は、サブストリング i の終りに1バイト足したオフセットバイト数を表します (部分式 i は、1から数えて i 番 目の左かっこで始まります)。 pmatch[0] のオフセットは、正規表現の全長に対応するサブストリングを表しま す。 pmatch の未使用の要素は、−1 にセットされます。 pattern 内に、 nmatch より多くの部分式がある場合も regexec() は照合を行いますが、最初の nmatch 個のサブストリングしか登録しません ( pattern そのものも部分 式として数えられます)。 正規表現の照合を行うとき、 pattern で与えられる、かっこで囲まれた任意の部分式は、 string の中の、複数の 異なるサブストリングと一致するかもしれません。あるいは、全体としてのパターンが一致している場合です ら、単独ではどのサブストリングとも一致しない場合もあります。以下で、正規表現の照合を行う場合に、ど のサブストリングが pmatch で報告されるかを説明します。 1. 正規表現の中の部分式 i が、別の部分式内にはなく、複数個のサブストリングと一致した場合、 pmatch[i] に格納されるオフセットバイト数は、最後に一致したときのものです。 2. 部分式 i が、別の部分式内にはなく、 (*, ?, または | が使われたために) 一度もサブストリングと 一致しなかった場合、 pmatch[i] のオフセットバイト数は −1 にセットされます。 3. 部分式 i が部分式 j に含まれており、部分式 j に関する一致が pmatch[ j] で報告されている場 合、その pmatch[ j] で報告されている部分式内で、最後に部分式 i と一致した場合が pmatch[i] で 報告されます。 4. 部分式 i が部分式 j に含まれており、 pmatch[ j] のオフセットが −1 の場合、 pmatch[i] のオフ セットも −1 になります。 5. 部分式 i が、長さ0の文字列と一致した場合、 pmatch[i] の2つのオフセットは、いずれもその 長さ0のサブストリングに関するものになります。 regcomp() への呼び出しで cflags 内に REG_NOSUB が立てられており、 regexec() への呼び出しで nmatch が0 でない場合、配列 pmatch の内容は不定です。 regfree() は、 preg に対する regcomp() によって割り当てられたメモリーをすべて解除します。 regexec() または regfree() への引き数 preg が、 regcomp() によって返された、コンパイル済みの正規表現でな Section 3-304 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 regcomp(3C) regcomp(3C) い場合、 regexec() または regfree() の結果は未定義です。 regfree() にいったん引き渡されると、 preg は、コン パイル済みの正規表現として扱われなくなります。 regerror() は、 regcomp() および regexec() によって返されるエラーコードから、印字できる文字列へのマッピ ングを提供します。 regerror() は、与えられた preg の値によって regcomp() または regexec() が最後に返した 0でない値である、 errcode パラメータの値に対応する文字列を生成します。 errcode パラメータは、 <regex.h> で定義されたエラー値をすべて取ることができます。 errbuf_size が0でない場合、 regerror() は、 errbuf で指定されたバッファーに、適当なエラーメッセージをコピーします。エラーメッセージ ( 終りの null を含む) が、バッファー内に納まらない場合、 errbuf_size − 1 バイトに切り捨てられ、null で終了します。 errbuf_size が0の場合、 errbuf パラメータは無視されますが、戻り値は以下の定義とおりになります。 regerror( ) は、エラーメッセージ全体 (終りの null を含む) を格納するのに必要なバッファーの大きさを返しま す。 多言語化対応 ロケール 正規表現をコンパイルし、実行するのに用いられる照合過程は、 LC_COLLATE カテゴリに依存します。 LC_CTYPE カテゴリは、テキストを、シングルバイトかマルチバイト文字、もしくはその両方として変換す るかどうか、また正規表現の文字クラス式によってどの文字が照合されるか、各文字の大文字/小文字の対がど の文字であるかを決定します。 サポートされるコードセット シングル/マルチバイトの文字コードセットがサポートされています。ただし、 LC_COLLATE と LC_CTYPE 変数に同じベースコードセットに基づいていないロケールカテゴリが指定されている場合、 regcomp() の動作 は不定です。 戻り値 regcomp() は、正常終了すると0を返し、無効な表現によるものを含む失敗に対しては0でない値を返しま す。 regexec() は、マッチすると0を返し、マッチしないか、またはその他のエラーに対しては0でない値を返 します。 エラー regcomp() および regexec() は、以下に記されたエラー状態に陥るとそのエラーに対応する0でないエラーコー ドを返します。エラーコードはヘッダー <regex.h> で定義されています。 REG_BADBR \{ (バックスラッシュ、左中かっこ) と \} (バックスラッシュ、右中かっこ) との 間の内容が無効。すなわち、数以外のもの、大きすぎる数、3つ以上の数が含 まれているか、最初の数が2番目の数よりも大きい場合 REG_BADPAT 無効な正規表現 REG_BADRPT ? (疑問符)、 * (アスタリスク)、または + (正符号) の前に有効な正規表現がない 場合 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-305 regcomp(3C) regcomp(3C) REG_EBRACE 使用している \{ (バックスラッシュ、左中かっこ) と \} (バックスラッシュ、右中 かっこ) または {} (中かっこ) の数が一致しない場合 REG_EBRACK 使用している [ ] (大かっこ) の数が一致しない場合 REG_EBOL ˆ (キャレット) アンカーが使用され、それが行の先頭にない場合 REG_ECHAR 無効なマルチバイト文字がある場合 REG_ECOLLATE 無効な照合要素が参照された場合 REG_ECTYPE 参照された文字クラスタイプが無効の場合 REG_EEOL $(ドル) アンカーが使用され、それが行末にない場合 REG_EESCAPE パターン内で \ が連続している場合 REG_EPAREN 使用している \( (バックスラッシュ、左かっこ) と \) (バックスラッシュ、右かっ こ)、または () の数が一致しない場合。 REG_ERANGE 範囲指定表現の終点が無効な場合 REG_ESPACE メモリー空間が不足している場合 REG_ESUBREG \digit 中の数が無効またはエラーの場合 REG_NOMATCH regexec() 関数がマッチしなかった場合 例 /* match string against the extended regular expression in pattern, treating errors as no match. Return 1 for match, 0 for no match. Print an error message if an error occurs. */ int match(string, pattern) char *string; char *pattern; { int i; regex_t re; char buf[256]; i=regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB); if (i != 0) { (void)regerror(i,&re,buf,sizeof buf); printf( %s\n",buf);" return(0); /* report error */ } Section 3-306 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 regcomp(3C) regcomp(3C) i = regexec(&re, string, (size_t) 0, NULL, 0); regfree(&re); if (i != 0) { (void)regerror(i,&re,buf,sizeof buf); printf( %s\n",buf);" return(0); /* report error */ } return(1); } 以下の例では、 REG_NOTBOL フラグを regexec() とともに使って、1つの行の中で、ユーザーが与えたパ ターンに一致するすべてのサブストリングを検索する方法を示します。 (void) regcomp(&re, pattern, 0); /* look for first match at start of line */ error = regexec(&re, &buffer[0], 1, &pm, 0); while (error == 0) { /* while matches found */ /* find next match on line */ error = regexec(&re, &buffer[pm.rm_eo], 1, &pm, REG_NOTBOL); } 著者 regcomp(), regerror(), regexec(), regfree() は、OSF および HP で開発されました。 参照 regexp(5) 標準準拠 regcomp(): XPG4, POSIX.2 regerror(): XPG4, POSIX.2 regexec(): XPG4, POSIX.2 regfree(): XPG4, POSIX.2 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-307 regexp(3X) regexp(3X) 名称 compile( ), step( ), advance( ) − 正規表現のコンパイルおよび照合ルーチン 構文 #define INIT declarations #define GETC() getc statements #define PEEKC() peekc statements #define UNGETC(c) ungetc statements #define RETURN(pointer) return statements #define ERROR(val) error statements #include <regexp.h> char *compile( char *instring, char *expbuf, const char *endbuf, int eof ); int step(const char *string, const char *expbuf); int advance(const char *string, const char *expbuf); extern char *loc1, *loc2, *locs; extern int circf, sed, nbra; 注 この項目に関して、このマニュアルに書かれてある特徴は旧版のものであり、将来の HP-UX の版では、削除さ れるかもしれません。 regcomp(3C) の使用を勧めます。 説明 これらの関数は、汎用の正規表現照合ルーチンで、基本正規表現( regexp(5) 参照)による照合を行うプログラム に使われます。これらの関数は <regexp.h> で定義されています。 関数 step() および advance() は、文字列とコンパイル済みの正規表現を入力として与えられると、パターンに よる照合を行います。 compile() は、基本正規表現を入力として読み込み、 step() および advance() で使用する ために、コンパイル済みの式を生成します。 このファイルに対するインタフェースは非常に複雑です。このファイルを含むプログラムは、 #include <regexp.h> 文の前に、以下の5つのマクロを宣言しておかなければなりません。これらのマクロは compile() ルーチ ンによって使用されます。 GETC() 正規表現パターンの中の、次に来るバイトの値を返します。 GETC() を続けて呼び出 すと、 GETC() は、正規表現のバイトを次々と返します。 Section 3-308 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 regexp(3X) regexp(3X) PEEKC() 正規表現の、次に来るバイトを返します。 PEEKC() を続けて呼び出すと、 PEEKC() は、 GETC() で次に来るバイトとして返されるのと同じバイトを返します。 UNGETC(c) 次に GETC() (および PEEKC()) を呼び出した際に、引き数 c が返されるようにしま す。 1 バイト以上の押し戻しが必要にはなることはないので、このバイトが、 GETC() によって読み込まれる最後のバイトであることは保証されています。マクロ UNGETC(c) の値は常に無視されます。 RETURN( pointer) このマクロは、 compile() ルーチンの通常終了時に使用されます。引き数 pointer の値 は、コンパイル済み正規表現の最後の文字の次に来る文字に対するポインタです。こ れは、メモリ割当てを管理するプログラムに便利です。 ERROR(val) これは、 compile() ルーチンが異常終了したことを知らせるものです。引き数 val は、エラー番号(意味は、以下の一覧を参照)です。この呼出しは二度と戻りません。 エラー 意味 11 範囲終点の過大 16 不正な数 25 ‘‘\digit’’ が範囲外 36 デリミタが無効もしくは不在 41 検索文字列の不在 42 \( \) の数の不一致 43 \( の過多 44 \{ \} 内に3つ以上の数 45 \ の後に } が必要 46 \{ \} の最初の数が2番目の数より大 49 [ ] の数の不一致 50 正規表現のオーバフロー compile() ルーチンの構文は以下のとおりです。 compile(instring, expbuf, endbuf, eof) 最初のパラメータ instring は、 compile() ルーチンで明示的に使われることはありませんが、文字を入力すると きに、次々と異なるポインタを受け渡すようなプログラムに便利です。これは、時々 INIT 宣言に用いられま す(以下を参照)。文字の入力に関数を呼び出すプログラムや、外部配列に文字を格納するプログラムでは、こ のパラメータに対し、 ((char *) 0) の値を受け渡せます。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-309 regexp(3X) regexp(3X) 次のパラメータ expbuf は、文字ポインタです。これは、コンパイル済みの正規表現が配置される位置を指しま す。 パラメータ endbuf は、コンパイル済みの正規表現が格納可能なアドレスよりも 1つだけ大きい値です。コンパ イル済みの式が (endbuf − expbuf ) バイトに納まらないと ERROR(50) が呼び出されます。 パラメータ eof は、正規表現の終わりを示す文字です。例 ed(1) では、この文字は通常 / です。 このファイルを含むプログラムは、 INIT に対する #define 文を含む必要があります。この定義は、関数 compile() の宣言と、関数の始まりの中かっこ { の直後に置かれます。 INIT は、従属宣言および初期化に用いられ ます。これは、レジスタ変数を GETC(), PEEKC(), UNGETC() での宣言で使用できるよう、このレジスタ変数 が正規表現の始点を指すようにするためによく使用されます。あるいは、 INIT は、 GETC(), PEEKC(), およ び UNGETC() で用いられる可能性のある外部変数の宣言に使用することもできます。 grep(1) から取られた、 以下の宣言の例を参照してください。 step() は、このファイルで、実際の正規表現の照合を行います。 step の呼び出しは、以下のように行われま す。 step(string, expbuf ) step() に対する最初のパラメータは、照合を受ける文字の文字列に対するポインタです。この文字列は、nullで 終了する必要があります。 2番目のパラメータ expbuf は、 compile() の呼出しで取得されたコンパイル済みの正規表現です。 step() は、与えられた文字列が正規表現とマッチすると、0でない値を返し、マッチしないと0を返します。文 字列が正規表現とマッチすると、 step() 呼出しの副作用として、2つの外部文字ポインタがセットされます。 step() によってセットされる変数は、 loc1 です。これは正規表現とマッチした文字列の最初の文字に対するポ インタです。変数 loc2 は、関数 advance() によってセットされ、正規表現とマッチした文字列の最後の文字の 次に来る文字に対するポインタが格納されます。したがって、正規表現が行全体とマッチした場合、 loc1 は、 string の最初の文字を指し loc2 は、 string の終りのnullを指します。 正規表現が ˆ で始まる場合、 step() は、 compile() がセットする外部変数 circf を使います。この外部変数が セットされると、 step() は、正規表現を文字列の始まりに対してのみマッチさせようとします。 step() を実行 される前に、1つ以上の正規表現をコンパイルする場合、コンパイルする1つ1つの式に対して circf の値を記憶 しなければなりません。そして、 step() を呼び出すたびに circf の値を、記憶した値に設定しなおさなければ なりません。 advance() は、 step() によって、 step() と同じ引き数で呼び出されます。 step() の目的は、引き数 string の上を 1歩1歩進んでいって advance() を呼び出し、 advance() が、マッチを表す0でない値を返すか、 string の終わり に到達するまで操作を繰り返すことです。行の先頭に対してのみ string の検索を行うならば、 step() を呼び出 さず、 advance() を呼び出しさえすればいいのです。 advance() が正規表現の中で * か、 \{ \} シーケンスに行き当たると、 advance() は、ポインタを、照合を行うべ き文字列の中のできるだけ遠い位置まで進め、そこから逆向きに進みながら自分自身を再帰的に呼び出し、正 規表現の残りに対して文字列の残りをマッチさせようとします。 advance は、照合した結果見つかるか、最初 Section 3-310 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 regexp(3X) regexp(3X) に * または \{ \} を見出した位置にたどり着くまで、文字列上を逆向きに進みます。文字列のもとの位置にたど り着く前に、この逆進を止めたい場合があります。逆進プロセスの最中に、 advance の指す文字列の位置が、 外部文字ポインタ locs の指す位置とマッチした場合、 advance() は、逆進操作をブレークし0を返します。こ の方法は、 ed(1) および sed(1) によって、置換をグローバルに行う(最初に照合した結果見つかった場合だけで なく、行全体で行う)のに用いられます。この方法により、 s/y*//g のような式で無限ループを防ぐことができ ます。 補助外部変数 sed および nbra は、特別な目的のために用いられます。 多言語化対応 Locale 正規表現をコンパイルし、実行するのに用いられる照合過程は、 LC_COLLATE カテゴリに依存します。 LC_CTYPE カテゴリは、テキストを、シングルバイトかマルチバイト文字、もしくはその両方として翻訳す るかどうか、また、正規表現の文字クラス式によってどの文字が照合されるかを、決定します。 サポートされるコードセット シングル/マルチバイト文字コードセットがサポートされています。 例 以下の例は、 grep (1) における、正規表現のマクロと呼出しがどのようなものであるかを示したものです。 #define INIT register char *sp = instring; #define GETC() #define PEEKC() #define UNGETC(c) #define RETURN(c) #define ERROR(c) (*sp++) (*sp) (--sp) return; regerr() #include <regexp.h> ... (void) compile(*argv, expbuf, &expbuf[ESIZE], ’\0’); ... if (step(linebuf, expbuf)) succeed(); 参照 grep(1), regcomp(3C), setlocale(3C), regexp(5) 標準準拠 advance(): AES, SVID2, XPG2, XPG3, XPG4 compile(): AES, SVID2, XPG2, XPG3, XPG4 loc1: AES, SVID2, XPG2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-311 regexp(3X) regexp(3X) loc2: AES, SVID2, XPG2, XPG3, XPG4 locs: AES, SVID2, XPG2, XPG3, XPG4 step(): AES, SVID2, XPG2, XPG3, XPG4 Section 3-312 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 reltimer(3C) reltimer(3C) 名称 reltimer − プロセスごとのタイマーを相対化 構文 #include <sys/timers.h> int reltimer( timer_t timerid, struct itimerspec *value, struct itimerspec *ovalue ); 説明 reltimer() 関数は、指定したタイマーの it_value を、現在のクロック設定からのオフセットにします。 reltimer() によって指定された引き数 value の it_value メンバーが0だった場合、タイマーは無効になります。 reltimer() は、タイマーの it_interval 値を、指定された値に更新します。時間値のうち、指定したタイマーの分 解能よりも小さいものは、指定したタイマーの分解能まで切り上げられ、指定したタイマーの最大値より大き なものは、指定したタイマーの最大値まで切り下げられます (mktimer(3C) 参照)。 reltimer() は、 ovalue パラメータとして、前回タイマーで測られた時間とともに、前回タイマーが時間切れに なるまでの残りの時間か、タイマーが無効になっていれば0を返します。 ovalue のメンバーは、タイマーの分 解能に依存しますが、 gettimer() と同じ値を返します。 value が NULL の場合、この関数の動作は未定義です。 戻り値 正常終了すると、 reltimer() は0を返します。失敗すると −1 を返し、エラーを特定するために errno をセット します。 エラー reltimer() は、次の条件のいずれかが満たされると、失敗します。 [EINVAL] timerid が、 mktimer() によって返された ID に対応していなかったか、もしくは、時間 値の構造体に、0よりも小さいか、10 億以上の、ナノ秒の値を指定した場合 [EIO] クロックデバイスにアクセスしている間に、エラーが生じた場合 ファイル /usr/include/sys/timers.h 参照 timers(2), gettimer(3C), mktimer(3C), thread_safety(5) 標準準拠 reltimer(): AES HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-313 remainder(3M) remainder(3M) 名称 remainder( ), remainderf( ), remainderl( ), remainderw( ), remainderq( ) − 剰余関数 構文 #include <math.h> double remainder(double x, double y); Itanium(R)ベース システムのみ float remainderf(float x, float y); long double remainderl(long double x, long double y); extended remainderw(extended x, extended y); quad remainderq(quad x, quad y); 説明 remainder() 関数は、 y が0でない場合、浮動小数点の剰余 r = x − ny を返します。値 n は、値 x/y に最も近い 整数値で、 n − x/y = ½ の場合、値 n として偶数を選択します。 remainder() 関数は、丸めモードに依存しません。 Itaniumベース システムのみ remainderf() は、 remainder() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 remainderl() は、 remainder() の long double バージョンで、 long double 型の引き数をとり、 long double 型の 結果を返します。 remainderw() は、 remainder() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を 返します。 remainderq() は、HP-UX システムでは remainderl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで remainderw() または remainderq() を使うには、 −fpwidetypes オプションも指定して コンパイルしてください。 プログラムに <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカーのコマンド 行で −lm を指定して、数学ライブラリとリンクしてください。 戻り値 y が ±INFINITY で、 x が ±INFINITY でない場合、 remainder() は、 x を返します。 x が ±0 で、 y が0でない場合、 remainder() は、 x を返します。 x または y が NaN の場合、 remainder() は、NaN を返します。 Section 3-314 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 remainder(3M) remainder(3M) y が0の場合、 remainder() は NaN を返し、無効例外が発生します。 x が ±INFINITY の場合、 remainder() は NaN を返し、無効例外が発生します。 エラー y が0、または x が無限大の場合、 remainder() は errno に [EDOM] を設定します。 Itaniumベース システムのみ Itaniumベース システムでの HP-UX の libm 関数は、デフォルトでは errno を設定しません。 errno を設定す るには、 +Olibmerrno オプションとデフォルトの +Olibcalls を指定してコンパイルしてください。 参照 fmod(3M), fabs(3M), remquo(3M), math(5) 標準準拠 remainder() : SVID3, XPG4.2, IEEE-754, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) remainderf(), remainderl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-315 remove(3C) remove(3C) 名称 remove( ) − ファイルの削除 構文 #include <stdio.h> int remove(const char *path); 説明 remove() は、 path で 指 定 さ れ た ファ イ ル を 削 除 し ま す。 path が ディ レ ク ト リ 名 を 表 さ な い と き は、 remove( path) は unlink( path) と等価です。 path がディレクトリ名を表すときは、 remove( path) は rmdir( path) と等価です。 参照 rmdir(2), unlink(2), thread_safety(5) 標準準拠 remove(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-316 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 remquo(3M) remquo(3M) 名称 remquo( ), remquof( ), remquol( ), remquow( ), remquoq( ) − 商を持つ剰余関数 構文 #include <math.h> double remquo(double x, double y, int *quo); Itanium(R)ベース システムのみ float remquof(float x, float y, int *quo); long double remquol(long double x, long double y, int *quo); extended remquow(extended x, extended y, int *quo); quad remquoq(quad x, quad y, int *quo); 説明 remquo() 関数は、 remainder() 関数と同じように剰余を計算します。これは、 quo が指すオブジェクトに、 x/y の符号を持ち、 x/y の整数商の絶対値に対して 2n を法とした値を格納します。ここで n は HP-UX システ ムの場合7です。 Itaniumベース システムのみ remquof() は、 remquo() の float バージョンで、 float 型の (第1、第2) 引き数をとり、 float 型の結果を返し ます。 remquol() は、 remquo() の long double バージョンで、 long double 型の ( 第1、第2) 引き数をとり、 long double 型の結果を返します。 remquow() は、 remquo() の extended バージョンで、 extended 型の (第1、第2) 引き数をとり、 extended 型 の結果を返します。 remquoq() は、HP-UX システムでは remquol() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで remquow() または remquoq() を使うには、 −fpwidetypes オプションも指定してコン パイルしてください。 プログラムに、 <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカーのコマン ド行で −lm を指定して、数学ライブラリとリンクしてください。 戻り値 remquo() 関数は、 remainder() と同じ値を返し、同じ例外が発生します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-317 remquo(3M) remquo(3M) エラー エラーは、定義されていません。 SEE ALSO fmod(3M), fabs(3M), remainder(3M), math(5) 標準準拠 remquo(), remquof(), remquol() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-318 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 resetty(3X) resetty(3X) 名称 resetty, savetty — ターミナルモードの保存/復元 構文 #include <curses.h> int resetty(void); int savetty(void); 説明 resetty() 関数は、最後に savetty() を呼び出したときと同じ状態にプログラムモードを復元します。 savetty() 関数はステータスを保存します。このステータスは reset_prog_mode() の呼び出しによって正しく設 定されます。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 def_prog_mode(), <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。 resetty() および savetty() の両関数の引き数リス トは、明示的に void で宣言されています。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-319 resolver(3N) resolver(3N) 名称 resolver: dn_comp(), dn_expand(), get_resfield(), herror(), res_init(), res_mkquery(), res_query(), res_search(), res_send(), set_resfield() − リゾルバルーチン 構文 #include <sys/types.h> #include <netinet/in.h> #include <arpa/nameser.h> #include <resolv.h> ssize_t res_query( char *dname, int class, int type, u_char *answer, int anslen ); ssize_t res_search( char *dname, int class, int type, u_char *answer, int anslen ); ssize_t res_mkquery( int op, const char *dname, int class, int type, const char *data, int datalen, const char *newrr, char *buf, int buflen ); ssize_t res_send( const char *msg, ssize_t msglen, char *answer, Section 3-320 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 resolver(3N) resolver(3N) int anslen ); int res_init(); ssize_t dn_comp( const char *exp_dn, u_char *comp_dn, ssize_t length, u_char **dnptrs, u_char **lastdnptr ); ssize_t dn_expand( const u_char *msg, const u_char *eomorig, const u_char *comp_dn, u_char *exp_dn, int length ); int set_resfield( int field, void *value ); int get_resfield( int field, void *value, sizeof value ); 廃止インタフェース void herror(const char *s); 説明 これらのルーチンは、インターネットドメイン ネームサーバーを使って、問い合わせ、および返答メッセージ を作成、転送、および翻訳するのに使用されます。 リゾルバルーチンで使われるグローバル構成および状態に関する情報は、構造体 _res に格納され、 <resolv.h> で定義されます。ほとんどのフィールドは、適当なデフォルト値を持っており無視できます。リゾルバオプ ションは _res.options フィールドに格納されます。次のようなオプションがあります。オプションは使用可能 にされたオプションのビット毎のORが入った簡単なビットマスクとして格納されます。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-321 resolver(3N) resolver(3N) マルチスレッド環境では、スレッド固有の _res 構造体がそれぞれのスレッドに対して割り当てられます。 RES_INIT 初期のネームサーバー アドレスおよびデフォルトのドメインネームが初期化さ れていれば (すなわち、 res_init() が呼び出し済みであれば)、真です。 RES_DEBUG RES_AAONLY デバッグメッセージを表示します。 承認可能な返答をのみ受け付けます。このオプションでは、 res_send() は、承 認可能な返答を見出すか、エラーを見出すまで実行を続けます。現在では、こ のオプションは、備えられていません。 RES_PRIMARY 主要サーバーにのみ、問い合わせます。現在では、このオプションは備えられ ていません。 RES_USEVC 問合わせに UDP データグラムでなく、 TCP 接続を使用します。 RES_STAYOPEN RES_USEVC とともに用いられ、問合わせの間の TCP 接続を保持します。これ は、通常、頻繁に問合わせを行うプログラムにのみ有用です。基本的には UDP モードを使用してください。 RES_IGNTC データ全体が、応答用のデータグラムパケットに納まらない場合、ネームサー バーが切り捨てるビットを設定します。 RES_IGNTC が設定されている場合、 res_send() は、 TCP で問合わせをやりなおしません (すなわち、削減のエラーを 無視します)。 RES_RECURSE 問合わせで繰り返すべきビットを設定します。これがデフォルトの状態です (res_send() は、みずから問合わせを繰り返さず、ネームサーバーに繰り返し処 理を実行させようとします)。 RES_DEFNAMES このオプションが設定されると、 res_search() は、デフォルトのドメインネーム を単一構成の名前 (.を含まないもの) に付け加えます。このオプションはデフォ ルトでセットされています。 RES_DNSRCH このオプションが設定されると、 res_search() は、ホスト名を、現在のドメイン および上位のドメインで探します (hostname(5) を参照)。これは、ホスト検索の 標準ルーチンである、 gethostbyname() によって使用されます (gethostent(3N) を 参照)。このオプションはデフォルトでセットされています。 リソルバー構造体の初期化は通常、以下に示すリゾルバルーチンの1つが最初に呼び出された時に行われま す。設定ファイルにエラーがあった場合は、それらは単に無視されます。 再伝送タイムアウトの値と、再試行回数は構成できます。これらは、 _res 構造体の retrans フィールドと retry フィールドに対応しています。次に示す3つの選択肢は、再伝送タイムアウトと再試行の値を構成するための もので、優先順位の高い順にリストされています。 Section 3-322 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 resolver(3N) resolver(3N) 1. 環境変数 2. 構成ファイル /etc/resolv.conf 3. set_resfield() API の呼び出し retrans および retry は、環境変数 RES_RETRANS および RES_RETRY を用いて次のように構成できます。 RES_RETRANS=values in milliseconds RES_RETRY=number of retries あるいは、 resolv.conf に、次のような名前と値のペアを追加します。 retrans value in milliseconds retry number of retries 環境変数と resolv.conf ファイルのエントリーは、 res_init() API が呼び出された時に解釈されますが、 API set_resfield() は、プログラムコードから明示的に呼び出す必要があります。 retrans および retry の値を低い優 先順位のオプションで設定すると、これらの値が高い優先順位のオプションで構成された場合には無視されま す。 resolv.conf または環境変数に無効な値を指定すると、 syslog にメッセージが出力されます。 retrans は、 ミリ秒単位で指定し、デフォルト値は5000ミリ秒です。 retry のデフォルト値は4です。 主要ルーチン res_init() 構成ファイル /etc/resolv.conf を読み取り、デフォルト ドメインネーム、検索リスト、 ローカル ネームサーバーのインターネットアドレス、 retrans と retry の値を取得しま す。サーバーが配置されていない場合、解決ルーチンを実行しているホストが検索され ます。現在のドメインネームは、構成ファイルで明記されていなければホスト名によっ て定義されます。現在のドメインネームは環境変数 LOCALDOMAIN でオーバーライド できます。この環境変数にはいくつかのトークンを空白で区切って入れることができ、 プロセスごとに検索リストをオーバーライドします。これは設定ファイルにおける search コマンドに類似しています。また、上記設定ルーチンを使って設定してある内部 リソルバーオプションや、設定ファイルの options コマンドを使って設定してある内部 リソルバーオプションのなかには、 RES_OPTIONS のような別の環境変数を設定する ことでオーバーライドできるものもあります。 RES_OPTIONS 環境変数の構文につい ては resolver(4) を参照してください。 retrans および retry の resolv.conf エントリーは、 それぞれ RES_RETRANS および RES_RETRY 環境変数によって無効にできます。 res_query() サーバーの問合わせ機構に対して、インタフェースを提供します。すなわち、問合わせ を作成し、ローカルサーバーに転送し、応答を待ち受け、返答に対する予備的なチェッ クをします。問合わせは、指定した完全に資格を与えられたドメインネーム dname の、 指定した type と class の情報を要求します。返答メッセージは、 answer バッファーに格 納されます。このバッファーの長さ anslen は、呼び出し側が提供します。 res_search() res_query() と 同 様、 問 合 わ せ を 作 成 し 応 答 を 待 つ の で す が、 さ ら に、 オ プ ショ ン RES_DEFNAMES および RES_DNSRCH によって制御される検索方法およびデフォル HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-323 resolver(3N) resolver(3N) ト状態を設定します。最後に成功した応答を返します。 set_resfield() _res 構造体の、 retry および retrans フィールドの値を設定します。 retrans オプション の値はミリ秒単位で指定します。また、このルーチンは、ユーザーが retry および retrans オプションに設定しようとしている値のチェックも行います。 set_resfield() は、 正常終了すると 0 を返し、失敗すると −1 を返します。 set_resfield() への呼び出しが失 敗するのは、引き数として渡されたフィールドの値が、それより高い優先順位のオプ ション ( 名前と値のペアを resolv.conf ファイルに入力する、環境変数 RES_RETRANS および RES_RETRY を設定するなど) ですでに設定されている場合です。 get_resfield() _res 構造体の retry および retrans フィールドの値を取得します。 get_resfield() は、正常 終了すると、要求されたフィールドの値を返し、失敗すると −1 を返します。引き数が retrans と retry のどちらも参照していない場合は失敗します。 その他のルーチン 以下に記すルーチンは、 res_query() が使用する、低水準のルーチンです。 res_mkquery() 標準の問合わせメッセージを構成し、 buf に配置します。また、問合わせの大きさを返 すか、問合わせが buflen より大きいと −1 を返します。通常、問合わせの型 op は QUERY ですが、 <arpa/nameser.h> で定義されている問合わせの型であればどの型でも かまいません。問合わせのドメインネームは dname によって与えられます。 class は、 <arpa/nameser.h> で定義されているどの問合わせのクラスでもかまいません。 type は、 <arpa/nameser.h> で定義されているどの問合わせのクラスでもかまいません。 data は、 反転の問合わせ (IQUERY) のデータです。 newrr は、現在では使用されていませんが、 メッセージ更新の用途に使用されます。 res_send() フォーマットされた問合わせを転送し、返答を受け取ります。 RES_INIT がセットされ ていなければ res_init() を呼び出してローカル ネームサーバーに問合わせを送り、時間 切れやリトライを扱います。 res_send() は、返答メッセージの長さ、もしくは、エラー が発生した場合は −1 を返します。 dn_comp() ドメインネーム exp_dn を圧縮し、 comp_dn に格納します。また、圧縮後のドメイン ネーム、もしくは、エラーが発生した場合は −1 を返します。 length は comp_dn が指す 配列の大きさです。圧縮には現在のメッセージの中で、あらかじめ圧縮されたドメイン ネームに対するポインターの配列 dnptrs を使用します。最初のポインターは、メッセー ジの始まりを指し、ポインターのリストは NULL で終わります。配列に対する制限は、 lastdnptr で指定されています。 dn_comp() の副作用は、ドメインネームが圧縮される 際、メッセージに挿入されるラベルに対するポインターのリストが更新されることで す。 dnptr が NULL だと、ドメインネームは圧縮されません。 lastdnptr が NULL だ と、ラベルのリストは更新されません。 dn_expand() 圧縮されたドメインネーム comp_dn を、正規のドメインネームに戻します。圧縮された ドメインネームは、問合わせや、返答メッセージに含まれています。 msg は、メッセー Section 3-324 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 resolver(3N) resolver(3N) ジの始まりに対するポインターです。圧縮されていないドメインネームは、 exp_dn で指 定される、大きさ length のバッファーに格納されます。 dn_expand() は、圧縮されたド メインネームの大きさ、もしくは、エラーが発生した場合は −1 を返します。 廃止ルーチン herror() 既存のアプリケーションは、 herror() を使ってエラーメッセージを表示し、エ ラー内容を知らせることができます。ただし、ANSI アプリケーションで herror() を使う場合は、次のように指定しなければなりません。 void herror(const char *); herror() を実行すると、引き数の文字列 s が最初に表示され、その後ろにコロ ン、空白、メッセージ、改行がこの順序で表示されます。 herror() は将来のリ リースで削除される予定です。 戻り値 res_search() は、戻り値 −1 によってエラーを報告します。外部整数 h_errno を調べれば、エラーが一時的なも のか、それとも無効もしくは未知ホストによるものかが分かります。 カーネルスレッドを使用するマルチスレッドアプリケーションでは、スレッド固有の h_errno が、それぞれの スレッドに対して割り当てられます。 エラー h_errno は、以下の値を取ります。 HOST_NOT_FOUND ホストが未知です。 TRY_AGAIN 一時的なエラーで、ローカルサーバーに、資格のあるサーバーからの応答がな かったことを意味します。時間をおいてリトライすれば成功することもありま す。 NO_RECOVERY 予期できないサーバーのエラーが発生しました。このエラーは、復旧不能で す。 NO_DATA 要求した名前は、ネームサーバーには既知の名前ですが、この名前を持つデー タ型が存在しません。これは一時的なエラーではありません。同じドメイン ネームを使って、違うデータ型をネームサーバーに要求すれば、解答が得られ ます。 警告 _res.options フィールドは、直接変更しないでください。変更するときは、必ず set_resfield() を使い、他の方法 は使ってはいけません。 h_errno は、スレッド化されていないアプリケーションでは extern int として参照さ れますが、マルチスレッドアプリケーションでは、ファイル /usr/include/netdb.h で関数を呼び出すマクロとし て定義されています。 h_errno を参照するアプリケーションでは、 /usr/include/netdb.h をインクルードする必 要があります。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-325 resolver(3N) resolver(3N) _res は、スレッド化されていないアプリケーションでは extern struct _res_state として参照されますが、マル チスレッドアプリケーションでは、ファイル /usr/include/resolv.h で関数を呼び出すマクロとして定義されてい ます。 _res を参照するアプリケーションでは、 /usr/include/resolv.h をインクルードする必要があります。 著者 以上のリゾルバルーチンは、カリフォルニア大学バークレイ校で開発されました。 ファイル /etc/resolv.conf リゾルバルーチン構成ファイル 参照 named(1M), gethostent(3N), resolver(4), hostname(5), thread_safety(5), RFC1034, RFC1035, RFC1535. Section 3-326 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 rexec(3N) rexec(3N) 名称 rexec() − リモートコマンドにストリームを返還 構文 int rexec(char **ahost, int inport, const char *user, const char *passwd, const char *cmd, int *fd2p); 説明 rexec() ルーチンは、 passwd によって認証される user としてリモートホスト *ahost 上で cmd をリモート実行 する場合に必要となるタスクを実行します。認証が完了すると、 cmd の標準入力と標準出力がアタッチされた ソケットにファイル記述子が返されます。 rexec() に対するコマンドレベル インタフェースは、 rexec コマン ドによって与えられます (remsh(1) を参照)。 rexec() が呼び出されると、 gethostbyname() を使ってホスト *ahost を探し (gethostent(3N) を参照)、ホストが 存在しなければ −1 を返します。ホスト名は、公式のホスト名でも、別名でもかまいません。 gethostbyname() の呼出しが成功すると、 *ahost はホストの標準名に設定されます。次に rexec() は、認証のためユーザー名と パスワードをリモートホストに送ります。このユーザー名とパスワードは、 rexec() に対する user および passwd パラメータで指定できます。 user または passwd のどちらかが NULL の場合、 rexec() は、ユーザーの ホームディレクトリにある .netrc ファイル (netrc(4) を参照) 内で正しい情報を探します。 rexec() によって、 ユーザーは、デフォルトをローカルユーザー名と NULL パスワードとして、リモートユーザー名とパスワード の入力を求められます。 inport 変数は、接続にどの TCP ポートを使用するか指定します。通常、次のように getservbyname(3N) コマンド を呼び出して返される値を使用します。 getservbyname("exec", "tcp") (getservent(3N) 参照)。 rexec() が使用するプロトコルの詳細は、 rexecd(1M) で述べられています。 呼出しが実行されると、 SOCK_STREAM のタイプのソケットが呼出し側に返され、リモートコマンドに stdin および stdout として与えられます。 5回実行してもソケットへの接続が否定される場合、あるいはポー ト使用中という理由を除き、何らかの原因で接続できない場合は、 rexec() は −1 を返します。 rexec() は −1 を 返します。 fd2p がゼロでなければ、制御プロセスに対して予備の接続が行われ、記述子が * fd2p に格納されま す。この接続で、制御プロセスは、コマンドからの診断出力を返します。また、この接続を通して UNIX のシ グナル番号を翻訳して受け入れ、コマンドのプロセスグループに進めるようにします。予備のポートが確立で きない場合、 rexec() は −1 を返します。 fd2p が0の場合、リモートコマンドの stderr は、 stdout と同じにさ れ、任意のシグナルをリモートプロセスに送信するための準備はなされません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-327 rexec(3N) rexec(3N) 診断 rexec() が呼びだされると、以下の診断メッセージを提示します。 hostname: Unknown host gethostbyname() がリモートホスト名を見い出せませんでした。 system call: message system call の実行中にエラーが起きました。 message は、エラーの原因を表します。 connect: hostname: message rexec() 用に取得されたソケットへ接続ができません。 message は、エラーの原因を表します。 Secondary socket: message rexec() がエラー送出に使う、2次ソケットが作れません。 read: hostname: message ソケットを通じて転送された情報を読み込む際にエラーが生じたことを表します。 message は、エ ラーの原因を表します。 Connection timeout エラー接続用の、第2 のソケットがセットアップされてから30 秒以内に、リモートホストからこのソ ケットへの接続が行われなかったことを表します。 Lost connection ソケットからの読込みをプログラムが行えなかったことを表します。これは、リモートホストからの ソケット接続が失われたことを意味します。 .netrc: message ホームディレクトリに存在する .netrc ファイルを開く際、何らかの理由でエラーが生じたことを表し ます。 Error - .netrc file not correct mode. Remove password or correct mode. .netrc ファイルは、所有者以外のユーザーでも読取り、書込み、実行が可能です。 事後策 : .netrc が他人によって変更されていないか確認し、 .netrc のモードを変更してください (chmod 400 .netrc) 。 Unknown .netrc option keyword 未知のキーワードを .netrc の中に見出したことを表します (netrc(4) を参照)。 事後策: .netrc のキーワードを訂正してください。 primary connection shutdown Section 3-328 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rexec(3N) rexec(3N) 第2の接続が行われるまでの間に、 rexec() によって、第1の接続がシャットダウンされたことを表しま す。これは、 inetd の保護が失敗したことによる可能性があります (inetd(1M) 参照)。 recv: message 第2の (stderr) ソケット接続が行われるまでの間に、第1の接続において rexec() がエラー状態になった ことを表します。 accept: Interrupted system call 第2 のソケット接続が行われるまでの間に、 rexec() のリソースが不足して、接続がタイムアウトに なったことを表します。 事後策 : コマンドを繰り返してください。タイムアウトが生じた場合、 Internet Services がインストー ルされていて、 inetd が実行されているか確認してください。 例 date コマンドを、リモートアカウント chm を使ってリモートホスト hpxzgy 上で実行する場合、 rexec() は次 のように呼び出されます。 #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> char *host[] = { "hpxzgy" }; char *user = "chm"; char *passwd = "password"; char *cmd = "date"; main(argc, argv) char **argv; int argc; { char ch; struct servent *servent; FILE *fp; int sd; servent = getservbyname("exec", "tcp"); sd = rexec(host, servent−>s_port, user, passwd, cmd, 0); fp = fdopen(sd, "r"); while ((ch = getc(fp)) != EOF) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-329 rexec(3N) rexec(3N) putchar(ch); } 警告 rexec() が行う socket() の呼出しに対するオプションを指定する方法はありません。 rexec() によって、ユーザーが、パスワードまたはユーザー名の入力を求められる可能性がある場合は、 rexec() を使用しているプログラムをバックグラウンドに入れないでください。 rexec() をバックグラウンドに入れる と、入力用の現在のシェルプロセスと競合することになります。 rexec() は、 (*ahost) に対するポインタを、スタティックデータ領域内にある、ホストの標準名に対するポイン タで置き換えてしまうので、元の値を後から使いたい場合には、あらかじめユーザーのデータ領域にその値を コピーしておかなければなりません。 パスワードは、ソケットを通じて、暗号化されずに転送されます。 著者 rexec() はカリフォルニア大学バークレー校で開発されました。 参照 remsh(1), inetd(1M), rexecd(1M), gethostent(3N), getservent(3N), rcmd(3N), netrc(4) Section 3-330 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 re_comp(3X) re_comp(3X) 廃止予定 名称 re_comp, re_exec — 正規表現のコンパイルおよび実行 構文 #include <re_comp.h> char *re_comp(const char *string); int re_exec(const char *string); 説明 re_comp() 関数は、正規表現の文字列(RE)をパターンマッチングに適した内部形式に変換します。 re_exec() 関 数は、引き数stringがポイントする文字列を、 re_comp() に渡した最後の正規表現と比較します。 re_comp() が引き数nullポインタを用いて呼び出される場合、正規表現は変更されません。 re_comp() および re_exec() の両方に渡される文字列は、nullバイトで終了していなければならず、改行文字を 含むことができます。 re_comp() および re_exec() 関数は、後述する simple regular expressionsをサポートします。 以下は、1文字のREが、どのような1文字と一致するかを説明しています。 1.1 (後述の1.2で説明する特殊文字ではない)一般の文字は、その文字自体と一致するような1文字の REです。 1.2 特殊文字とその前にあるバックスラッシュ(\)は、その特殊文字自体と一致するような1文字のRE です。特殊文字は、次の通りです。 a. .、 *、 [、 \ ( ピリオド、アスタリスク、左の角かっこ、バックスラッシュ)。これら は、角かっこ([ ]; 後述の1.4を参照)内で現れる場合を除き、常に特殊文字です。 b. ˆ( 脱字符号、または曲折アクセント記号)。この文字がRE 全体の先頭にあるか、また は、1対の角かっこ ([ ]) の左の角かっこの直前にある場合 ( 後述の 3.1 および 3.2 を参 照)、これは特殊記号です(後述の1.4を参照)。 c. $ (ドル記号)。この文字がRE全体の最後にある場合、これは特殊記号です(後述の3.2を 参照)。 d. 角括弧([])は、RE全体に境界をつける(区切る)ために使用される文字です。これは、そ のREにとっては特殊記号です。 1.3 1.4 ピリオド (.) は、改行を除くあらゆる文字と一致する、1文字のREです。 角かっこ([ ])で囲まれた空でない文字列は、その文字列の中の任意の1文字と一致するような1文 字のREです。ただし、文字列の先頭の文字が曲折アクセント記号(ˆ)である場合、その1文字のRE は、文字列内の改行文字とその残りの文字を除いた、すべての文字と一致します。 ˆは、その文字 列での先頭にある場合にのみ、このような特別な意味を持ちます。 ASCII文字の連続した範囲を 示すために、マイナス(−)が使用されることがあります。例えば、[0−9]は、[0123456789]と同じで HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-331 re_comp(3X) re_comp(3X) 廃止予定 す。 −が、文字列の先頭(ˆがある場合は、先頭のˆの直後)、または最後にある場合、このような特 別な意味を失います。右の角かっこ(])は、それが文字列内で先頭(ˆがある場合、先頭のˆの直後)に ある場合、文字列は終了しません。例えば、[ ]a−f]は、右の角かっこ(])、または、aからfまでの いずれかの英字と一致します。上述の1.2.aの4つの特殊文字は、このような文字列内ではその文字 自体を意味します。 次の規則は、1文字のREからREを構築するのに使用されます。 2.1 2.2 1文字のREは、1文字のREが一致するものと一致するREです。 アスタリスク(*)とその前にある1文字のREは、1文字のREの0個以上の出現箇所と一致するRE です。選択が可能な場合、一致を許可する最左かつ最長の文字列が選択されます。 2.3 \{m\}, \{m,\}, または \{m,n\}が続く1文字のREは、1文字のREの出現箇所の範囲と一致するREで す。 m および n の値は、256未満の負でない整数でなければなりません。 \{m\}は、 m の出現箇 所とぴったり一致します。 \{m,n\}は、少なくとも m の出現箇所と一致します。 \{m,n\}は、 m か ら n の間の出現箇所のあらゆる数字と一致します。選択が存在する場合、REはできるだけ多くの 出現箇所と一致します。 2.4 REの連結は、REの各構成要素で一致する文字列の連結と一致するREです。 2.5 文字シーケンス \( と \) に囲まれたREは、非装飾のREが一致するものと一致するREです。 2.6 式 \n は、以前に同じREで、 \( と \) に囲まれた式と一致したのと同じ文字列と一致します。ここ で、 n は数字であり、指定されたサブ式は左から数えて n 番目にある \( の出現箇所から開始され ます。例えば、式 ˆ\(.*\)\1$ は、同じ文字列を2回繰り返した表示形式から構成される行と一致し ます。 最後に、RE全体は、最初または最後のセグメント(またはその両方)とだけ一致する、という制約が加えられて いることがあります。 3.1 RE全体の先頭に曲折アクセント記号(ˆ)があると、そのREは、行の最初のセグメントと一致しなけ ればなりません。 3.2 RE全体の最後にドル記号($)があると、そのREは、行の最後のセグメントと一致しなければなり ません。 ˆRE全体$ では、RE全体は、行全体と一致しなければなりません。 nullのRE(すなわち、//)は、遭遇した最後の REと同じです。 POSIXロケール以外のロケールにおける re_comp() および re_exec() の動作は、規定されていません。 戻り値 引き数stringがポイントする文字列が正しく変換された場合、 re_comp() 関数は、nullポインタを返します。そ れ以外の場合、未定のエラーメッセージ文字列のポインタが返されます。 正常終了すると、stringが最後にコンパイルした正規表現と一致する場合、 re_exec() は1を返します。異常終 了の場合、string が最後にコンパイルした正規表現と一致しない場合、re_exec()は0を返し、コンパイルした正 Section 3-332 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 re_comp(3X) re_comp(3X) 廃止予定 規表現が無効である(内部エラーを示している)場合、 −1を返します。 エラー エラーは定義されていません。 アプリケーション使用法 このドキュメントの旧バージョンに準拠している実現方法への移植性については、これらの関数よりも regcomp() と regexec() をお薦めします。 警告 廃止インタフェース re_comp() および re_exec() は、将来廃止される予定です。 参照 regcomp(3C) , <re_comp.h> 変更履歴 第4刷バージョン2で第1回リリース HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-333 rint(3M) rint(3M) 名称 rint( ), rintf( ), rintl( ), rintw( ), rintq( ), nearbyint( ), nearbyintf( ), nearbyintl( ), nearbyintw( ), nearbyintq( ) − 最も近い整数 への丸め関数 構文 #include <math.h> double rint(double x); double nearbyint(double x); Itanium(R)ベース システムのみ float rintf(float x); long double rintl(long double x); extended rintw(extended x); quad rintq(quad x); float nearbyintf(float x); long double nearbyintl(long double x); extended nearbyintw(extended x); quad nearbyintq(quad x); 説明 rint() および nearbyint() は、現在の丸め方向モードを使用して、 x に最も近い (浮動小数点型で表わされた) 整 数値を返します。これらの関数は、浮動小数点形式での整数への丸め操作に対する、 IEEE-754 規格の要件を 満たしています。 これらの関数は、 rint() では結果の値が引き数と異なる場合に、不正確例外が発生するのに対して、 nearbyint() では発生しない点が異なります。 デフォルトの丸め方向 (最も近い整数への丸め) では、 rint(x) は x に最も近い整数で、|rint(x) − x|=1/2 の場合 に、 rint(x) が偶数になるように規定されています (nearbyint(x) についても同じです)。 現在の丸め方向が負の無限大方向の場合、 rint() および nearbyint() は floor() と同じ値を返します。現在の丸 め方向が正の無限大方向の場合、 rint() および nearbyint() は ceil() と同じ値を返します。 Itaniumベース システムのみ rintf() および nearbyintf() は、それぞれ rint() および nearbyint() の float バージョンで、 float 型の引き数をと り、 float 型の結果を返します。 rintl() および nearbyintl() は、それぞれ rint() および nearbyint() の long double バージョンで、 long double 型 の引き数をとり、 long double 型の結果を返します。 Section 3-334 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rint(3M) rint(3M) rintw() および nearbyintw() は、それぞれ rint() および nearbyint() の extended バージョンで、 extended 型の 引き数をとり、 extended 型の結果を返します。 rintq() および nearbyintq() は、HP-UX システムではそれぞれ rintl() および nearbyintl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itanium ベース システムで ceilw()、 nearbyintw()、 ceilq()、または nearbyintq() を使うには、 −fpwidetypes オプションを指定してコンパイルして ください。プログラムに <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカー のコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 x が ±INFINITY または ±0 の場合、 rint() および nearbyint() は x を返します。 x が NaN の場合、 rint() および nearbyint() 関数は NaN を返します。 エラー エラーは、定義されていません。 参照 ceil(3M), floor(3M), fabs(3M), fmod(3M), fegetround(3M), fesetround(3M), lrint(3M), llrint(3M), lround(3M), llround(3M), round(3M), trunc(3M), math(5), fenv(5) 標準準拠 rint() : XPG4.2, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) rintf(), rintl(), nearbyint(), nearbyintf(), nearbyintl() : ISO/IEC C99 ( 付録 F 『IEC 60559 floating-point arithmetic』 を含む) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-335 ripoffline(3X) ripoffline(3X) 名称 ripoffline — 専用の目的のために 1行を予約 構文 #include <curses.h> int ripoffline(int line, int (*init)(WINDOW *win, int columns)); 説明 ripoffline() 関数は、アプリケーションが使うために画面の 1行を予約します。 ripoffline() の呼び出しは、 initscr() または newterm() の呼び出しよりも前に行わなければなりません。 line が 正数の場合には、 stdscr の先頭から 1行が削除され、line が負数の場合には、最後から 1行が削除されます。 削除は、後続の initscr() または newterm() の呼び出し中に発生します。後続の呼び出しを行う場合には、init がポイントする関数が、割り当てられた 1行のウィンドウを指す WINDOW ポインターおよびそのウィンドウ 内のカラム数の整数という 2つの引き数を付けて呼び出されます。この初期化関数は、 LINES および COLS 外部変数を使うことができないので、 wrefresh() または doupdate() を呼び出すことはできませんが、 wnoutrefresh() を呼び出すことはできます。 5 行までを予約することができます。この制限を越えて ripoffline() を呼び出した場合、この関数は効果があり ませんが、レポートは正常に終了します。 戻り値 ripoffline() 関数は OK を返します。 エラー エラーは定義されていません。 アプリケーション使用法 slk_init() を呼び出すと、 initscr() が結果的に stdscr からの 1行を使ってソフトラベルをエミュレートする場合 には、画面のサイズが 1行だけ減少します。 slk_init() が 1行を予約する場合には、後続の ripoffline() の呼び出 しによってアプリケーションが予約できる行数が 1行減少します。つまり、ソフトラベル関数を使う移植可能 なアプリケーションでは、 ripoffline() の呼び出しは 4回を超えないようにしてください。 initscr() または newterm() が init がポイントする初期化関数を呼び出した場合、処理系が WINDOW のポイン ター引き数 win に対して NULL を引き渡す可能性があります。これは、 ripoffline() の呼び出しによって予約 された行に対して 1行ウィンドウを割り当てることができないことを示します。したがって、移植可能なアプ リケーションで、表示を行うウィンドウに対して何らかの操作を行う前に、 win が NULL でないことを確認す る必要があります。 参照 doupdate(), initscr(), slk_attroff(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-336 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rmtimer(3C) rmtimer(3C) 名称 rmtimer − プロセスごとのタイマーを解除 構文 #include <sys/timers.h> int rmtimer(timer_t timerid); 説明 rmtimer() 関数は、以前に割り当てられた mktimer() によって返されるタイマーを解除します。このタイマー によって発生させられる予定だったタイマーイベントは、呼び出しが返った時点で取り消されます。 戻り値 正常終了すると、 rmtimer() は0を返します。失敗すると −1 を返し、エラーを示す値を errno に設定します。 エラー rmtimer() は、次の条件が満たされると、失敗します。 [EINVAL] timerid が有効なタイマー ID でない場合 ファイル /usr/include/sys/timers.h 参照 timers(2), mktimer(3C), reltimer(3C), thread_safety(5) 標準準拠 rmtimer(): AES HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-337 rnusers(3N) rnusers(3N) 名称 rnusers( ), rusers( ) − リモートマシン上のユーザーに関する情報を取得 構文 #include <utmp.h> #include <rpcsvc/rusers.h> int rnusers(char ∗host); int rusers(char ∗host, struct utmpidlearr ∗up); 説明 host にログインしているユーザーの数を返します。その数が判定できないときは、−1 を返し rnusers() ます。文字列 host は、ホストの公式名か、もしくはその別名です。ホスト名に関する詳しい 情報は、 hosts(4) を参照してください。 構造体 utmpidlearr に、構造体 host に関するデータを格納します。正常終了すると、0を返し rusers() ます。バークレーシステムでは、 ut_line フィールドが8文字に限られていますので、 HP-UX XDR ルーチンでは、データを12 文字から8 文字に切り捨てます。 HP-UX utmp.h ファイルに は、 nonuser() マクロが存在しません。したがって、 HP-UX ウィンドウは、1つ1つが異なる ユーザーとして数えられます。 以下に関連する構造体を示します。 struct utmparr { /* RUSERSVERS_ORIG */ struct utmp **uta_arr; int uta_cnt; }; struct utmpidle { struct utmp ui_utmp; unsigned ui_idle; }; struct utmpidlearr { /* RUSERSVERS_IDLE */ struct utmpidle **uia_arr; int uia_cnt; }; RPC Information プログラム番号: RUSERSPROG xdr routines: Section 3-338 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rnusers(3N) rnusers(3N) int xdr_utmp(xdrs, up) XDR ∗xdrs; struct utmp ∗up; int xdr_utmpidle(xdrs, ui) XDR ∗xdrs; struct utmpidle ∗ui; int xdr_utmpptr(xdrs, up) XDR ∗xdrs; struct utmp ∗∗up; int xdr_utmpidleptr(xdrs, up) XDR ∗xdrs; struct utmpidle ∗∗up; int xdr_utmparr(xdrs, up) XDR ∗xdrs; struct utmparr ∗up; int xdr_utmpidlearr(xdrs, up) XDR ∗xdrs; struct utmpidlearr ∗up; プロシージャ: RUSERSPROC_NUM 引き数はありません。unsigned long.型で ユーザーの数を返します。 RUSERSPROC_NAMES 引き数はありません。バージョンにより、 utmparr または utmpidlearr を返します。 RUSERSPROC_ALLNAMES 引き数はありません。バージョンにより、utmparr または utmpidlearr を返します。 返されるリストは、utmp エンド用であって、 utmp.h nonuser() を満たします。 バージョン: RUSERSVERS_ORIG RUSERSVERS_IDLE .PP 構造体: HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-339 rnusers(3N) rnusers(3N) 警告 このルーチンを呼び出すユーザーアプリケーションは、ともに /usr/lib/librpcsvc.a をリンクしなければなりま せん。以下に例を示します。 cc my_source.c -lrpcsvc 著者 rnusers() は、Sun Microsystems, Inc. で開発されました。 参照 rusers(1) Section 3-340 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 round(3M) round(3M) 名称 round( ), roundf( ), roundl( ), roundw( ), roundq( ) − 丸め関数 構文 #include <math.h> double round(double x); Itanium(R)ベース システムのみ float roundf(float x); long double roundl(long double x); extended roundw(extended x); quad roundq(quad x); 説明 round() 関数は、その引き数を浮動小数点形式で最も近い整数値に丸めます。引き数が、2つの整数のちょう ど中間の場合には、現在の丸め方向とは無関係に、0から離れる方向に丸めます。この丸め方法は、関数 lround および llround にも適用されます。 Itaniumベース システムのみ roundf() は、 round() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 roundl() は、 round() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返 します。 roundw() は、 round() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返しま す。 roundq() は、HP-UX システムでは roundl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで roundw() または roundq() を使うには、 −fpwidetypes オプションも指定してコンパ イルしてください。 これらの関数を使うには、プログラムに、 <math.h> がインクルードされていることを確認した後、コンパイ ラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 x が ±INFINITY または ±0 の場合、 round() は x を返します。 x が NaN の場合、 round() は NaN を返します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-341 round(3M) round(3M) round() では、 x が整数でも有限値でもない場合、不正確例外が発生することがあります。 エラー エラーは、定義されていません。 参照 ceil(3M), floor(3M), fabs(3M), fmod(3M), fegetround(3M), fesetround(3M), lrint(3M), llrint(3M), lround(3M), llround(3M), rint(3M), trunc(3M), math(5), fenv(5) 標準準拠 round(), roundf(), roundl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-342 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rpc(3N) rpc(3N) 名称 rpc − リモートプロシージャコール用ライブラリルーチン 構文 cc [ flag . . . ] file . . . −lnsl [ library . . . ] #include <rpc/rpc.h> #include <netconfig.h> 説明 これらのルーチンは、C 言語プログラムからネットワークを通じて他のマシンに対するプロシージャコールを 行えるようにします。まず、クライアントがサーバに要求を送信します。サーバは要求を受信すると、ディス パッチルーチンを呼び出して要求されたサービスを実行し、応答を送り返します。 RPC ルーチンでは、いずれもヘッダー <rpc/rpc.h> が必要です。 netconfig 構造を使用するルーチンでは、さら に <netconfig.h> も含まれている必要があります。RPC および XDR ルーチンを使用するアプリケーションは、 libnsl ライブラリにリンクしていなければなりません。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 マルチスレッドについての注意事項 マルチスレッドアプリケーションの場合、コンパイル時のコマンド行に _REENTRANT フラグを定義しなけれ ばなりません (-D_REENTRANT)。このフラグを定義することにより、スレッド固有の rpc_createerr バージョ ンが使用可能になります。 (rpc_clnt_create(3N) を参照)。 クライアント側ルーチンは MT-Safe です。CLIENT ハンドル (rpc_clnt_create(3N) を参照) はスレッド間で共有 できますが、この処理系では異なるスレッドによる要求はシリアル化されます (すなわち、最初の要求がその 結果を受信してから、次の要求が送信されます)。 サーバ側ルーチンは大部分が MT-Unsafe です。この処理系では、サービストランスポート ハンドル SVCXPRT (rpc_svc_create(3N) を参照) に、引き数をデコードし結果をエンコードするための 1 つの領域が含まれていま す。したがって、このような関数を呼び出すスレッド間でこの構造を自由に共有することができません。この 制 約 に よ る 影 響 を 受 け る ルー チ ン は、 MT ア プ リ ケー ショ ン に 対 し て unsafe と マー ク さ れ ま す (rpc_svc_calls(3N) を参照)。 ルーチンの該当マニュアルページで 「マルチスレッドの使用法」を参照してください。 Nettype 高度な RPC インタフェースルーチンの中には、パラメータの 1つとして nettype 文字列を使用するものがあり ます (例えば、 clnt_create()、 svc_create()、 rpc_reg()、 rpc_call())。この文字列は、特定のアプリケーション のため使用できるトランスポートのクラスを定義します。 nettype は、次のいずれかとすることができます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-343 rpc(3N) rpc(3N) NETPATH 環境変数の中のトークン名によって表されるトランスポートの中から選ばれます。 netpath NETPATH が設定されていない、または NULL の場合は、デフォルト値として visible に設定 されます。 netpath のデフォルト値は nettype です。 /etc/netconfig ファイルで visible フラグ (v) が設定されているトランスポートを選びます。 visible /etc/netconfig ファイルのエントリから、接続指向のトランスポート ( 方式 tpi_cots または circuit_v tpi_cots_ord) だけを選ぶ点を除き、 visible と同じです。 /etc/netconfig ファイルのエントリから、コネクションレス データグラムトランスポート (方式 datagram_v tpi_clts) だけを選ぶ点を除き、 visible と同じです。 接続指向のデータグラムトランスポート (方式 tpi_cots または tpi_cots_ord) だけを選ぶ点を除 circuit_n き、 netpath と同じです。 コネクションレス データグラムトランスポート (方式 tpi_clts) だけを選ぶ点を除き、 netpath datagram_n と同じです。 udp これはインターネット UDP を表します。 tcp これはインターネット TCP を表します。 nettype が NULL の場合、デフォルト値として netpathが使用されます。各トランスポートが、 NETPATH変数 の左から右の順序、または /etc/netconfigファイルの上から下の順序で試行されます。 データ構造 以下に、RPC パッケージで使用されるデータ構造をいくつか示します。 AUTH 構造 union des_block { struct { u_int32 high; u_int32 low; } key; char c[8]; }; typedef union des_block des_block; extern bool_t xdr_des_block( ); /* * Authentication info. Opaque to client. */ struct opaque_auth { enum_t oa_flavor; /* flavor of auth */ caddr_t oa_base; u_int Section 3-344 /* address of more auth stuff */ oa_length; /* not to exceed MAX_AUTH_BYTES */ Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rpc(3N) rpc(3N) }; /* * Auth handle, interface to client side .B authenticators. */ typedef struct { struct opaque_auth ah_cred; struct opaque_auth ah_verf; union des_block ah_key; struct auth_ops { void (*ah_nextverf)( ); int (*ah_marshal)( ); /* nextverf & serialize */ int (*ah_validate)( ); /* validate verifier */ int (*ah_refresh)( ); /* refresh credentials */ void (*ah_destroy)( ); /* destroy this structure */ } *ah_ops; caddr_t ah_private; } AUTH; CLIENT 構造 /* * Client rpc handle. * Created by individual implementations. * Client is responsible for initializing auth. */ typedef struct { AUTH%*cl_auth; /* authenticator */ struct clnt_ops { enum clnt_stat (*cl_call)( ); /* call remote procedure */ void (*cl_abort)( ); /* abort a call */ void (*cl_geterr)( ); /* get specific error code */ bool_t (*cl_freeres)( ); /* frees results */ void (*cl_destroy)( ); /* destroy this structure */ bool_t (*cl_control)( ); /* the ioctl( ) of rpc */ } *cl_ops; caddr_t cl_private; char *cl_netid; char *cl_tp; /* private stuff */ /* network identifier */ /* device name */ } CLIENT; HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-345 rpc(3N) rpc(3N) SVCXPRT 構造 enum xprt_stat { XPRT_DIED, XPRT_MOREREQS, XPRT_IDLE }; /* * Server side transport handle */ typedef struct { int%xp_fd; /* file descriptor for the server handle */ u_short xp_port; /* obsolete */ struct xp_ops { bool_t (*xp_recv)(); /* receive incoming requests */ enum xprt_stat (*xp_stat)(); /* get transport status */ bool_t (*xp_getargs)(); /* get arguments */ bool_t (*xp_reply)(); bool_t (*xp_freeargs)(); /* free mem allocated void (*xp_destroy)(); /* destroy this struct */ /* send reply */ for args */ } *xp_ops; int xp_addrlen; /* length of remote addr. Obsolete */ char *xp_tp; char *xp_netid; /* transport provider device name */ struct netbuf xp_ltaddr; struct netbuf xp_rtaddr; char /* network identifier */ /* local transport address */ /* remote transport address */ xp_raddr[16]; /* remote address.Obsolete */ struct opaque_auth xp_verf; /* raw response verifier */ caddr_t xp_p1; /* private: for use caddr_t xp_p2; /* private: for use caddr_t xp_p3; /* private: for use by svc ops */ by svc ops */ by svc lib */ int xp_type /* transport type */ } SVCXPRT; Section 3-346 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rpc(3N) rpc(3N) svc_reg 構造 struct svc_req { u_long rq_prog; /* service program number */ u_long rq_vers; /* service protocol version */ u_long rq_proc; /* the desired procedure */ struct opaque_auth rq_cred; caddr_t rq_clntcred; SVCXPRT *rq_xprt; /* raw creds from the wire */ /* read only cooked cred */ /* associated transport */ }; XDR 構造 /* * XDR operations. * XDR_ENCODE causes the type to be encoded into the stream. * XDR_DECODE causes the type to be extracted from the stream. * XDR_FREE can be used to release the space allocated by an XDR_DECODE * request. */ enum xdr_op { XDR_ENCODE=0, XDR_DECODE=1, XDR_FREE=2 }; /* * This is the number of bytes per unit of external data. */ #define BYTES_PER_XDR_UNIT (4) #define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \ * BYTES_PER_XDR_UNIT) /* * A xdrproc_t exists for each data type which is to be encoded or * decoded. The second argument to the xdrproc_t is a pointer to * an opaque pointer. The opaque pointer generally points to a * structure of the data type to be decoded. If this points to 0, * then the type routines should allocate dynamic storage of the * appropriate size and return it. * bool_t (*xdrproc_t)(XDR *, caddr_t *); */ typedef bool_t (*xdrproc_t)( ); HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-347 rpc(3N) rpc(3N) /* * The XDR handle. * Contains operation which is being applied to the stream, * an operations vector for the particular implementation */ typedef struct { enum xdr_op x_op; /* operation; fast additional param */ struct xdr_ops { bool_t (*x_getlong)(); /* get a long from underlying stream */ bool_t (*x_putlong)(); /* put a long to underlying stream */ bool_t (*x_getbytes)(); /* get bytes from underlying stream */ bool_t (*x_putbytes)(); /* put bytes to underlying stream */ u_int (*x_getpostn)(); /* returns bytes off from beginning */ bool_t (*x_setpostn)(); /* lets you reposition the stream */ long * (*x_inline)(); /* buf quick ptr to buffered data */ void (*x_destroy)(); /* free privates of this xdr_stream */ } *x_ops; caddr_t x_public; /* users’ data */ caddr_t x_private; /* pointer to private data */ caddr_t x_base; int x_handy; /* private used for position info */ /* extra private word */ } XDR; ルーチンのインデックス 以下の表に RPC ルーチンと、その説明があるマニュアル参照ページを示します。 RPC ルーチン マニュアル参照ページ auth_destroy rpc_clnt_auth(3N) authdes_create rpc_soc(3N) authdes_getucred secure_rpc(3N) authdes_seccreate secure_rpc(3N) authnone_create rpc_clnt_auth(3N) authsys_create rpc_clnt_auth(3N) authsys_create_default rpc_clnt_auth(3N) authunix_create rpc_soc(3N) authunix_create_default rpc_soc(3N) callrpc rpc_soc(3N) clnt_broadcast rpc_soc(3N) Section 3-348 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 rpc(3N) clnt_call rpc(3N) rpc_clnt_calls(3N) clnt_control rpc_clnt_create(3N) clnt_create rpc_clnt_create(3N) clnt_destroy rpc_clnt_create(3N) clnt_dg_create rpc_clnt_create(3N) clnt_freeres rpc_clnt_calls(3N) clnt_geterr rpc_clnt_calls(3N) clnt_pcreateerror rpc_clnt_create(3N) clnt_perrno rpc_clnt_calls(3N) clnt_perror rpc_clnt_calls(3N) clnt_raw_create rpc_clnt_create(3N) clnt_spcreateerror rpc_clnt_create(3N) clnt_sperrno rpc_clnt_calls(3N) clnt_sperror rpc_clnt_calls(3N) clnt_tli_create rpc_clnt_create(3N) clnt_tp_create rpc_clnt_create(3N) clnt_udpcreate rpc_soc(3N) clnt_vc_create rpc_clnt_create(3N) clntraw_create rpc_soc(3N) clnttcp_create rpc_soc(3N) clntudp_bufcreate rpc_soc(3N) get_myaddress rpc_soc(3N) getnetname secure_rpc(3N) host2netname secure_rpc(3N) key_decryptsession secure_rpc(3N) key_encryptsession secure_rpc(3N) key_gendes secure_rpc(3N) key_setsecret secure_rpc(3N) netname2host secure_rpc(3N) netname2user secure_rpc(3N) pmap_getmaps rpc_soc(3N) pmap_getport rpc_soc(3N) pmap_rmtcall rpc_soc(3N) pmap_set rpc_soc(3N) pmap_unset rpc_soc(3N) registerrpc rpc_soc(3N) rpc_broadcast rpc_clnt_calls(3N) rpc_broadcast_exp rpc_clnt_calls(3N) HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 3-349 rpc(3N) rpc(3N) rpc_call rpc_clnt_calls(3N) rpc_reg rpc_svc_calls(3N) svc_create rpc_svc_create(3N) svc_destroy rpc_svc_create(3N) svc_dg_create rpc_svc_create(3N) svc_dg_enablecache rpc_svc_calls(3N) svc_fd_create rpc_svc_create(3N) svc_fds rpc_soc(3N) svc_freeargs rpc_svc_reg(3N) svc_getargs rpc_svc_reg(3N) svc_getcaller rpc_soc(3N) svc_getreq rpc_soc(3N) svc_getreqset rpc_svc_calls(3N) svc_getrpccaller rpc_svc_calls(3N) svc_raw_create rpc_svc_create(3N) svc_reg rpc_svc_calls(3N) svc_register rpc_soc(3N) svc_run rpc_svc_reg(3N) svc_sendreply rpc_svc_reg(3N) svc_tli_create rpc_svc_create(3N) svc_tp_create rpc_svc_create(3N) svc_unreg rpc_svc_calls(3N) svc_unregister rpc_soc(3N) svc_vc_create rpc_svc_create(3N) svcerr_auth rpc_svc_err(3N) svcerr_decode rpc_svc_err(3N) svcerr_noproc rpc_svc_err(3N) svcerr_noprog rpc_svc_err(3N) svcerr_progvers rpc_svc_err(3N) svcerr_systemerr rpc_svc_err(3N) svcerr_weakauth rpc_svc_err(3N) svcfd_create rpc_soc(3N) svcraw_create rpc_soc(3N) svctcp_create rpc_soc(3N) svcudp_bufcreate rpc_soc(3N) svcudp_create rpc_soc(3N) user2netname secure_rpc(3N) xdr_accepted_reply rpc_xdr(3N) Section 3-350 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 rpc(3N) xdr_authsys_parms rpc(3N) rpc_xdr(3N) xdr_authunix_parms rpc_soc(3N) xdr_callhdr rpc_xdr(3N) xdr_callmsg rpc_xdr(3N) xdr_opaque_auth rpc_xdr(3N) xdr_rejected_reply rpc_xdr(3N) xdr_replymsg rpc_xdr(3N) xprt_register rpc_svc_calls(3N) xprt_unregister rpc_svc_calls(3N) ファイル /etc/netconfig 参照 getnetconfig(3N), getnetpath(3N), rpc_clnt_auth(3N), rpc_clnt_calls(3N), rpc_clnt_create(3N), rpc_svc_calls(3N), rpc_svc_create(3N), rpc_svc_err(3N), rpc_svc_reg(3N), rpc_xdr(3N), rpcbind(3N), secure_rpc(3N), xdr(3N), netconfig(4), rpc(4), environ(5) HP-UX 11i Version 2: August 2003 −9− Hewlett-Packard Company Section 3-351 rpcbind(3N) rpcbind(3N) 名称 rpcbind, rpcb_getmaps, rpcb_getaddr, rpcb_gettime, rpcb_rmtcall, rpcb_set, rpcb_unset − RPC バインドサービス用のラ イブラリルーチン 構文 #include <rpc/rpc.h> struct rpcblist *rpcb_getmaps(const struct netconfig *netconf , const char *host); bool_t rpcb_getaddr(const u_long prognum, const u_long versnum, const struct netconfig *netconf , struct netbuf *svcaddr, const char *host); bool_t rpcb_gettime(const char *host, time_t *timep); enum clnt_stat rpcb_rmtcall(const struct netconfig *netconf , const char *host, const u_long prognum, const u_long versnum, const u_long procnum, const xdrproc_t inproc, const caddr_t in, const xdrproc_t outproc, caddr_t out, const struct timeval tout, struct netbuf *svcaddr); bool_t rpcb_set(const u_long prognum, const u_long versnum, const struct netconfig *netconf , const struct netbuf *svcaddr); bool_t rpcb_unset(const u_long prognum, const u_long versnum, const struct netconfig *netconf ); 説明 これらのルーチンは、クライアント C プログラムが RPC バインダサービスにプロシージャコールを実行でき るようにします。 rpcbind ( rpcbind(1M) を参照) には、プログラムとその汎用アドレス間のマッピング一覧を 管理します。 ルーチン struct rpcblist *rpcb_getmaps() rpcbind サービスへのインタフェースであり、 host における現在の RPC プログラム - アドレスのマッ ピングのリストを戻します。 netconf で指定されたトランスポートを使用し、 host 上のリモート rpcbind サービスに接続します。このルーチンはリモート rpcbind に接続できなかった場合、 NULL を戻します。 bool_t rpcb_getaddr() rpcbind サービスへのインタフェースであり、 host 上でプログラム番号 prognum 、 バージョン versnum で登録され、 netconf に結合するトランスポートプロトコルを使用するサービスのアドレスを探 します。見つかったアドレスが svcaddr に戻されます。 svcaddr は事前に割り当てておく必要がありま す。このルーチンは正常終了すると TRUE を戻します。戻り値が FALSE の場合、マッピングが存在 Section 3-352 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rpcbind(3N) rpcbind(3N) しないか、または RPC システムがリモート rpcbind サービスに接続できなかったことを意味します。 後者の場合、グローバル変数 rpc_createerr ( rpc_clnt_create(3N) を参照) に、RPC ステータスが含まれ ます。 bool_t rpcb_gettime() このルーチンは、 host 上の時間を timep で戻します。 host が NULL の場合、 rpcb_gettime() は自分自 身のマシンの時間を戻します。このルーチンは正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 rpcb_gettime() を使って、クライアントとリモートサーバ間で時間の同期をとることが できます。このルーチンは、Secure RPC では特に有益です。 enum clnt_stat rpcb_rmtcall() rpcbind サービスへのインタフェースであり、 host 上の rpcbind に対し、ユーザーに代わってそのホ スト上のプロシージャへ RPC コールを実行するよう指示します。 netconfig 構造体がコネクションレ ストランスポートに対応している必要があります。プロシージャが正常終了すると、パラメータ *svcaddr が サー バ の ア ド レ ス に 変 更 さ れ ま す ( そ の 他 の パ ラ メー タ の 定 義 に つ い て は、 rpc_clnt_calls(3N) の rpc_call() および clnt_call() を参照)。 このプロシージャは通常、 ping 以外の目的で使用すべきではありません。このルーチンにより、プロ グラムは検索と呼び出しを 1 ステップで実行することができます。 注記 : サーバが動作していない場合にも rpcbind は呼び出し側にエラーメッセージを戻しません。その ような場合、呼び出し側はタイムアウトします。 注記 : rpcb_rmtcall() は、コネクションレストランスポートでしか使用できません。 bool_t rpcb_set() rpcbind サービスへのインタフェースであり、マシンの rpcbind サービスにおけるトリプル [ prognum 、 versnum 、 netconf →nc_netid ] と、 svcaddr との間のマッピングを設定します。 nc_netid の値は、 netconfig データベースで定義されるネットワーク識別子に対応していなければなりません。このルー チンは正常終了すると TRUE を戻し、異常終了すると FALSE を戻します ( rpc_svc_calls(3N) の svc_reg() も参照)。 rpcbind に同じエントリが既に存在する場合は、 rpcb_set() は異常終了します。 bool_t rpcb_unset() rpcbind サービスへのインタフェースであり、マシンの rpcbind サービスにおけるトリプル [ prognum 、 versnum 、 netconf →nc_netid ] とアドレスとの間のマッピングを削除します。 netconf が NULL の場 合、 rpcb_unset() はマシンの rpcbind サービスにおけるトリプル [ prognum 、 versnum 、 all-transports ] とアドレスの間のマッピングをすべて削除します。このルーチンは正常終了すると TRUE を戻し、 異常終了すると FALSE を戻します。マッピングを削除できるのは、サービスの所有者またはスーパー ユーザーだけです ( rpc_svc_calls(3N) の svc_unreg() も参照)。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-353 rpcbind(3N) rpcbind(3N) Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境下で安全に呼び出せます。これらの関数は、キャンセルポイントの関数 を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 参照 rpcbind(1M), rpcinfo(1M), rpc_clnt_calls(3N), rpc_svc_calls(3N). Section 3-354 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 rpc_clnt_auth(3N) rpc_clnt_auth(3N) 名称 rpc_clnt_auth, auth_destroy, authnone_create, authsys_create, authsys_create_default − クライアント側のリモートプロ シージャコール認証のためのライブラリルーチン 構文 #include <rpc/rpc.h> void auth_destroy(AUTH *auth); AUTH *authnone_create(void); AUTH *authsys_create(const char *host, const uid_t uid, const gid_t gid, const int len, const gid_t *aup_gids); AUTH *authsys_create_default(void); 説明 これらのルーチンは、C 言語プログラムが希望する認証を使ってネットワーク上の他のマシンに対しプロシー ジャコールを実行することを可能にする、RPC ライブラリの一部分です。 これらのルーチンは通常、 CLIENT ハンドルの作成後に呼び出されます。 CLIENT 構造体の cl_auth フィー ルドは、以下の何らかのルーチンによって戻される AUTH 構造体によって初期化される必要があります。クラ イアントの認証情報は、RPC コールが行われた時点てサーバに渡されます。 ここでは、 NULL および SYS 形式の認証だけを扱います。 DES スタイルの認証については、 secure_rpc(3N) を参照してください。 マルチスレッドアプリケーションでは、 NULL および SYS スタイルの認証が安全です。 DES の MT-level に ついては、該当するマニュアルページを参照してください。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン 以下のルーチンでは、ヘッダー <rpc/rpc.h> がインクルードされていることが必要です (AUTH データ構造の定 義については rpc(3N) を参照)。 void auth_destroy() auth に結合した認証情報を削除するマクロです。削除とともに、プライベートデータ構造の割り当て 解除も通常行われます。 auth_destroy() の呼び出し後は、 auth の使用は不定となります。 AUTH *authnone_create() リモートプロシージャコールごとに、使用不可能な認証情報を渡す RPC 認証ハンドルを作成し戻しま す。これは RPC が使用するデフォルトの認証です。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-355 rpc_clnt_auth(3N) rpc_clnt_auth(3N) AUTH *authsys_create() AUTH_SYS 認証情報を含む RPC 認証ハンドルを作成し戻します。パラメータ host は、この情報を作 成したマシンの名前です。 uid は、ユーザーのユーザー ID です。 gid は、ユーザーの現在のグループ ID です。 len および aup_gids は、ユーザーが所属するグループの個数付きの配列を表します。 AUTH *authsys_create_default() authsys_create() を適切なパラメータ付きで呼び出します。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。キャンセルポイントである関数を 呼び出すという点で、キャンセルポイントとなる場合もあります。 マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 参照 rpc(3N), rpc_clnt_calls(3N), rpc_clnt_create(3N), secure_rpc(3N) Section 3-356 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rpc_clnt_calls(3N) rpc_clnt_calls(3N) 名称 rpc_clnt_calls, clnt_call, clnt_freeres, clnt_geterr, clnt_perrno, clnt_perror, clnt_sperrno, clnt_sperror, rpc_broadcast, rpc_broadcast_exp, rpc_call − クライアント側コールのためのライブラリルーチン 構文 #include <rpc/rpc.h> enum clnt_stat clnt_call(CLIENT *clnt, const u_long procnum, const xdrproc_t inproc, const caddr_t in, const xdrproc_t outproc, caddr_t out, const struct timeval tout); bool_t clnt_freeres(CLIENT *clnt, const xdrproc_t outproc, caddr_t out); void clnt_geterr(const CLIENT *clnt, struct rpc_err *errp); void clnt_perrno(const enum clnt_stat stat); void clnt_perror(const CLIENT *clnt, const char *s); char *clnt_sperrno(const enum clnt_stat stat); char *clnt_sperror(const CLIENT *clnt, const char *s); enum clnt_stat rpc_broadcast(const u_long prognum, const u_long versnum, const u_long procnum, const xdrproc_t inproc, const caddr_t in, const xdrproc_t outproc, caddr_t out, const resultproc_t eachresult, const char *nettype); enum clnt_stat rpc_broadcast_exp(const u_long prognum, const u_long versnum, const u_long procnum, const xdrproc_t xargs, caddr_t argsp, const xdrproc_t xresults, caddr_t resultsp, const int inittime, const int waittime, const resultproc_t eachresult, const char *nettype); enum clnt_stat rpc_call(const char *host, const u_long prognum, const u_long versnum, const u_long procnum, const xdrproc_t inproc, const char *in, const xdrproc_t outproc, char *out, const char *nettype); 説明 RPC ライブラリルーチンは、C 言語プログラムがネットワーク上の他のマシンにプロシージャコールを実行す ることを可能にします。クライアントはまず、サーバに対して要求を送信するプロシージャを呼び出します。 サーバは要求を受信すると、要求されたサービスを実行するディスパッチルーチンを呼び出し、応答を送信し ます。 clnt_call(), rpc_call(), および rpc_broadcast() ルーチンは、プロシージャコールのクライアント側を処理しま す。それ以外のルーチンは、エラーが発生した場合にエラーを処理します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-357 rpc_clnt_calls(3N) rpc_clnt_calls(3N) これらのルーチンの中には、パラメータの 1つとして CLIENT ハンドルを使用するものがあります。 CLIENT ハンドルは、 clnt_create() などの RPC 作成ルーチンによって作成できます (rpc_clnt_create(3N) を参照)。 これらのルーチンは、マルチスレッドアプリケーションで安全に使用できます。 CLIENT ハンドルはスレッド 間で共有可能ですが、この処理系では異なるスレッドによる要求はシリアル化されます (すなわち、最初の要 求がその結果を受信してから、次の要求が送信されます)。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン CLIENT データ構造の定義については rpc(3N) を参照してください。 enum clnt_stat clnt_call() clnt_create() (rpc_clnt_create(3N) を参照) などの RPC クライアント作成ルーチンで入手したクライアン トハンドル clnt に結合するリモートプロシージャ procnum を呼び出す関数マクロであり、パラメータ inproc は、プロシージャのパラメータをエンコードするため使用する XDR 関数です。 outproc は、プ ロシージャの結果をデコードするため使用する XDR 関数です。 in は、プロシージャの引き数のアド レスであり、 out は結果を格納するアドレスです。 tout は、結果を戻すまでのタイムアウトであり、 これは clnt_control() で明示的に設定したタイムアウトにより上書きされます。 rpc_clnt_create(3N) を 参照してください。 リモートプロシージャコールが正常終了すると、ステータス RPC_SUCCESS が戻されます。異常終了 した場合は、該当するステータスが戻されます。 bool_t clnt_freeres() RPC コールの結果をデコードしたとき、RPC/XDR システムによって割り当てられたデータを解放する 関数マクロです。パラメータ out は結果のアドレスであり、 outproc は、結果を記述する XDR ルーチ ンです。このルーチンは、結果が正常に解放できた場合は 1、できなかった場合は 0 を戻します。 void clnt_geterr() クライアントハンドルから error 構造をアドレス errp の構造にコピーする関数マクロです。 void clnt_perrno() stat によって表される条件に対応するメッセージを標準エラーに出力します。改行が付けられます。ク ライアントハンドルを必要としないルーチン、例えば rpc_call() などのプロシージャコールが失敗した 後で通常使用されます。 void clnt_perror() RPC コールが失敗した理由を表すメッセージを標準エラーに出力します。 clnt は、コールを実行する ため使用されたハンドルです。このメッセージは、文字列 s およびコロン付きで準備されます。改行 が付けられます。クライアントハンドルを必要としないルーチン、例えば clnt_call() などのリモートプ ロシージャコールが失敗した後で通常使用されます。 Section 3-358 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rpc_clnt_calls(3N) rpc_clnt_calls(3N) char *clnt_sperrno() clnt_perrno() と同じ引き数を使用しますが、RPC コールが失敗した理由を表すメッセージを標準エ ラーに送信する代わりに、そのメッセージを含む文字列へのポインタを返します。 プログラムが標準エラーを持たない場合 (サーバとして実行するプログラムはその場合が多い)、また はプログラマがメッセージを printf() ( printf (3S) を参照) で出力することを望まない場合、またはメッ セージの形式が clnt_perrno() でサポートされるものとは異なる場合には、 clnt_perrno() の代わりに通 常 clnt_sperrno() を使用します。 注記 : clnt_sperrno() は clnt_sperror() および clnt_spcreaterror() (rpc_clnt_create(3N) を参照) とは異な り、静的データへのポインタを戻さないので、コールのたびに結果が上書きされません。 char *clnt_sperror() (clnt_sperrno() のように) 標準エラーに出力する代わりに文字列を戻す点を除くと、 clnt_perror() と同 様です。ただし clnt_sperror() は、メッセージの終わりに改行を付けません。 警告 : コールのたびに上書きされるバッファへのポインタを戻します。マルチスレッドアプリケーショ ンでは、このバッファはスレッド固有のデータとして実現されます。 enum clnt_stat rpc_broadcast() nettype によって指定されるすべてのコネクションレストランスポートにコールメッセージをブロード キャストする点を除いて、 rpc_call() と同様です。 nettype が NULL の場合は、デフォルト値として netpath が使用されます。応答を受信するたびに、このルーチンは次の形式の eachresult() を呼び出し ます。 bool_t eachresult(caddr_t out,const struct netbuf *addr, const struct netconfig *netconf ); ここで out は、リモートプロシージャの出力がそこでデコードされる点を除いて、 rpc_broadcast() に 渡される out と同じです。 addr は、結果を送信したマシンのアドレスを表し、 netconf は、リモート サーバが応答したトランスポートの netconfig 構造体です。 eachresult() が 0 を返すと、 rpc_broadcast() はさらにその後の応答を待ちます。そうでない場合は、該当するステータスを戻します。 警告 : ブロードキャストファイル記述子は、そのトランスポートの最大転送サイズにサイズが制限され ま す。 イー サー ネッ ト の 場 合、 こ の 値 は 1500 バ イ ト で す。 rpc_broadcast() は デ フォ ル ト 値 で AUTH_SYS 資格認定を使用します (rpc_clnt_auth(3N) を参照)。 enum clnt_stat rpc_broadcast_exp() 初期タイムアウト inittime および最大タイムアウト waittime をミリ秒で指定する点を除いて、 rpc_broadcast() と同様です。 inittime は、 rpc_broadcast_exp() が要求を再送信するまでの初期的な待ち時間です。最初の再送信の 後、再伝送の間隔は waittime を超えるまで指数的に増加します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-359 rpc_clnt_calls(3N) rpc_clnt_calls(3N) enum clnt_stat rpc_call() マシン host 上の prognum, versnum, および procnum に結合したリモートプロシージャを呼び出します。 パラメータ inproc はプロシージャのパラメータをエンコードするため使用され、 outproc はプロシー ジャの結果をデコードするため使用されます。 in は、プロシージャの引き数のアドレスであり、 out は、結果を格納するアドレスです。 nettype は、 rpc(3N) にリストされたいずれかの値とすることがで きます。このルーチンは正常終了すると RPC_SUCCESS を戻し、異常終了すると該当するステータス が戻されます。異常終了ステータスをエラーメッセージに変換するには、 clnt_perrno() ルーチンを使 用します。 警告 : rpc_call() は、クラス nettype に属する最初に使用可能なトランスポートを使用し、そこで接続を 作成します。このルーチンを使用する場合、タイムアウトまたは認証を制御することはできません。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。キャンセルポイントである関数を 呼び出すという点で、キャンセルポイントとなる場合もあります。 マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 参照 printf(3S), rpc(3N), rpc_clnt_auth(3N), rpc_clnt_create(3N) Section 3-360 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rpc_clnt_create(3N) rpc_clnt_create(3N) 名称 rpc_clnt_create, clnt_control, clnt_create, clnt_create_vers, clnt_destroy, clnt_dg_create, clnt_pcreateerror, clnt_raw_create, clnt_spcreateerror, clnt_tli_create, clnt_tp_create, clnt_vc_create, rpc_createerr − CLIENT ハンドルの作成および操 作を行うライブラリルーチン 構文 #include <rpc/rpc.h> bool_t clnt_control(CLIENT *clnt, const u_int req, char *info); CLIENT *clnt_create(const char *host, const u_long prognum, const u_long versnum, const char *nettype); CLIENT *clnt_create_vers(const char *host, const u_long prognum, u_long *vers_outp, const u_long vers_low, const u_long vers_high, char *nettype); void clnt_destroy(CLIENT *clnt); CLIENT *clnt_dg_create(const int fildes, const struct netbuf *svcaddr, const u_long prognum, const u_long versnum, const u_int sendsz, const u_int recvsz); void clnt_pcreateerror(const char *s); CLIENT *clnt_raw_create(const u_long prognum, const u_long versnum); char *clnt_spcreateerror(const char *s); CLIENT *clnt_tli_create(const int fildes, const struct netconfig *netconf , const struct netbuf *svcaddr, const_long prognum, const u_long versnum, const u_int sendsz, const u_int recvsz); CLIENT *clnt_tp_create(const char *host, const u_long prognum, const u_long versnum, const struct netconfig *netconf ); CLIENT *clnt_vc_create(const int fildes, const struct netbuf *svcaddr, const u_long prognum, const u_long versnum, const u_int sendsz, const u_int recvsz); struct rpc_createerr rpc_createerr; 説明 RPC ライブラリルーチンは、C 言語プログラムがネットワーク上の他のマシンにプロシージャコールを実行す ることを可能にします。まず CLIENT ハンドルが作成され、次にクライアントはサーバーに対して要求を送信 するプロシージャを呼び出します。サーバーは要求を受信すると、要求されたサービスを実行するディスパッ チルーチンを呼び出し、応答を送信します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-361 rpc_clnt_create(3N) rpc_clnt_create(3N) これらのルーチンはマルチスレッドセーフです。マルチスレッドアプリケーションの場合、コンパイル時のコ マンド行に _REENTRANT フラグを定義しなければなりません (-D_REENTRANT)。 _REENTRANT フラグ を定義した場合、 rpc_createerr は各スレッドで独自の rpc_createerr を使用できるマクロになります。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン CLIENT データ構造の定義については、 rpc(3N) を参照してください。 bool_t clnt_control(); クライアントオブジェクトに関するさまざまな情報を変更または取り出すための関数マクロです。 req は操作のタイプを表し、 info は情報へのポインターです。コネクションレスおよび接続指向トランス ポートの両方で、サポートされる req の値とその引き数タイプ、およびその作用は次のとおりです。 CLSET_TIMEOUT struct timeval * トータルタイムアウトを設定 CLGET_TIMEOUT struct timeval * トータルタイムアウトを入手 注記 : clnt_control( ) を使ってタイムアウトを設定する場合、 clnt_call() によって渡される timeout 引き 数は、その後のすべてのコールで無視されます。 注記 : タイムアウト値を 0 に設定すると、 clnt_call() は即座にエラー (RPC_TIMEDOUT) が返されま す。バッチ形式のコールでは、timeout パラメータを 0 に設定してください。 CLGET_FD * 結合するファイル記述子を入手 int CLGET_SVC_ADDR struct netbuf * サーバーのアドレスを入手 CLSET_FD_CLOSE void * クライアントハンドルを削除 するときファイル記述子をクロ ーズ (clnt_destroy() を参照) CLSET_FD_NCLOSE void クライアントハンドルを削除 するときファイル記述子をクロ ーズしない CLGET_VERS unsigned long * クライアントハンドルに結合 した RPC プログラムのバージョ ン番号を入手 CLSET_VERS unsigned long * クライアントハンドルに結合 した RPC プログラムのバージョ ン番号を設定する。この新しい バージョンに対する RPC サーバー が、前のバージョンのアドレス を引き続きリスンしていること が前提となる。 CLGET_XID Section 3-362 unsigned long * 前のリモートプロシージャ Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rpc_clnt_create(3N) rpc_clnt_create(3N) コールの XID を入手 CLSET_XID unsigned long * 次のリモートプロシージャ コールの XID を設定 以下の操作は、コネクションレストランスポートでのみ有効です。 CLSET_RETRY_TIMEOUT struct timeval * 再試行のタイムアウトを設定 CLGET_RETRY_TIMEOUT struct timeval * 再試行のタイムアウトを入手 再試行のタイムアウトは、RPC がサーバーの応答を待って要求を再送信するまでの時間です。 clnt_control() は正常終了すると TRUE、失敗すると FALSE を返します。 CLIENT *clnt_create() プログラム prognum およびバージョン versnum 用の汎用クライアント作成ルーチンです。 host は、 サーバーの存在するリモートホストを表します。 nettype は、使用するトランスポートプロトコルのク ラスを表します。各トランスポートが、 NETPATH 変数の左から右の順序、または netconfig データ ベースの上から下の順序で試行されます。 clnt_create() は、 NETPATH 環境変数および netconfig データベースから使用可能な nettype クラスのす べてのトランスポートを試行し、最初に成功したものを選択します。デフォルトのタイムアウトが設 定されますが、 clnt_control() を使って変更することができます。このルーチンは失敗すると NULL を 返します。失敗の理由は、 clnt_pcreateerror() ルーチンを使って出力することができます。 注記 : clnt_create() は、 clnt_create() に指定された特定のバージョン番号が rpcbind サービスに登録さ れていなくても、有効なクライアントハンドルを返します。この不整合は、後で clnt_call によって発 見できます (rpc_clnt_calls(3N) を参照)。 CLIENT *clnt_create_vers() clnt_create() に類似した汎用クライアント作成ルーチンですが、バージョンの可用性もチェックしま す。 host は、サーバーの存在するリモートホストの名前を表します。 nettype は、使用するトランス ポートプロトコルのクラスを表します。このルーチンが正常終了すると、サーバーがサポートする vers_low および vers_high の間の最高のバージョン用に作成されたクライアントハンドルを返します。 vers_outp はこの値に設定されます。すなわち、正常終了の後、 vers_low <= *vers_outp <= vers_high を 返します。 vers_low と vers_high の間にサーバーがサポートするバージョンがない場合には、ルーチン は失敗し NULL を返します。デフォルトのタイムアウトが設定されますが、 clnt_control() を使って変 更することができます。このルーチンは失敗すると NULL を返します。失敗の理由は、 clnt_pcreateerror() ルーチンを使って出力することができます。 注記 : clnt_create() は、 clnt_create() に指定された特定のバージョン番号が rpcbind サービスに登録さ れていなくても、有効なクライアントハンドルを返します。この不整合は、後で clnt_call によって発 見できます (rpc_clnt_calls(3N) を参照)。しかし clnt_create_vers() はユーザーに代わってこの処理を行 い、指定された範囲内のバージョンがサーバーによりサポートされる場合にだけ、有効なハンドルを 返します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-363 rpc_clnt_create(3N) rpc_clnt_create(3N) void clnt_destroy() クライアントの RPC ハンドルを削除する関数マクロです。削除とともに、 clnt それ自体も含むプライ ベートデータ構造の割り当て解除も通常行われます。 clnt の使用は、 clnt_destroy( ) の呼び出し後は不 定となります。RPC ライブラリが結合するファイル記述子をオープンした場合、または clnt_control( ) を使って CLSET_FD_CLOSE が設定された場合は、ファイル記述子はクローズされます。 呼び出し側では、 (clnt_destroy() を呼び出す前に) auth_destroy(clnt→cl_auth) を呼び出して、結合した AUTH 構造を削除しなければなりません (rpc_clnt_auth(3N) を参照し)。 CLIENT *clnt_dg_create() このルーチンは、リモートプログラム prognum およびバージョン versnum 用の RPC クライアントを作 成します。クライアントはコネクションレストランスポートを使用します。リモートプログラムはア ドレス svcaddr に存在します。パラメータ fildes は、オープンしバインドされたファイル記述子です。 このルーチンは、応答を受信するか、または呼び出しタイムアウトに達するまで、15 秒の間隔で呼び 出しメッセージを再送信します。タイムアウトまでのコール時間の合計は、 clnt_call() によって指定し ます (rpc_clnt_calls(3N) の clnt_call() を参照)。再試行タイムアウトと合計タイムアウトは、 clnt_control() を使って変更することができます。ユーザーはパラメータ sendsz および recvsz を使って送信およ び受信バッファーのサイズを設定できます。 0 を指定すると適切なデフォルト値が選択されます。こ のルーチンは失敗すると NULL を返します。 void clnt_pcreateerror() クライアント RPC ハンドルが作成できなかった理由を表すメッセージを標準エラーに出力します。こ のメッセージの前には文字列 s およびコロンが付けられ、改行が後に付けられます。 CLIENT *clnt_raw_create() このルーチンは、リモートプログラム prognum およびバージョン versnum 用の RPC クライアントハン ドルを作成します。サービスにメッセージを渡すため使用されるトランスポートは、プロセスのアド レス空間内のバッファーなので、対応する RPC サーバーが同じアドレス空間内で動作している必要が あります (rpc_svc_create(3N) の svc_raw_create() を参照)。これにより、カーネルまたはネットワーク の干渉なしに、RPC のシミュレーションおよび往復にかかる時間などの RPC オーバーヘッドの計測が 可能になります。このルーチンは失敗すると NULL を返します。 clnt_raw_create() は、 svc_raw_create() の後に呼び出さなければなりません。 char *clnt_spcreateerror() 標準エラーに出力する代わりに文字列を返す点を除いて、 clnt_pcreateerror() と同様です。この場合、 メッセージに改行は付けられません。 警告 : コールのたびに上書きされるバッファーへのポインターを返します。マルチスレッドアプリケー ションでは、このバッファーはスレッド固有のデータとして実現されます。 CLIENT *clnt_tli_create() このルーチンは、リモートプログラム prognum およびバージョン versnum 用の RPC クライアントハン ドルを作成します。リモートプログラムはアドレス svcaddr に存在します。 svcaddr が NULL であり Section 3-364 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rpc_clnt_create(3N) rpc_clnt_create(3N) 接続指向の場合、ファイル記述子が接続されていると見なされます。コネクションレストランスポー トでは、 svcaddr が NULL の場合、 RPC_UNKNOWNADDR エラーが設定されます。 fildes はファイ ル記述子であり、これはオープンされ、バインドされ、接続されていてもかまいません。これが RPC_ANYFD の場合、 netconf で指定されるトランスポートでファイル記述子をオープンします。 fildes が RPC_ANYFD であり、かつ netconf が NULL の場合、 RPC_UNKNOWNPROTO エラーが設 定されます。 fildes がアンバインドされている場合、記述子をバインドしようとします。ユーザーはパ ラメータ sendsz および recvsz を使ってバッファーのサイズを指定できます。 0 を指定すると、 適切な デフォルト値が選択されます。トランスポートのタイプ ( 接続指向またはコネクションレス) に応じ て、 clnt_tli_create() は適切なクライアント作成ルーチンを呼び出します。このルーチンは失敗すると NULL を返します。失敗の理由は、 clnt_pcreateerror() ルーチンを使って出力することができます。リ モートサービスのアドレスについては、リモート rpcbind サービス (rpcbind(1M) を参照) を調べませ ん。 CLIENT *clnt_tp_create() clnt_tp_create() は netconf を通じて指定されたトランスポートだけを試行する点を除いて、 clnt_create() と同様です。 clnt_tp_create() は、プログラム prognum, バージョン versnum, および netconf で指定されるトランス ポート用のクライアントハンドルを作成します。デフォルトのオプションが設定され、これは clnt_control() コールを使って変更できます。リモートサービスのアドレスについては、ホスト host に あるリモート rpcbind サービスを調べます。このルーチンは失敗すると NULL を返します。失敗の理 由は、 clnt_pcreateerror() ルーチンを使って出力することができます。 CLIENT *clnt_vc_create() このルーチンは、リモートプログラム prognum およびバージョン versnum 用の RPC クライアントを作 成します。このクライアントは、接続指向のトランスポートを使用します。リモートプログラムは、 アドレス svcaddr に存在します。パラメータ fildes は、オープンされバインドされたファイル記述子で す。ユーザーはパラメータ sendsz および recvsz を使って送信および受信バッファーのサイズを指定で きます。 0 を指定すると、適切なデフォルト値が選択されます。このルーチンは失敗すると NULL を 返します。 アドレス svcaddr は NULL であってはならず、リモートプログラムの実アドレスを指している必要が あります。 clnt_vc_create() は、この情報をリモート rpcbind サービスで調べません。 struct rpc_createerr rpc_createerr; 失 敗 し た RPC ク ラ イ ア ン ト ハ ン ド ル に よっ て 値 が 設 定 さ れ る グ ロー バ ル 変 数 で す。 ルー チ ン clnt_pcreateerror() はこれを使って失敗の理由を表すメッセージを出力します。 マルチスレッドアプリケーションでは、 rpc_createerr は各スレッドで独自の rpc_createerr を使用で きるマクロとなります。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-365 rpc_clnt_create(3N) rpc_clnt_create(3N) マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。キャンセルポイントである関数を 呼び出すという点で、キャンセルポイントとなる場合もあります。 マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 参照 rpc(3N), rpc_clnt_auth(3N), rpc_clnt_calls(3N), rpcbind(1M) Section 3-366 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 rpc_control(3N) rpc_control(3N) 名称 rpc_control − クライアントおよびサーバーアプリケーションのグローバル RPC 属性を操作するためのライブラ リルーチン 構文 bool_t rpc_control(int op, void *info); 説明 この RPC ライブラリルーチンは、クライアントだけでなくサーバーにも適用されるグローバルな RPC 属性を アプリケーションで設定および変更することを可能にします。現在のところ、サーバー側の操作だけがサポー トされています。 op は操作のタイプを表し、 info は操作固有の情報へのポインターです。サポートされる op の値と引き数のタイプ、およびその働きは、次のとおりです。 RPC_SVC_MTMODE_SET int * マルチスレッドモードを設定 RPC_SVC_MTMODE_GET int * マルチスレッドモードを入手 3つのマルチスレッド (MT) モードがあります。これらは次のとおりです。 These are: RPC_SVC_MT_NONE シングルスレッドモード (デフォルト) RPC_SVC_MT_USER ユーザーマルチスレッド モード RPC_SVC_MT_AUTO 自動マルチスレッド モード アプリケーションで自動マルチスレッド モードまたはユーザーマルチスレッド モードを設定しない限り、デ フォルトの (シングルスレッド) モードが有効です。一度モードを設定したら、変更できません。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。キャンセルポイントである関数を 呼び出すという点で、キャンセルポイントとなる場合もあります。 マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 戻り値 このルーチンは正常終了すると TRUE を返します。失敗すると FALSE を返します。 参照 rpcbind(1M), rpc(3N), rpc_svc_calls(3N) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-367 rpc_soc(3N) rpc_soc(3N) 名称 rpc_soc, authdes_create, authunix_create, authunix_create_default, callrpc, clnt_broadcast, clntraw_create, clnttcp_create, clntudp_bufcreate, clntudp_create, get_myaddress, pmap_getmaps, pmap_getport, pmap_rmtcall, pmap_set, pmap_unset, registerrpc, svc_fds, svc_getcaller, svc_getreq, svc_register, svc_unregister, svcfd_create, svcraw_create, svctcp_create, svcudp_bufcreate, svcudp_create, xdr_authunix_parms − RPC 用の旧ライブラリルーチン 構文 #define PORTMAP #include <rpc/rpc.h> AUTH * authdes_create(char *name, unsigned window, struct sockaddr *syncaddr, des_block *ckey); AUTH * authunix_create(char *host, int uid , int gid, int grouplen, int gidlistp); AUTH * authunix_create_default(void) callrpc(char *host, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out); enum clnt_stat clnt_broadcast(u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, resultproc_t eachresult); CLIENT * clntraw_create(u_long prognum, u_long versnum); CLIENT * clnttcp_create(struct sockaddr_in *addr, u_long prognum, u_long versnum, int * fdp, u_int sendsz, u_int recvsz); CLIENT * clntudp_bufcreate(struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int * fdp, u_int sendsz, u_int recvsz); CLIENT * clntudp_create(struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int * fdp); void get_myaddress(struct sockaddr_in *addr); struct pmaplist * pmap_getmaps(struct sockaddr_in *addr); u_short pmap_getport(struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long protocol); enum clnt_stat pmap_rmtcall(struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long procnum, xdrproct_t inproc, char *in, xdrproct_t outproc, char *out, struct timeval tout, u_long * portp); bool_t pmap_set(u_long prognum, u_long versnum, u_long protocol, u_short port); Section 3-368 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rpc_soc(3N) rpc_soc(3N) bool_t pmap_unset(u_long prognum, u_long versnum); int svc_fds; struct sockaddr_in * svc_getcaller(SVCXPRT *xprt); void svc_getreq(int rdfds); SVCXPRT * svcfd_create(int fd, u_int sendsz, u_int recvsz); SVCXPRT * svcraw_create(void); SVCXPRT * svctcp_create(int fd, u_int sendsz, u_int recvsz); SVCXPRT * svcudp_bufcreate(int fd, u_int sendsz, u_int recvsz); SVCXPRT * svcudp_create(int fd); registerrpc(u_long prognum, u_long versnum, u_long procnum, char *(* procname)( ), xdrproc_t inproc, xdrproc_t outproc); svc_register(SVCXPRT *xprt, u_long prognum, u_long versnum, void (*dispatch)( ), u_long protocol); void svc_unregister(u_long prognum, u_long versnum); xdr_authunix_parms(XDR *xdrs, struct authunix_parms *aupp); 説明 RPC ルーチンは、C 言語プログラムからネットワークを通じて他のマシンに対するプロシージャコールを行え るようにします。まず、クライアントがサーバに要求を送信するためのプロシージャを呼び出します。サーバ は要求を受信すると、ディスパッチルーチンを呼び出して要求されたサービスを実行し、応答を送り返しま す。最後に、プロシージャコールがクライアントに戻されます。 このマニュアルページで説明するルーチンは、新しいルーチンに置き換えられています。各ルーチンの説明の 後に、使用すべきルーチンを示します。今後のリリースでは、古いインタフェースへのサポートが廃止される 可能性があるので、新しいプログラムでは推奨されたルーチンの方を使用してください。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ファイル記述子 トランスポート独立の RPC は、トランスポートインタフェースとしてソケットの代わりに XTI を使用しま す。 このセクションで説明する一部のルーチン (clnttcp_create() など) は、パラメータの 1つとしてファイル記述子 へのポインタを使用します。ユーザーが RPC_ANYSOCK をファイル記述子として渡すと、ルーチンはソケッ トではなく TLI ファイル記述子を戻します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-369 rpc_soc(3N) rpc_soc(3N) ルーチン 以下のルーチンは、ヘッダー <rpc/rpc.h> がインクルードされていることが必要です。ヘッダーファイルを通 じて古いインタフェースのための適切な関数宣言がインクルードされるよう、シンボル PORTMAP が定義さ れていなければなりません。 AUTH * authdes_create() DES 認証として知られる 2つのルーチンの内、 authdes_create() は、RPC 安全運用認証システ ム に イ ン タ フェー ス す る 最 初 の も の で す。 2 番 目 の ルー チ ン は、 こ の 後 で 説 明 す る authdes_getucred() です。注記 : DES 認証システムが動作するためには、キーサーバデーモン keyserv(1M) が実行されている必要があります。 クライアント側で使用する authdes_create() は、認証システムを使用可能にする認証ハンドル を戻します。最初のパラメータ name は、サーバプロセスの所有者のネットワーク名、または netname です。このフィールドは通常、ユーティリティルーチン host2netname() から導出され るホスト名を表しますが、 user2netname() を使用してユーザー名を表すこともできます (secure_rpc(3N) を参照)。 2 番目のフィールドは、クライアント資格の有効期限であり、秒で 指定します。期限が小さい方が大きいより安全ですが、あまり小さい期限を選択すると、ク ロックの誤差のため、再同期化の頻度が増えます。 3 番目のパラメータ syncaddr は、省略可 能です。これが NULL の場合、認証システムはローカルクロックが常にサーバのクロックと同 期がとれていると見なし、再同期化しようとしません。アドレスを指定した場合は、システム はそのアドレスを使ってリモート タイムサービスを調べ、再同期化が必要かどうかを判定しま す。このパラメータは通常、RPC サーバ自体のアドレスです。最後のパラメータ ckey も省略 可能です。これが NULL の場合、認証システムは資格の暗号化に使用されるランダムな DES キーを生成します。DES キーを指定した場合は、代わりにそれが使用されます。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、 authdes_seccreate( ) (secure_rpc(3N) を参照) に置き換えられています。 AUTH * authunix_create() UX 認証情報を含む RPC 認証ハンドルを作成し戻します。パラメータ host は、この情報の作 成元のマシン名です。 uid は、ユーザーのユーザー ID です。 gid は、ユーザーの現在のグ ループ ID です。 grouplen および gidlistp は、ユーザーが所属するグループのカウントされた 配列を表します。 警告 : ユーザーを偽装するのは難しくありません。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、 authsys_create() (rpc_clnt_auth(3N) を参照) に置き換えられています。 AUTH * authunix_create_default(void) authunix_create() を適切なパラメータ付きで呼び出します。 Section 3-370 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 rpc_soc(3N) rpc_soc(3N) 警 告 : こ の ルー チ ン は 以 前 の バー ジョ ン と の 互 換 性 の た め に の み 存 在 し、 authsys_create_default() (rpc_clnt_auth(3N) を参照) に置き換えられています。 callrpc() マシン host 上の prognum、 versnum、および procnum に結合するリモートプロシージャを呼び 出します。パラメータ inproc はプロシージャのパラメータをエンコードするため使用され、 outproc はプロシージャの結果をデコードするため使用されます。 in はプロシージャの引き数 のアドレスであり、 out は結果を格納するアドレスです。このルーチンは正常終了すると 0 を 戻し、異常終了すると整数にキャストされた enum clnt_stat の値を戻します。異常終了ステー タスをメッセージに変換するには、ルーチン clnt_perrno() (rpc_clnt_calls(3N) を参照) が便利で す。 警告 : このルーチンを使用する場合、タイムアウトまたは認証を制御することはできません。 こ の ルー チ ン は 以 前 の バー ジョ ン と の 互 換 性 の た め に の み 存 在 し、 rpc_call() (rpc_clnt_calls(3N) を参照) に置き換えられています。 enum clnt_stat clnt_broadcast() コールメッセージが、ローカルに接続されたすべてのブロードキャストネットにブロードキャ ストされる点を除いて、 callrpc() と同様です。呼び出し側が応答を受信するたびに、このルー チンは次の形式の eachresult() を呼び出します。 eachresult(char *out,struct sockaddr_in *addr); ここで out は、 clnt_broadcast() に渡す out と同様ですが、ただしリモートプロシージャの出 力はそこでデコードされます。 addr は、結果を送信したマシンのアドレスを表します。 eachresult() が 0 を戻す場合、 clnt_broadcast() はさらに応答を待ちます。そうでない場合は、 該当するステータスを戻します。 eachresult() が NULL の場合、 clnt_broadcast() は次の応答 を待つことなく終了します。 警告 : ブロードキャストパケットのサイズは、関与するトランスポートの最大の転送単位に制 限されます。イーサーネットの場合、呼び出し側の引き数サイズは約 1500 バイトです。コー ルメッセージは接続されたすべてのネットワークに送信されるので、潜在的にブロードキャス トストームを引き起こす可能性があります。 clnt_broadcast() は、デフォルトで AUTH_SYS 資格を使用します (rpc_clnt_auth(3N) を参照)。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、 rpc_broadcast() (rpc_clnt_calls(3N) を参照) に置き換えられています。 CLIENT * clntraw_create() このルーチンは、リモートプログラム prognum 、バージョン versnum 用の内部的な、メモリ ベースの RPC クライアントを作成します。サービスに対してメッセージを渡すため使用され るトランスポートは、実際にはプロセスのアドレス空間内のバッファなので、対応する RPC サーバが同じアドレス空間内で生きているはずです。 svcraw_create() を参照してください。 これにより、カーネルの干渉なしに、RPC のシミュレーションと RPC オーバーヘッド (往復 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-371 rpc_soc(3N) rpc_soc(3N) にかかる時間など) の取得が可能になります。このルーチンは異常終了するとNULLを戻しま す。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、機能性は新しいルー チン clnt_raw_create() (rpc_clnt_create(3N) を参照) と同じです。 CLIENT * clnttcp_create() このルーチンは、リモートプログラム prognum 、バージョン versnum 用の RPC クライアント を作成します。このクライアントは TCP/IP をトランスポートとして使用します。リモートプ ログラムはインターネットアドレス addr に存在します。 addr→sin_port が 0 の場合、アドレ スはリモートプログラムがリスンしている実ポートに設定されます ( この情報はリモート rpcbind サービスから取得されます)。パラメータ *fdp はファイル記述子であり、これはオー プンされバインドされていてもかまいません。このパラメータが RPC_ANYSOCK の場合、こ のルーチンは新しいファイル記述子をオープンし、 *fdp を設定します。詳細は、 ファイル記 述子の項を参照してください。TCP ベースの RPC はバッファ付き I/O を使用するので、ユー ザーはパラメータ sendsz および recvsz を使って送信および受信バッファのサイズを指定でき ます。 0 を指定すると、適切なデフォルトが選択されます。このルーチンは異常終了すると NULL を戻します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。代わりに clnt_create()、 clnt_tli_create()、または clnt_vc_create() (rpc_clnt_create(3N) を参照) を使用し てください。 CLIENT * clntudp_bufcreate() リモートプログラム prognum、 versnum 用のクライアントハンドルを作成します。クライアン トは DP/IP をトランスポートとして使用します。リモートプログラムはインターネットアドレ ス addr に存在します。 addr→sin_port が 0 の場合、アドレスはリモートプログラムがリスン しているポートに設定されます (この情報はリモート rpcbind サービスから取得されます)。パ ラメータ *fdp はファイル記述子であり、これはオープンされバインドされていてもかまいま せん。このパラメータが RPC_ANYSOCK の場合、このルーチンは新しいファイル記述子を オープンし、 *fdp を設定します。詳細は、 ファイル記述子の項を参照してください。 UDP ト ランスポートは、応答を受信するかコールタイムアウトに達するまで、 wait に指定する間隔 でコールメッセージを再送信します。タイムアウトまでのコール時間の総計は、 clnt_call() (rpc_clnt_calls(3N) を参照) で指定します。正常終了した場合はクライアントハンドルを戻し、 異常終了した場合は NULL を戻します。エラーは clnt_pcreateerror() ルーチン (rpc_clnt_create(3N) を参照) で出力することができます。 ユーザーは UDP ベースの RPC メッセージ用の sendsz および recvsz 引き数を使って、送信お よび受信用の最大パケットサイズを指定することができます。 警告 : addr→sin_port が 0 であり、かつ要求されたバージョン番号 versnum がリモート portmap サービスに登録されていない場合、指定されたプログラム番号のバージョン番号が少なくとも 1 つ 登 録 さ れ て い れ ば、 こ の ルー チ ン は ハ ン ド ル を 戻 し ま す。 バー ジョ ン の 不 整 合 は、 Section 3-372 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 rpc_soc(3N) rpc_soc(3N) clnt_call() を使って発見できます (rpc_clnt_calls(3N) を参照)。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。代わりに clnt_tli_create() または clnt_dg_create() (rpc_clnt_create(3N) を参照) を使用してください。 CLIENT * clntudp_create() このルーチンは、リモートプログラム prognum, バージョン versnum 用の RPC クライアントハ ンドルを作成します。このクライアントは UDP/IP をトランスポートとして使用します。リ モートプログラムはインターネットアドレス addr に存在します。 addr→sin_port が 0 の場 合、アドレスはリモートプログラムがリスンしている実ポートに設定されます (この情報はリ モート rpcbind サービスから取得されます)。パラメータ *fdp はファイル記述子であり、これ はオープンされバインドされていてもかまいません。これが RPC_ANYSOCK の場合、この ルーチンは新しいファイル記述子をオープンし *fdp を設定します。詳細は、 ファイル記述子 の項を参照してください。 UDP トランスポートは、応答を受信するかコールタイムアウトに 達するまで、 wait に指定する間隔でコールメッセージを再送信します。タイムアウトまでの コール時間の総計は、 clnt_call() (rpc_clnt_calls(3N) を参照) で指定します。 clntudp_create() は正常終了するとクライアントハンドルを戻し、異常終了すると NULL を戻します。エラーは clnt_pcreateerror() ルーチン (rpc_clnt_create(3N) を参照) で出力することができます。 警告 : UDP ベースの RPC メッセージはエンコードされたデータを最高 8K バイトしか収容で きないので、このトランスポートは大きい引き数を取るか大きい結果を戻すプロシージャには 使用できません。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。代わりに clnt_create()、 clnt_tli_create()、または clnt_dg_create() (rpc_clnt_create(3N) を参照) を使用し てください。 void get_myaddress() /etc/hosts を扱うライブラリルーチンを調べずに、ローカルシステムの IP アドレスを *addr に 格納します。ポート番号は常に htons(PMAPPORT) に設定されます。 警告 : このルーチンは、必ず RPC ライブラリと併用するよう設計されています。このルーチ ンは、RPC ライブラリと互換の形式でローカルシステムのアドレスを戻し、これをシステムの 実 IP アドレスと見なしてはいけません。実際、 *addr バッファのホストアドレス部分はゼロ が書き込まれています。このアドレスはローカルでのみ有効であり、リモートシステムまたは プロセスでそのローカルシステムに接続するために使用できるアドレスと見なしては いけませ ん。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。ローカルシステ ムのネットワークアドレスを netbuf 構造として取り出すには、ルーチン netdir_getbyname() (netdir(3N) を参照) に名前 HOST_SELF を指定して実行してください。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-373 rpc_soc(3N) rpc_soc(3N) struct pmaplist * pmap_getmaps() portmap サービスへのユーザーインタフェースであり、IP アドレス addr に存在するホストの 現在の RPC プログラム - ポートのマッピングのリストを戻します。このルーチンは NULL を 戻す場合があります。コマンド ‘rpcinfo −p’ がこのルーチンを使用します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、拡張された機能は rpcb_getmaps() (rpcbind(3N) を参照) によって提供されています。 u_short pmap_getport() portmap サービスへのユーザーインタフェースであり、プログラム prognum、バージョン versnum をサポートし、 protocol に対応するトランスポートプロトコルを使用するサービスが待 機しているポート番号を戻します。 protocol は、ほとんどの場合 IPPROTO_UDP または IPPROTO_TCP です。戻り値が 0 の場合、マッピングが存在しないか、または RPC システム がリモート portmap サービスに接続できなかったことを意味します。後者のケースでは、グ ローバル変数 rpc_createerr に RPC ステータスが含まれています。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、拡張された機能は rpcb_getaddr() (rpcbind(3N) を参照) によって提供されています。 enum clnt_stat pmap_rmtcall() IP アドレス *addr のホスト上の portmap が、呼び出し側に代わってそのホスト上のプロシー ジャに対し RPC を実行するよう要求します。プロシージャが成功すると、 *portp はプログラ ム の ポー ト 番 号 に 変 更 さ れ ま す。 他 の パ ラ メー タ の 定 義 に つ い て は、 callrpc() お よ び clnt_call() (rpc_clnt_calls(3N) を参照) で説明されています。 注記 : このプロシージャは、UDP トランスポートに関してのみ使用可能です。 警告 : 要求されたリモートプロシージャがリモート portmap に登録されていない場合は、エ ラー応答は戻されず、コールがタイムアウトします。また、認証も行われません。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、拡張された機能は rpcb_rmtcall() (rpcbind(3N) を参照) によって提供されています。 bool_t pmap_set() portmap サービスへのユーザーインタフェースであり、マシンの portmap サービスでのトリ プル [ prognum、 versnum、 protocol ] と port との間のマッピングを設定します。 protocol の値 としては、 IPPROTO_UDP または IPPROTO_TCP を指定できます。以前は、要求された port が使用中であればこのルーチンは異常終了していました。現在では、 port がまだバインドさ れている場合にだけ異常終了します。 port がバインドされていなければ、ルーチンは古い登 録を削除し、要求された登録を完了します。このルーチンは正常終了すると 1 を戻し、異常終 了すると 0 を戻します。 svc_register() によって自動的に実行されます。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、拡張された機能は rpcb_set() (rpcbind(3N) を参照) によって提供されています。 Section 3-374 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 rpc_soc(3N) rpc_soc(3N) bool_t pmap_unset() portmap サービスへのユーザーインタフェースであり、マシンの portmap サービスでのトリ プル [ prognum、 versnum、 all-protocols ] と port との間のすべてのマッピングを削除しますこ のルーチンは正常終了すると 1 を戻し、異常終了すると 0 を戻します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、拡張された機能は rpcb_unset() (rpcbind(3N) を参照) によって提供されています。 int svc_fds; RPC サービス側のファイル読み取り記述子ビットマスクを反映するグローバル変数です。これ は select() コールのパラメータとして適しています。これは、サービスインプリメンタが svc_run() を呼び出さず、独自の非同期イベント処理を実現する場合にだけ意味を持ちます。 この変数は読み取り専用です ( 変数のアドレスを select() に渡してはいけません ) が、 svc_getreq() または何らかの作成ルーチンの呼び出し後に変更される可能性があります。 svc_fdset に似ていますが、記述子は 32 個に制限されています。 警告 : このインタフェースは svc_fdset (rpc_svc_calls(3N) を参照) に置き換えられています。 struct sockaddr_in * svc_getcaller() このルーチンは、RPC サービストランスポート ハンドル xprt に結合するプロシージャの呼び 出し側の、 sockaddr_in 構造体として表されたネットワークアドレスを戻します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、古くなっています。 使 用 す べ き イ ン タ フェー ス は、 ア ド レ ス を netbuf 構 造 体 と し て 戻 す svc_getrpccaller() (rpc_svc_reg(3N) を参照) です。 void svc_getreq() このルーチンは、サービスインプリメンタが svc_run() を呼び出さず、カスタムな非同期イベ ント処理を実現する場合にだけ意味を持ちます。 select() コールにより、どれかの RPC ファイ ル記述子に対する RPC 要求の到着が認識されたとき、このルーチンが呼び出されます。 rdfds は、結果のファイル読み取り記述子ビットマスクです。このルーチンは、 rdfds の値に結合す るすべてのファイル記述子がサービスされると終了します。このルーチンは svc_getreqset() に 似ていますが、記述子は 32 個に制限されています。 警告 : このインタフェースは svc_getreqset() に置き換えられています。 SVCXPRT * svcfd_create() オープンされバインドされたファイル記述子の上にサービスを作成します。一般に、この記述 子はストリームプロトコル用の接続されたファイル記述子です。詳細は、 ファイル記述子 の 項を参照してください。 sendsz および recvsz は、送信および受信バッファのサイズを表しま す。この値が 0 の場合、適切なデフォルトが選択されます。 警告 : このインタフェースは、 svc_fd_create() (rpc_svc_create(3N) を参照) に置き換えられてい ます。 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-375 rpc_soc(3N) rpc_soc(3N) SVCXPRT * svcraw_create(void); このルーチンは、内部的な、メモリベースの RPC サービストランスポートを作成し、そのポ インタを戻します。このトランスポートは、実際にはプロセスのアドレス空間内のバッファな ので、対応する RPC クライアントが同じアドレス空間内で生きているはずです。 clntraw_create() を参照してください。このルーチンにより、カーネルの干渉なしに、RPC のシミュレー ションと RPC オーバーヘッド (往復にかかる時間など) の取得が可能になります。このルーチ ンは異常終了すると NULL を戻します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、これを置き換えた svc_raw_create() (rpc_svc_create(3N) を参照) と機能性は同じです。 SVCXPRT * svctcp_create() このルーチンは TCP/IP ベースの RPC サービストランスポートを作成し、そのポインタを戻し ま す。 こ の ト ラ ン ス ポー ト は ファ イ ル 記 述 子 fd と 結 合 し て い ま す。 こ の 記 述 子 が RPC_ANYSOCK の場合、新しいファイル記述子が作成されます。ファイル記述子がローカル TCP ポートにバインドされていない場合、このルーチンはそれを任意のポートにバインドしま す。詳細は、 ファイル記述子 の項を参照してください。終了すると、 xprt→xp_fd はトランス ポートのファイル記述子であり、 xprt→xp_port はトランスポートのポート番号です。この ルーチンは異常終了すると NULL を戻します。TCP ベースの RPC はバッファ付き I/O を使用 するので、ユーザーはバッファのサイズを指定できます。 0 を指定すると、適切なデフォルト が選択されます。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。代わりに svc_create()、 svc_tli_create()、または svc_vc_create() (rpc_svc_create(3N) を参照) を使用して ください。 SVCXPRT * svcudp_bufcreate() このルーチンは UDP/IP ベースの RPC サービストランスポートを作成し、そのポインタを戻し ます。このトランスポートはファイル記述子 fd に結合しています。 fd が RPC_ANYSOCK の 場合、新しいファイル記述子か作成されます。ファイル記述子がローカル UDP ポートにバイ ンドされていない場合、このルーチンはそれを任意のポートにバインドします。終了すると、 xprt→xp_fd はトランスポートのファイル記述子であり、 xprt→xp_port はトランスポートの ポート番号です。詳細は、 ファイル記述子の項を参照してください。このルーチンは異常終了 すると NULL を戻します。 ユーザーは sendsz および recvsz パラメータを使って UDP ベースの RPC メッセージの送信お よび受信のための最大パケットサイズを指定できます。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。代わりに svc_tli_create()、または svc_dg_create() (rpc_svc_create(3N) を参照) を使用してください。 Section 3-376 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 rpc_soc(3N) rpc_soc(3N) SVCXPRT * svcudp_create() このルーチンは UDP/IP ベースの RPC サービストランスポートを作成し、そのポインタを戻し ま す。 こ の ト ラ ン ス ポー ト は ファ イ ル 記 述 子 fd と 結 合 し て い ま す。 こ の 記 述 子 が RPC_ANYSOCK の場合、新しいファイル記述子が作成されます。ファイル記述子がローカル UDP ポートにバインドされていない場合、このルーチンはそれを任意のポートにバインドしま す。終了すると、 xprt→xp_fd はトランスポートのファイル記述子であり、 xprt→xp_port はト ランスポートのポート番号です。このルーチンは異常終了すると NULL を戻します。 警告 : UDP ベースの RPC メッセージはエンコードされたデータを最高 8K バイトしか収容で きないので、このトランスポートは大きい引き数を取るか大きい結果を戻すプロシージャには 使用できません。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。代わりに svc_create()、 svc_tli_create()、または svc_dg_create() (rpc_svc_create(3N) を参照) を使用して ください。 registerrpc() RPC サービスパッケージにプログラム prognum 、プロシージャ procname、およびバージョン versnum を登録します。プログラム prognum、バージョン versnum、およびプロシージャ procnum への要求が到着すると、 procname がパラメータへのポインタ付きで呼び出されます。 procname に、その静的な結果へのポインタが戻されるはずです。 inproc はパラメータのデ コードに、 outproc は結果のエンコードに使用されます。このルーチンは登録が成功すると 0 を戻し、失敗すると −1 を戻します。 svc_run() は、すべてのサービスを登録した後で呼び出さなければなりません。 警 告 : こ の ルー チ ン は 以 前 の バー ジョ ン と の 互 換 性 の た め に の み 存 在 し、 rpc_reg() (rpc_svc_calls(3N) を参照) に置き換えられています。 svc_register() prognum および versnum をサービスディスパッチ プロシージャ dispatch に結合します。 protocol が 0 の場合、サービスは portmap サービスに登録されません。 protocol がゼロ以外の場 合、SU トリプル [ prognum、 versnum、 protocol ] と xprt→xp_port の間のマッピングが、ロー カル portmap サービスに設定されます ( 一般に protocol は 0 、 IPPROTO_UDP または IPPROTO_TCP です)。プロシージャ dispatch の形式は次のとおりです。 dispatch(struct svc_req *request,SVCXPRT *xprt); svc_register() は正常終了すると 1 を戻し、異常終了すると 0 を戻します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。拡張された機能 は svc_reg() (rpc_svc_calls(3N) を参照) によって提供されています。 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 3-377 rpc_soc(3N) rpc_soc(3N) void svc_unregister() ダ ブ ル [ prognum 、 versnum ] と ディ ス パッ チ ルー チ ン、 お よ び ト リ プ ル [ prognum 、 versnum、 all-protocols ] とポート番号の間のすべてのマッピングを portmap から削除します。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在します。拡張された機能 は svc_unreg() (rpc_svc_calls(3N) を参照) によって提供されています。 xdr_authunix_parms() UNIX 資格の説明のため使用されます。このルーチンは、RPC 認証パッケージを使用せずにこ れらの資格を生成したい場合に役立ちます。 警告 : このルーチンは以前のバージョンとの互換性のためにのみ存在し、 xdr_authsys_parms() (rpc_xdr(3N) を参照) に置き換えられています。 マルチスレッドの使用法 Thread Safe: No Cancel Safe: No Async-cancel Safe: No Async-signal Safe: No 注意 これらのインタフェースは、マルチスレッドアプリケーションで安全ではなく、メインスレッドからのみ呼び 出すようにしなければなりません。 参照 keyserv(1M), rpcbind(1M), rpcinfo(1M), rpc(3N), rpc_clnt_auth(3N), rpc_clnt_calls(3N), rpc_clnt_create(3N), rpc_svc_calls(3N), rpc_svc_create(3N), rpc_svc_err(3N), rpc_svc_reg(3N), rpcbind(3N), secure_rpc(3N), select(2) Section 3-378 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 rpc_svc_calls(3N) rpc_svc_calls(3N) 名称 rpc_svc_calls, svc_dg_enablecache, svc_done, svc_exit, svc_fdset, svc_freeargs, svc_getargs, svc_getreq_common, svc_getreq_poll, svc_getreqset, svc_getrpccaller, svc_pollset, svc_run, svc_sendreply − RPC サーバ用のライブラリルー チン 構文 #include <rpc/rpc.h> int svc_dg_enablecache(SVCXPRT *xprt, const unsigned long cache_size); int svc_done(SVCXPRT *xprt); void svc_exit(void); fd_set svc_fdset; bool_t svc_freeargs(const SVCXPRT *xprt, const xdrproc_t inproc, caddr_t in); bool_t svc_getargs(const SVCXPRT *xprt, const xdrproc_t inproc, caddr_t in); void svc_getreq_common(const int fd); void svc_getreq_poll(struct pollfd * pfdp, const int pollretval); void svc_getreqset(fd_set *rdfds); struct netbuf *svc_getrpccaller(const SVCXPRT *xprt); void svc_run(void); bool_t svc_sendreply(const SVCXPRT *xprt, const xdrproc_t outproc, const caddr_t out); 説明 これらのルーチンは、C 言語プログラムからネットワークを通じて他のマシンに対するプロシージャコールを 行うための RPC ライブラリの一部です。 これらのルーチンは、RPC メカニズムのサーバ側に関連しています。これらのルーチンの中には、サーバ側の ディスパッチ関数で呼び出されるものもありますし、また (svc_run() などのように) サーバの起動時に呼び出 されるものもあります。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 マルチスレッドについての注意事項 現在の処理系では、サービストランスポート ハンドル SVCXPRT に、引き数をデコードし結果をエンコード するための 1つの領域が含まれています。したがって、このような関数を呼び出すスレッド間でこの構造を自 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-379 rpc_svc_calls(3N) rpc_svc_calls(3N) 由に共有することができません。ただし、サーバがユーザーマルチスレッド モードで動作している場合には、 並行した要求処理を可能にするため、この構造のコピーがサービスディスパッチ プロシージャに渡されます。 そのため、他の状況では安全でない一部のルーチンが安全になります。これらのルーチンについては、そのよ うに明記されています。また、マルチスレッドアプリケーションにおいて安全でない、この種のアプリケー ションで使用してはならないルーチンについても明記されています。 ルーチン SVCXPRT データ構造の定義については、 rpc(3N) を参照してください。 int svc_dg_enablecache() この関数は、 cache_size 個のエントリを収容できる大きさの重複した要求キャッシュを、サービスエ ンドポイント xprt に割り当てます。一度キャッシングを使用可能にしたら、使用不能にすることはで きません。このルーチンは、指定されたサイズのキャッシュに必要なスペースを正常に割り当てた場 合は 1、割り当てられなかった場合は 0 を戻します。 この関数はマルチスレッドアプリケーションで安全に使用できます。 int svc_done() この関数は、サービスエンドポイント xprt に向けられたクライアント要求をサービスするため割り当 てられたリソースを解放します。このコールは、ユーザーマルチスレッド モードで実行中のサーバに のみ関連します。ユーザーマルチスレッド モードでは、サービスプロシージャは終了する前に ( クラ イアント要求をサービスした後か、または応答の送信を不可能にするエラーまたは異常条件の後で) こ のコールを起動しなければなりません。 svc_done() を起動した後は、サービスエンドポイント xprt を サービスプロシージャで参照してはいけません。サーバマルチスレッド モードおよびパラメータは、 rpc_control() コールを使って設定することができます。 この関数はマルチスレッドアプリケーションで安全に使用できます。この関数はユーザーマルチス レッド モード以外のモードで起動しても無効です。 void svc_exit(void) この関数は、RPC サーバプロシージャなどで呼び出した場合、サーバによって登録されたすべての サービスを削除し、 svc_run() を終了させます。 RPC サーバアクティビティを再開する場合は、いずれかの rpc_svc_create(3N) 関数、または xprt_register() を使って RPC ライブラリにサービスを再登録する必要があります。 svc_exit() の有効範囲はグローバルであり、すべての RPC サーバアクティビティを終了させます。 fd_set svc_fdset RPC サーバのファイル読み取り記述子ビットマスクを反映するグローバル変数です。これは、サービ スインプリメンタが svc_run() を呼び出さず、独自の非同期イベント処理を実現する場合にだけ意味を 持ちます。この変数は読み取り専用であり、 svc_getreqset( ) または何らかの作成ルーチンの呼び出し 後に変化する可能性があります。 select(2) にこの変数のアドレスを渡してはいけません。代わりに、 コピーのアドレスを渡してください。 Section 3-380 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rpc_svc_calls(3N) rpc_svc_calls(3N) ユーザーマルチスレッド モードで実行中のマルチスレッドアプリケーションでこの変数を読み取って はいけません。これらのアプリケーションでは、補助スレッドを使って非同期イベント処理を実行し なければなりません。 bool_t svc_freeargs() RPC/XDR システムが svc_getargs() を使ってサービスプロシージャへの引き数をデコードしたとき割 り当てたデータを解放する関数マクロです。このルーチンは、結果を正常に解放できた場合は TRUE、解放できなかった場合は FALSE を戻します。 この関数マクロは、ユーザーマルチスレッド モードを使用中のマルチスレッドアプリケーションで安 全に使用できます。 bool_t svc_getargs() RPC サービストランスポート ハンドル xprt に結合する RPC 要求の引き数をデコードする関数マク ロ。パラメータ in は、引き数を格納するアドレスです。 inproc は、引き数をデコードするため使用す る XDR ルーチンです。このルーチンはデコードが正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 この関数マクロは、ユーザーマルチスレッド モードを使用中のマルチスレッドアプリケーションで安 全に使用できます。 void svc_getreq_common() このルーチンは、指定されたファイル記述子に対する要求を処理します。 この関数マクロは、マルチスレッドアプリケーションで安全ではありません。 void svc_getreq_poll() このルーチンは、サービスインプリメンタが svc_run() を呼び出さず、カスタムな非同期イベント処理 を実現する場合にだけ意味を持ちます。 poll(2) により、どれかの RPC ファイル記述子に対する RPC 要求が到着が認識されたとき、このルーチンが呼び出されます。 pollretval は poll(2) の戻り値であり、 pfdp はその poll(2) の対象となった pollfd 構造の配列です。この配列は、認められる最大数の記述子を 収容できる大きさの配列であると見なされます。 この関数マクロは、マルチスレッドアプリケーションで安全ではありません。 void svc_getreqset() このルーチンは、サービスインプリメンタが svc_run() を呼び出さず、カスタムな非同期イベント処理 を実現する場合にだけ意味を持ちます。 select(2) により、どれかの RPC ファイル記述子に対する RPC 要求の到着が認識されたとき、このルーチンが呼び出されます。 rdfds は、結果のファイル読み取り記 述子ビットマスクです。このルーチンは、 rdfds の値に結合するすべてのファイル記述子がサービスさ れると終了します。 この関数マクロは、マルチスレッドアプリケーションで安全ではありません。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-381 rpc_svc_calls(3N) rpc_svc_calls(3N) struct netbuf *svc_getrpccaller() RPC サービストランスポート ハンドル xprt に結合するプロシージャの呼び出し側のネットワークアド レスを入手するための、承認される方法です。 この関数マクロは、マルチスレッドアプリケーションで安全に使用できます。 void svc_run(void) このルーチンは終了しません。シングルスレッドモードでは、このルーチンは RPC 要求の到着を待 ち、到着すると svc_getreq_poll() を使って適切なサービスプロシージャを呼び出します。このプロ シージャは通常、 poll(2) ライブラリコールが終了するのを待っています。 ユーザーマルチスレッド モードで実行中のアプリケーションは、この関数を 1回だけ起動しなければ なりません。ユーザーマルチスレッド モードでは、この関数は、サービス開発者がクライアント要求 を処理する独自のスレッドを作成および管理するための枠組みを提供します。 bool_t svc_sendreply() RPC サービスのディスパッチルーチンにより、リモートプロシージャコールの結果を送信するため呼 び出されます。パラメータ xprt は、要求に結合するトランスポートハンドルです。 outproc は、結果 をエンコードするための XDR ルーチンです。 out は、結果のアドレスです。このルーチンは正常終了 すると TRUE を戻し、異常終了すると FALSE を戻します。 この関数マクロは、ユーザーマルチスレッド モードを使用するマルチスレッドアプリケーションで安 全に使用できます。 マルチスレッドの使用法 Thread Safe: このページの 「注意」の項を参照してください。 Cancel Safe: このページの 「注意」の項を参照してください。 Fork Safe: No Async-cancel Safe: No Async-signal Safe: No マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 注意 svc_dg_enablecache() および svc_getrpccaller() は、マルチスレッドアプリケーションではスレッドセーフおよ びキャンセルセーフです。 svc_freeargs(), svc_getargs(), および svc_sendreply() は、ユーザーマルチスレッド モードを使用するマルチスレッドアプリケーションではスレッドセーフおよびキャンセルセーフです。 svc_getreq_common(), svc_getreqset(), および svc_getreq_poll() は、マルチスレッドアプリケーションで安全で はなく、メインスレッドからのみ呼び出すようにしなければなりません。 Section 3-382 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 rpc_svc_calls(3N) rpc_svc_calls(3N) 参照 rpcgen(1), poll(2), rpc(3N), rpc_control(3N), rpc_svc_create(3N), rpc_svc_err(3N), rpc_svc_reg(3N), select(2) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-383 rpc_svc_create(3N) rpc_svc_create(3N) 名称 rpc_svc_create, svc_control, svc_create, svc_destroy, svc_dg_create, svc_fd_create, svc_raw_create, svc_tli_create, svc_tp_create, svc_vc_create − サーバハンドル作成のためのライブラリルーチン 構文 #include <rpc/rpc.h> bool_t svc_control (SVCXPRT *svc, const u_int req, void *info); int svc_create(const void (*dispatch)(const struct svc_req *, const SVCXPRT *), const u_long prognum, const u_long versnum, const char *nettype); void svc_destroy(SVCXPRT *xprt); SVCXPRT1 *svc_dg_create(const int fildes, const u_int sendsz, const u_int recvsz); SVCXPRT *svc_fd_create(const int fildes, const u_int sendsz, const u_int recvsz); SVCXPRT *svc_raw_create(void); SVCXPRT *svc_tli_create(const int fildes, const struct netconfig *netconf , const struct t_bind *bindaddr, const u_int sendsz, const u_int recvsz); SVCXPRT *svc_tp_create(const void (*dispatch)(const struct svc_req *, const SVCXPRT *), const u_long prognum, const u_long versnum, const struct netconfig *netconf ); SVCXPRT *svc_vc_create(const int fildes, const u_int sendsz, const u_int recvsz); 説明 これらのルーチンは、C 言語プログラムからネットワークを通じてサーバに対するプロシージャコールを行う ための RPC ライブラリの一部です。これらのルーチンは、サービスハンドルの作成を処理します。一度ハンド ルを作成すると、 svc_run() を呼び出すことによってサーバを起動できるようになります。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン SVCXPRT データ構造の定義については、 rpc(3N) を参照してください。 Section 3-384 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rpc_svc_create(3N) rpc_svc_create(3N) bool_t svc_control() サービスオブジェクトに関するさまざまな情報を変更したり取り出すための関数です。 req は操作の タイプを表し、 info は情報へのポインタです。サポートされる req の値と引き数のタイプ、およびそ の作用は、次のとおりです。 SVCGET_VERSQUIET プログラム番号はこのサーバによってサービスされるものであっても、バー ジョン番号がサーバに登録された範囲外であるようなプログラムに対する要 求を受信した場合、 RPC_PROGVERSMISMATCH エラーが通常戻されま す。 info は、整数へのポインタでなければなりません。 SVCGET_VERSQUIET 要求が正常終了した時点では、 *info にはサーバの現在の動作を表 す整数が含まれています。 0 は正常なサーバ動作を表します ( すなわち、 RPC_PROGVERSMISMATCH エラーが戻されます)。 1 は、範囲外の要求 が単に無視されることを表します。 SVCSET_VERSQUIET プログラム番号はこのサーバによってサービスされるものであっても、バー ジョン番号がサーバに登録された範囲外であるようなプログラムに対する要 求を受信した場合、 RPC_PROGVERSMISMATCH エラーが通常戻されま す。この動作を変更するのが望ましい場合があります。 info は、 0 (通常の サーバ動作を表す − RPC_PROGVERSMISMATCH エラーが戻される)、ま たは 1 (範囲外の要求を単に無視することを表す) のどちらかの整数へのポ インタでなければなりません。 int svc_create() svc_create() は、クラス nettype に属するすべてのトランスポート用のサーバハンドルを作成します。 nettype は、特定のアプリケーションに使用できるトランスポートのクラスを定義します。一連のトラ ンスポートが NETPATH 変数の左から右の順序、または netconfig データベースでの上から下の順序で 試行されます。 nettype が NULL の場合、デフォルト値は netpath です。 svc_create() は、自分自身を rpcbind サービスに登録します (rpcbind(1M) を参照)。 dispatch は、指定 された prognum および versnum に対するリモートプロシージャコールがあると呼び出されます。これ は svc_run() が呼び出されていることを前提とします (rpc_svc_reg(3N) の svc_run() を参照)。 svc_create() が正常終了すると、作成したサーバハンドルの個数を戻します。異常終了すると 0 を戻し、エ ラーメッセージがログされます。 void svc_destroy() RPC サービスハンドル xprt を削除する関数マクロです。削除とともに、 xprt 自体も含めて、プライ ベートデータ構造の割り当て解除も通常行われます。このルーチンの呼び出し後は、 xprt の使用は不 定となります。 SVCXPRT *svc_dg_create() このルーチンはコネクションレス RPC サービスハンドルを作成し、そのポインタを返します。この ルーチンは異常終了すると NULL を戻し、エラーメッセージがログされます。 sendsz および recvsz HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-385 rpc_svc_create(3N) rpc_svc_create(3N) は、バッファのサイズを指定するパラメータです。これらが 0 の場合、適切なデフォルト値が選択さ れます。ファイル記述子 fildes はオープンされバインドされていなければなりません。サーバは rpcbind(1M) に登録されません。 警告 : コネクションレスベースの RPC メッセージに収容できるエンコードされたデータの量には制限 があるので、このトランスポートは、大きい引き数を取るか大きい結果を戻すプロシージャには使用 できません。 SVCXPRT *svc_fd_create() このルーチンは、オープンされバインドされたファイル記述子の上にサービスを作成し、そのハンド ルを戻します。一般に、この記述子は接続指向トランスポート用の接続されたファイル記述子です。 sendsz および recvsz は、送信および受信バッファのサイズを表します。これらが 0 の場合、適切なデ フォルト値が選択されます。このルーチンは異常終了すると NULL を戻し、エラーメッセージがログ されます。 SVCXPRT *svc_raw_create(void) このルーチンは、RPC サービスハンドルを作成し、そのポインタを戻します。トランスポートは実際 にはプロセスのアドレス空間内のバッファなので、対応する RPC クライアントが同じアドレス空間内 で動作していなければなりません (rpc_clnt_create(3N) の clnt_raw_create() を参照)。このルーチンによ り、カーネルおよびネットワークの干渉なしに、RPC のシミュレーションと RPC オーバヘッド (往復 にかかる時間など) の取得が可能になります。このルーチンは異常終了すると NULL を戻し、エラー メッセージがログされます。 注記 : rawインタフェースの使用中は、 svc_run() を呼び出してはいけません。 SVCXPRT *svc_tli_create() このルーチンは RPC サーバハンドルを作成し、そのポインタを戻します。 fildes は、サービスがリス ンしているファイル記述子です。 fildes が RPC_ANYFD の場合、 netconf で指定されるトランスポー トにファイル記述子をオープンします。ファイル記述子がアンバインドされ、かつ bindaddr がヌル以 外の場合、 fildes は bindaddr で指定されるアドレスにバインドされます。それ以外の場合は、 fildes は トランスポートによって選択されるデフォルトのアドレスにバインドされます。デフォルトのアドレ スが選択された場合、未処理の接続要求の個数は、接続指向トランスポートに対して 8 に設定されま す。ユーザーは送信および受信バッファのサイズを、パラメータ sendsz および recvsz で指定すること ができます。 0 を指定した場合、適切なデフォルト値が選択されます。このルーチンは異常終了する と NULL を戻し、エラーメッセージがログされます。サーバは rpcbind(1M) に登録されません。 SVCXPRT *svc_tp_create() svc_tp_create() は、 netconf によって指定されるネットワーク用のサーバハンドルを作成し、自分自身 を rpcbind サービスに登録します。 dispatch は、指定された prognum および versnum へのリモートプ ロシージャコールがあると呼び出されます。これは svc_run() が呼び出されていることを前提としま す。 svc_tp_create() は、正常終了するとサービスハンドルを戻し、異常終了すると NULL を戻してエ ラーメッセージがログされます。 Section 3-386 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 rpc_svc_create(3N) rpc_svc_create(3N) SVCXPRT *svc_vc_create() このルーチンは、接続指向の RPC サービスを作成し、そのポインタを戻します。このルーチンは異常 終了すると NULL を戻し、エラーメッセージがログされます。ユーザーは送信および受信バッファの サイズをパラメータ sendsz および recvsz で指定することができます。 0 を指定すると、適切なデフォ ルト値が選択されます。ファイル記述子 fildes は、オープンされバインドされていなければなりませ ん。サーバは rpcbind(1M) サービスに登録されません。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。キャンセルポイントである関数を 呼び出すという点で、キャンセルポイントとなる場合もあります。 マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 参照 rpcbind(1M), rpc(3N), rpc_svc_calls(3N), rpc_svc_err(3N), rpc_svc_reg(3N) HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-387 rpc_svc_err(3N) rpc_svc_err(3N) 名称 rpc_svc_err, svcerr_auth, svcerr_decode, svcerr_noproc, svcerr_noprog, svcerr_progvers, svcerr_systemerr, svcerr_weakauth − サーバ側のリモートプロシージャコールのエラー処理ライブラリルーチン 構文 #include <rpc/rpc.h> void svcerr_auth(const SVCXPRT *xprt, const enum auth_stat why); void svcerr_decode(const SVCXPRT *xprt); void svcerr_noproc(const SVCXPRT *xprt); void svcerr_noprog(const SVCXPRT *xprt); void svcerr_progvers(const SVCXPRT *xprt, u_long low_vers, u_long high_vers); void svcerr_systemerr(const SVCXPRT *xprt); void svcerr_weakauth(const SVCXPRT *xprt); 説明 これらのルーチンは、C 言語プログラムからネットワークを通じて他のマシンに対するプロシージャコールを 行うための RPC ライブラリの一部です。 クライアントとのトランザクションでエラーが発生した場合に、サーバ側のディスパッチ関数によってこれら のルーチンを呼び出すことができます。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン SVCXPRT データ構造の定義については、 rpc(3N) を参照してください。 void svcerr_auth() サービスディスパッチ ルーチンで認証エラーのためリモートプロシージャコールの実行を拒否する場 合に呼び出します。 void svcerr_decode() サービスディスパッチ ルーチンでリモートパラメータを正しくデコードできない場合に呼び出します (rpc_svc_reg(3N) の svc_getargs() を参照)。 void svcerr_noproc() サービスディスパッチ ルーチンで呼び出し側が要求するプロシージャ番号を実現していない場合に呼 び出します。 Section 3-388 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rpc_svc_err(3N) rpc_svc_err(3N) void svcerr_noprog() 希望するプログラムが RPC パッケージに登録されていないとき呼び出します。サービスインプリメン タは、このルーチンを通常は必要としません。 void svcerr_progvers() プログラムの希望するバージョンが RPC バージョンに登録されていないとき呼び出します。 low_vers は最低のバージョン番号、 high_vers は最高のバージョン番号です。サービスインプリメンタは、この ルーチンを通常は必要としません。 void svcerr_systemerr() サービスディスパッチ ルーチンでどの特定のプロトコルによっても対応できないシステムエラーを検 出した場合に呼び出します。例えば、サービスが記憶域を割り当てられなくなった場合、このルーチ ンを呼び出すことができます。 void svcerr_weakauth() サービスディスパッチ ルーチンで認証パラメータが (正しいけれども) 不十分なためリモートプロシー ジャ コー ル の 実 行 を 拒 否 す る 場 合 に 呼 び 出 し ま す。 こ の ルー チ ン は svcerr_auth(xprt, AUTH_TOOWEAK) を呼び出します。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。キャンセルポイントである関数を 呼び出すという点で、キャンセルポイントとなる場合もあります。 マルチスレッド環境で、 fork() の後で exec() の前に、子プロセスからこれらの関数を呼び出すのは安全ではあ りません。これらの関数は、非同期キャンセルまたは非同期シグナルをサポートするマルチスレッドアプリ ケーションから呼び出してはいけません。 参照 rpc(3N), rpc_svc_calls(3N), rpc_svc_create(3N), rpc_svc_reg(3N) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-389 rpc_svc_reg(3N) rpc_svc_reg(3N) 名称 rpc_svc_reg, rpc_reg, svc_reg, svc_unreg, svc_auth_reg, xprt_register, xprt_unregister − サーバの登録用ライブラリ ルーチン 構文 #include <rpc/rpc.h> bool_t rpc_reg(const u_long prognum, const u_long versnum, const u_long procnum, const char *(* procname), const xdrproc_t inproc, const xdrproc_t outproc, const char *nettype); int svc_reg(const SVCXPRT *xprt, const u_long prognum, const u_long versnum, const void (*dispatch), const struct netconfig *netconf ); void svc_unreg(const u_long prognum, const u_long versnum); int svc_auth_reg(const int cred_flavor, const enum auth_stat (*handler)); void xprt_register(const SVCXPRT *xprt); void xprt_unregister(const SVCXPRT *xprt); 説明 これらのルーチンは、RPC サーバが自分自身を rpcbind( ) (rpcbind(1M) を参照) に登録し、指定するプログラ ムおよびバージョン番号をディスパッチ関数に結合する RPC ライブラリの一部分です。RPC サーバが RPC 要 求を受信すると、ライブラリはディスパッチルーチンを適切な引き数付きで起動します。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン SVCXPRT データ構造の定義については、 rpc(3N) を参照してください。 bool_t rpc_reg() RPC サービスパッケージにプログラム prognum 、プロシージャ procname、およびバージョン versnum を登録します。プログラム prognum、バージョン versnum、およびプロシージャ procnum への要求が到 着すると、 procname がパラメータへのポインタ付きで呼び出されます。 procname に、その 静的な結 果へのポインタが戻されるはずです。 inproc はパラメータのデコードに使用する XDR 関数であり、 outproc は結果のエンコードに使用する XDR 関数です。プロシージャはクラス nettype の使用可能なす べてのトランスポートに登録されます。 rpc(3N) を参照してください。このルーチンは登録が成功する と 0 を戻し、失敗すると -1 を戻します。 int svc_reg() prognum および versnum をサービスディスパッチ プロシージャ dispatch に結合します。 netconf が NULL の場合、サービスは rpcbind サービスに登録されません。例えば、サービスが inetd (inetd(1M) Section 3-390 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 rpc_svc_reg(3N) rpc_svc_reg(3N) を参照) など、他の手段によって既に登録されている場合には、再登録する必要はありません。 netconf が非ゼロの場合、トリプル [ prognum, versnum, netconf →nc_netid] と xprt→xp_ltaddr とのマッピン グがローカル rpcbind サービスに設定されます。 svc_reg() ルーチンは正常終了すると 1 を戻し、異常終了すると 0 を戻します。 void svc_unreg() rpcbind サービスからトリプル [ prognum, versnum, all-transports] とネットワークアドレスとの間のすべ てのマッピング、および RPC サービスパッケージ内でのダブル [ prognum, versnum] とディスパッチ ルーチンとの間のすべてのマッピングを削除します。 int svc_auth_reg() サービス認証ルーチン handler をディスパッチメカニズムに登録し、認証タイプ cred_flavor で受信し た RPC 要求を認証するため起動できるようにします。このインタフェースにより、開発者はライブラ リを修正する必要なく、RPC アプリケーションに新しい認証タイプを追加することができます。サー ビスインプリメンタは通常、このルーチンを必要としません。 典型的なサービスアプリケーションでは、サービスの登録後、 svc_auth_reg() を呼び出し、それから svc_run() を呼び出します。 cred_flavor タイプの RPC 資格認定を処理する必要が生じたとき、 handler プロシージャが 2 つのパラメータ (struct svc_req *rqst, struct rpc_msg *msg) 付きで呼び出され、有効 な enum auth_stat 値を戻すものと見なされます。認証ハンドラを一度登録したら、それを変更または 削除する方法は提供されていません。 svc_auth_reg() ルーチンは、登録が成功すると 0 を戻し、 cred_flavor 用に登録された認証ハンドラが すでにあれば 1 を戻し、それ以外の場合は −1 を戻します。 void xprt_register() RPC サービストランスポート ハンドル xprt が作成された後、RPC サービスパッケージに登録されま す。このルーチンはグローバル変数 svc_fdset (rpc_svc_calls(3N) を参照) を変更します。サービスイン プリメンタは通常、このルーチンを使用する必要はありません。 void xprt_unregister() RPC サービストランスポート ハンドル xprt が削除される前に、自分自身を RPC サービスパッケージ から登録解除します。このルーチンはグローバル変数 svc_fdset (rpc_svc_calls(3N) を参照) を変更しま す。サービスインプリメンタは通常、このルーチンを使用する必要はありません。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境下で安全に呼び出せます。これらの関数は、キャンセルポイントの関数 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-391 rpc_svc_reg(3N) rpc_svc_reg(3N) を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 参照 inetd(1M), rpcbind(1M), rpc(3N), rpc_svc_calls(3N), rpc_svc_create(3N), rpc_svc_err(3N), rpcbind(3N), select(2) Section 3-392 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 rpc_xdr(3N) rpc_xdr(3N) 名称 rpc_xdr, xdr_accepted_reply, xdr_authsys_parms, xdr_callhdr, xdr_callmsg, xdr_opaque_auth, xdr_rejected_reply, xdr_replymsg − リモートプロシージャコール用 XDR ライブラリルーチン 構文 #include <rpc/rpc.h> bool_t xdr_accepted_reply(XDR *xdrs, const struct accepted_reply *ar); bool_t xdr_authsys_parms(XDR *xdrs, struct authsys_parms *aupp); void xdr_callhdr(XDR *xdrs, struct rpc_msg *chdr); bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg); bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap); bool_t xdr_rejected_reply(XDR *xdrs, const struct rejected_reply *rr); bool_t xdr_replymsg(XDR *xdrs, const struct rpc_msg *rmsg); 説明 これらのルーチンは、XDR 言語で RPC メッセージを記述するため使用します。通常、RPC パッケージを直接 使用しない場合に使用します。これらのルーチンは正常終了すると TRUE を戻し、異常終了すると FALSE を 戻します。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン XDR データ構造の定義については、 rpc(3N) を参照してください。 bool_t xdr_accepted_reply() RPC 応答メッセージとそれに対応する外部表現の間の変換に使用します。これには、XDR 言語フォー マットでの RPC コールのステータスが含まれます。正常終了する場合は、コールの結果も含まれま す。 bool_t xdr_authsys_parms() UNIX オペレーティングシステムの資格認定を記述するため使用します。これには、マシン名、uid、 gid リストなどが含まれます。 void xdr_callhdr() RPC コールヘッダー メッセージを記述するため使用します。 XDR 言語フォーマットのコールメッ セージ ヘッダーの静的な部分をエンコードします。これには、トランザクション ID、RPC バージョン 番号、プログラムおよびバージョン番号などの情報が含まれます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-393 rpc_xdr(3N) rpc_xdr(3N) bool_t xdr_callmsg() RPC コールメッセージを記述するため使用します。これには、トランザクション ID、RPC バージョン 番号、プログラム番号、バージョン番号、認証情報など、すべての RPC コール情報が含まれます。こ れは通常、サーバがクライアント RPC コールについての情報を判定するため使用します。 bool_t xdr_opaque_auth() RPC の不明瞭な認証情報メッセージを記述するため使用します。 bool_t xdr_rejected_reply() RPC 応答メッセージを記述するため使用します。XDR 言語フォーマットの拒絶された RPC メッセー ジをエンコードします。メッセージが拒絶された理由は、バージョン番号の不一致か、または認証エ ラーのどちらかです。 bool_t xdr_replymsg() RPC 応答メッセージを記述するため使用します。RPC 応答メッセージとその外部表現との間の変換を 行います。この応答は、受諾、拒絶、または NULL のいずれです。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境下で安全に呼び出せます。これらの関数は、キャンセルポイントの関数 を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 参照 rpc(3N), xdr(3N) Section 3-394 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rsqrt(3M) rsqrt(3M) 名称 rsqrt( ), rsqrtf( ), rsqrtl( ), rsqrtw( ), rsqrtq( ) − 逆平方根関数 構文 #include <math.h> double rsqrt(double x); float rsqrtf(float x); long double rsqrtl(long double x); extended rsqrtw(extended x); quad rsqrtq(quad x); 説明 これらの関数は、Itaniumベース システムでのみ使用できます。 rsqrt() は、 x の負でない平方根の逆数を返します。 式 a*rsqrt(b) は、 a/sqrt(b) より高性能な代替として用意されています。この2つの式は、精度は同程度です が、すべての場合にまったく同じ計算結果になるわけではありません。たとえば、 a*rsqrt(a*a + b*b) では、ま れにほんの少しだけ1を超えることがあります。 rsqrtf() は、 rsqrt() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ rsqrtl() は、 rsqrt() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返 します。 rsqrtw() は、 rsqrt() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返しま す。 rsqrtq() は、HP-UX システムでは rsqrtl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで rsqrtw() または rsqrtq() を使うには、 −fpwidetypes オプションも指定してコンパイ ルしてください。 これらの関数を使うには、プログラムに <math.h> がインクルードされていることを確認した後、コンパイラ またはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 戻り値 x が ±0 の場合、 rsqrt() は ±INFINITY を返し、ゼロ除算例外が発生します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-395 rsqrt(3M) rsqrt(3M) x が +INFINITY の場合、 rsqrt() は +0 を返します。 x が NaN の場合、 rsqrt() は NaN を返します。 x がゼロより小さい場合、 rsqrt() は NaN を返し、無効浮動小数点例外が発生します。 rsqrt() では、丸めた結果が数学上の結果と等しくないときには必ず、不正確例外が発生します。 エラー エラーは、定義されていません。 参照 sqrt(3M), math(5) 標準準拠 これらの関数は、どの標準にも規定されていません。 Section 3-396 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rstat(3N) rstat(3N) 名称 rstat( ), havedisk( ) − リモートカーネルからのパフォーマンスデータの取得 構文 #include <time.h> #include <rpcsvc/rstat.h> int havedisk(char *host); int rstat(char *host, struct statstime *statp); 説明 havedisk() は、 host にディスクがある場合に 1 、ない場合に 0 を返し、判別できない場合には−1を返します。 host 文字列は、ホストの正式名称かその別名です。ホスト名の読込みについては hosts(4) を参照してくださ い。 rstat() は host の statstime 構造体を書き込み、正常終了すると 0 を返します。関連した構造体は以下のとおり です。 struct stats { /* RSTATVERS_ORIG */ int cp_time[CPUSTATES]; /* the time spent in each CPU state */ int dk_xfer[DK_NDRIVE]; /* total number of disk transfers unsigned v_pgpgin; /* total VM pages paged in */ on each of the disk interfaces */ unsigned v_pgpgout; /* total VM pages paged out */ unsigned v_pswpin; /* total VM pages paged swapped in */ unsigned v_pswpout; /* total VM pages paged swapped out */ unsigned v_intr; /* total interrupts */ int if_ipackets; /* inbound packets on all interfaces */ int if_ierrors; /* inbound errors on all interfaces */ int if_opackets; /* outbound packets on all interfaces */ int if_oerrors; /* outbound errors on all interfaces */ int if_collisions; /* collisions seen on all interfaces */ }; struct statsswtch { /* RSTATVERS_SWTCH */ int cp_time[CPUSTATES]; /* the time spent in each CPU state */ int dk_xfer[DK_NDRIVE]; /* total number of disk transfers unsigned v_pgpgin; /* total VM pages paged in */ on each of the disk interfaces */ unsigned v_pgpgout; /* total VM pages paged out */ unsigned v_pswpin; /* total VM pages paged swapped in */ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-397 rstat(3N) rstat(3N) unsigned v_pswpout; /* total VM pages paged swapped out */ unsigned v_intr; /* total interrupts */ int if_ipackets; /* inbound packets on all interfaces */ int if_ierrors; /* inbound errors on all interfaces */ int if_opackets; /* outbound packets on all interfaces */ int if_oerrors; /* outbound errors on all interfaces */ int if_collisions; /* collisions seen on all interfaces */ unsigned v_swtch; /* total context switches */ long avenrun[3]; /* average number of running jobs */ struct timeval boottime; /* time of last boot */ }; struct statstime { /* RSTATVERS_TIME */ int cp_time[CPUSTATES]; /* the time spent in each CPU state */ int dk_xfer[DK_NDRIVE]; /* total number of disk transfers on each of the disk interfaces */ unsigned v_pgpgin; /* total VM pages paged in */ unsigned v_pgpgout; /* total VM pages paged out */ unsigned v_pswpin; /* total VM pages paged swapped in */ unsigned v_pswpout; /* total VM pages paged swapped out */ unsigned v_intr; /* total interrupts */ int if_ipackets; /* inbound packets on all interfaces */ int if_ierrors; /* inbound errors on all interfaces */ int if_opackets; /* outbound packets on all interfaces */ int if_oerrors; /* outbound errors on all interfaces */ int if_collisions; /* collisions seen on all interfaces */ unsigned v_swtch; /* total context switches */ long avenrun[3]; /* average number of running jobs */ struct timeval boottime; /* time of last boot */ struct timeval curtime; /* current system time */ }; RPC Info プログラム番号: RSTATPROG xdr ルーチン: int xdr_stats(xdrs, stat) XDR *xdrs; struct stats *stat; Section 3-398 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 rstat(3N) rstat(3N) int xdr_statsswtch(xdrs, stat) XDR *xdrs; struct statsswtch *stat; int xdr_statstime(xdrs, stat) XDR *xdrs; struct statstime *stat; int xdr_timeval(xdrs, tv) XDR *xdrs; struct timeval *tv; プロシージャ: RSTATPROC_HAVEDISK 引き数をとらず、リモートホストにディスクがあるときに 真をlong型で返します。 RSTATPROC_STATS 引き数をとらず、バージョンに応じてstruct statsxxx を返します。 バージョン: RSTATVERS_ORIG RSTATVERS_SWTCH RSTATVERS_TIME 警告 このルーチンを呼び出すユーザーアプリケーションは、 /usr/lib/librpcsvc.a をリンクしなければなりません。 例えば次のようになります。 cc my_source.c -lrpcsvc 著者 rstat() は、Sun Microsystems, Inc. で開発されました。 参照 rup(1), rstatd(1M) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-399 rwall(3N) rwall(3N) 名称 rwall( ) − 指定されたリモートマシンへのメッセージの送付 構文 #include <rpcsvc/rwall.h> int rwall(char *host, char *msg); 説明 rwall() により ホストは文字列 msg を全てのユーザーに送付します。正常終了すると0を返します。 RPC Info プログラム番号: WALLPROG プロシージャ: WALLPROC_WALL 文字列を引き数(wrapstring)とし、引き数を 返しません。リモートホストで文字列を用いてwall を実行します。 バージョン: RSTATVERS_ORIG 警告 このルーチンを呼び出すユーザーアプリケーションは、 /usr/lib/librpcsvc.a をリンクしなければなりません。 例えば次のようになります。 cc my_source.c -lrpcsvc 著者 rwall() は、Sun Microsystems, Inc. で開発されました。 参照 rwall(1M), rwalld(1M), shutdown(1M) Section 3-400 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 scalb(3M) scalb(3M) 名称 scalb( ), scalbf( ), scalbl( ), scalbw( ), scalbq( ) − 基数に依存しない浮動小数点数の指数のスケーリング 構文 #include <math.h> double scalb(double x, double y); Itanium(R)ベース システムのみ float scalbf(float x, float n); long double scalbl(long double y, long double n); extended scalbw(extended x, extended n); quad scalbq(quad x, quad n); 説明 scalb() 関数は、 r がマシンの浮動小数点演算の基数として、 x * ry を返します。基数 r は、すべての PA-RISC および Itaniumベース システムで2です。 Itaniumベース システムのみ scalbf() は、 scalb() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 scalbl() は、 scalb() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返 します。 scalbw() は、 scalb() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返しま す。 scalbq() は、HP-UX システムでは scalbl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで scalbw() または scalbq() を使うには、 −fpwidetypes オプションも指定してコンパイ ルしてください。 プログラムに <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカーのコマンド 行で −lm を指定して、数学ライブラリとリンクしてください。 戻り値 scalb(-x, y) と -scalb(x, y) は同等です。 y が ±0 の場合、 scalb() は x を返します。 x が +0 で y が +INFINITY の場合、 scalb() は NaN を返し、無効例外が発生します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-401 scalb(3M) scalb(3M) x が +0 で y が +INFINITY より小さい整数の場合、 scalb() は +0 を返します。 x が +INFINITY で y が −INFINITY より大きい整数の場合、 scalb() は +INFINITY を返します。 x が有限の正の数で y が −INFINITY の場合、 scalb() は +0 を返します。 x が正の数で y が +INFINITY の場合、 scalb() は +INFINITY を返します。 x が +INFINITY で y が −INFINITY の場合、 scalb() は NaN を返します。 x または y が NaN の場合、 scalb() は NaN を返します。 scalb() は、値が大きすぎる場合これに代えて、適切な符号が付いた無限大 (±HUGE_VAL に等しい) を返し、 オーバーフロー例外と不正確例外を発生させます。 scalb() では、結果が非常に小さく (本質的にはデノーマル値やゼロ) 正確な値でなくなるときには必ず、アン ダーフロー例外と不正確例外が発生します。また、結果が非常に小さいというだけで、これらの例外が発生す ることがあります。 エラー 正しい値がオーバーフローまたはアンダーフローした場合、 scalb() は errno に [ERANGE] を設定します。 Itaniumベース システムのみ Itaniumベース システムでの HP-UX の libm 関数は、デフォルトでは errno を設定しません。 errno を設定す るには、 +Olibmerrno オプションを指定してコンパイルしてください。 参照 scalbn(3M), scalbln(3M), ilogb(3M), ldexp(3M), logb(3M), math(5) 標準準拠 scalb() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-402 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 scalbln(3M) scalbln(3M) 名称 scalbln( ), scalblnf( ), scalblnl( ), scalblnw( ), scalblnq( ) − 基数に依存しない、浮動小数点数の指数のスケーリング 構文 #include <math.h> double scalbln(double x, long n); Itanium(R)ベース システムのみ float scalblnf(float x, long n); long double scalblnl(long double y, long n); extended scalblnw(extended x, long n); quad scalblnq(quad x, long n); 説明 scalbln() 関数は x ∗ rn を返します。ここで、 r はマシンの浮動小数点演算の基数です。 r が2 (すべての PARISC システムや Itaniumベース システムと同じ) の場合、 scalbln() は、 ldexp() と同じ値を計算します。 Itaniumベース システムのみ scalblnf() は、 scalbln() の float バージョンで、 float 型の (第1) 引き数をとり、 float 型の結果を返します。 scalblnl() は、 scalbln() の long double バージョンで、 long double 型の (第1) 引き数をとり、 long double 型 の結果を返します。 scalblnw() は、 scalbln() の extended バージョンで、 extended 型の (第1) 引き数をとり、 extended 型の結果 を返します。 scalblnq() は、HP-UX システムでは scalblnl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 scalblnw() または scalblnq() を使うには、 −fpwidetypes オプションも指定してコンパイルしてください。 プログラムに <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカーのコマンド 行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 scalbln(-x, n) と -scalbln(x, n) は同等です。 x が ±INFINITY、ゼロ、または NaN の場合、 scalbln() は x を返します。 scalbln() は、値が大きすぎる場合これに代えて適切な符号が付いた無限大を返し、オーバーフロー例外と不正 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-403 scalbln(3M) scalbln(3M) 確例外を発生させます。 scalbln() では、結果が非常に小さく (本質的にはデノーマル値やゼロ) 正確な値でなくなるときには必ず、アン ダーフロー例外と不正確例外が発生します。また、結果が非常に小さいというだけで、これらの例外が発生す ることがあります。 エラー エラーは、定義されていません。 参照 ilogb(3M), ldexp(3M), logb(3M), scalb(3M), scalbn(3M), math(5) 標準準拠 scalbln(), scalblnf(), scalblnl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-404 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 scalbn(3M) scalbn(3M) 名称 scalbn( ), scalbnf( ), scalbnl( ), scalbnw( ), scalbnq( ) − 基数に依存しない浮動小数点数の指数のスケーリング 構文 #include <math.h> double scalbn(double x, int n); Itanium(R)ベース システムのみ float scalbnf(float x, int n); long double scalbnl(long double y, int n); extended scalbnw(extended x, int n); quad scalbnq(quad x, int n); 説明 scalbn() 関数は、 x ∗ rn を返します。ここで、 r は、マシンの浮動小数点演算の基数です。 r が2の場合 (すべ ての PA-RISC および Itaniumベース システムでこのように指定されています)、 scalbn() は ldexp() と同じ値を 計算します。 Itaniumベース システムのみ scalbnf() は、 scalbn() の float バージョンで、 float 型の (第1) 引き数をとり、 float 型の結果を返します。 scalbnl() は、 scalbn() の long double バージョンで、 long double 型の (第1) 引き数をとり、 long double 型の 結果を返します。 scalbnw() は、 scalbn() の extended バージョンで、 extended 型の (第1) 引き数をとり、 extended 型の結果を 返します。 scalbnq() は、HP-UX システムでは scalbnl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで、 scalbnw() または scalbnq() を使うには、 −fpwidetypes オプションも指定してコン パイルしてください。 プログラムに、 <math.h> がインクルードされていることを確認した後、コンパイラまたはリンカーのコマン ド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-405 scalbn(3M) scalbn(3M) 戻り値 scalbn(-x, n) と -scalbn(x, n) は同等です。 x が ±INFINITY、ゼロ、または NaN の場合、 scalbn() は x を返します。 scalbn() は、値が大きすぎる場合これに代えて、適切な符号が付いた無限大を返し、オーバーフロー例外と不 正確例外を発生させます。 scalbn() では、結果が非常に小さく (本質的にはデノーマル値やゼロ) 正確な値でなくなるときには必ず、アン ダーフロー例外と不正確例外が発生します。また、結果が非常に小さいというだけで、これらの例外が発生す ることがあります。 エラー エラーは、定義されていません。 参照 ilogb(3M), ldexp(3M), logb(3M), scalb(3M), scalbln(3M), math(5) 標準準拠 scalbn(), scalbnf(), scalbnl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-406 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 scandir(3C) scandir(3C) 名称 scandir( ), alphasort( ) − ディレクトリ走査 構文 #include <dirent.h> extern int scandir( const char *, struct dirent ***, int (*) (const struct dirent *), int (*) (const struct dirent **, const struct dirent ** ) ); int alphasort( const struct dirent **d1, const struct dirent **d2 ); 説明 scandir() は、ディレクトリ dirname を読み、 malloc() (malloc(3C) を参照) を用いてディレクトリエントリーへ のポインターの配列を作成します。また、 namelist を通して、戻り値として配列中のエントリーの数と、配列 へのポインターを返します。 select パラメータは、 scandir() によって呼び出され、どのエントリーが配列中に含まれるかを選択するため に、ユーザーによって用意されるサブルーチンへのポインターです。選択ルーチンは、ディレクトリエント リーへのポインターを渡され、ディレクトリエントリーが配列中にインクルードされる場合は、ゼロでない値 を返します。 select が null の場合には、すべてのディレクトリエントリーが含まれます。 パラメータ compar は、 qsort(3C) へ渡され、完成した配列をソートするための、ユーザーによって用意される サブルーチンへのポインターです。このポインターが null の場合は、配列はソートされません。 alphasort() は、パラメータ compar によって配列をアルファベット順にソートする際に、利用可能なルーチンです。 配列に対するメモリーの割付けは、 free() (malloc(3C) を参照) を用いて、配列中の各ポインターと配列自身を 解放することによって、解放できます。 多言語化対応 ロケール LC_COLLATE カテゴリは、 alphasort() が使用する照合順序を決定します。 LC_CTYPE カテゴリは、 alphasort() 関数が、ディレクトリエントリーのファイル名部の各バイトを、シング ルバイト文字とマルチバイト文字の混合と解釈するかどちらかのみと解釈するかを定めます。 LC_COLLATE と LC_CTYPE カテゴリによって指定されたロケールが異なるコードセットを用いている場合 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-407 scandir(3C) scandir(3C) には、結果は定義されていません。 サポートされるコードセット alphasort() では、シングル/マルチバイトの文字コードセットがサポートされています。 戻り値 scandir() は、ディレクトリを読む際にオープンできなかった場合や、 malloc() がすべてのデータ構造を保持す るために充分なメモリーを割り当てられなかった場合には、−1 を返します。 例 以下のサンプルプログラムは、 /tmp ディレクトリを走査します。 select が NULL であるため、すべてのエン トリーを含みます。 namelist の内容は、 alphasort() によってソートされます。 /tmp の中にあるエントリーの 数と、 /tmp ディレクトリ中のエントリーをソートしたものを出力します。 scandir() によって使用されたメモ リーは、 free() によって解放されます。 #include <sys/types.h> #include <stdio.h> #include <dirent.h> extern int scandir(); extern int alphasort(); main() { int num_entries, i; struct dirent **namelist, **list; if ((num_entries = scandir("/tmp", &namelist, NULL, alphasort)) < 0) { fprintf(stderr, "Unexpected error\n"); exit(1); } printf("Number of entries is %d\n", num_entries); if (num_entries) { printf("Entries are:"); for (i=0, list=namelist; i<num_entries; i++) { printf(" %s",(*list)−>d_name); free(*list); list++; } free(namelist); Section 3-408 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 scandir(3C) scandir(3C) printf("\n"); } printf("\n"); exit(0); } 警告 32ビットアプリケーションでは、 64ビットの値を使用しているファイルシステムに対して scandir() や alphasort() で返される dirent 構造体の d_ino フィールドは、オーバーフローすることがあります。この場合、 d_ino の値は、上位のバイトが切り捨てられ(エラーは発生しません)、その値はユニークではなくなることがありま す。 values may not be unique. 参照 directory(3C), malloc(3C), qsort(3C), string(3C), dirent(5), thread_safety(5) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-409 scanf(3S) scanf(3S) 名称 scanf, fscanf, sscanf − ストリームファイルからの読み取りでの書式付き入力変換 構文 #include <stdio.h> int scanf(const char *format, /* [pointer,] */ ...); int fscanf(FILE *stream, const char *format, /* [pointer,] */ ...); int sscanf(const char *s, const char *format, /* [pointer,] */ ...); 説明 scanf() は、標準入力ストリーム stdin から読み取ります。 fscanf() は、指定された入力 stream から読み取ります。 sscanf() は、文字列 s から読み取ります。 それぞれの関数は、文字を読み取り、制御文字列 format 引き数 に従って、文字列を解釈し、結果を pointer 引 き数に格納します。書式に対して引き数が不足している場合には、動作は不定となります。引き数が余ってい る状態で書式が尽きた場合には、余分な引き数は無視されます。制御文字列は、変換指定文字および入力文字 列の解釈の指示をする他の文字を内容とします。制御文字列は、以下のものを含みます。 • 空白文字 (空白、タブ、改行、用紙送り)。次の非空白文字まで入力は読み飛ばされます (下記の2 つのケースを除きます)。 • • 通常の文字 (% を除く)。入力ストリームの次の文字に一致しなければなりません。 文字 % からなる変換指定、オプションの代入抑制文字 *、オプションの最大フィールド幅値、受 け取り変数のサイズを示すオプションの l (エル), ll, (エルエル), h または L , 変換コード • 文字 % の代わりに文字列 %n$ を変換仕様の前に置くことができます。このとき、 n は10進数の 整数で、 (1 − {NL_ARGMAX}) の範囲内です (NL_ARGMAX は <limits.h> 中で定義されていま す)。 %n$ 構造は、次の入力フィールドの値が n 番目の引き数に代入され、次の引き数には用いら れないことを示します。変換仕様の2つの導入形式、 % と %n$ が、1つの format 文字列中に混 在することは、以下の例外を除いては許されません。すなわち、スキップフィールド (以下を参照) が、 %* または %n$* として明示できる場合です。後者の場合、 n は無視されます。 仕様が変換文字 n ( 以下で説明) を含んでいない場合には、変換仕様は次の入力フィールドの変換を指示しま す。変換仕様の結果は、 * によって代入抑制が指示されていない限り、対応する引き数の示す変数に代入され ます。代入抑制は、スキップされる入力フィールドを記述する方法を提供します。入力フィールドは、非ス ペースの文字の文字列によって定義されます。すなわち、次の不適切な文字、またはフィールド幅が指定され ているならばそこまでが、入力フィールドとなります。 [ と c 以外のすべての記述子に対して、先頭の空白で ある入力フィールドは無視されます。 変換コードは、入力フィールドの解釈を示します。対応するポインター引き数は、限定された型でなくてはな Section 3-410 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 scanf(3S) scanf(3S) りません。抑制フィールドには、ポインター引き数は与えられません。以下に、有効な変換コードを示しま す。 % 単独の % は、この場所での入力を求め、代入は行いません。 d 10進数整数として解釈します。対応する引き数は、整数型へのポインターでなければな りません。 u 符号なしの10進数整数として解釈します。対応する引き数は、符号なしの整数型へのポ インターでなければなりません。 o 8進数整数として解釈します。対応する引き数は、符号なしの整数型へのポインターで なければなりません。 x, X 16進数整数として解釈します。対応する引き数は、符号なしの整数型へのポインターで なければなりません。 x および X の変換文字は、同じものです。 i 整数として解釈します。対応する引き数は、整数型へのポインターでなければなりませ ん。 C 規約によって解釈された入力項目の次の値が代入されます。すなわち、先行する 0 は、8進数を示し、先行する 0x は、16進数を示します。その他の場合は、10進数が仮 定されます。 hL extended 型として解釈します。対応する引き数は、 extended 型のポインター (Itanium アーキテクチャでの 80 ビットの IEEE-754 double-extended 型) であり、浮動小数点指定子 a, A, e, E, f, g, G と一緒に使う必要があります。 n 関数が呼び出されてから今まで走査されたバイト総数 (空白を含む) を格納します。対応 する引き数は、整数型へのポインターでなければなりません。入力は使用しません。関 数の戻り値には、%n による一致および代入が成功した回数を含みません。 a,A,e,E,f,g,G 浮動小数点数として解釈します。次のフィールドは適切に変換され、対応する引き数 ( float へのポインター) に従って格納されます。この変換コードで受け付けることのでき る浮動小数点数の形式は次のとおりです。つまり、数字列を基本とし、この数字列にオ プションとして、符号、小数点キャラクタ、および指数フィールドが付いた形式です。 指数フィールドがある場合は、数字列の後ろに付きます。指数自体は、 E または e を先 頭に置いて、その後ろに +, -, またはスペースを置き、さらにその後ろに整数を置く、と いう形式を取ります。ただし、 +, -, またはスペースは省略可能です。 Itanium(R) ベース システムの場合は、入力として 16 進浮動小数点数も受け付けます。この場合の浮動小数 点数の基本形式は次のとおりです。つまり、16 進文字列を基本とし、この 16 進文字列 に符号、小数点キャラクタ、および2進指数フィールドが付いた形式です。2進指数 フィールドがある場合は、16 進文字列の後ろに付きます。2進指数自体は、数の有効部 分 (小数部) を実際の位にするためのスケーリングファクターを、2を基数としたべき指 数で表したものであり、 P または p を先頭に置いて、その後ろに +, -, またはスペース文 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-411 scanf(3S) scanf(3S) 字を置き、さらにその後ろに 10 進整数を置くという形式を取ります。ただし、 +, -, また はスペースは省略可能です。変換文字 A, E および G は、 a, e および g と、それぞれ同 様の働きをします。変換文字の a, A, e, E, f, g, および G は、文字列 inf (大文字と小文字 の区別なし) または文字列 infinity (大文字と小文字の区別なし) を、適切な浮動小数点の 無限大値 (変換精度を示す識別子によって、単精度、倍精度、4倍精度といった精度が指 定可能) に変換します。変換文字の a, A, e, E, f, g, および G は、文字列 nan (大文字と小 文字の区別なし) を、適切な浮動小数点の NaN 値 (変換精度を示す識別子によって、単 精度、倍精度、4倍精度といった精度が指定可能) に変換します。 c 文字として解釈します。対応する引き数は文字型へのポインターでなければなりませ ん。通常行われる空白のスキップは抑制されます。次の非スペース文字を読むには %1s を使います。フィールドの幅が与えられている場合には、対応する引き数は文字配列を 参照します。すなわち、指定された個数の文字を読み取ります。 l (エル) 修飾子が存在する場合は、初期シフト状態で始まる文字シーケンスが入力されま す。シーケンス内の各文字は、 mbrtowc() 関数を呼び出したかのようにワイドキャラク タに変換され、変換状態は、最初の文字が変換される前にゼロに初期化される mbstate_t オブジェクトによって記述されます。対応する引き数は、結果として生成されるワイド キャラクタのシーケンスを受け入れられる大きさの wchar_t の配列へのポインターでな ければなりません。 null ワイドキャラクタは付加されません。通常行われる空白のス キップは抑制されます。次の非スペース文字を読むには、 %1S を使います。フィールド の幅が与えられている場合には、対応する引き数はワイドキャラクタ配列を参照しま す。すなわち、指定された個数の文字を読み取り、変換します。 C lc と同じです。 s 文字列として解釈します。対応する引き数は、文字列および自動的に付加される、終端 の \0 を格納するのに充分な大きさを持った、文字の配列を指す文字型へのポインターで なければなりません。入力フィールドは、空白文字によって終了します。 scanf() は、 null文字列を読み取れません。 l (エル) 修飾子が存在する場合は、初期シフト状態で始まる文字シーケンスが入力されま す。各文字は、 mbrtowc() 関数を呼び出したかのようにワイドキャラクタに変換され、 変換状態は、最初の文字が変換される前にゼロに初期化される mbstate_t オブジェクトに よって記述されます。対応する引き数は、このシーケンスと、自動的に付加される終端 の null ワイドキャラクタを受け入れるのに充分な大きさを持った wchar_t の配列へのポ インターでなければなりません。入力フィールドは、空白文字によって終了します。 scanf() は、null文字列を読み取れません。 S [ ls と同じです。 文字列データを示し、通常行われる空白のスキップは抑制されます。左の角括弧の後に scanset と呼ばれる文字のセットを続け、右の角括弧で閉じます。入力フィールドは、 Section 3-412 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 scanf(3S) scanf(3S) scanset中の文字で完全に構成される入力文字の最大限の連続です。アクセント記号 (ˆ) が scanset の文字の最初にある場合には、相補的なオペレータとして作用して、scanset 文字 列に含まれない残りの文字すべてを新たなscanset として再定義します。 scanset の作成 は、ある規約に従って行われます。文字の範囲は first−last 形式で表され、[0123456789] は、[0−9] と書き表すことができます。この規約を用いる際には、 first は last と辞書式の 順番で等しいかまたは小さくなければなりません。そうでない場合には、ダッシュ自身 を表すことになります。ダッシュは scanset 中の文字の最初あるいは最後にある場合に も、ダッシュ自身を表します。scanset の要素の中に右の角括弧を入れるには、scanset の 最初の文字として現れる必要があり (できるならばアクセント記号を頭につけて)、その ような場合には、文法的に、閉じ括弧とは解釈されません。対応する引き数は、データ フィールドおよび自動的に付加される終端の \0 を格納するのに充分な大きさを持った文 字の配列を指す、文字型へのポインターでなければなりません。正常終了のためには、 少なくとも1文字は一致する必要があります。 l (エル) 修飾子が存在する場合は、初期シフト状態で始まる文字シーケンスが入力されま す。シーケンス内のそれぞれの文字は、 mbrtowc() 関数を呼び出したかのようにワイド キャラクタに変換され、変換状態は、最初の文字が変換される前にゼロに初期化される mbstate_t オブジェクトにより記述されます。対応する引き数は、このシーケンスと、自 動的に付加される終端の null ワイドキャラクタを受け入れるのに充分な大きさの wchar_t の配列へのポインターでなければなりません。 p 符号なしの16進数として解釈します。この数字列は printf() によってできた、 p 変換文 字である場合が多いと思われます。対応する引き数は、16進数の数字列が格納される、 void 型へのポインターのポインターでなければなりません。この変換の動作は、現プロ グラムの実行中に、先に変換された値以外の入力項目に対しては定義されません。 変換文字 d, i および n は、 l, ll または h を先頭につけることにより、 int ではなく long int, long long int, また は short int へのポインターが引き数リスト中にあることを示すことができます。同じように、変換文字 u, o, x および X は、 l または h を先頭につけることにより、 unsigned int ではなく unsigned long int, unsigned long long int または unsigned short int へのポインターが引き数リスト中にあることを示すことができます。最後 に、変換文字 e, E, f, g および G は、 l または L を先頭に付けることにより、 float ではなく double または long double が引き数リスト中にあることを示すことができます。 l, ll, L または h 修飾子は、他の変換文字に 対しては無視されます。 scanf() 関数は、 EOF , 制御文字列の終り、または入力文字が制御文字と矛盾した時に変換を終了します。最後 のケースでは、矛盾した文字は入力ストリームにおいては読み飛ばされます。 多言語化対応 ロケール LC_CTYPE カテゴリは、書式指定文字列の内の通常の文字をシングルバイト文字とマルチバイト文字の混合 と解釈するかどちらかのみと解釈するかを定めます。フィールド幅はバイト単位で与えられます。入力スト リームから受け取った文字は、 LC_TYPE カテゴリによる指定に従って、半角または全角文字として解釈さ HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-413 scanf(3S) scanf(3S) れ、フィールド幅は文字の長さの分短くなります。 LC_NUMERIC カテゴリは、浮動小数点数の中に現れる小数点キャラクタを指定します。 サポートされるコードセット シングル/マルチバイトの文字コードセットがサポートされています。 戻り値 最初の矛盾や変換が起きる前に入力が終了した場合には、戻り値として EOF を返します。その他の場合には、 代入が正常終了した入力項目の数を返します。この値は、入力文字と制御文字の間で矛盾が生じた場合には、 少なくなったり0になります。 エラー scanf() および fscanf() は、 ストリームバッファーにデータが読み込まれる必要がある時、あるいは以下のよう な場合には動作しません。 [EAGAIN] O_NONBLOCK フラグが、 ストリームのファイル記述子としてセットされており、 プロセスが読み込み動作において遅延がかかっているような場合 [EBADF] ストリームのファイル記述子が読み込みのためにオープンされるファイル記述子とし て不適切な場合 [EINTR] シグナルの受信により読み込み動作が中断され、データが転送されなかったり、ファ イルに対する部分の転送が実行されなかった場合 [EIO] プロセスがバックグランドプロセスの1つになっている時に、制御ターミナルからの 読み込みを行おうとしており、さらにプロセスが SIGTTIN シグナルを無視またはブ ロックしているか、あるいはプロセスのプロセスグループが親なしになっている場合 [EILSEQ] 入力ストリームから取得したデータは、有効なワイドキャラクタを構成しません。 特別の errno の値は優先する read() 関数 (read(2) を参照) によってセットされることがあります。 例 下記の呼び出し int i, n; float x; char name[50]; n = scanf("%d%f%s", &i, &x, name); に次のような入力があると、 25 54.32E-1 thompson n には 3 が、 i には 25 が、 x には 5.432 が、 name には thompson\0 が代入されます。また、下記の呼び出し int i; float x; char name[50]; (void) scanf("%2d%f%*d %[0−9]", &i, &x, name); に次のような入力があると、 Section 3-414 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 scanf(3S) scanf(3S) 56789 0123 56a72 56 を i に、 789.0 を x に代入し、 0123 をスキップして、文字列 56\0 を name に代入します。次に getchar() (getc(3S) を参照) を呼び出すと、 a を返します。 もう1つの例として、言語に依存しない日付のスキャンを行うルーチンを示します。使い方は以下のとおりで す。 char month[20]; int day, year; (void) scanf(format, month, &day, &year); アメリカ式の使い方では、 format は以下のような文字列を表します。 %1$s %2$d %3$d 次の入力があると、 July 3 1986 July を month に、 3 を day に、 1986 を year に代入します。 ドイツ式の使い方では、 format は以下の文字列を表します。 %2$d %1$s %3$d 次の入力があると、 3 Juli 1986 Juli を month に、 3 を day に、 1986 を year に代入します。 文字の一致あるいは代入抑制は、 %n の変換の指定によって決定されます。以下に文字の一致をチェックする 例を示します。 int i, n1, n2, n3, n4; n1 = n2 = n3 = n4 = -1; scanf("%nBEGIN%n %d %nEND%n", &n1, &n2, &i, &n3, &n4); if (n2 - n1 == 5) puts( "matched BEGIN"); if (n4 - n3 == 3) puts( matched END"); 次の例は、代入抑制の成功をチェックするものです。 int i, n1, n2; n1 = n2 = -1; scanf( "%d %n%*s%n", &i, &n1, &n2); if (n2 > n1) printf("successful assignment suppression of %d chars\n", n2-n1); HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-415 scanf(3S) scanf(3S) アプリケーション使用法 scanf() または fscanf() がストリームに適用された後で、そのストリームはバイト指向になります (orientation(5) を参照)。 警告 後続の空白 (ニューライン文字を含む) は、制御文字列に一致しない限り読み飛ばされます。 マルチバイト文字は、フィールド幅が変換文字とともに用いられているときには、切り捨てられます。 著者 scanf() は、AT&TとHPで開発されました。 参照 getc(3S), setlocale(3C), printf(3S), strtod(3C), strtol(3C), orientation(5), thread_safety(5) 標準準拠 scanf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C fscanf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C sscanf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-416 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 scrl(3X) scrl(3X) 名称 scrl, wscrl — Curses ウィンドウの拡張スクロール関数 構文 #include <curses.h> int scrl(int n); int wscrl(WINDOW *win, int n); 説明 scrl() および wscrl() 関数は、現在のウィンドウまたは指定したウィンドウをスクロールします。 n が正数の場 合には、ウィンドウは先頭の行に向かって n 行だけスクロールします。そうでなければ、ウィンドウは最後の 行に向かって −n 行だけスクロールします。 これらの関数は、カーソルの位置を変更することはありません。現在のウィンドウまたは指定したウィンドウ でスクロールが使用できない場合には、これらの関数は効果がありません。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-417 scroll(3X) scroll(3X) 名称 scroll — Curses ウィンドウのスクロール 構文 #include <curses.h> int scroll(WINDOW *win); 説明 scroll() 関数は、win を最初の行の方向に 1行だけスクロールします。 この関数はカーソルの位置を変更しません。現在のウィンドウまたは指定したウィンドウでスクロールが使用 できない場合には、この関数は効果がありません。 戻り値 正常に終了すると、この関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 scrl(), <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、この説明は変更されましたが、それ以外、機能的には同じです。 Section 3-418 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 scr_dump(3X) scr_dump(3X) 名称 scr_dump, scr_init, scr_restore, scr_set — スクリーンファイル入出力関数 構文 #include <curses.h> int scr_dump(const char *filename); int scr_init(const char *filename); int scr_restore(const char *filename); int scr_set(const char *filename); 説明 scr_dump() 関数は、仮想画面の現在の内容を filename という名前のファイルに書式指定なしで書き出します。 scr_restore() 関数は、仮想画面に filename によって指定されたファイルの内容を設定します。このファイル は、 scr_dump() を使って作成しておく必要があります。この後のリフレッシュ操作によって、画面はダンプ ファイル内を表示する状態に復元されます。 scr_init() 関数は、filename によって指定されたファイルの内容を読み取り、その内容を使って端末が現在その 画面上に表示しているものに Curses データ構造を初期化します。以下の条件のいずれかが真でない限り、この 後のリフレッシュ操作は、この情報に基づいてアップデートを行います。 • 仮想画面が filename にダンプされた後、端末への書き込みが行われた。 • 現在の端末に対して terminfo 機能の rmcup および nrrmc が定義されている。 scr_set() 関数は、 scr_restore() と scr_init() を組み合わせたものです。これは、プログラムに、filename によっ て指定されたファイル内の情報が現在画面上に表示されているものであり、さらにそのプログラムが画面上に 要求しているものでもあることを指示します。これは、画面継承関数と考えることができます。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 initscr() または system() の後に scr_init() 関数を呼び出すと、 endwin() 呼び出しの後に scr_dump() を実行した 他のプロセスと画面を共有できます。 ファイルからウィンドウを読み取るには getwin() を呼び出し、ウィンドウをファイルに書き出すには putwin() を呼び出します。 参照 delscreen(3X), doupdate(3X), endwin(3X), getwin(3X), open(2), read(2), write(2), (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <curses.h> HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-419 scr_dump(3X) scr_dump(3X) 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-420 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 secdef(3) secdef(3) 名称 secdef − セキュリティデフォルト構成ファイルルーチン 構文 #include <prot.h> int open_secdef (void); int close_secdef (void); int get_secdef_str(char *parameter, char *value); int get_secdef_int(char *parameter, int *value); 説明 open_secdef は、セキュリティ構成ファイル /etc/default/security をオープンします。この関数は get_secdef_str や get_secdef_int を呼び出す前に呼び出す必要があります。 close_secdef はセキュリティ構成ファイルをクローズします。 get_secdef_str と get_secdef_int は、セキュリティ構成ファイルで定義されている、指定されたパラメータの値 を返します。 security(4) のマンページを参照してください。 アプリケーション使用法 マルチスレッドアプリケーションの場合、これらのインタフェースはスレッドセーフですが、非同期キャンセ ルセーフではありません。スレッドがこれらのインタフェースを実行しているときに、キャンセルポイントに 達する可能性があります。 戻り値 正常にオープンできた場合、 open_secdef は値 0 を返します。正常にオープンできなかった場合、 open_secdef は -1 を返し、 errno は、 fstat 呼び出しで設定された値のままです。 get_secdef_str と get_secdef_int は次の値 を返します。 0 -1 指定したパラメータの値が正常に返されました。 エントリーが見つからなかったか、またはセキュリティ構成ファイルがオープンされていませ んでした。 -2 エントリーのフォーマットが正しくありませんでした。 例 次の例では、SU_DEFAULT_PATH=<path> パラメータから "path" を取り出します。 char supath[MAXPATHLEN+100]; if (open_secdef() == 0) { if (get_secdef_str("SU_DEFAULT_PATH", supath) == 0) printf("su path is %s", supath); close_secdef() HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-421 secdef(3) secdef(3) } ファイル /etc/default/security セキュリティデフォルト構成ファイル 参照 security(4) Section 3-422 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 secure_rpc(3N) secure_rpc(3N) 名称 secure_rpc, authdes_getucred, authdes_seccreate, getnetname, host2netname, key_decryptsession, key_encryptsession, key_gendes, key_setsecret, key_secretkey_is_set, netname2host, netname2user, user2netname − Secure RPC のライブラ リルーチン 構文 #include <rpc/rpc.h> #include <sys/types.h> int authdes_getucred(const struct authdes_cred *adc, uid_t *uidp, gid_t *gidp, short *gidlenp, gid_t *gidlist); AUTH *authdes_seccreate(const char *name, const unsigned int window, const char *timehost, const des_block *ckey); int getnetname(char name[MAXNETNAMELEN+1]); int host2netname(char name[MAXNETNAMELEN+1], const char *host, const char *domain); int key_decryptsession(const char *remotename, des_block *deskey); int key_encryptsession(const char *remotename, des_block *deskey); int key_gendes(des_block *deskey); int key_setsecret(const char *key); int key_secretkey_is_set(void); int netname2host(const char *name, char *host, const int hostlen); int netname2user(const char *name, uid_t *uidp, gid_t *gidp, int *gidlenp, HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-423 secure_rpc(3N) secure_rpc(3N) gid_t gidlist[NGROUPS]); int user2netname(char name[MAXNETNAMELEN+1], const uid_t uid, const char *domain); 説明 RPC ライブラリルーチンは、C プログラムからネットワークを通じて他のマシンに対してプロシージャコール を行えるようにします。 RPC は、さまざまな認証方式をサポートしています。それは次のとおりです。 AUTH_NONE (なし) 認証なし。 AUTH_SYS 従来どおりの UNIX スタイルの認証。 AUTH_DES DES 暗号化ベースの認証。 authdes_getucred() および authdes_seccreate() ルーチンは、 AUTH_DES 認証方式を実現します。 AUTH_DES 認証システムが動作するためには、キーサーバデーモン keyserv (keyserv(1M) を参照 ) が実行されていて、 keylogin(1) が実行済みでなければなりません。ここでは、 AUTH_DES スタイルの認証だけを説明します。 AUTH_NONE および AUTH_SYS スタイルの認証については、 rpc_clnt_auth(3N) を参照してください。 このページで説明するルーチンはマルチスレッドセーフです。他の認証スタイルのマルチスレッドレベルにつ いては、その認証スタイルのページを参照してください。 HP-UX での RPC の実装は、XTI (X/Open Transport Interface) のみをサポートしています。 TLI (Transport Layer Interface) を使用して記述されたアプリケーションで RPC を使用する場合は、アプリケーションを XTI 対応に 変換する必要があります。 ルーチン AUTH データ構造の定義については、 rpc(3N) を参照してください。 int authdes_getucred() authdes_getucred() は、 AUTH_DES として知られる、RPC セキュリティ認証システムにインタフェー スする最初のルーチンです。 2 番目のルーチンは、この後で説明する authdes_seccreate() です。 authdes_getucred() は、 サー バ 側 で、 オ ペ レー ティ ン グ シ ス テ ム 独 立 の AUTH_DES 資 格 認 定 を AUTH_SYS 資格認定に変換するため使用します。このルーチンは正常終了すると 1 を戻し、異常終了 すると 0 を戻します。 *uidp は、 adc に結合するユーザー ID の数値が設定されます。 *gidp は、ユーザーのグループ ID の数 値が設定されます。 *gidlist には、このユーザーが所属するグループの他の数値 ID が含まれます。 *gidlenp は、 *gidlist の中の有効なグループ ID の個数が設定されます (後の netname2user() を参照)。 警告 : ホストのネット名を使って authdes_cred 構造体を作成した場合、 authdes_getucred() は異常終了 します。このような場合、ホスト名を取得するには、authdes_cred 構造体の中のホストのネット名に対 して netname2host() を使用しなければなりません。 Section 3-424 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 secure_rpc(3N) secure_rpc(3N) AUTH *authdes_seccreate() 2つの AUTH_DES 認証ルーチンのうちの 2 番目 authdes_seccreate() は、クライアント側で、認証シス テムを使用可能にする認証ハンドルを戻すため使用します。最初のパラメータ name は、サーバプロセ スの所有者のネットワーク名、または netname です。このフィールドは通常、ユーティリティルーチ ン host2netname() から取り出せるホスト名を表しますが、後で説明する user2netname() を使用して ユーザー名を表すこともできます。 2 番目のフィールド window は、クライアント資格認定の有効期限であり、秒で指定します。クライア ントのクロックとサーバのクロックの差が window より大きいと、サーバはクライアントの資格認定を 拒否し、クロックを再同期化する必要が生じます。期限が小さい方が大きいときより安全ですが、あ まり小さい期限を選択すると、クロックの誤差のため、再同期化の頻度が増えます。 3 番目のパラメータ timehost は、ホストの名前であり、これは省略可能です。これが NULL の場合、 認証システムはローカルクロックが常に timehost のクロックと同期がとれていると見なし、再同期化 しません。timehost を指定した場合は、システムは再同期化が必要になるとリモート タイムサービス を調べます。このパラメータは通常、サーバが動作するホストの名前です。 最後のパラメータ ckey も省略可能です。これが NULL の場合、認証システムは資格認定の暗号化に使 用されるランダムな DES キーを生成します。 ckey キーを指定すると、代わりにこれが使用されます。 authdes_seccreate() は異常終了すると NULL を戻します。 int getnetname() getnetname() は、呼び出し側の固有の、オペレーティングシステム独立のネットワーク名を、固定長 の配列 name で戻します。正常終了すると 1 を戻し、異常終了すると 0 を戻します。 int host2netname() ドメイン固有のホスト名 host をオペレーティングシステム独立のネットワーク名に変換します。正常 終了すると 1 を戻し、異常終了すると 0 を戻します。 netname2host() の逆です。 domain が NULL の 場合、 host2netname() はマシンのデフォルトのドメイン名を使用します。 host が NULL の場合、デ フォルトとしてマシン自身がホストになります。 int key_decryptsession() key_decryptsession() は、RPC のセキュリティ認証システム (AUTH_DES 認証) に関連するキーサーバ デーモンへのインタフェースです。ユーザープログラムではこのルーチン、またはその関連ルーチン key_encryptsession()、 key_gendes()、および key_setsecret() を呼び出す必要はめったにありません。 key_decryptsession() は、サーバのネットワーク名 remotename および DES キー deskey を取り、サーバ のパブリックキーおよび呼び出し側プロセスの有効 UID に結合したシークレットキーを使って、その キーを解読します。これは key_encryptsession() の逆です。 int key_encryptsession() key_encryptsession() は、キーサーバ インタフェースルーチンです。このルーチンはサーバのネット ワーク名 remotename および DES キー deskey を取り、サーバのパブリックキーおよび呼び出し側プロ HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-425 secure_rpc(3N) secure_rpc(3N) セスの有効 UID に結合したシークレットキーを使って、それを暗号化します。これは key_decryptsession() の逆です。このルーチンは正常終了すると 0 を戻し、異常終了すると -1 を戻します。 int key_gendes() key_gendes() は、キーサーバ インタフェースルーチンです。キーサーバに、安全会話キーを要求する ため使用します。キーをランダムに選ぶのは、あまり安全とはいえません。なぜなら、例えば現在の 時刻などのようなランダムな数の選び方は、非常に推定されやすいからです。このルーチンは正常終 了すると 0 を戻し、異常終了すると −1 を戻します。 int key_setsecret() key_setsecret() は、キーサーバ インタフェースルーチンです。呼び出し側プロセスの有効 UID にキー を設定するため使用します。このルーチンは正常終了すると 0 を戻し、異常終了すると −1 を戻しま す。 int key_secretkey_is_set(void) key_secretkey_is_set() は、呼び出し側プロセスの有効 UID にキーが設定されているかどうか判定する ため使用できる、キーサーバ インタフェースルーチンです。キーサーバが呼び出し側プロセスの有効 UID に対応するキーを格納している場合には、このルーチンは 1 を戻します。そうでない場合は 0 を 戻します。 int netname2host() オペレーティングシステム独立のネットワーク名 name をドメイン固有のホスト名 host に変換しま す。 hostlen は host の最大長です。正常終了すると 1 を戻し、異常終了すると 0 を戻します。 host2netname() の逆です。 int netname2user() オペレーティングシステム独立のネットワーク名をドメイン固有のユーザー ID に変換します。正常終 了すると 1 を戻し、異常終了すると 0 を戻します。 user2netname() の逆です。 *uidp は、 name に結合したユーザー ID の数値を設定します。 *gidp は、ユーザーのグループ ID の数 値を設定されます。 gidlist には、このユーザーが所属するグループの他の数値 ID が含まれます。 *gidlenp は、 gidlist の中の有効なグループ ID エントリの個数が設定されます。 int user2netname() ドメイン固有のユーザー名をオペレーティングシステム独立のネットワーク名に変換します。 netname2user() の逆です。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No Section 3-426 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 secure_rpc(3N) secure_rpc(3N) これらの関数は、マルチスレッド環境下で安全に呼び出せます。これらの関数は、キャンセルポイントの関数 を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では fork() の後および exec() の前で、子プロセスからこれらの関数を呼び出すことは安全 ではありません。非同期キャンセル、または、非同期シグナルをサポートするマルチスレッドアプリケーショ ンでこれらの関数は呼び出さないようにしてください。 参照 chkey(1), keyserv(1M), newkey(1M), rpc(3N), rpc_clnt_auth(3N) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-427 setaclentry(3C) setaclentry(3C) 名称 setaclentry( ), fsetaclentry( ) − ファイルのアクセス制御リスト (ACL) 中のエントリーの追加、変更、削除 (HFS ファイルシステムのみ) 構文 #include <unistd.h> #include <acllib.h> int setaclentry(const char *path, uid_t uid, gid_t gid, int mode); int fsetaclentry(int fd, uid_t uid, gid_t gid, int mode); 説明 どちらの呼び出し形式も、ファイルのアクセス制御リスト (ACL) の1つのエントリーを追加、変更、削除しま す。 setaclentry() および fsetaclentry() は、パス名 ( path) またはオープンするファイル記述子 ( fd) と、エント リー識別子 (uid, gid) を使用します。指定されたエントリーのアクセスモードビットを、与えられた値 (mode) に変更します。それら値の意味は、 <unistd.h> 中で定義されています。 modes は、 R_OK、 W_OK、および X_OK の形で表されています。 mode 中の無関係なビットは0でなければなりません。 ファイルの ACL が与えられた uid と gid へのエントリーを持たない場合には、エントリーが作成され ACL に追 加されます。 mode が MODE_DEL (<acllib.h> 中で定義されている) である場合には、エントリーがオプショ ンのエントリーであるときには、一致するエントリーはファイルの ACL から削除され、ベースエントリーであ るときにはそのモードビットが0 (非アクセス) にセットされます。 uid または gid は、それぞれ ACL_NSUSER または ACL_NSGROUP (<sys/acl.h> 中で定義されている) である ことが可能であり、それぞれ未指定のエントリー u.%, %.g, または %.% を表します。ファイルの u.% または %.g は、ファイルの所有者またはグループ ID に対して、それぞれ ACL_FILEOWNER と ACL_FILEGROUP (<acllib.h> 中で定義されている) を用いて、ベースエントリーを参照することができます。 setaclentry() および fsetaclentry() は、ファイルの ACL を getacl() または fgetacl() を用いて読み出し、それぞれ setacl() または fsetacl() を用いて変更します。 戻り値 正常終了したときには、 setaclentry() および fsetaclentry() は、0を返します。 エラー エラーが起きたときには、 setaclentry() および fsetaclentry() 以下の負の値を返し、 errno をセットします。 −1 ファイルにおいて getacl() もしくは fgetacl() を実行できませんでした。 errno はその理由を示します。 −2 ファイルにおいて stat() もしくは fstat() を実行できませんでした。 errno はその理由を示します。 −3 ACL がすでに NACLENTRIES エントリー (<sys/acl.h> 中で定義されている) を持っているために、新 しいエントリーを追加できませんでした。 −4 Section 3-428 存在していないエントリーであるために、削除できませんでした。 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 setaclentry(3C) −5 setaclentry(3C) ファイルにおいて setacl() もしくは fsetacl() を実行できませんでした。 errno はその理由を示します。 例 以下のコードフラグメントは、ユーザー ID 115、グループ ID 32 のファイル "work/list" にエントリーを追加 し、またはすでに存在する同じユーザー、グループのエントリーがあれば変更し、リードオンリーの新しいア クセスモードを与えます。また、グループ 109 のすべてのユーザーに対し、もしユーザーが存在すれば所有者 のベースエントリーをすべてのアクセス権を持つように変更し、エントリーを削除します。 #include <unistd.h> #include <acllib.h> char ∗filename = "work/list"; setaclentry (filename, 115, 32, R_OK); setaclentry (filename, ACL_FILEOWNER, ACL_NSGROUP, R_OK | W_OK | X_OK); setaclentry (filename, ACL_NSUSER, 109, MODE_DEL); 制約 HFS setaclentry() と fsetaclentry() は 標準 HP-UX オペレーティングシステムの HFS ファイルシステムでの みサポートされます。 NFS setaclentry() と fsetaclentry() は、リモートファイル上ではサポートされません。 著者 setaclentry() と fsetaclentry() は、HP で開発されました。 参照 getacl(2), setacl(2), stat(2), acltostr(3C), cpacl(3C), chownacl(3C), strtoacl(3C), acl(5), thread_safety(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-429 setbuf(3S) setbuf(3S) 名称 setbuf( ), setvbuf( ) − ストリームファイルへのバッファリング 構文 #include <stdio.h> void setbuf(FILE *stream, char *buf); int setvbuf(FILE *stream, char *buf, int type, size_t size); 廃止インタフェース int setvbuf_unlocked(FILE *stream, char *buf, int type, size_t size); 説明 setbuf() は、ストリームがオープンされた後で、読み込みや書き込みの前に用いられます。自動的に割り当て られるバッファーの代わりに、 buf を用いて配列を指します。 buf が NULL ポインターである場合は、入力/ 出力はまったくバッファリングされません。 ヘッダーファイル <stdio.h> で定義されている定数 BUFSIZ は、必要な配列の大きさを表します。 char buf[BUFSIZ]; setvbuf() は、ストリームがオープンされた後で、読み込みや書き込みの前に用いられます。 type は stream が どのようにバッファリングされるかを指定します。 type の値として適切な値 (<stdio.h> 中で定義されている) は以下のとおりです。 _IOFBF 入力/出力はフルバッファリングされます。 _IOLBF 出力はラインバッファリングされます。バッファーは、新しいラインが書かれるか、 バッファーがいっぱいになるか、入力が要求されたときに出力されます。 _IONBF 入力/出力はまったくバッファリングされません。 出力ストリームがバッファリングされていないときには、情報は、宛先ファイルまたはターミナルに書き出す ために、書き込みが行われた時点でキューに加えられます。すなわち、バッファリングされるときには、多く の文字が蓄えられ、ブロックとして書き出されます。ストリームがラインバッファリングされているときに は、各出力ラインはラインが終了した時点で (すなわちニューライン文字が来たとき、またはターミナル入力 が要求されたとき) キューに加えられ、宛先ファイルまたはターミナルに書き出されます。 fflush() は、バッ ファーへの書き込みを明示するときにも用いられます。 buf が NULL ポインターでないときには、 (malloc() によって) 自動的に割り当てられるバッファーの代わり に、ポインターの指す配列をバッファリングに使用します。 size は使用するバッファーのサイズを指定しま す。 <stdio.h> 中の定数 BUFSIZ は、適切なバッファーのサイズを示しています。入力/出力がバッファリング されていない時には、 buf および size は無視されます。 デフォルトでは、ターミナルへの出力はラインバッファリングされ、その他の入力/出力はすべてフルバッファ リングされます。 Section 3-430 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 setbuf(3S) setbuf(3S) 廃止インタフェース バッファリングをストリームファイルに割り当てる setvbuf_unlocked() 診断 type または size への値が不適切であれば、 setvbuf() および setvbuf_unlocked() は、0でない値を返します。値 が適切であれば、戻り値は0になります。 注記 起こりやすいエラーの原因としては、コードブロック内の「自動」変数にバッファースペースを割り当てて、 同じブロック内でストリームのクローズを忘れることがあります。 size または BUFSIZ バイトのバッファーを割り当てても、 size または BUFSIZ バイト全部が、バッファー領域 として使用される訳ではありません。 参照 flockfile(3S), fopen(3S), getc(3S), malloc(3C), putc(3S), stdio(3S), thread_safety(5) 標準準拠 setbuf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C setvbuf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, ANSI C HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-431 setcat(3C) setcat(3C) 廃止予定 名称 setcat() − デフォルトのメッセージカタログの設定 構文 #include <pfmt.h> char *setcat(const char *msgcat); 説明 setcat() ルーチンは、他のフォーマットルーチンで使用されるデフォルトのメッセージカタログを設定します (gettxt(3C) および pfmt(3C) を参照)。 msgcat には、デフォルトのカタログとして使用するファイルを指定します。ファイル名は、14 文字以内です。 ファイルが存在することを確認するチェックは、行われません。 msgcat の値は、デフォルトのメッセージカタ ログに何が起こるか決定します。 string NULL string をデフォルトのメッセージカタログに設定します。 現在のデフォルトのメッセージカタログのポインターを返します。デフォルトのカタ ログは、変更されません。 空の文字列 カタログ無しにリセットします。 戻り値 正常終了すると、 setcat() は、デフォルトのカタログへのポインターを返します。失敗すると、 setcat() は、 null ポインターを返します。 例 次の例では、メッセージカタログ ファイル my_appl_cat からメッセージを取得します。 setcat("my_appl_cat"); pfmt(stderr, MM_INFO,":1:The file is writable"); 警告 廃止インタフェース setcat() は、将来廃止される予定です。 参照 gettxt(3C), pfmt(3C), setlocale(3C), pfmt(3C), thread_safety(5) 標準準拠 setcat(): SVID3 Section 3-432 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 setcchar(3X) setcchar(3X) 名称 setcchar — ワイド文字列と修飾情報からの cchar_t の設定 構文 #include <curses.h> int setcchar(cchar_t *wcval, const wchar_t *wch, const attr_t attrs, short color_pair, const void *opts); 説明 setcchar() 関数は、 attrs 内の文字属性、 color_pair 内のカラーペアおよび wch がポイントするワイド文字列に 従って、 wcval がポイントするオブジェクトを初期化します。 opts 引き数は、このドキュメントの以降の版での定義のために予約されています。現状では、アプリケーショ ンで opts としてヌルポインタを指定する必要があります。 戻り値 正常に終了すると、 setcchar() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 attroff(3X), can_change_color(3X), getcchar(3X), curses_intro(3X) の 「文字」の項, <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-433 setclock(3C) setclock(3C) 名称 setclock − システムワイドクロックの値の設定 構文 #include <sys/timers.h> int setclock(int clock_type, struct timespec *tp); 説明 setclock() は、指定されたシステムワイドクロック clock_type の現在の値 tp を設定します。 setclock() は、 <sys/timers.h> 中で定義されている TIMEOFDAY の clock_type をサポートしています。この clock_type はシステムの時刻クロックを表します。このクロックに対して、 setclock() によって返される値は エポックからの累積時間を表します。 呼び出しプロセスには、 TIMEOFDAY クロックを設定するための適切な特権が必要です。 戻り値 正常終了すると、 setclock() は0を返します。失敗すると −1 を返し、エラーを示す値を errno に設定します。 エラー setclock() は、次の条件が起きた時には動作しません。 [EINVAL] clock_type の指すシステムワイドクロックが未知のものである場合、 tp が指定クロック タイプの範囲を越えている場合、 tp がゼロより小さいか 10 億以上のナノセカンドの値 を指定している場合 [EIO] [EPERM] クロックデバイスへのアクセス中にエラーが発生した場合 処理を要求しているプロセスが、指定されたクロックを設定するのに必要な、適切な特 権を持っていない場合 ファイル /usr/include/sys/timers.h 参照 clocks(2), getclock(3C), gettimer(3C), thread_safety(5) 標準準拠 setclock(): AES Section 3-434 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 setjmp(3C) setjmp(3C) 名称 setjmp( ), longjmp( ), sigsetjmp( ), siglongjmp( ) − 非ローカルの goto 構文 #include <setjmp.h> int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); int _setjmp(jmp_buf env); void _longjmp(jmp_buf env, int val); int sigsetjmp(sigjmp_buf env, int savemask); void siglongjmp(sigjmp_buf env, int val); 説明 setjmp() および longjmp() は、プログラムのローレベルのサブルーチンで発生したエラーおよび割込みの処理 に有用です。形式は3つあり、 setjmp() と longjmp(), _setjmp() と _longjmp(), sigsetjmp() と siglongjmp() で す。その他の形式を指定されない限りは、 setjmp() および longjmp() の参照は3つのバージョンすべてに適用 されます。 setjmp() スタック環境を env (env の型は <setjmp.h> ヘッダーファイル中で定義されている jmp_buf) に保存し、後から longjmp() で使用できるようにします。戻り値は 0 に なります。 longjmp() 最新の setjmp() の呼び出しによって保存された環境を、対応する env 引き数を用 いて復旧します。 longjmp() が完了した後で、プログラムは対応する setjmp() の 呼び出し (その間にその呼び出し自身は戻ってきていないと思われる) が、 val の 値を返した場合と同じように実行を続けます。 longjmp() によって setjmp() が 0 の値を返すことはありません。 longjmp() の2番目の引き数を 0 にして実行した 場合、 setjmp() は 1 を返します。アクセス可能なデータの値は、 longjmp() が呼 び出された時点と同じく有効です。 longjmp() による setjmp() の呼び出しから戻った時に、 setjmp() が呼び出されたルーチンに属している非スタ ティックのローカル変数または不揮発性ローカル変数の値は、不定です。それらの値に依存するプログラムは 移植可能なものであるという保証はありません。 別の形式 以下の関数の動作は、プロセスのシグナルマスク (sigaction(2) および sigvector(2) を参照) の操作を除いて、 setjmp() および longjmp() と同じです。この違いに意味があるのは、 sigaction(), sigprocmask(), sigvector(), sigblock(), または sigsetmask() を使用するプログラムに限られます。 setjmp() HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-435 setjmp(3C) setjmp(3C) longjmp() 常にシグナルマスクを保存し、復旧します。 _setjmp() _longjmp() シグナルマスクを操作しません。 sigsetjmp() savemask 0以外のときのみ、呼び出しスレッドのシグナルマスクを保存します。 siglongjmp() sigsetjmp() によってシグナルマスクが保存されているときのみ、それを復旧しま す。 プログラム時の考慮点 longjmp() が実行された時に、 setjmp() が実行された時の環境が存在していない場合、エラーが発生します。 setjmp() の環境がすでに存在していない状況には、 setjmp() の呼び出しを含んだプロシージャを抜けること や、一時記憶領域を伴った内部ブロック (C や、Pascal の中の with 文で宣言されたブロックなど) を抜けるこ とも含まれます。 longjmp() が発生し、環境がすでに存在していないときに内部ブロックの一時記憶領域の内 容が予測できない場合には、この状況は検出できません。また、この状況は予期しないプロセスの中断を引き 起こすことがあります。プロシージャをすでに抜けている場合、結果は予測できません。 setjmp() 以外で作成したバッファーへのポインターを longjmp() に渡した場合、 setjmp() あるいは _setjmp() 以 外で作成したバッファーへのポインターを _longjmp() に渡した場合、 sigsetjmp() 以外で作成したバッファー へのポインターを siglongjmp() に渡した場合、あるいは、ユーザーによって変更を受けたバッファーをこれら 3つの関数に渡した場合は、上記やその他の問題の原因となります。 Pascal のインプリメンテーションには、"try/recover" 機構をサポートし、スタックマーカー情報を作成できま す。 longjmp() の動作が try/recover の内部でネストしたスコープ内で起き、対応する setjmp() が try/recover の スコープの中にない場合、リカバーブロックは実行されず、その時点でアクティブなリカバーブロックがある 場合には、そのブロックが setjmp() を禁止して実行されます。 警告 sigspace() によって確保された、保証されたスタックスペースを解放するために longjmp() を呼び出すと、プロ グラムを普通に実行しても、保証されたスペースは拡大されないという保証がなくなります。また、プログラ ムはスタックサイズを自動的に増やすことができなくなり、保証されたスペースに限定されることになりま す。 setjmp() を式中で使用したとき結果は予測できません。 setjmp() の呼び出しによる env の準備がなされていないままで longjmp() が呼び出されたり、その種の最新の 呼び出しが、まだ戻っていない関数の中にある場合には、確実に混乱するでしょう。 呼び出しスレッドで jmp_buf 引き数の初期化が行われなかった場合、 longjmp() 呼び出しが与える影響は不定 です。呼び出しスレッドで sigjmp_buf 引き数の初期化が行われなかった場合、 siglongjmp() 呼び出しが与える 影響は不定です。 jmp_buf バッファーの内容はアーキテクチャやコンパイル環境によって異なります。そのため、これらの関数 を使用して作成されたオブジェクトは、異なったアーキテクチャではサポートされないことがあります。 Section 3-436 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 setjmp(3C) setjmp(3C) 著者 setjmp() は、AT&T および HP で開発されました。 参照 sigaction(2), sigblock(2), signal(5), sigprocmask(2), sigsetmask(2), sigspace(2), sigsuspend(2), sigvector(2), thread_safety(5) 標準準拠 setjmp(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C longjmp(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C siglongjmp(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 sigsetjmp(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-437 setlabel(3C) setlabel(3C) 名称 setlabel() − フォーマットルーチンのラベル定義 構文 #include <pfmt.h> int setlabel(const char *label); 説明 setlabel() 関数は、フォーマットルーチンによって標準のメッセージ形式で印字されるラベルを定義します ( pfmt(3C) を参照)。 label は、25 文字以内の文字列です。 label が NULL または空の文字列のとき、ラベルはラベル無しにリセットされます。 setlabel() より前にラベル は定義されません。 setlabel() では、 label は現在のロケールを使用して、ロケール固有の文字列に翻訳済みとみなします。 戻り値 setlabel() は正常終了すると0、失敗すると0以外を返します。 例 この例では、ラベルは定義されていません。 pfmt(stderr, MM_INFO,"my_appl_cat:1:file is writable"); 次のように出力されます。 INFO: file is writable 次のように、 setlabel() を使用します。 setlabel("my_appl"); pfmt(stderr, MM_INFO,"my_appl_cat:1:file is writable"); 次のように出力されます。 my_appl: INFO: file is writable 参照 pfmt(3C), thread_safety(5) 標準準拠 setlabel(): SVID3 Section 3-438 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 setlocale(3C) setlocale(3C) 名称 setlocale( ), getlocale( ) − プログラムの locale の設定、確認 構文 #include <locale.h> char *setlocale(int category, const char *locale); struct locale_data *getlocale(int type); 廃止インタフェース int setlocale_r(int category, const char *locale, char *buffer, int buflen); int getlocale_r(int type, struct locale_data *ld); 説明 setlocale() 関数は、category 引き数で指定されたプログラムの locale のアスペクトに対して設定、問合わせ、復 旧を行います。プログラムの locale は、以下の category の値で定義されている、プログラムの母国語サポート (NLS) 環境の領域を参照します。 LC_ALL nl_langinfo(3C) の項目と、下記のすべてのカテゴリの動作に作用します。 LC_COLLATE 正規表現および NLS 文字列照合関数 (string(3C), および regexp(5) を参照) の動 作に作用します。 LC_CTYPE 正規表現、文字の分類、変換関数 (ctype(3C), wctype(3C), wconv(3C), conv(3C), お よび regexp(5) を参照) の動作に作用します。 LC_CTYPE カテゴリは、マルチ バイト文字 (multibyte(3C) を参照) を処理しているすべてのルーチンの動作に対 しても作用します。 LC_MESSAGES メッセージが表示される言語および肯定、否定の応答のプロセスに作用します (catopen(3C) および nl_langinfo(3C) を参照)。 LC_MONETARY 金銭に関する値 (localeconv(3C) および strfmon(3C) を参照) を扱う関数の動作に 作用します。 LC_NUMERIC 書式指定付き入出力関数 ( printf (3S), scanf (3S), vprintf (3S) を参照 ) での小数点 キャラクタ、および文字列変換関数 (ecvt(3C) および strtod(3C) を参照) の扱い に作用します。LC_NUMERIC も、 localeconv 構造体中の数値に対して作用し ます。 LC_TIME 時間変換関数 (getdate(3C), strftime(3C), および strptime(3C) を参照) の動作に作用 します。 すべての nl_langinfo(3C) の項目は、上記のカテゴリのうちの1つを設定すると作用します。各項目に対してど のカテゴリが作用するかについては、 langinfo(5) を参照してください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-439 setlocale(3C) setlocale(3C) locale 引き数の値は setlocale() の動作を決定します。 locale は文字列型へのポインターです。 setlocale() は複数のスレッドから同時に呼び出すことができます。アップデートされた locale データ構造体 は、別のスレッドからの読み取りに対して保護されていません。そのため、locale 変更時の適切な同期処理 は、アプリケーション作成者に一任されています。 プログラムのロケールの設定 category に対してプログラムのロケールを設定するには、 setlocale() の locale 引き数の値は、 locale name 、 C、POSIX、または " " (空の文字列) のいずれかになります。その値によって指示される動作は以下のとおり です。 locale name locale が locale 名 (lang(5) を参照) として適当であれば、setlocale() は NLS 環境 のその部分を、その locale に対して定義された category に結合します。 locale の値が C に設定されている場合には、setlocale() は NLS 環境のその部分 C を、 C locale (lang(5) を参照 ) に対して定義された category に結合します。 C locale は setlocale() の正常な呼び出しに優先するデフォルトです。 POSIX "" C と同じ locale の値が空の文字列である場合には、NLS 環境のその部分と category との 結合は、以下に示すユーザー環境 (environ(5) を参照) 中の環境変数の設定に従い ます。 LANG LC_MESSAGES LC_ALL LC_MONETARY LC_COLLATE LC_CTYPE LC_NUMERIC LC_TIME category が LC_ALL 以外の値に定義された場合、setlocale() はそのカテゴリを LC_ALL 環境の値で指定されたとおりに設定します。これは、LC_ALL が対応 する環境変数に設定されていない場合も同様です。環境変数が設定されていな かったり、空の文字列である場合には、setlocale() はカテゴリを LANG 環境変 数の値で指定されたとおりに設定します。LANG が設定されていなかったり、 空の文字列である場合には、setlocale() はカテゴリを C locale に設定します。た とえば、 setlocale(LC_TIME,"") は、プログラムの LC_TIME category に結合している NLS 環境をユーザーの LC_TIME 環境変数で指定された値に設定します。他の NLS 環境のアスペクト はまったく作用しません。 category が LC_ALL で あ る 場 合 に は、 対 応 す る 環 境 変 数 が 適 切 な 言 語 名 (lang(5) を参照) に設定されていないすべてのカテゴリは、LC_ALL が設定され ていれば LC_ALL の値に設定され、LC_ALL が設定されていなければ LANG Section 3-440 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 setlocale(3C) setlocale(3C) の値に設定されます。この場合、環境変数の値は、そのカテゴリに対する LC_ALL および LANG の値を置き換えます。LC_ALL と LANG の双方の値が 設定されていない場合、双方が空の文字列である場合には、C locale が用いられ ます。 setlocale() を以下のように用いると、プログラムの locale はユーザーの言語の要 求に従って設定されます。 setlocale(LC_ALL,"") プログラムのロケールの問合わせ setlocale() は locale が NULL である場合には、 category に属している現在の NLS 環境を問い合わせます。問合 わせによって、環境が変わることはありません。問合わせを行う目的は、 category に結合しているユーザーの 現在の NLS を、 setlocale() から返される値に保存し、続いて呼び出される setlocale() によってそれを復旧でき るようにするためです。 プログラムのロケールの復旧 プログラム locale の中のカテゴリを復旧するには、setlocale() の呼び出しを同じ category 引き数とし、その前 の setlocale() 呼び出しによって返された文字列を locale 引き数として行います。 getlocale() は locale_data 構造体 (/usr/include/locale.h を参照) へのポインターを返します。 locale_data 構造体 のメンバーは、各 setlocale() カテゴリの設定に関する情報を持っています。 type は locale_data 構造体に含ま れる情報が何かを表します。 type に指定可能な値は、以下のとおりです。 LOCALE_STATUS 各カテゴリに対応する構造体メンバーの内容は、そのカテゴリに現在設定さ れている locale 名を表す文字列になります。文字列には修飾子の情報は含ま れません。 廃止インタフェース setlocale_r() と getlocale_r() は、プログラムの locale の設定と取得を行います。 戻り値 locale として文字列へのポインターが与えられ、その選択が認められる場合には、setlocale() 関数は指定された category に結合している文字列へのポインターを新しい locale として返します。この文字列の最大の長さは、 LC_BUFSIZ (<locale.h> を参照) です。選択が認められない場合には、setlocale() 関数は、null ポインターを返 し、プログラムの locale は変更されません。 locale に対する null ポインターにより、setlocale() はプログラムの現在の locale の category に結合している文 字列を返します。 setlocale() によって返される文字列は、 setlocale() を再度呼び出すときに、 locale 引き数として用いられ、そ れに結合している category が、プログラムの locale のその部分を復旧します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-441 setlocale(3C) setlocale(3C) エラー locale 引き数の指定する言語名が適切な言語を指さなかったり、言語名が 256 文字を超えていたり、あるいは 言語がそのシステムでは利用できない場合 (lang(5) を参照) には、null ポインターが返され、プログラムの locale は変更されません。同じことは、以下のような呼び出しを行い、ユーザーの環境の中の環境変数に結合 しているカテゴリが、不適切な言語名であるかシステムで利用できない言語を指している時にも起こります。 setlocale(LC_ALL, ""); category 引き数が定義されているカテゴリの値でない場合には、null ポインターが返され、プログラムの locale は変更されません。 setlocale() は category 引き数に結合している NLS 環境のアスペクトの現在の設定を反映している文字列を返し ます。返された文字列は、それ以降の setlocale() の呼び出しで用いられ、2つの呼び出しにおいて category 引 き数が一致しない場合には、locale は変更されず、null ポインターが返されます。 例 以下の例は、ユーザーの環境変数で指定された言語の要求をもとにプログラムのすべての locale を設定しま す。 setlocale(LC_ALL, ""); ユーザーの環境変数が以下のように設定されている場合を例にします。 LANG ="de_DE.iso88591" LC_COLLATE ="es_ES.iso88591" LC_MONETARY ="" LC_TIME ="en_US.iso88591" LC_CTYPE, LC_MONETARY, および LC_NUMERIC カテゴリ項目は、de_DE.iso88591 の言語定義に結合す るように設定され、LC_COLLATE カテゴリ項目は、es_ES.iso88591 の言語定義に結合するよう設定され、 LC_TIME カテゴリ項目は en_US.iso88591 の言語定義に結合するよう設定されます。 同じ例を用いて、以下のような呼び出しが行われるとします。 struct locale_data *locale_info=getlocale(LOCALE_STATUS); この時、*locale_info の内容は以下のようになります。 locale_info->LC_ALL_D="de_DE.iso88591" locale_info->LC_COLLATE_D="es_ES.iso88591" locale_info->LC_CTYPE_D="de_DE.iso88591" locale_info->LC_MESSAGES_D="de_DE.iso88591" locale_info->LC_MONETARY_D="de_DE.iso88591" locale_info->LC_NUMERIC_D="de_DE.iso88591" locale_info->LC_TIME_D="en_US.iso88591" Section 3-442 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 setlocale(3C) setlocale(3C) 次の例では、LC_ALL 環境変数の優先を示します。 setlocale(LC_ALL, ""); ユーザー環境が以下のように設定されているとします。 LANG=de_DE.iso88591 LC_ALL=fr_FR.iso88591 この時、すべてのカテゴリが fr_FR.iso88591 に設定されます。 LC_ALL 環境変数の優先例をもう1つ示します。 setlocale(LC_CTYPE, ""); ユーザー環境が以下のように設定されているとします。 LANG=tr_TR.iso88599 LC_ALL=da_DK.iso88591 LC_CTYPE=ru_RU.iso88595 この時、すべてのカテゴリが da_DK.iso88591 でロードされます。 LC_ALL 環境変数の例をもう1つ示します。 setlocale(LC_TIME, "pl_PL.iso88592"); ユーザー環境が以下のように設定されているとします。 LANG=it_IT.iso88591 LC_ALL=nl_NL.iso88591 LC_TIME カテゴリは、pl_PL.iso88592 に設定されます。しかし、他のすべてのカテゴリは nl_NL.iso88591 に 設定されます。 以下の例は、日付/時刻の書式を fr_FR.iso88591 に設定します。 setlocale(LC_TIME, "fr_FR.iso88591"); 以下の例は、照合順序を C locale に設定します。 setlocale(LC_COLLATE, "C"); 以下の例は、一時ハンドリングを、ユーザーの LC_MONETARY 環境変数の値に設定します。 setlocale(LC_MONETARY, ""); LC_MONETARY 環境変数が設定されていなかったり、空の文字列である場合には、ユーザーの LANG 環境変 数が用いられることに注意してください。 以下の例は、ユーザーの locale を問い合わせます。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-443 setlocale(3C) setlocale(3C) char *ch = setlocale(LC_ALL, NULL); 上記の例で保存された locale を復旧するには、次のようにします。 setlocale(LC_ALL, ch); 以下の例は、 LC_NUMERIC カテゴリに属しているユーザー locale の部分のみを問い合わせます。 char *ch = setlocale(LC_NUMERIC, NULL); 上記の例で保存されたユーザーの locale の LC_NUMERIC カテゴリのみを復旧するには次のようにします。 setlocale(LC_NUMERIC, ch); 警告 setlocale() のリターン文字列のフォーマットは処理系に固有のもので、各ベンダーのプラットフォームで標準 化されたものではありません。また、将来リリースされる製品で変更される可能性があります。リターン文字 列は、setlocale() を実行するプロセスが実行されている間のみ有効で、すでに保存されているロケールの設定 を同じプロセスで再び使用する場合のみに使用します。 getenv() の locale は、引き数として使用しない方がよいでしょう。以下にその誤った使用法を示します。 setlocale(LC_ALL, getenv("LANG")); getenv() は、言語名, 空の文字列, null ポインターの文字列を、ユーザーの LANG 環境変数の設定に応じて返し ます。locale 引き数としてのそれらの値は、setlocale() によって行われる特定の動作を定義しています。した がって、setlocale() によって行われる動作は、getenv() の呼び出しから返される値に依存します。setlocale() が プログラムの locale をユーザーの環境変数の設定に従って設定しないようにするには、以下の使い方がよいで しょう。 setlocale(LC_ALL, ""); setlocale() によって返される値は、次の setlocale() の呼び出しの間にオーバーライトされる領域を指していま す。それらの値を次の setlocale() の呼び出し以降で使用する場合には、それらを他の領域にコピーするように してください。 setlocale() の呼び出しは、HP-UX 10.0 でサポートが中止された、HP-UX 9.x での古い HP 独自のロケール名の 使用をサポートしていません。新しい ISO のロケール名 (リリースノートに記載) を使用してください。 getlocale() は、HP 独自のインタフェースで、将来リリースされる製品では廃止される予定です。また、この関 数は、他のベンダーのプラトフォームへ移植することはできません。 getlocale() の呼び出しによって返される構造体は、次の getlocale() 呼び出しの間にオーバーライトされます。 それらの値を次以降の getlocale() 呼び出しで用いる場合には、それらを保存するようにしてください。 locale の状態はプロセス内のすべてのスレッドで共通であることに注意してください。 getlocale_r() および setlocale_r() インタフェースは廃止され、現在では既存の DCE アプリケーションとの互換 性を保つためにだけサポートされています。新しいマルチスレッドアプリケーションでは、 getlocale() および Section 3-444 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 setlocale(3C) setlocale(3C) setlocale() を使用してください。 現リリースでは、LC_MESSAGES が XPG4 に追加されているため、oflag パラメータが NL_CAT_LOCALE に 設定された状態で、catopen() より前で setlocale() を呼び出すプログラムはすべて、以前のリリースとは異なっ た動作をすることがあります。以前は catopen() が LANG によって、希望の言語を指定するようになっていま した。現在は、oflag パラメータが NL_CAT_LOCALE に設定された catopen() の制御は LC_MESSAGES で行 います。 setlocale() は LC_MESSAGES カテゴリを変更することができます。たとえば、環境変数が以下のよ うに設定されているとします。 LC_MESSAGES="fr_FR.iso88591" ここで、catopen() を呼び出した後で以下のように setlocale() を呼び出します。 setlocale(LC_ALL, "de_DE.iso88591"); catopen() により、 fr_FR.iso88591 ではなく de_DE.iso88591 に対するメッセージカタログがオープンされま す。 setlocale() を使用してアプリケーションのアーカイブをコンパイルまたはリンクする場合は、setlocale() は libdld.sl と依存関係があり、コンパイルまたはリンク用のコマンドを変更しなければならないことに注意してく ださい。 コンパイルする場合は、以下のように指定します。 cc -Wl,-a,archive -Wl,-E -Wl,+n -l:libdld.sl -o <outfile> <source> または、 CCOPTS および LDOPTS を使用し、以下のように指定してコンパイルします。 export CCOPTS="-Wl,-a,archive <options> -Wl,-E -l:libdld.sl" export LDOPTS="<options> -E +n -l:libdld.sl" cc -o <outfile> <source> オプションの -Wl,-a,archive は部分的に依存関係があり、コンパイルを指定するコマンド行の最初で指定しま す。将来リリースされる製品との優れた互換性を保つためには、アーカイブされた libc を他の共有ライブラリ とともに使用しないでください。ただし、上記の場合に必要な libdld.sl は例外とします。 著者 setlocale()、setlocale_r()、getlocale()、および getlocale_r() は OSF および HP で開発されました。 ファイル /usr/include/langinfo.h /usr/include/locale.h HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 3-445 setlocale(3C) setlocale(3C) 参照 locale(1), localedef(1M), conv(3C), ctype(3C), ecvt(3C), getdate(3C), multibyte(3C), nl_langinfo(3C), regcomp(3C), string(3C), perror(3C), strfmon(3C), strftime(3C), string(3C), strptime(3C), strtod(3C), wcsftime(3C), wcstring(3C), printf(3S), scanf(3S), vprintf(3S), wconv(3C), wctype(3C), wcstod(3C), wcstol(3C), environ(5), lang(5), langinfo(5), thread_safety(5) 標準準拠 setlocale(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-446 Hewlett-Packard Company −8− HP-UX 11i Version 2: August 2003 set_term(3X) set_term(3X) 名称 set_term — 画面間の切り換え 構文 #include <curses.h> SCREEN *set_term(SCREEN *new); 説明 set_term() 関数は、異なる画面間を切り替えます。 new 引き数に、新しく現在の画面にする画面を指定しま す。 戻り値 正常に終了すると、 set_term() は、OK を返します。そうでなければヌルポインタを返します。 エラー エラーは定義されていません。 アプリケーション使用法 この関数は、SCREEN ポインタを操作する唯一の関数です。つまり、ほかのすべての関数が影響を及ぼすの は、現在の画面に対してだけです。 参照 initscr(3X), curses_intro(3X) の 「画面、ウィンドウおよび端末」の項, <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-447 shl_load(3X) shl_load(3X) 名称 shl_load( ), shl_definesym( ), shl_findsym( ), shl_gethandle( ), shl_getsymbols( ), shl_unload( ), shl_get( ), shl_gethandle_r( ), shl_get_r( ) − 共有ライブラリの明示的ロード 構文 #include <dl.h> shl_t shl_load(const char *path, int flags, long address); int shl_findsym( shl_t *handle, const char *sym, short type, void *value ); int shl_definesym( const char *sym, short type, long value, int flags ); int shl_getsymbols( shl_t handle, short type, int flags, void *(*memory) (), struct shl_symbol **symbols, ); int shl_unload(shl_t handle); int shl_get(int index, struct shl_descriptor **desc); int shl_gethandle(shl_t handle, struct shl_descriptor **desc); int shl_get_r(int index, struct shl_descriptor *desc); int shl_gethandle_r(shl_t handle, struct shl_descriptor *desc); マルチスレッドでの使用法 これらのルーチンをマルチスレッドアプリケーションで呼び出しても安全です。 Section 3-448 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 shl_load(3X) shl_load(3X) 説明 これらのルーチンを用いることにより、プログラムによる共有ライブラリのロード、アンロードおよび、ライ ブラリに関する情報 (ライブラリ中で定義されているシンボルなど) を得ることができます。ルーチン自身は、 コマンドラインにおいて ld コマンド (ld(1) を参照) に −ldld オプションを指定することによって、アクセスさ れます。「警告」を参照してください。さらに、 ld コマンドにおける −E オプションにより、プログラム中で 定義されているすべてのシンボルが、ロードされたライブラリに対しても有効であることが保証されます。 共有ライブラリは、ソースファイルをコンパイルし、できたオブジェクトファイルを −b (共有ライブラリ作成) オプションを用いてリンクすることにより作成されます。 shl_load() path の名前を持つ共有ライブラリ または、 path で指定したパスの部分と、共有ライブ ラリのベース名を合わせて、その後に拡張子 .0 を付けて命名した共有ライブラリ名 (た とえば、 /usr/lib/hpux64/libname.0) を、プロセスおよびそのプロセスと依存関係のある ライブラリに対応付けます。 .0 という拡張子が付いた名前を持つ共有ライブラリの中か ら、内部名称の付いていないものが最初に検索されます。 ld(1) を参照してください。 ライブラリは指定された address にマッピングされます。 address が 0L である場合に は、システムがライブラリに対して適当なアドレスを選択します。システムは、もっと も完全なアドレス空間の情報を持っているので、こちらがより良い方法だと思われま す。現在では address フィールドは無視され、 0L とみなされます。共有ライブラリにス レッドが使用するローカル記憶領域が存在し、共有ライブラリが静的 TLS モードでビル ドされていた場合、このルーチンではその共有ライブラリをロードできません。詳細 は、 dld.so(5) の「スレッドローカル記憶領域」を参照してください。 flag 引き数は、い くつかのフィールドから成っています。以下のうちのいずれかを指定する必要がありま す。 ライブラリがロードされた時にシンボルの解釈を行いま BIND_IMMEDIATE す。 BIND_DEFERRED 実際の参照が行われるまでコードシンボルの解釈を遅らせ ます。 ビットごとの OR 操作を行うことにより、以下の項目を0個以上指定することができま す。 BIND_FIRST シンボルの検索順序の先頭にライブラリを配置します。デ フォルトモードでは、ライブラリおよびそのライブラリと 依存関係のあるライブラリは、お互いに独立してバインド されます (BIND_TOGETHER を参照)。 デフォルトの BIND_IMMEDIATE の動作は、すべての満 BIND_NONFATAL たされていないシンボルを致命的なものとして処理しま す。このフラグにより、満たされていないコードシンボル のバインドを、用いられるまで保留できるようになりま HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-449 shl_load(3X) shl_load(3X) す。 ライブラリがロードされた時には共有ライブラリに対する BIND_NOSTART 初期設定操作を呼び出さず、後に shl_unload() または dlclose() が呼び出された時に行います。デフォルトでは、 指定したライブラリに登録されているすべての初期設定操 作がロード時に実行されます。 満たされていないと思われるシンボルに関する冗長なメッ BIND_VERBOSE セージを表示します。 BIND_RESTRICTED シンボルを、ライブラリのロード時に存在しているライブ ラリから可視であるように拘束します。 ローダーが path 引き数で指定されたライブラリの検索を DYNAMIC_PATH 動的に行えるようにします。検索されるディレクトリは、 プログラムがリンクされたときに用いられた ld コマンド の +s および +b オプションで決定されます。 ld +compat が指定されていなければ、この動的検索はデフォルトで有 効になります。 BIND_FIRST とともに指定すると、マップ元のライブラ BIND_TOGETHER リ、およびそのライブラリと依存関係のあるライブラリが バインドされます。この処理は、 BIND_FIRST を指定し ないで実行されたすべての shl_load() の要求に対してデ フォルトで実行されます。 BIND_BREADTH_FIRST 依存ライブラリを幅優先でロードします。デフォルトで は、 shl_load() は依存ライブラリを深さ優先でロードしま す。 正 常 終 了 し た 時 に は、 shl_load() は 続 く shl_findsym() 、 shl_unload() 、 shl_gethandle() 、または shl_gethandle_r() で用いるハンドルを返し、失敗の場合には NULL を返します。その後の dlclose() または dlsym() の呼び出しにも、このハンドルを 使用することができます。 外部ライブラリに依存する共有ライブラリを作成するときには、注意が必要です。外部 ライブラリがスレッドローカル記憶領域 (TLS) を含んでいて、しかも静的 TLS モデルを 使っている場合は、そのライブラリを依存対象ライブラリとして使用しないようにして ください。詳細は、 dld.so(5) の「スレッドローカル記憶領域」を参照してください。依 存対象ライブラリに TLS があり、しかもそのライブラリが静的 TLS モードでビルドさ れている場合、プログラム起動時にそのライブラリがロードされていない (つまり、実 行可能プログラムにリンクされていない) と、ダイナミックローダーはプログラムを正 Section 3-450 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 shl_load(3X) shl_load(3X) 常にロードできません。 shl_findsym() 共有ライブラリからエクスポートされたシンボルのアドレスを求めます。 handle 引き数 は、それ以前の shl_load() または shl_get() の呼び出しによって返された、ロードされて いる共有ライブラリのハンドルへのポインターでなければなりません。 dlopen() の呼び 出しから handle を得ることもできます。この引き数に対して、 NULL を指すポイン ターが渡された場合には、 shl_findsym() は、 (shl_definesym() によって定義された) す べてのユーザー定義のシンボルと、シンボルを見つけるために必要な、現在ロードされ ているすべての共有ライブラリとプログラムを検索します。それ以外の場合には、 shl_findsym() は指定された共有ライブラリのみを検索します。発見されたハンドルが shl_definesym() によって作成されたものである場合は、ハンドルの戻り値は NULL にな ります。そうでない場合には、シンボルが発見されたライブラリのハンドルが返されま す。特殊ハンドル PROG_HANDLE は、プログラム自身を参照するために用いることも でき、プログラムからエクスポートされたシンボルも動的にアクセスすることができま す。 type 引き数は、シンボルに対して予期される型を指定し、 TYPE_PROCEDURE、 TYPE_DATA、または TYPE_UNDEFINED のいずれかの、定義済みの定数でなければ なりません。 TYPE_UNDEFINED は、タイプのチェックを抑制します。シンボルのア ドレスは、 value で指される変数に格納されて返されます。シンボルがスレッドのロー カル記憶領域にあるシンボルの場合、シンボルのアドレスは、スレッドのポインター と、共有ライブラリの開始アドレスと、ライブラリ内のシンボルのオフセットを足した ものになります。このルーチンは、正常終了した時には0を返し、失敗の場合には −1 を返します。 errono の設定値については、「診断」を参照してください。 shl_definesym() 現在のプロセスに対するユーザー ハッシュテーブルに、シンボルを追加します。 value が現在ロードされているライブラリの範囲内である場合には、結合が形成され、結合さ れたライブラリがアンロードされるとシンボルは未定義となります。以降のこのルーチ ンの呼び出しか、定義を行います。さらに可視ライブラリをロードすることにより、定 義されたシンボルを置き換えることができます。この方法で置き換えられたシンボル は、置き換えた定義がなくなった場合には再び可視になります。 可能なタイプの中には以下のものが含まれます。 TYPE_PROCEDURE シンボルは関数です。 TYPE_DATA シンボルはデータです。 可能なフラグの値には以下のものが含まれます。None は現在定義されています。zero はこのフラグの将来の使用との衝突を避けるために渡されます。このルーチンでは、ス レッドのローカル記憶領域にあるシンボルを定義することはできません。 dlsym() は、 ユーザー定義シンボルの検索は行いません。 shl_getsymbols() 提供されたメモリー割り当て関数を用いて割り当てられた、 handle で指定されるライブ ラリに結合したシンボルレコードの配列を準備します。 handle 引き数が NULL を指す HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-451 shl_load(3X) shl_load(3X) ポインターである場合には、 shl_definesym() を用いて定義されたシンボルが返されま す。 shl_definesym() で同じシンボルが重複して定義されている場合には、シンボルバイ ンドと思われる指定されたシンボルの情報ソースからのバージョンのみが返されます。 type は、 返 さ れ た 情 報 を 指 定 さ れ た タ イ プ に 拘 束 す る た め に 用 い ら れ ま す。 TYPE_PROCEDURE、および TYPE_DATA の値は、返されるシンボルをそれぞれコー ド、データに限定するために用いられます。 TYPE_DATA の値は、データ、記憶領域、 およびスレッド記憶領域のシンボルが返されるようにするために用いられます。定数 TYPE_UNDEFINED はすべてのシンボルをタイプを考慮しないで返すために用いられま す。 flags 引き数は以下のいずれかの値を内容としていなければなりません。 IMPORT_SYMBOLS インポートリストで発見したシンボルを返します。 EXPORT_SYMBOLS エ ク ス ポー ト リ ス ト で 発 見 し た シ ン ボ ル を 返 し ま す。 shl_definesym() によって定義されたシンボルは、すべてエクス ポートシンボルです。 INITIALIZERS ライブラリの初期設定操作として指定されたシンボルを返しま す。 ビットごとの OR 操作を行うことにより、以下のうちのいくつかを指定し、あるいは指 定しないようにできます。 NO_VALUES EXPORT_SYMBOLS または INITIALIZERS と組み合わせられた 時のみ意味を持ちます。シンボルの依存性を決定するためのロー ダーによるシンボルのバインドを防止するため、返される構造体 の value フィールドは計算しないでください。ごく少数のシンボ ル値のみが必要な場合には、 shl_findsym() を用いて注目するシン ボルの値を探すことができます。 GLOBAL_VALUES とともには 使用しません。 GLOBAL_VALUES EXPORT_SYMBOLS または INITIALIZERS と組み合わせられた 時のみ意味を持ちます。返された各シンボルの name および type の情報を用い、すべてのシンボル情報ソースを使用して最も可視 的な条件を探します。 返される構造体の value および handle フィールドは、最も可視的な条件が発見された場所を反映してい ます。 NO_VALUES とともには使用しません。 memory 引き数 は、 malloc() (malloc(3C) を参照) と同じインタフェースの関数を指して いなければなりません。 Section 3-452 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 shl_load(3X) shl_load(3X) 返される情報は以下のレコード (<dl.h> 中で定義) の配列から成ります。 struct shl_symbol { char *name, short type, void *value, shl_t handle, }; 返される構造体の type フィールドは、 TYPE_PROCEDURE、または TYPE_DATA の値 を持ちます。 value および handle フィールドは、エクスポートシンボルが要求され、 NO_VALUES フラグが指定されていないときのみ有効です。 value はシンボルのアドレ スを内容とし、一方 handle フィールドはシンボルを定義していたライブラリのハンドル か、シンボルが shl_definesym() ルーチンによって定義されている場合には NULL を内 容としており、 GLOBAL_VALUES フラグとともに用いられるときに有効です。 正常終了したときには、 shl_getsymbols() は発見したフィールドの数を返し、失敗の場 合には −1 を返します。 shl_unload() プロセスから共有ライブラリを分離するのに用いられます。 handle 引き数はそれ以前の shl_load() の呼び出しによって返されたハンドルでなければなりません。 dlopen() の呼 び出しからハンドルを得ることもできます。 shl_unload() は正常終了したときには0を 返し、失敗の場合には −1 を返します。ライブラリに登録されたあらゆる初期設定操作 が、分離前に呼び出されます。プロセスの停止時には、すべての明示的ロードされたラ イブラリは自動的に分離されます。 同じ共有ライブラリを複数回開くことができます。 dlopen(3c) および dlclose(3c) の動作 と 同 様、 ロー ド さ れ た 共 有 ラ イ ブ ラ リ ご と に 参 照 カ ウ ン ター が 保 持 さ れ ま す。 shl_unload は、共有ライブラリへの参照がすべて削除されるまで、アドレス空間からそ の共有ライブラリを削除しません。 shl_get() スタートアップ時に暗黙的にロードされたライブラリを含めた、現在ロードされている ライブラリに関する情報を返します。 index 引き数はプロセスに対する共有ライブラリ サーチリスト中の共有ライブラリの位置です。その後の shl_unload() または dlclose() の 呼び出しにより、ロードされていないライブラリよりも大きなインデックスを持つすべ てのライブラリのインデックスの値がデクリメントされます。index の値が −1 であれば ダイナミックローダーを表します。 index の値が −2 であればプログラム自体を表しま す。 desc 引き数は、共有ライブラリの記述子を内容とする静的に割り当てられたバッ ファーを指すポインターを返すのに用いられます。記述子の書式は実現方法に依存した もので、書式を調べるには /usr/include/dl.h ファイルの中身を見てください。すべての 実現方法に共通の情報はライブラリハンドル、パス名、ライブラリが占有するアドレス の範囲を含みます。 shl_get() により用いられる記述子のバッファーは静的で、その内容 はそれに続くルーチンの呼び出しの前に他の場所にコピーしておかなければなりませ HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-453 shl_load(3X) shl_load(3X) ん。ルーチンは通常0を返し、 index に不適当な値が与えられると−1 を返します。 shl_gethandle() handle 引き数により指定されたライブラリに関する情報を返します。特殊なハンドル PROG_HANDLE を用いることにより、プログラム自身を参照することができます。返 される記述子は shl_get() ルーチンによって返されるものと同じです。 shl_gethandle() に より用いられる記述子のバッファーは静的で、その内容はそれに続くルーチンの呼び出 しの前に他の場所にコピーしておかなければなりません。ルーチンは通常0を返し、エ ラーのときには−1 を返します。 これは shl_get() の再入可能なバージョンです。 desc 引き数は、/usr/include/dl.h に記述 shl_get_r() されているライブラリ記述子を保存するのに十分な大きさの、ユーザー定義の記憶領域 を持つバッファーをポイントしてなければなりません。それ以外については、shl_get() と同じです。 shl_gethandle_r() これは、shl_gethandle() の再入可能なバージョンです。desc 引き数は、/usr/include/dl.h に記述されているライブラリ記述子を保存するのに十分な大きさの、ユーザー定義の記 憶領域を持つバッファーをポイントしてなければなりません。それ以外については、 shl_gethandle() と同じです。 診断 ライブラリがロードできない場合には、 shl_load() は NULL を返し、 errno を設定してエラーを示します。ス レッドのローカル記憶領域が存在するライブラリをロードしようとした場合も、同じエラーになります。他の すべての関数はエラーのときには−1 を返して errno を設定します。 shl_findsym() が指定されたシンボルを発見できなかった場合には、 errno は0に設定されます。PA32 互換 モードの場合のみ、 shl_findsym() が指定されたシンボルを発見したにも関わらず、それが依存するすべてのシ ンボルを決定できないときには、 errno は ENOSYM に設定されます。 エラー errno は、以下のような値をとります。 [ENOEXEC] 指定されたファイルが共有ライブラリでないか、書式のエラーが見つかった場合 [ENOSYM] 共有ライブラリから要求されたシンボルのうちのいくつかが発見できなかった場合 [EINVAL] 指定されたハンドルまたはインデックスが適当でないか、不適当なアドレスにライブ ラリのロードを行おうとした場合 Section 3-454 [ENOMEM] アドレス空間にライブラリをロードするのに充分な余裕がなかった場合 [ENOENT] 指定されたライブラリがなかった場合 [EACCES] 指定されたライブラリに対する読み込みもしくは実行パーミッションがなかった場合 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 shl_load(3X) shl_load(3X) 警告 shl_unload() はプロセスからライブラリを分離し、それに割り当てられていたメモリーを解放しますが、ライ ブラリへのシンボリックリンクはブレークしません。したがって、アンロードされた共有ライブラリは free() (malloc(3C) を参照) によって解放されたメモリーのブロックと同等になります。 デフォルトでは、実現方法の中にはプログラムによって定義されたすべてのシンボルを (リンク時に参照され た共有ライブラリからインポートされシンボルのみをエクスポートする代わりに) エクスポートしないものも あります。したがって、ロードされているライブラリがプログラムシンボルを参照する場合に、それらのルー チンを用いる時には、 ld(1) へ -E オプションを付けて使用する必要があります。 shl_getsymbols() によって返される name フィールドを含んだすべてのシンボル情報は、関連するライブラリが shl_unload() によってアンロードされた時点で無効になります。 dlclose() の呼び出しによってライブラリがア ンロードされた場合も、同じ結果になります。 外部ライブラリに依存する共有ライブラリを作成するときには、注意が必要です。外部ライブラリがスレッド ローカル記憶領域 (TLS) を含んでいて、しかも静的 TLS モデルを使っている場合は、そのライブラリを依存対 象ライブラリとして使用しないようにしてください。詳細は、 dld.so(5) の「スレッドローカル記憶領域」を参 照してください。依存対象ライブラリに TLS があり、しかもそのライブラリが静的 TLS モードでビルドされ ている場合、プログラム起動時にそのライブラリがロードされていない (つまり、実行可能プログラムにリン クされていない) と、ダイナミックローダーはプログラムを正常にロードできません。このエラーは、コンパ イラオプションの +tls=dynamic を使ってライブラリを再コンパイルすることで回避できます。 将来サポートされない可能性のあるルーチンやフラグを使用した場合は、ダイナミックローダーで警告メッ セージを表示させることが可能です。将来についての詳細は、 dld.sl(5) の「警告」の項を参照してください。 将来の HP-UX 環境では、これらのルーチンやフラグがサポートされないか、または一部しかサポートされな い可能性があります。代わりに、SVR4 の動的にロードする API を使用します。ユーザーは、 dl* ファミリー の動的リンクルーチンに移行するようにしてください。詳しくは、 dlclose(3C) 、 dlerror(3C) 、 dlget(3C) 、 dlgetname(3C)、 dlmodinfo(3C)、 dlopen(3C)、および dlsym(3C) のマンページを参照してください。 著者 shl_load(3X) およびその関連する関数は、HP で開発されました。 参照 システムツール ld(1) リンクエディターを実行 その他 dld.so(5) ダイナミックローダー dlclose(3C) dlopen() によって以前にロードされた共有ライブラリをアンロード dlerror(3C) dld によって最後に記録されたエラーメッセージを出力 dlget(3C) ロードされているモジュールに関する情報を返す dlgetname(3C) ロードモジュールを含む記憶装置の名前を返す HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-455 shl_load(3X) shl_load(3X) dlmodinfo(3C) ロードモジュールに関する情報を返す dlopen(3C) 共有ライブラリをロード dlsym(3C) 共有ライブラリ内のシンボルのアドレスを取得 テキストおよび指導書 HP-UX Linker and Libraries Online User Guide (HP-UX リンカー & ライブラリ オンライン ユーザーズガイド) (+help オプション参照) HP-UX Linker and Libraries User’s Guide (HP-UX リンカー & ライブラリ ユーザーズガイド) (オーダ情報については manuals(5) を参照) Section 3-456 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 signbit(3M) signbit(3M) 名称 signbit( ) − 浮動小数点数符号判定 構文 #include <math.h> int signbit(floating-type x); 説明 signbit() マクロは、引き数の値 (浮動小数点数、ゼロ、無限大、または NaN の場合がある) の符号が負かどう かを判断します。引き数は、浮動小数点型でなくてはなりません。 Itanium(R)ベース システムの場合、引き数 はどの浮動小数点型でも構いません。 PA-RISC の場合には、引き数は double 型か float 型のどちらかでなくて はなりません。 使用方法 signbit() マクロを使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。プログラムに <math.h> がインクルード されていることを確認した後、コンパイラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリと リンクしてください。 戻り値 signbit() マクロは、引き数の値の符号が負である場合のみ、ゼロでない値を返します。 このマクロでは、例外は発生しません。 エラー エラーは、定義されていません。 例 x の値が負のゼロである場合に、所定のアクションを実行します。 #include <math.h> /*...*/ double x; /*...*/ if ( (x == 0.0) && signbit(x) ) { /*...*/ } 参照 fpclassify(3M), isfinite(3M), isinf(3M), isnan(3M), isnormal(3M), math(5) 標準準拠 signbit() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-457 sigpause(3C) sigpause(3C) 名称 sigpause − ブロックされたシグナルを自動的に解除して割り込みを待つ 構文 #include <signal.h> long sigpause(long mask); 説明 sigpause() は、 sigsetmask(2) と同様の方法で mask の値によってシグナルをブロックし、その後、自動的にマス クのかかっていないシグナルが到着するのを待ちます。 sigpause() は、戻る際に、現在のシグナルマスクを sigpause() 呼び出しの前の値に復元します。シグナルをブロックしない場合は、 mask には 0L 値を使用しま す。 通常の使用法では、シグナルは sigblock() (sigblock(2) を参照) を使用してブロックされます。重要なセクショ ンの実行を開始するためには、シグナルの発生時に変更される変数を調べて、実行しなければならない作業が ないことを確認し、プロセスは一時停止して、 sigpause() のマスクに sigblock() が返した値を指定して作業を 待ちます。 戻り値 sigpause() は、シグナルがこの関数に割り込んだ時点で終了します。 sigpause() は、終了すると、−l を返し、 errno を EINTR に設定します。 例 次の sigpause() の呼び出しは、呼び出し元のプロセスがシグナルを受け取るまで待ちます。 sigpause (0L); 次の例は、 sigpause() が呼び出されるまで、 SIGIO シグナルをブロックします。 sigpause() 文がシグナルを受 け取った場合、シグナルマスクは sigpause() が呼び出される前の値に復元されます。 long savemask; savemask = sigblock (sigmask (SIGIO)); /∗ critical section ∗/ sigpause (savemask); 警告 sigvector(2) をサポートするシステムでは signal(5) を参照して機能が適切であるかどうか調べてください。 sigvector() がこのページで説明した動作に影響を及ぼす可能性があります。 sigpause() は、 sigset(3C) で説明した機能とともに使用しないでください。 アプリケーション使用法 スレッドに関する考察 ブロックされているシグナルマスクはスレッドレベルで保存されるので、 sigpause() は、呼び出し元のスレッ ドのブロックされたシグナルマスクだけを変更します。 sigpause() は、呼び出し元のスレッドがシグナルを受 Section 3-458 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 sigpause(3C) sigpause(3C) け取るまで、そのスレッドだけを一時停止します。 プロセス内の他のスレッドがシグナルをブロックしない場合には、シグナルがプロセス内の他のスレッドに送 信されて、 sigpause() のスレッドが待ち続ける可能性があります。このため、マルチスレッドのアプリケー ションの場合には、 sigpause() の代わりに sigwait(2) を使用することをお薦めします。 シグナルおよびスレッドの詳細については、 signal(5) を参照してください。 LP64 プログラム sigpause() は、long (64 ビット) 型の値を受け入れます。ただし、ILP32 プログラムの場合と同様に、 sigpause() は 1 から 32 までの番号のシグナルをサポートします。mask 引き数の上位 32 ビットは無視されます。 著者 sigpause() は、カリフォルニア大学バークレー校で開発されました。 参照 sigblock(2), sigsetmask(2), sigsuspend(2), sigvector(2), sigwait(2) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-459 sigset(3C) sigset(3C) 名称 sigset, sighold, sigrelse, sigignore, sigpause − シグナル管理 構文 #include <signal.h> void (*sigset(int sig, void (*func)(int)))(int); int sighold(int sig); int sigrelse(int sig); int sigignore(int sig); int sigpause(int sig); 説明 システムは、プロセスに送信できる一連のシグナルを定義しています。この一連のシグナルは、 signal(5) 内 に、それぞれのシグナルの意味と影響とともに定義されています。ここでは、これらのシグナルを処理する別 の 機 能 を 定 義 し ま す。 こ こ で 説 明 す る 機 能 は、 signal(2) 、 sigvector(2) 、 sigblock(2) 、 sigsetmask(2) 、 sigpause(3C)、および sigspace(2) で説明する他の機能とともに使用しないでください。 sigset() によって、呼び出し元のプロセスは特定のシグナルの受け取リを処理する 4 つの方法の中から 1 つを選 択することができるようになります。 sig はシグナルを指定し、 func は選択する処理方法を指定します。 sig には、 SIGKILL または SIGSTOP を除いて、 signal(5) で説明したシグナルの中のどれか 1 つを指定する ことができます。 func には、 SIG_DFL、 SIG_IGN、 SIG_HOLD、または function address の 4 つの値のどれか 1 つを割り当て ます。 SIG_DFL および SIG_IGN によって定められる動作については、 signal(5) で説明します。 SIG_HOLD および function address によって定められる動作については、以下で説明します。 SIG_HOLD シグナルを保存 シグナル sig は、受け取り時に保存されます。このシグナルタイプの保留中のシグナルは、す べて保存されたままです。それぞれのタイプで保存できるシグナルは 1 つだけです。 注記: シグナル SIGKILL、 SIGCONT、および SIGSTOP を保存することはできません。 function address シグナルをキャッチ func は、シグナルキャッチ ハンドラである関数へのポインタでなければなりません。この関 数は、シグナル sig が発生したときに呼び出されます。 sigset() は、プロセスがシグナル sig を受け取ったときにこの関数を呼び出すことを指定します。このタイプの保留中のシグナル は、すべて解除されます。このハンドラアドレスは、ここでリストした他のシグナル管理関数 の呼び出しを超えて保持されます。シグナル sig を受け取ると、受け取ったプロセスは、次の 相違点はありますが、 signal(5) で説明したように、 func が指すシグナルキャッチ関数を実行 します。 Section 3-460 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 sigset(3C) sigset(3C) シ グ ナ ル キャッ チ ハ ン ド ラ を 呼 び 出 す 前 に、 sig に 対 す る シ ス テ ム シ グ ナ ル 動 作 は SIG_HOLD に設定されます。シグナルキャッチ ハンドラから通常にリターンされる間、この システムシグナル動作は、 func に復元され、このタイプの保存されていたすべてのシグナル が解除されます。ローカルでない goto (longjmp(3C)) が実行される場合、 sigrelse() を呼び出し てシステムシグナル動作を func に復元して、このタイプの保存されているシグナルをすべて 解除しなければなりません。 sighold() は、シグナル sig を保存します。 sigrelse() は、 sig に対するシステムシグナル動作を sigset() によっ てあらかじめ指定されるているシステムシグナル動作に復元します。 sighold() および sigrelse() を使用する と、重要なコード領域を設定することができます。 sighold() は、優先順位のレベルを上げて、優先順位が sigrelse() によって低くなるまでシグナルを延期または保存するのに似ています。 sigignore() は、シグナル sig に対する動作を SIG_IGN (signal(5) を参照) に設定します。 sigpause() は、呼び出し元のプロセスがブロックされていないシグナルを受け取るまで、そのプロセスを一時 停止します。シグナル sig が保存されている場合は、プロセスが一時停止する前に、このシグナルは解除され ます。 sigpause() は、シグナルが発生したときに変更される変数を調べるのに便利です。例えば、最初にシグ ナルをブロックして、その後変数を調べるためには、 sighold() を使用しなければなりません。変数が変更され ていない場合、 sigpause() を呼び出してシグナルを待ちます。 戻り値 正常に終了したときには、 sigset() は、指定したシグナル sig に対するシステムシグナル動作の以前の値を返し ます。それ以外の場合は、 SIG_ERR という値を返し、エラーを示す errno を設定します。 SIG_ERR は、 <signal.h> に定義されています。 他の関数の場合、値 0 は呼出しが成功したことを示します。 −1 の戻り値は、エラーが発生したことを示し、 その理由を示す errno が設定されます。 エラー 次の事柄が発生すると、 sigset() は異常終了し、 sig に対するシステムシグナル動作は変更されません。 [EFAULT] func 引き数が、プロセスのアドレス空間の有効な部分でないメモリを指してい る場合。このエラーの検出の信頼性は処理系に依存します。 次の事柄のどれかが発生すると、 sigset()、 sighold()、 sigrelse()、 sigignore()、および sigpause() は異常終了 し、 sig に対するシステムシグナル動作は変更されません。 [EINVAL] [EINVAL] sig が正しいシグナル番号でない場合 無視したり、保存したり、キャッチしたりすることができないシグナルのハン ドラに対して、無視したり、保存したり、提供したりしようとした場合。 signal(5) を参照してください。 次の事柄が発生した場合、 sigpause は戻ります。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-461 sigset(3C) sigset(3C) [EINTR] シグナルがキャッチされた場合 警告 これらのシグナル機能は、 bsdproc(3C)、 signal(2)、 sigvector(2)、 sigblock(2)、 sigsetmask(2)、 sigpause(3C)、 および sigspace(2) とともに使用しないでください。 参照 kill(1), kill(2), signal(2), pause(2), wait(2), abort(3C), setjmp(3C), signal(5) 標準準拠 sigset(): SVID2, SVID3 sighold(): SVID2, SVID3 sigignore(): SVID2, SVID3 sigpause(): SVID2, SVID3 sigrelse(): SVID2, SVID3 Section 3-462 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 sigsetops(3C) sigsetops(3C) 名称 sigemptyset( ), sigfillset( ), sigaddset( ), sigdelset( ), sigismember( ) − シグナル集合の初期化、操作、テスト 構文 #include <signal.h> int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); int sigismember(const sigset_t *set, int signo); 説明 sigemptyset() は set が指すシグナル集合を初期化し、 HP-UX でサポートされるすべてのシグナルをその中から 排除します。 sigfillset() は set が指すシグナル集合を初期化し、 HP-UX でサポートされるすべてのシグナルをその中に含みま す。 アプリケーションは、 sigset_t のタイプの各オブジェクトに対して少なくとも1回、オブジェクトが関数から返 されたような場合( 例えば、 sigprocmask() (sigprocmask(2) を参照) に対する oset 引き数) を含めて、そのオブ ジェクトが他の何かに用いられる前に sigemptyset() または sigfillset() を呼び出さなければなりません。 sigaddset() は signo で指定されたシグナルを set が指すシグナルに追加します。 sigdelset() は signo で指定されたシグナルを set が指すシグナルから取り除きます。 sigismember() は signo で指定されたシグナルが set が指すシグナル集合のメンバーであるかをテストします。 戻り値 sigismember() が正常終了した場合、指定されたシグナルが指定された集合のメンバーであれば1 を返し、そう でなければ0 を返します。その他の関数は、正常終了した時には0 を返します。上記のすべての関数に対し て、エラーが見つかった場合、−1 が返され、 errno が設定されてエラーを示します。 エラー sigaddset(), sigdelset(), および sigismember() は、以下の条件では動作しません。 [EINVAL] signo 引き数の値が範囲外です。 警告 上記の関数は set 引き数に対して渡される不適切なアドレスを発見できません。その場合、セグメンテーショ ンフォールトが起こる可能性があります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-463 sigsetops(3C) sigsetops(3C) 著者 sigfillset(), sigemptyset(), sigaddset(), sigdelset(), および sigismember() は、 IEEE Standard POSIX 1003.1-1988 に由 来します。 参照 sigaction(2), sigsuspend(2), sigpending(2), sigprocmask(2), signal(5) 標準準拠 sigaddset(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 sigdelset(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 sigemptyset(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 sigfillset(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 sigismember(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 Section 3-464 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sin(3M) sin(3M) 名称 sin( ), sinf( ), sinl( ), sinw( ), sinq( ) − 正弦関数 構文 #include <math.h> double sin(double x); float sinf(float x); Itanium(R)ベース システムのみ long double sinl(long double x); extended sinw(extended x); quad sinq(quad x); 説明 sin() は x の正弦を返します (x の単位はラジアン)。 PA-RISC システムでは、 x が0から遠く離れていると、 sin() の精度が失われることがあります。 sinf() は、 sin() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ sinl() は、 sin() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返しま す。 sinw() は、 sin() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 sinq() は、HP-UX システムでは sinl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで sinw() または sinq() を使うには、 −fpwidetypes オプションも指定してコンパイルし てください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。詳細について は、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 PA-RISC のみ 関数 sin() および sinf() のミリコードバージョンが提供されています。数学ライブラリ関数のミリコードバー ジョンは、通常は標準ライブラリのものより処理が高速です。これらのバージョンを使用するには、 +Olibcalls または +Oaggressive の最適化オプションを指定して、プログラムをコンパイルしてください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-465 sin(3M) sin(3M) 特殊な場合に、ミリコードバージョンは、その標準ライブラリと同じ値を返します (「戻り値」の項を参照)。 戻り値 sin(±0) は ±0 を返します。 x が ±INFINITY の場合、 sin() は NaN を返し、無効例外が発生します。 x が NaN の場合、 sin() は NaN を返します。 sin() で他の例外が発生しないときに、不正確例外が発生するかどうかは規定されていません。 エラー エラーは、定義されていません。 参照 asin(3M), asin(3M), atan(3M), atan2(3M), cos(3M), csin(3M), sind(3M), sincos(3M), tan(3M), math(5) 標準準拠 sin() : SVID3, XPG4.2, ANSI C, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) sinf(), sinl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-466 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sincos(3M) sincos(3M) 名称 sincos( ), sincosf( ), sincosl( ), sincosw( ), sincosq( ) − 正弦と余弦の両方を計算する関数 構文 #include <math.h> void sincos(double x, double *sptr, double *cptr); void sincosf(float x, float *sptr, float *cptr); void sincosl(long double x, long double *sptr, long double *cptr); void sincosw(extended x, extended *sptr, extended *cptr); void sincosq(quad x, quad *sptr, quad *cptr); 説明 これらの関数は、Itaniumベース システムでのみ使用できます。 sincos() は、 x (x はラジアンで指定) の正弦を、 sptr が指すオブジェクトに格納し、 x の余弦を、 cptr が指す オブジェクトに格納します。 sincosf() は、 sincos() の float バージョンで、 float および float * 型の引き数をとります。 sincosl() は、 sincos() の long double バージョンで、 long double および long double * 型の引き数をとります。 sincosw() は、 sincos() の extended バージョンで、 extended および extended * 型の引き数をとります。 sincosq() は、HP-UX システムでは sincosl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 sincosw() または sincosq() を使うには、 −fpwidetypes オプションも指定してコンパイルしてください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 sincos(±0,sptr,cptr) は、 sptr が指すオブジェクトに ±0 を格納し、 cptr が指すオブジェクトに1を格納します。 x が ±INFINITY の場合、 sincos() は、そのポインター引き数が指すオブジェクトに NaN を格納して、無効例 外を発生させます。 x が NaN の場合、 sincos() は、そのポインター引き数が指すオブジェクトに NaN を格納します。 sincos() で他の例外が発生しないときに、不正確例外が発生するかどうかは規定されていません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-467 sincos(3M) sincos(3M) エラー エラーは、定義されていません。 参照 acos(3M), asin(3M), atan(3M), atan2(3M), ccos(3M), cis(3M), cos(3M), csin(3M), sin(3M), sincosd(3M), tan(3M), math(5) 標準準拠 これらの関数は、どの標準にも規定されていません。 Section 3-468 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sincosd(3M) sincosd(3M) 名称 sincosd( ), sincosdf( ), sincosdl( ), sincosdw( ), sincosdq( ) − 度で指定した引き数の正弦と余弦の両方を計算する関数 構文 #include <math.h> void sincosd(double x, double *sptr, double *cptr); void sincosdf(float x, float *sptr, float *cptr); void sincosdl(long double x, long double *sptr, long double *cptr); void sincosdw(extended x, extended *sptr, extended *cptr); void sincosdq(quad x, quad *sptr, quad *cptr); 説明 これらの関数は、Itaniumベース システムでのみ使用できます。 sincosd() は、 x (x の単位は度) の正弦を、 sptr が指すオブジェクトに格納し、 x の余弦を、 cptr が指すオブ ジェクトに格納します。 sincosdf() は、 sincosd() の float バージョンで、 float および float * 型の引き数をとります。 sincosdl() は、 sincosd() の long double バージョンで、 long double および long double * 型の引き数をとりま す。 sincosdw() は、 sincosd() の extended バージョンで、 extended および extended * 型の引き数をとります。 sincosdq() は、HP-UX システムでは sincosdl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 sincosdw() または sincosdq() を使うには、 −fpwidetypes オプションも指定してコンパイルしてください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 sincosd(±0,sptr,cptr) は、 sptr が指すオブジェクトに ±0 を格納し、 cptr が指すオブジェクトに1を格納しま す。 x が ±INFINITY の場合、 sincosd() は、そのポインター引き数が指すオブジェクトに NaN を格納して、無効例 外を発生させます。 x が NaN の場合、 sincosd() は、そのポインター引き数が指すオブジェクトに NaN を格納します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-469 sincosd(3M) sincosd(3M) エラー エラーは、定義されていません。 参照 acosd(3M), asind(3M), atand(3M), atan2d(3M), cosd(3M), sincos(3M), sind(3M), tand(3M), math(5) 標準準拠 これらの関数は、どの標準にも規定されていません。 Section 3-470 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sind(3M) sind(3M) 名称 sind( ), sindf( ), sindl( ), sindw( ), sindq( ) − 度で指定した引き数の正弦関数 構文 #include <math.h> double sind(double x); float sindf(float x); Itanium(R)ベース システムのみ long double sindl(long double x); extended sindw(extended x); quad sindq(quad x); 説明 sind() は x の度による正弦を返します (x の単位は度)。 PA-RISC システムでは、 x が0から遠く離れていると、 sind() の精度が失われることがあります。 sindf() は、 sind() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ sindl() は、 sind() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返し ます。 sindw() は、 sind() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 sindq() は、HP-UX システムでは sindl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで sindw() または sindq() を使うには、 −fpwidetypes オプションも指定してコンパイル してください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 x が ±INFINITY の場合、 sind() は NaN を返し、無効例外が発生します。 x が NaN の場合、 sind() は NaN を返します。 x が NaN または ±INFINITY の場合、 sind() は NaN を返しま す。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-471 sind(3M) sind(3M) エラー エラーは、定義されていません。 参照 acosd(3M), asind(3M), atand(3M), atan2d(3M), cosd(3M), sin(3M), sincosd(3M), tand(3M), math(5) 標準準拠 これらの関数は、どの標準にも規定されていません。 Section 3-472 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sinh(3M) sinh(3M) 名称 sinh( ), sinhf( ), sinhl( ), sinhw( ), sinhq( ) − 双曲線正弦関数 構文 #include <math.h> double sinh(double x); float sinhf(float x); Itanium(R)ベース システムのみ long double sinhl(long double x); extended sinhw(extended x); quad sinhq(quad x); 説明 sinh() は、 x の双曲線正弦を返します。 sinhf() は、 sinh() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ sinhl() は、 sinh() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返し ます。 sinhw() は、 sinh() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 sinhq() は、HP-UX システムでは sinhl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで sinhw() または sinhq() を使うには、 −fpwidetypes オプションも指定してコンパイル してください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 sinh(±0) は ±0 を返します。 x が ±INFINITY の場合、 sinh() は ±INFINITY を返します。 x が NaN の場合、 sinh() は NaN を返します。 sinh() は、値が大きすぎる場合これに代えて、適切な符号が付いた無限大 (±HUGE_VAL に等しい) を返し、 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-473 sinh(3M) sinh(3M) オーバーフロー例外と不正確例外を発生させます。 sinh() で他の例外が発生しないときに、不正確例外が発生するかどうかは規定されていません。 エラー 正しい値がオーバーフローした場合には、 sinh() は errno に [ERANGE] を設定します。 Itaniumベース システムのみ Itaniumベース システムでの HP-UX の libm 関数は、デフォルトでは errno を設定しません。 errno を設定す るには、 +Olibmerrno オプションを指定してコンパイルしてください。 参照 asinh(3M), cosh(3M), csinh(3M), tanh(3M), math(5) 標準準拠 sinh() : SVID3, XPG4.2, ANSI C, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) sinhf(), sinhl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-474 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sleep(3C) sleep(3C) 名称 sleep( ) − 指定された時間、実行を停止 構文 #include <unistd.h> unsigned int sleep(unsigned int seconds); 説明 sleep() は、 seconds 引き数で指定された秒数だけ、現在のプロセスの実行を停止します。 実際の停止時間は以下の2つの理由により、要求された時間よりも短くなることがあります。 • 1秒に固定された間隔 (内部クロックによる) でスケジュールドウェイクアップが起こる。 • あらゆる受信されたシグナルは、受信したルーチンの後、 sleep を中止する。 休止時間は、システム内の他の動作のスケジューリングのために、要求された時間よりも長くなることがあり ます。呼び出し側が sleep() に要求した時間より早い時間にアラームを設定した場合や、他のシグナルを受信し て sleep() が早く終了した場合、戻り値として ‘‘unslept’’の時間 (要求された時間から実際に休止していた時間を 引いたもの) が返されます。 seconds は 2 31 よりも小さくなくてはなりません。 アプリケーション使用法 SIGALRM がマルチスレッド プロセスに対して生成された場合、現在 sleep() により実行が停止されているス レッドには送信されないことがあります。詳細は sigwait(2) のマンページを参照してください。マルチスレッ ド プロセスで sleep() を呼び出して SIGALRM を送信すると、SIGALRM ハンドラーは起動されずに sleep() が 終了します。 参照 sigwait(2), signal(5), thread_safety(5) 標準準拠 sleep(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-475 slk_attroff(3X) slk_attroff(3X) 名称 slk_attroff, slk_attr_off, slk_attron, slk_attr_on, slk_attrset, slk_attr_set, slk_clear, slk_color, slk_init, slk_label, slk_noutrefresh, slk_refresh, slk_restore, slk_set, slk_touch, slk_wset — ソフトラベル関数 構文 #include <curses.h> 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, void *opts); int slk_clear(void); int slk_color(short color_pair); int slk_init(int fmt); 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); 説明 Curses インタフェースは、多くの端末上にあるソフト ファンクションキーのラベルの集合を操作します。ソフ トラベルのない端末の場合には、Curses が stdscr の一番下の行を使うので、 stdscr のサイズと LINES 外部変 数の値が減少します。 8 個までの表示カラムのそれぞれに 8個までのラベルを指定することができます。 ソフトラベルを使うには、 initscr()、 newterm() または ripoffline() を呼び出す前に、 slk_init() を呼び出さなけ ればなりません。 initscr() が、結果的に stdscr からの1 行を使ってソフトラベルをエミュレートする場合に は、fmt が画面上にラベルをどのように並べるかを決定します。 fmt を0に設定すると、ラベルが 3-2-3 の形で 並ぶことを示し、1 に設定すると、ラベルが 4-4 の形で並ぶことを示します。 fmt のそれ以外の値は明示され ていません。 slk_init() 関数は、 ripoffline() を呼び出す効果があり、要求されたフォーマットを収容するために画面の 1行を Section 3-476 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 slk_attroff(3X) slk_attroff(3X) 確保します。 slk_set() および slk_wset() 関数は、1 〜8 のソフトラベル番号 labnum のテキストを指定します。 label 引き数 は、ラベルに書き出される文字列です。 slk_set() および slk_wset() では、ラベルの幅は8カラム分に制限され ます。ヌル文字列またはヌルポインタは、空白ラベルを指定します。 justify 引き数に以下の値を指定すると、 ラベルのために確保されたスペース内で label の位置をどのように調整するかを指示することができます。 0 label の先頭をスペースの先頭に合わせます。 1 label をスペースの中央に置きます。 2 label の最後をスペースの最後に合わせます。 slk_refresh() および slk_noutrefresh() 関数は、 wrefresh() および wnoutrefresh() 関数に相当します。 slk_label() 関数は、ソフトラベル番号 labnum を求めます。 slk_clear() 関数は、ソフトラベルを画面からただちにクリアします。 slk_restore() 関数は、 slk_clear() を呼び出した後、ただちにソフトラベルを画面に復元します。 slk_touch() 関数は、 slk_noutrefresh() または slk_refresh() が次に呼び出されたときに、すべてのソフトラベル を強制出力します。 slk_attron()、 slk_attrset() および slk_attroff() の各関数は、 attron()、 attrset() および attroff() に相当します。 これらの関数は、ソフトラベルが画面の一番下の行にシミュレートされている場合にだけ、効果があります。 slk_attr_off()、 slk_attr_on()、 slk_attr_set()、および slk_color() の各関数はそれぞれ、 attr_off()、 attr_on()、 attr_set() および color_set() に相当するので、WA_ 接頭辞の付いた属性定数およびカラーをサポートしていま す。 戻り値 正常に終了すると、 slk_label() は、要求されたラベルを先行の空白と後続の空白を取り去って返します。そう でなければヌルポインタを返します。 他の関数は、正常に終了すると OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 マルチバイト文字セットを使う場合には、アプリケーションで、 slk_set() を呼び出す前に mbstowcs() を呼び 出して、その後 wcswidth() を呼び出すことによって、文字列の幅をチェックする必要があります。ワイドキャ ラクタを使う場合には、アプリケーションで、 slk_set() を呼び出す前に wcswidth() を呼び出すことによって、 文字列の幅をチェックする必要があります。 ワイドキャラクタの文字列が占有するカラム数はコードセットに特有のものなので、 slk_wset() を呼び出す前 に、 wcwidth() および wcswidth() を呼び出して、文字列内のカラムの数を調べる必要があります。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-477 slk_attroff(3X) slk_attroff(3X) ほとんどのアプリケーションでは、 wrefresh() がすぐ後に続くことが多いので、 slk_noutrefresh() を使いま す。 参照 attr_get(3X), attroff(3X), delscreen(3X), ripoffline(3X), mbstowcs() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), wcswidth() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-478 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 SLPError(3N) SLPError(3N) 名称 SLPError − SLP (Service Location Protocol) エラーコード 構文 #include <slp.h> typedef int SLPError; 説明 SLP エラーコード SLP API では、呼び出しが正常に処理できないとエラーコードが返されます。これらの SLP エラーコードは <slp.h> に定義されています。 SLP API から返されるさまざまな SLP エラーコードの値とその説明を以下に示します。 SLP_LAST_CALL 1 API ライブラリの処理途中でコールバック関数に処理させるデータがなくなり、コールバック関数をこれ以上 呼ぶ必要がなくなると、このコードがその API ライブラリからコールバック関数に渡されます。コールバック は、この情報を基に、呼び出し元本体 (コールバックを直接呼び出している API ライブラリではなく、呼び出 しの大元になっているプログラム) へシグナルを送って、現在の操作に対してデータがこれ以上来ないことを 知らせることができます。呼び出し元本体は、この通知を受けて、データ処理のループから抜け出します。非 同期呼び出しと同期呼び出しのどちらが実行されていても、コールバックの最終呼び出しでコールバック関数 に渡されるエラーコードパラメータの値は SLP_LAST_CALL であり、他のパラメータはすべてヌルが渡され ま す。 API 操 作 か ら 結 果 が 1 つ も 返っ て こ な かっ た 場 合 は、 API ラ イ ブ ラ リ が エ ラー パ ラ メー タ に SLP_LAST_CALL を設定して、コールバック関数を1回しか呼んでいません。 SLP_OK 0 処理中にエラーが発生しなかったことを示します。 SLP_LANGUAGE_NOT_SUPPORTED -1 要求された言語で記述されている DA または SA のサービス通知情報や属性情報がありません。ただし、エ ラーコードとして LANGUAGE_NOT_SUPPORTED を返してきた DA または SA があり、そこでは、そのサー ビスの情報が別の言語で記述されている可能性があります。 SLP_PARSE_ERROR -2 SLP メッセージがリモート側の SLP エージェントから拒否されました。 API からこのエラーが返されるの は、少なくとも1つの SA または DA からプロトコルエラーが報告されて情報を取得できなかったときだけで す。 API を通して渡したデータが最初から間違っていたか、あるいは送信中に破損した可能性があります。 SLP_INVALID_REGISTRATION -3 サービスの登録要求で指定した URL の形式または属性の形式が間違っていたためにすべての DA からその登 録要求が拒否されると、API からこのエラーが返されることがあります。登録を受け入れた DA が1つでもあ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-479 SLPError(3N) SLPError(3N) れば、SLP はこのエラーを返しません。 SLP_SCOPE_NOT_SUPPORTED -4 API からこのエラーが返されるのは、 SLP の要求パケットで指定されたスコープが、ローカルマシン上で動作 している slpd に構成されておらず (つまり、構成ファイル内で net.slp.useScopes プロパティが設定されていな い)、しかも、そのスコープをサポートしているリモートマシンが1つも存在しない、という場合です。 SLP_AUTHENTICATION_ABSENT -6 SLP のフレームワークで認証がサポートされているときに、保護スコープ内での要求や登録に必要な認証情報 を UA または SA が送信できないと、このエラーが発生します。 SLP_AUTHENTICATION_FAILED -7 SLP のフレームワークで認証がサポートされているときに、SLP メッセージの認証に失敗すると、このエラー が発生します。 SLP_INVALID_UPDATE -13 発行したアップデート要求の対象が存在しないか、アップデート要求の中で指定されているサービスタイプま たはスコープが、最初の登録やその後の追加登録で指定されたものと違います。 SLP_REFRESH_REJECTED -15 最小リフレッシュ間隔よりも高い頻度で、SA が登録をリフレッシュしようとしました。SA は、適切な API 関 数を呼び出して最小リフレッシュ間隔を調べる必要があります。 SLP_NOT_IMPLEMENTED -17 実装されていない機能を使おうとすると、このエラーが返されます。 SLP_BUFFER_OVERFLOW -18 送信する要求のサイズがネットワークの最大 MTU サイズを超えています。要求のサイズを減らすか複数の要 求に分けて、再度試みる必要があります。 SLP_NETWORK_TIMED_OUT -19 ユニキャストの要求に対する応答が、構成されているタイムアウト時間内に到着しないと、このエラーが返さ れます。 SLP_NETWORK_INIT_FAILED -20 このエラーは、ネットワークが適切に初期化できないことを示します。また、SA または DA エージェント (slpd) と連絡できない場合にも、このエラーが返されます。詳細は、 libslp(3N) の SLPReg() と SLPDeReg() を 参照してください。 SLP_MEMORY_ALLOC_FAILED -21 メモリー不足を示すエラーです。 Section 3-480 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 SLPError(3N) SLP_PARAMETER_BAD SLPError(3N) -22 関数に渡したパラメータに誤りがあると、このエラーが返されます。 SLP_NETWORK_ERROR -23 通信自体には誤りがなくても、ネットワークに障害が発生すると、この値が返されます。 SLP_INTERNAL_SYSTEM_ERROR -24 API に内部的な障害が発生すると、このエラーが返されます。このエラーが発生するのは、システムコールま たはライブラリが失敗したときです。このエラーの場合、処理を復旧することはできません。 SLP_HANDLE_IN_USE -25 C の API では、直接的か間接的かに関係なく、コールバック関数を同じ SLPHandle で再帰的に呼び出すこと は許されていません。このような再帰的な呼び出しを行うと、呼び出された API 関数からこのエラーが返され ます。 SLP_TYPE_ERROR -26 サービスタイプテンプレートに対する登録タイプのチェックが API でサポートされている場合に、登録する属 性がそのサービスのサービスタイプテンプレートにある属性と一致しないと、このエラーが発生します。 参照 libslp(3N) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-481 smonitor(3C) smonitor(3C) 名称 smonitor( ) − 実行プロファイルの準備 構文 #include <mon.h> #include <sys/profil.h> void smonitor( struct text_region *regions, int nregions, void *buffer, size_t bufsize, int nfunc, unsigned flags ); 説明 smonitor() は、 sprofil(2) で、実行プロファイルのサンプリング情報を収集するためのインタフェースです。 smonitor() を使用するには、リンカーのコマンド行で -lgprof を指定するか、コンパイラのコマンド行で -G を 指定して gprof ライブラリとリンクします。 gprof (1) を参照してください。 -G オプションでコンパイルされたいかなるアプリケーションでも、 gprof ライブラリはプロファイルのサンプ リング情報を収集します。しかし、アプリケーションがプロファイルの詳細な制御を必要とする場合、 gprof ライブラリは smonitor() を使用するアプリケーションに制御を渡します。 サンプリング情報の収集を停止するには、次のように指定します。 smonitor(0, 0, 0, 0, 0, 0); 結果を調べるには、 gprof (1) を使用します。 パラメータ regions は、プロファイル対象の領域を記述した text_region 構造体の配列です。これは、ヘッダー <mon.h> で 定義されます。 text_region 構造体は次のフィールドで構成されます。 unsigned long text_start; unsigned long text_end; char *name; これらのフィールドの内容は次のとおりです。 text_start は、ロードモジュールのテキストセグメントの開始アドレスです。 text_end は、ロードモジュールのテキストセグメントの終了アドレスです。 Section 3-482 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 smonitor(3C) smonitor(3C) name は、ロードモジュールの名前 (パス名ではありません) です。ロードモジュールの名前は、 ld で 実行可能ファイルに記録された名前と同じである必要があります。 nregions は、配列領域内の要素の数です。 buffer は、サンプリング情報を収集するバッファーの先頭アドレスです。 bufsize は、 buffer の大きさです。 buffer は、 smonitor() がプロファイル情報を収集するために使用する唯一 のメモリー領域なので、指定したすべての領域の情報を収集するのに十分な大きさである必要があります。 smonitor() は、 buffer を初期化しません。 smonitor() が同じプロセス中で複数回呼び出されたときには、 smonitor() は以前の呼び出しで収集されたサンプリング情報を破棄します。 smonitor() は、最後の smonitor() の呼び出しで渡されたバッファー内に以前の呼び出しで収集された情報が存在していた場合には、その情報を 破棄しません。 nfunc は未使用です。将来の使用のために確保されています。 flags は、サンプリング情報を収集するためのバケットのサイズ (16 ビットまたは 32 ビット) の選択に使用しま す。 flags に PROF_USHORT を指定した場合、 smonitor() は 16 ビットのバケットの配列としてバッファーを 扱います。 PROF_UINT を指定した場合、 smonitor() は 32 ビットのバケットの配列としてバッファーを扱い ます。詳細は、 sprofil(2) を参照してください。 外部環境の影響 環境変数 smonitor() の動作は、 LD_PROFILE 環境変数によって制御されます。 gprof (1) を参照してください。 LD_PROFILE の種々の設定に対する smonitor() の動作は、次のとおりです。 LD_PROFILE="" libgprof.so は、サンプリング情報を収集するためのバッファーを設定しません。サンプリング情報を収 集するために、 smonitor() が明示的に呼び出されるものと想定されます。そのため、これは smonitor() を明示的に呼び出す場合の理想的な設定です。 LD_PROFILE=ALL libgprof.so は、すべてのロードモジュールに対してサンプリングバッファーを設定し、サンプリング情 報を収集するために sprofil() を起動します。この後、 smonitor() が明示的に呼び出されると、 sprofil() は停止し、 libgprof.so によって割り当てられたバッファーが解放されます。 smonitor() が呼び出され るまでに収集されたすべてのサンプリング情報は、失われます。 smonitor() は引き数として渡された バッファーを使って、 sprofil() を再起動します。 LD_PROFILE=ldm1:ldm2 libgprof.so は、ロードモジュール ldm1 および ldm2 に対してサンプリングバッファーを設定し、サン プリング情報を収集するために sprofil() を起動します。この後、 smonitor() が明示的に呼び出される と、 sprofil() は停止し、 libgprof.so によって割り当てられたバッファーが解放されます。 smonitor() が呼び出されるまでに収集されたすべてのサンプリング情報は、失われます。 smonitor() は引き数と して渡されたバッファーを使って、 sprofil() を再起動します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-483 smonitor(3C) smonitor(3C) LD_PROFILE が設定されていない場合には、 smonitor() は、 LD_PROFILE=ALL が設定されているものとし て動作します。 ファイル /usr/lib/hpux32/libgprof.so /usr/lib/hpux64/libgprof.so 参照 cc(1), gprof(1), sprofil(2) Section 3-484 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 spray(3N) spray(3N) 名称 spray − ネットワークをチェックするためのデータ散布 構文 #include <time.h> #include <rpcsvc/spray.h> 説明 このマンページでは、 spray(1M) プログラムで用いられるデータ構造体および XDR ルーチンについて記述し てあります。 spray() の関数呼出しについては記述されていません。詳細は、 spray(1M) を参照してくださ い。 RPC 情報 プログラム番号: SPRAYPROG XDR ルーチン: xdr_sprayarr(xdrs, arr); XDR *xdrs; struct sprayarr *arr; xdr_spraycumul(xdrs, cumul); XDR *xdrs; struct spraycumul *cumul; プロシージャ: SPRAYPROC_SPRAY 引き数をとらず、値を返しません。サーバーデーモンのカウンタをインクリメントします。 サーバーは呼出しを返さないので、呼出し側は 0 のタイムアウトを得ることになります。 sprayarr は呼出し側のみが使用し、送られた UDP パケットのサイズを変更します。 SPRAYPROC_GET 引 き 数 を と ら ず、 SPRAYPROC_SPRAY の 呼 出 し の 数 お よ び、 最 も 最 近 の SPRAYPROC_CLEAR リクエストから経過した総時間(秒およびマイクロ秒) を反映するため に、設定されたカウンタおよびクロックの値を持った struct spraycumul を返します。 SPRAYPROC_CLEAR 引き数をとらず、値を返しません。 SPRAYPROC_SPRAY の呼出しの準備のために、カウン タとクロックをゼロにします。 バージョン: SPRAYVERS_ORIG 構造体: HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-485 spray(3N) spray(3N) struct spraycumul { unsigned counter; struct timeval clock; }; struct sprayarr { int *data; int lnth; }; 警告 このルーチンを呼び出すユーザーアプリケーションは、 /usr/include/librpcsvc.a をリンクしなければなりませ ん。例えば次のようになります。 cc my_source.c -lrpcsvc 著者 spray は Sun Microsystems, Inc. で開発されました。 参照 spray(1M), sprayd(1M) Section 3-486 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 sqrt(3M) sqrt(3M) 名称 sqrt( ), sqrtf( ), sqrtl( ), sqrtw( ), sqrtq( ) − 平方根関数 構文 #include <math.h> double sqrt(double x); float sqrtf(float x); Itanium(R)ベース システムのみ long double sqrtl(long double x); extended sqrtw(extended x); quad sqrtq(quad x); 説明 sqrt() は x の負数でない平方根を返します。 sqrtf() は、 sqrt() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ sqrtl() は、 sqrt() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返し ます。 sqrtw() は、 sqrt() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 sqrtq() は、HP-UX システムでは sqrtl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで sqrtw() または sqrtq() を使うには、 −fpwidetypes オプションも指定してコンパイル してください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 x が +INFINITY の場合、 sqrt() は +INFINITY を返します。 x が NaN の場合、 sqrt() は NaN を返します。 x がゼロより小さい場合、 sqrt() は NaN を返し、無効浮動小数点例外が発生します。 sqrt() では、丸めた結果が数学上の結果と等しくないときには必ず、不正確例外が発生します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-487 sqrt(3M) sqrt(3M) エラー x がゼロより小さい場合、 sqrt() は errno に [EDOM] を設定します。 Itaniumベース システムのみ Itaniumベース システムでの HP-UX の libm 関数は、デフォルトでは errno を設定しません。 errno を設定す るには、 +Olibmerrno オプションとデフォルトの +Olibcalls を指定してコンパイルしてください。 参照 cbrt(3M), exp(3M), log(3M), pow(3M), math(5) 標準準拠 sqrt() : SVID3, XPG4.2, ANSI C, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) sqrtf(), sqrtl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-488 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ssignal(3C) ssignal(3C) 名称 ssignal( ), gsignal( ) − ソフトウェアシグナル 構文 #include <signal.h> int (*ssignal(int sig, int (*action)(int)))(int); int gsignal(int sig); 説明 ssignal() および gsignal() は、 signal(5) と同じ働きをソフトウェアで実現します。標準 C ライブラリがこの機 能を用いることにより、ユーザーがエラー状態の処理を指定することができ、またユーザーそれぞれの目的で 用いることもできます。 ユーザーが利用できるソフトウェアシグナルは、1から 15 までの範囲の整数に対応しています。 ssignal() の 呼び出しはプロシージャ action をソフトウェアシグナル sig に結び付け、またソフトウェアシグナル sig は gsignal() を呼び出すことにより発生します。ソフトウェアシグナルの発生により、そのシグナルを受けた時に 行われる動作が開始されます。 ssignal() の最初の引き数は、開始される動作を要求するシグナルのタイプを指定する数です。2番目の引き数 は動作を定義します。これは (ユーザー定義の) action function の名前か、明示された定数である SIG_DFL (デ フォルト)、あるいは SIG_IGN (無視) のどれかです。 ssignal() はそのシグナルタイプによってそれ以前に開始 された動作を返します。動作が開始されていないかシグナルが不適当な場合には、 ssignal() は SIG_DFL を返 します。 gsignal() は引き数で指定されたシグナル sig を発生させます。 • すでに何らかの動作が sig によって開始されている場合には、その動作は SIG_DFL にリセットさ れ、動作の関数は、引き数 sig で開始されます。 gsignal() は動作の関数によって返された値を返し ます。 • sig に対応する動作が SIG_IGN である場合には、 gsignal() は1を返し、他の動作を行いません。 • sig に対応する動作が SIG_DFL である場合には、 gsignal() は0を返し、他の動作を行いません。 • sig が不適当な値であったり、 sig に対して動作が指定されていない場合には、 gsignal() は0を返 し他の動作を行いません。 参照 signal(5), thread_safety(5) 注意 1から 15 以外の数を持った他のシグナルは、標準 C ライブラリによってエラー状態を示すために用いられま す。1から 15 以外の数を持つシグナルもシグナルとしては適正ですが、標準 C ライブラリの動作を妨げるこ とがあります。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-489 ssignal(3C) ssignal(3C) 標準準拠 ssignal(): SVID2, SVID3, XPG2 gsignal(): SVID2, SVID3, XPG2 Section 3-490 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 standend(3X) standend(3X) 名称 standend, standout, wstandend, wstandout — ウィンドウ属性の設定およびクリア 構文 #include <curses.h> int standend(void); int standout(void); int wstandend(WINDOW *win); int wstandout(WINDOW *win); 説明 standend() および wstandend() の両関数は、現在のウィンドウまたは指定したウィンドウのすべての属性をオ フにします。 standout() および wstandout() の両関数は、現在のウィンドウまたは指定したウィンドウの特別な属性をオンに します。 戻り値 これらの関数は常に1を返します。 エラー エラーは定義されていません。 参照 attroff(), attr_get(), <curses.h> 変更履歴 X/Open Curses 第3版の attroff() エントリーから派生した関数です。分かりやすくするために、エントリー内容 が変更されましたが、それ以外、機能的には以前の版と同じです。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-491 statfsdev(3C) statfsdev(3C) 名称 statfsdev, fstatfsdev − ファイルシステムの統計 構文 #include <sys/vfs.h> int statfsdev(const char *path, struct statfs *buf); int fstatfsdev(int fildes, struct statfs *buf); 説明 statfsdev() は、 path で指定したファイルのファイルシステムについての情報を返します。 buf は、ファイルシステムについての情報を配置する statfs 構造体を指すポインターです。 buf が指す構造体 の内容は以下のようなメンバーです。 int32_t f_bavail /* free blocks available to non-superuser */ int32_t f_bfree /* free blocks */ int32_t f_blocks /* total blocks in file system */ int32_t f_bsize /* fundamental file system block size in bytes */ int32_t f_ffree /* free file nodes in file system */ int32_t f_files /* total file nodes in file system */ int32_t f_type /* type of info, zero for now */ fsid_t f_fsid /* file system ID. f_fsid[1] is MOUNT_UFS, MOUNT_NFS, or MOUNT_CDFS */ f_blocks, f_bavail, f_bfree フィールドは、サイズが f_bsize のブロック数で表されます。 特定のファイルシステムに定義されてないフィールドは −1 に設定されます。 fstatfsdev() は、ファイル記述子 fildes が参照する開いているファイルについて上記と同じ情報を返します。 戻り値 正常に終了すると、 statfsdev() と fstatfsdev() は0を返します。そうでなければ −1 を返し、グローバル変数 errno にエラーを示す値が格納されます。 エラー 次の条件の少なくとも1つが起きれば、 statfsdev() はエラーとなります。 [EACCES] パスプリフィックスの構成要素に、サーチパーミッションが与えられていない場合 [EAGAIN] ファイルが存在し、強制モードでファイル/レコードのロックが設定され、ファイル上 にまだ設定されていないレコードロックがある場合 Section 3-492 [EFAULT] path が、無効なアドレスを指している場合 [ELOOP] パス名の解釈時に、シンボリックリンクが多すぎる場合 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 statfsdev(3C) statfsdev(3C) [EMFILE] ファイル記述子の許可数分のファイルが開かれている場合 [ENAMETOOLONG] 指 定 し た パ ス 名 の 長 さ が PATH_MAX の バ イ ト 長 を 超 え て い る か、 ま た は _POSIX_NO_TRUNC が指定されているが、パス名の構成要素の長さが NAME_MAX のバイト長を超えている場合 [ENFILE] システムファイルテーブルがいっぱいになっている場合 [ENOENT] 指定されたファイルが存在しない場合 [ENOTDIR] パスプリフィックスの構成要素が、ディレクトリではない場合 [ENXIO] 指定されたスペシャルファイルが指定するデバイスが存在しない場合 [EOVERFLOW] statfs 構造体の1つ以上のフィールドがオーバーフローしました。 fstatfsdev() は、以下のうち少なくとも1つが真であるとき、エラーとなります。 [EBADF] fildes が、有効な開いているファイル記述子ではない場合 [ESPIPE] filedes が、無効なアドレスを指している場合 以下のうち少なくとも1つが真であるとき、 fstatfsdev() と statfsdev() はエラーとなります。 [EAGAIN] 強制モードのレコードロックが設定され、ブロッキング ライトロックがかかっている 場合 [EDEADLK] この操作の結果リソースのデッドロックが起こる場合 [EINTR] システムコールが、シグナルによって割り込まれた場合 [EINVAL] path または filedes で指定したファイルが、既知の形式のファイルシステムをまった く持っていない場合 [ENOLCK] システムロックテーブルがいっぱいで、ブロッキング ライトロックが削除されるま で、読み込みを休止することができない場合 警告 statfsdev() および fstatfsdev() は非推奨となり、従来の 32ビットアプリケーションでのみ使用してください。 statvfsdev64() および fstatvfsdev64() で置き換えることを推奨します。 fgetpos64(3S) を参照してください。 著者 statfsdev() と fstatfsdev() は、HP で開発されました。 ファイル /usr/include/sys/mount.h HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-493 statfsdev(3C) statfsdev(3C) 参照 bdf(1M), df(1M), stat(2), statfs(2), thread_safety(5) Section 3-494 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 statvfsdev(3C) statvfsdev(3C) 名称 statvfsdev, fstatvfsdev − ファイルシステム情報の入手 構文 #include <sys/statvfs.h> int statvfsdev(const char *path, struct statvfs *buf); int fstatvfsdev(int fildes, struct statvfs *buf); 説明 statvfsdev() は、 path で指定されたデバイスファイル上のファイルシステムに関する情報を返します。ファイ ルシステムをマウントする必要はありません。 fstatvfsdev() は、オープンしているファイルに関して同様の情報を返します。 stat()、 fstat()、 lstat() の各関数のパラメータは、以下のとおりです。 path デバイスファイルの名前を指すポインターです (パス名にリストされているすべてのディレ クトリが検索可能です)。 buf statvfs() 構造体を指すポインターです。この中にファイルのステータス情報が保存されてい ます。 fildes オープンしているファイルのファイル記述子です。これは、 open(), creat(), dup(), fcntl(), pipe() のいずれかのシステムコールが正常に終了したときに作成されます (open(2), creat(2), dup(2), fcntl(2), または pipe(2) を参照)。 buf は statvfs 構造体を指すポインターであり、この構造体の中にファイルシステムに関する情報が納められて います。 buf がポイントする構造体の内容は、 statvfs(2) で説明しています。 fstatvfsdev() は上記と同じ情報を返しますが、ファイル記述子 fildes で参照されるオープンしているデバイス ファイルに関する情報です。 戻り値 正常に終了すると、 statvfsdev() と fstatvfsdev() はゼロを返します。そうでなければ −1 を返し、グローバル変 数 errno を該当のエラーに設定します。 エラー statvfsdev() が正常に動作しなかった場合、 errno は以下のいずれかの値に設定されます。 [EACCES] パス接頭辞の構成要素の検索パーミッションが拒否されました。 [EFAULT] path が無効なアドレスをポイントしています。 [ELOOP] パス名の変換で検出されたシンボリックリンクの数が多すぎます。 [EMFILE] 現在、ファイル記述子の最大数までオープンされています。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-495 statvfsdev(3C) statvfsdev(3C) [ENAMETOOLONG] _POSIX_NO_TRUNC が有効であり、指定のパス名の長さが PATH_MAX バイ トを超えているか、パス名の構成要素の長さが NAME_MAX バイトを超えてい ます。 [ENFILE] システムのファイルテーブルが満杯です。 [ENOENT] 指定されたファイルが存在しません。 [ENOTDIR] パス接頭辞の構成要素がディレクトリではありません。 [ENXIO] 指定された特殊ファイルで指定されているデバイスが存在しません。 [EOVERFLOW] statvfs 構造体の1つ以上のフィールドがオーバーフローしました。 fstatvfsdev() が正常に動作しなかった場合、 errno は以下のいずれかの値に設定されます。 [EBADF] fildes はオープンしているファイルの記述子として有効なものではありません。 [ESPIPE] filedes は無効です。 fstatvfsdev() と statvfsdev() の両方が正常に動作しなかった場合、 errno は以下のいずれかの値に設定されま す。 [EINTR] [EINVAL] システムコールがシグナルによって割り込みされました。 path または filedes で指定されているファイルには、認識できるタイプのファイ ルシステムが入っていません。 著者 statvfsdev() と fstatvfsdev() は、HP で開発されました。 参照 bdf(1M), df(1M), stat(2), statvfs(2), fgetpos64(3S), thread_safety(5) Section 3-496 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 stdio(3S) stdio(3S) 名称 stdio( ) − 標準バッファ化入出力ストリームファイル パッケージ 構文 #include <stdio.h> 説明 このマニュアルのサブセクション (3S) で述べられている標準 I/O 関数は、ユーザーレベルの I/O バッファリン グ機構を構成するものです。 getc() 関数と putc() 関数は、文字を高速で処理します。以下のすべての関数は、 まるで getc() と putc() を使っているかのように使われるかまたは動作します。また、これらの関数は、自由に 混合して使えます。 fgetc() fputs() getchar() putchar() fgets() fread() gets() puts() fprintf() fscanf() getw() putw() fputc() fwrite() printf() scanf() バッファリングを伴ったファイルは ストリームと呼ばれ、定義済みのタイプである FILE へのポインタとして 宣言されます。 fopen() は、ストリームに対する特定の記述データを作成し、それ以降のすべてのトランザク ションでストリームを指定するポインタを返します。章(3S)のライブラリルーチンは、このストリーム上で動 作します。 プログラムが始動すると、3つのストリームである 標準入力、標準出力、標準エラーがあらかじめ定義され、 それらのストリームをあらためて開く必要はありません。ストリームが開くと、標準入力ストリームと標準出 力ストリームに対して、出力の対象がファイルの場合にはバッファリングを行い、出力の対象が端末の場合に は行バッファリングを行います。標準エラー出力ストリームは、デフォルトではバッファリングが行われませ ん。これらの3つのストリームは、ヘッダファイル <stdio.h> の中に宣言されている以下の定数ポインタを持っ ています。 stdin 標準入力ファイル stdout 標準出力ファイル stderr 標準エラーファイル 定数 NULL (0)は、存在しないポインタを指定します。 エンドオブファイルおよびエラー検出時には、ストリームを扱うほとんどの整数関数は、整数定数 EOF (−1)を 返します (詳しくはそれぞれの関数の説明を参照)。 整数定数 BUFSIZ は、特定のインプリメンテーションが使うバッファのサイズを指定します ( setbuf (3S) を参 照)。 このパッケージを使うどんなプログラムも、以下に示すように適切なマクロ定義を含んだヘッダファイルを含 む必要があります。 #include <stdio.h> HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-497 stdio(3S) stdio(3S) このマニュアルのサブセクション (3S) で述べられている関数および定数は、このヘッダファイルで宣言されて いるので、それ以上の宣言は不要です。 定数 _NFILE は、プロセスごとに許されている開いているファイルのデフォルトの最大値を定義します。この デフォルト値を越えて開いているファイルの範囲を拡げるには、 setrlimit(2) を参照してください。 警告 non-positional デバイスで、 stdio インタフェースを共有の読み書き可能ファイル記述子で使用すると、予期し ない動作が生じることがあります。 non-positional devices 上で stdio 操作を行うアプリケーションは、2 つの 種類の操作用に同じファイルポインタを使用する場合でも、操作の入出力の際には別々のファイルポインタを 使用する必要があります。 エラー 不適切な ストリームポインタは、重大な混乱を引き起こし、プログラムを終了させてしまう場合もあります。 個々の関数の解説で、起こり得るエラー状態を述べています。 参照 close(2), lseek(2), open(2), pipe(2), read(2), getrlimit(2), write(2), ctermid(3S), cuserid(3S), fclose(3S), ferror(3S), fgetpos(3S), fileno(3S), fopen(3S), fread(3S), fseek(3S), fgetpos(3S), getc(3S), gets(3S), popen(3S), printf(3S), putc(3S), puts(3S), scanf(3S), setbuf(3S), system(3S), tmpfile(3S), tmpnam(3S), ungetc(3S) 標準準拠 stderr: AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C stdin: AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C stdout: AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-498 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 stdscr(3X) stdscr(3X) 名称 stdscr — デフォルトウィンドウ 構文 #include <curses.h> extern WINDOW *stdscr; 説明 外部変数 stdscr には、 WINDOW * 型の引き数を使ってウィンドウを指定しない関数によって使用されるデ フォルトウィンドウを指定します。ほかのウィンドウは、 newwin() を使って作成することができます。 参照 derwin(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-499 strfmon(3C) strfmon(3C) 名称 strfmon − 金額を文字列に変換 構文 #include <monetary.h> ssize_t strfmon(char *s, size_t maxsize, const char *format, ...); 特記事項 ANSI C の ", ..." は可変長の引き数リストを表しており、この行を特定のページ番号に合わせるためのオプショ ン [ または必須 ] の (/* */) に指定します。 説明 strfmon() 関数は、 format でポイントされている文字列の制御通りに、文字を s でポイントされている配列に 入れます。配列には maxsize バイトより多くを入れることはできません。 フォーマットは、2つのオブジェクト型を含んだ文字列です。1つは出力用に単にコピーされる通常の文字で す。もう1つは変換指定で、その指定それぞれに対して、変換とフォーマッティングの対象となる引き数が フェッチされます。 double 型の引き数についての詳細は、「変換文字」の項を参照してください。フォーマッ トに対して引き数の数が少ない場合の結果は定義されていません。フォーマットを終了しても引き数が残って いる場合、余分な引き数は無視されます。 変換指定は、次の文字列です。 %[flag ... ] [field_width] [#left_precision] [.right_precision] conversion_character このシーケンス中の各要素は、以下のように指定します。 フラグ 以下の任意フラグを1つまたは複数指定することによって、変換を制御できます。 =f = (等号) と、数値充てん文字として使用する単一の文字 f です。充てん文字は、桁数と横幅の数が 正しく合うように、1バイトで表すことができる文字でなければなりません。デフォルトの数値充 てん文字は空白文字です。このフラグはフィールド幅の埋め込み (空白文字を使用) には影響しませ ん。左桁数 (下記を参照) を指定していない限り、このフラグは無視されます。 ˆ 金額をフォーマットする場合に、グループ文字を使用しません。デフォルトでは、現在のロケール に定義されているグループ文字が挿入されます。 + または ( 正および負の金額を表すためのスタイルを指定します。 + または ((プラス符号または左かっこ) の どちちらか1つだけを指定します。 + を指定すると、+ および - と等価なロケール値が使用されま す (たとえば en_US.roman8 ロケールの場合、正の値には空文字、負の値には - が使用されます)。 (を指定すると、負の値はかっこで囲まれます。どちらのフラグも指定しないと、 + のスタイルが 使用されます。 Section 3-500 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strfmon(3C) strfmon(3C) ! 変換後の出力から通貨記号を取り除きます。 - マイナス符号は、データの整列形式を意味します。このフラグを指定すると、すべてのフィールド は右揃えではなく、左揃えになります (右側がパディングされます)。 フィールド幅 w 10 進数の数字 w で、変換の結果を右揃え ( フラグ - を指定した場合は左揃え) したときの最小の フィールド幅を指定します。デフォルトはゼロです。 左桁数 #n # と 10 進数の数字 n で、小数点の左側にフォーマットする最大桁数を指定します。このオプショ ンは、複数の呼び出しからフォーマットされた出力を strfmon() で同じカラムに整列させる場合に 使用できます。また、$***123.45 のように、使用されていない位置に特殊文字を埋め込む場合にも 使用できます。このオプションを使用すると、金額に n で指定している桁数があるかのように フォーマットされます。金額が n の桁数よりも多い場合、この変換指定は無視されます。実際に必 要な桁数以外の余分な位置は、数値充てん文字で埋め込まれます (前の = f フラグを参照)。 ˆ フラグによるグループ分けの抑制を行っていない場合、現在のロケールにグループ文字が定義さ れていれば、グループ区切り記号が挿入されてから、充てん文字が追加されます。充てん文字が数 字であっても、グループ区切り記号は充てん文字には適用されません。 正しく整列するように、通貨記号や符号など、フォーマットされた出力の前または後に現れる文字 は、正および負のフォーマットが同じ長さになるように必要に応じて空白文字で埋め込まれます。 右桁数 .p ピリオドと 10 進数の数字 p で、小数点以下の桁数を指定します。右桁数 p の値がゼロであると、 小数点は現れません。右桁数を指定していないと、現在のロケールに指定されているデフォルトが 使用されます。フォーマットされる金額は指定の桁数に丸められてから、フォーマットされます。 変換文字 変換文字と意味は、以下のとおりです。 i double 引き数は、ロケールの国際通貨フォーマットに従ってフォーマットされます ( たとえば en_US.roman8 ロケールでは USD 1,234.56)。 n double 引き数は、ロケールの国内通貨フォーマットに従ってフォーマットされます ( たとえば en_US.roman8 ロケールでは $1,234.56)。 % % に変換されます。引き数は変換されません。変換指定全体が %% でなければなりません。 多言語化対応 ロケール プログラムのロケールの LC_MONETARY カテゴリが、金額の小数点 (LC_NUMERIC カテゴリの影響を受け る数値の小数点と異なる場合があります)、グループ区切り記号、通貨記号、およびフォーマットを含め、この HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-501 strfmon(3C) strfmon(3C) 関数の動作に影響します。 戻り値 終了ヌルバイトを含めて結果の総バイト数が maxsize 以下の場合、 strfmon() 関数は s でポイントされている配 列に納めたバイト数を返します。ただし、この中には終了ヌルバイトは含まれていません。そうでなければ -1 を返します。この場合、配列の内容は分からず、 errno が該当のエラーに設定されます。 エラー 次の場合、 strfmon() 関数は正常に動作しません。 バッファーのスペースが不十分であったため、変換を中止しました。 [E2BIG] 例 次のプログラムセグメントは en_US.roman8 ロケールを使用して、左桁数 5 および充てん文字 * で金額 -4321.123 をフォーマットしています。 char string[31]; double amt = -4321.123; setlocale(LC_MONETARY, "en_US.roman8"); strfmon(string, 31, "The amount is %=*#5n.", amt); string 配列の内容は、次のようになります。 The amount is -$*4,321.12. 以下の例では、 en_US.roman8 ロケールを使用し、値は 123.45、 -123.45、および 3456.781 です。 変換 出力 コメント $123.45 デフォルトのフォーマット 指定 %n -$123.45 $3,456.78 %11n $123.45 11 文字のフィールド内で右揃え -$123.45 $3,456.78 %#5n $ 123.45 99,999 までの値を桁揃え -$ 123.45 $ 3,456.78 %=*#5n $***123.45 充てん文字を指定 -$***123.45 $*3,456.78 %=0#5n Section 3-502 $000123.45 充てん文字が数字であっても、充てん文字の中では Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 strfmon(3C) strfmon(3C) -$000123.45 グループ区切り記号は使用されません。 $03,456.78 %ˆ#5n $ 123.45 グループ区切り記号を使用しない -$ 123.45 $ 3456.78 %ˆ#5.0n $ 123 小数点以下を丸める -$ 123 $ 3457 %ˆ#5.4n $ 123.4500 右桁数を増加 -$ 123.4500 $ 3456.7810 %(#5n $ 123.45 別の正/負スタイルを使用 ($ 123.45) $ 3,456.78 %!(#5n 123.45 通貨記号を使用しない ( 123.45) 3,456.78 著者 strfmon は HP で開発されました。 参照 localeconv(3C), thread_safety(5) 標準準拠 strfmon(): XPG4 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-503 strftime(3C) strftime(3C) 名称 strftime() − 日付および時間の文字列への変換 構文 #include <time.h> size_t strftime( char *s, size_t maxsize, const char *format, const struct tm *timeptr ); 説明 strftime() 関数は、 tm 構造体 (ctime(3C) を参照) を形式化された日付と時間の文字列に変換します。 strftime() は、 format が指す文字列によって制御されて、文字を s が指す配列に格納します。 format 文字列 は、もし必要ならいくつかの指令と一般の文字から構成されます。指令は、 % 文字、オプションの領域幅と 精度の指定、および指令の動作を決める終端の文字から構成されます。すべての文字 (終端にある null 文字も 含む) は、変更されずに配列にコピーされます。 maxsize の文字数以下しか配列に格納されません。それぞれの 指令は、以下のリストで述べられている個々の文字によって置換されます。これらの文字は、プログラムの ローカル、 timeptr が指す構造体中にある値、および TZ 環境変数 (後述の多言語化対応を参照) によって決め られます。 指令 オプションの領域幅と精度の指定をせずに示された以下の指令は、指定された文字によって置換されます。 ロケールの省略形の曜日名 %a %A ロケールの完全な曜日名 %b ロケールの省略形の月名 %B ロケールの完全な月名 %c ロケール特定の日時表示 %C 10 進数表記による世紀表示 (西暦の年数を 100 で割ったものを、整数になるよう切り捨て た値)[00-99] 月の日付 (10 進数表記)[01,31] %d Section 3-504 %D 指令文字列 %m/%d/%y と同じ %e 月の日付 (10 進数表記) [1,31]。1桁の場合は、前にスペースが挿入されます。 %h %b と同じ。 %H 時間 (24 時間表示で 10 進数表記) [00,23] %I 時間 (12 時間表示で 10 進数表記) [01,12] %j 1年の日数 (10 進数表記) [001,366] %m 月 (10 進数表記) [01,12] Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strftime(3C) strftime(3C) %M 分 (10 進数表記) [00,59] %n ニューライン文字 %p ロケールの AM または PM %r AM および PM 表記による時刻の表示。POSIX のロケールでは、%I:%M:%S %p に相当し ます。 %R 24 時間形式による時刻の表示 (%H:%M) %S 秒 (10 進数表記)[00,61] %t タブ文字 %T 時間、分、秒形式による時刻の表示 (%H:%M:%S) %u 10 進数による曜日の表示 [1(月曜日),7] %U 1年の週数 (10 進数表記) [00,53]。週の最初は日曜日になります。新年の最初の日曜日より 前の日は、第0週とみなします。 %V 10 進数 [01,53] で表された1年の週数 (週の最初は月曜日になります)。1月1日が含まれ る週に、新年になってからの日数が4日以上ある場合、第1週とみなします。それ以外の 場合、その週は前年の最後の週とみなされ、翌週が第1週となります。 %w %W 1週間の曜日数 (10 進数表記) [0 (日曜),6] 1年の週数 (10 進数表記) [00,53]。週の最初は月曜日になります。新年の最初の月曜日より 前の日は、第0週とみなします。 %x ロケール特定の日付表示 %X ロケール特定の時間表示 %y 年号の下2桁 (10 進数表記) [00,99] %Y 年号 (10 進数表記) %Z 時間帯名 (または、時間帯がない場合は何も表示しない) %% パーセント (%) 記号 以下の指令は、 date(1) および ctime(3C) 関数がサポートしている指令に対して旧製品との互換性があります。 これらの指令は、将来リリースされる製品では使えなくなる可能性があります。下記の指令よりもむしろ上記 の指令を使うことをお勧めします。 %E ロケールの皇帝/時代の名前と年代 (代わりに %EC%Ey を使ってください) %F ロケールの完全な月名 (代わりに %B を使ってください) %N ロケールの皇帝/時代の名前 (代わりに %EC を使ってください) %o ロケールの皇帝/時代の年代 (代わりに %Ey を使ってください) %z 時間帯名 (または、時間帯がない場合何も表示しない) (代わりに %Z を使ってください) 指令が上記の中にない場合、その動作は定義されません。 修飾された変換指定子 変換指定子の中には、E または O 修飾子で修飾し、修飾されていない変換指定子が通常使うものとは異なる代 替フォーマットまたは指定方法を使わなければならないことを示す場合があります。現在のロケールに対する 代替フォーマットまたは指定方法が存在しない場合は、修飾されていない変換指定子が使われた場合と同様に HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-505 strftime(3C) strftime(3C) 動作します。代替数値シンボルは、ロケールの ALT_DIGIT (langinfo(5) を参照) で定義されたシンボルを参照 します。 %Ec ロケールの、適切な代替日時表示 %EC ロケールの代替表示における、基本となる年数の表示方法 (皇帝/時代) %Ex ロケールの代替日付表示 %EX ロケールの代替時刻表示 %Ey ロケールの代替表示と %EC (年数のみの表示) との差 %EY 完全な、代替年数表示 %Od 月の日付。ロケールの代替数値シンボルを使い、ゼロに相当する代替シンボルがある場合 は、必要に応じて前にゼロが挿入されます。それ以外の場合は、前にスペースが挿入され ます。 %Oe 月の日付。ロケールの代替数値シンボルを使い、必要に応じて前にスペースが挿入されま す。 %OH ロケールの代替数値シンボルを使った時間表示 (24 時間形式) %OI ロケールの代替数値シンボルを使った時間表示 (12 時間形式) %Om ロケールの代替数値シンボルを使った月の表示 %OM ロケールの代替数値シンボルを使った分の表示 %OS ロケールの代替数値シンボルを使った秒の表示 %Ou ロケールの代替表示における、数値による週の表示 (月曜日=1) %OU ロケールの代替数値シンボルを使った1年の週数 ( 週の最初は日曜日で、%U に準拠しま す) %OV ロケールの代替数値シンボルを使った1年の週数 ( 週の最初は月曜日で、%V に準拠しま す) %Ow ロケールの代替数値シンボルを使った曜日 (日曜日=0) %OW ロケールの代替数値シンボルを使った1年の週数 (週の最初は月曜日になります) %Oy ロケールの代替表示における、ロケールの代替シンボルを使った年の表示 (%C との差) 領域幅と精度 オプションの領域幅と精度の指定は、指令の先頭の % のすぐ後に以下の順序で続けることができます。 [- 0]w 10 進数の文字列 w は、変換の結果を右揃えまたは左揃えとしたときの最小領域幅を指定しま す。デフォルトでは右揃えが (空白の詰込みとともに) 行われます。オプションのフラグ - を 指定すると、右側に空白を詰め込んで左揃えとなります。オプションのフラグ 0 を指定する と、右揃えとなり左側に0を詰め込みます。 .p 10 進数の文字列 p は、 d, H, I, j, m, M, o, S, U, w, W, y および Y 指令に現れる桁の最小値を指 定し、 a, A, b, B, c, D, E, F, h, n, N, p, r, t, T, x, X, z, Z, および % 指令に使われる最大文字数を 指定します。前者の場合、指令が精度で指定したよりも少ない桁数を指定したときは、0が先 頭に加えられ桁が増やされます。後者の場合、指令が精度で指定したよりも多い文字数を指定 したときは、超過した文字は右側から削除されます。 Section 3-506 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 strftime(3C) strftime(3C) d, H, I, m, M, S, U, W, y, または j 指令に対して、領域幅あるいは精度が指定されていない場合、 .3 が使われて いる j 以外のすべてに対して .2 が使われます。 多言語化対応 ロケール LC_TIME カテゴリは、上述の指令の代わりに使われる文字をローカルのものとして決定します。 LC_CTYPE カテゴリは、 format 内のバイトの解釈を半角文字または全角文字あるいはその両方として決定し ます。 LC_NUMERIC カテゴリは、数字を出力する指令に対して、数字の生成に使う文字を決定します。 ALT_DIGITS (langinfo(5) を参照) がローカルで定義されている場合、そのように指定した文字はデフォルトの ASCII 形 式の文字の代わりに使われます。 ALT_DIGITS および ALT_DIGIT が、どちらもロケール用に定義されてい る場合、ALT_DIGITS の定義が ALT_DIGIT よりも優先されます。 環境変数 TZ は、 %Z および %z 指令の代わりに時間帯名を決定します。外部変数 tzname (ctime(3C) を参照) を設定す る関数 tzset() を呼び出すことで、時間帯名が決まります。 サポートされるコードセット シングル/マルチバイトの文字コードセットがサポートされています。 戻り値 終端にある null 文字を含む結果の文字総数が maxsize を超えていない場合、 strftime() は s が指す配列に格納 される文字数を返します。ただし、その時終端にある null 文字は含みません。それ以外の場合、0が返され配 列の内容は決定されません。 例 timeptr 引き数が以下の値を含むとき、 timeptr->tm_sec = 4; timeptr->tm_min = 9; timeptr->tm_hour = 15; timeptr->tm_mday = 4; timeptr->tm_mon = 6; timeptr->tm_year = 88; timeptr->tm_wday = 1; timeptr->tm_yday = 185; timeptr->tm_isdst = 1; LC_TIME カテゴリと文字列形式との以下の組合せによって以下に示す出力が得られます。 LC_TIME 文字列形式 出力 en_US.roman8 %x Mon, Jul 4, 1988 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-507 strftime(3C) strftime(3C) de_De.roman8 %x Mo., 4. Juli 1988 en_US.roman8 %X 03:09:04 PM fr_FR.roman8 %X 15h09 04 any* %H:%M:%S 15:09:04 any* %.1H:%.1M:%.1S 15:9:4 any* %2.1H:%-3M:%03.1S 15:9 :004 * これらの例で使う指令は、ローカルの LC_TIME カテゴリの影響を受けません。 警告 引き数 s と引き数 format の両方が重複するように定義されていると、その動作は定義されません。 関数 tzset() は strftime() を呼び出すごと (時間帯名が出力配列にコピーされているかどうか調べるため) に呼び 出されます。 %S ([0,61]) に対する数値の範囲は、時折起こる 1,2 秒のうるう秒を考慮して 61 まで拡張してあります。しか しながら、このシステムはうるう秒を加算しません。また、関数 localtime() および gmtime() (ctime(3C) を参 照) によって生成された tm 構造体は、うるう秒をまったく考慮に入れません。 timeptr が指す構造体にある値が tm 構造体 (ctime(3C) を参照) に定義した範囲を超えている場合、あるいはそ の値が存在しない場合 (たとえば、 tm_yday 要素が1月の最初の日を表す0に設定され、 tm_mon 要素が 12 月の日付を表す 11 に設定されているような場合)、結果は定義されません。 著者 strftime() は、HP で開発されました。 参照 date(1), ctime(3C), getdate(3C), setlocale(3C), environ(5), langinfo(5), thread_safety(5) 標準準拠 strftime(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-508 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 string(3C) string(3C) 名称 文字列関数 : strcasecmp(), strcat(), strchr(), strcmp(), strcoll(), strcpy(), strcspn(), strdup(), strlen(), strncasecmp(), strncat(), strncmp(), strncpy(), strpbrk(), strrchr(), strrstr(), strspn(), strstr(), strtok(), strtok_r(), strxfrm(), index(), rindex() − 文 字列操作 構文 #include <string.h> #include <strings.h> char *strcat(char *s1, const char *s2); char *strncat(char *s1, const char *s2, size_t n); int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t n); int strcasecmp(const char *s1, const char *s2); int strncasecmp(const char *s1, const char *s2, size_t n); char *strcpy(char *s1, const char *s2); char *strncpy(char *s1, const char *s2, size_t n); char *strdup(const char *s); size_t strlen(const char *s); char *strchr(const char *s, int c); char *strrchr(const char *s, int c); char *strpbrk(const char *s1, const char *s2); size_t strspn(const char *s1, const char *s2); size_t strcspn(const char *s1, const char *s2); char *strstr(const char *s1, const char *s2); char *strrstr(const char *s1, const char *s2); char *strtok(char *s1, const char *s2); char *strtok_r(char *s1, const char *s2, char **last); int strcoll(const char *s1, const char *s2); size_t strxfrm(char *s1, const char *s2, size_t n); char *index(const char *s, int c); HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-509 string(3C) string(3C) char *rindex(const char *s, int c); 注 index() と rindex() を除くすべての関数は、両方のヘッダーファイルで宣言されているので、2つのヘッダー ファイルのうち1つだけをインクルードすればいいことになります。 関数 index() と rindex() は、 <strings.h> と <strings.h> にだけ宣言されています。これらの関数は、BSD 系の アプリケーションの移植性のためで、移植性を重要視する新しいアプリケーションにはお勧めできません。移 植可能なアプリケーションには、 <string.h>, strchr() および strrchr() を代わりに使ってください。 説明 引き数 s1, s2, および s は、文字列 (null で終る文字の配列) を指します。 これらすべての関数、型 size_t、および定数 NULL は、ヘッダーファイル <string.h> に定義されています。 strcat() 文字列 s2 を文字列 s1 の末尾に連結します。 strncat() は、文字列 s2 を文字列 s1 の末尾に最 大 n 文字連結します。 s2 が n 文字より短い場合、そのまま連結します。どちらの関数も null で終了する連結後の結果 (s1 の値) を指すポインターを返します。 strcmp() 文字列の引き数を比較して、文字コードの大小関係を比較しながら s1 が s2 より小さいか、等 しいか、大きいかによって、負の整数、0、正の整数を返します。対応する文字の比較は、文 字の型があたかも unsigned char であるかのように行われます。 s1 と s2 に対する null ポイン ターは、空の文字列へのポインターと同じに扱われます。 strncmp() は、同様の比較を行いま すが、最大 n 文字 (0以下の n では等しい動作は行わない) の比較を行います。 strcasecmp() は strcmp() と、 strncasecmp() は strncmp() と機能についてそれぞれ同様ですが、文字は、比 較に先立って _tolower() (conv(3C) を参照) によって変換されます。返される大小関係には、小 文字への変換が反映されます。 strcpy() 文字列 s2 を文字列 s1 に null までコピーします。 strncpy() は、ちょうど n 文字をコピーし、 必要なら n 文字全部が書かれるまで、 s2 を切り詰めたり、 s1 に null を加えます。 s2 が、 n 以上の場合、 s1 は、null で終了しません。どちらの関数も s1 を返します。 strncpy() を任意 の構造体の n バイトのコピーに使わないよう注意してください。その構造体の中に null があ ると、 strncpy() は、ソースから宛先へ、 n バイト未満をコピーし、残りを null で満たしま す。 memcpy() 関数 (memory(3C) を参照) を使って任意のバイナリデータをコピーしてくださ い。 strdup() s1 が指す文字列のコピーである新しい文字列を指すポインターを返します。新しい文字列の 領域は、 malloc() 関数 (malloc(3C) を参照) を使って確保します。 strlen() strchr() 末尾の null を除いた s の文字数を返します。 (strrchr()) 文字列 s 中の最初 ( 最後) に文字 c が現れる位置へのポインターを返します。ま た、 c が文字列中にないときは、null ポインターを返します。文字列の末尾にある null は、 文字列の一部として扱われます。 index() (rindex()) は strchr() (strrchr()) と同じもので、BSD 系のアプリケーションへの移植性のみ備わっています。 Section 3-510 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 string(3C) strpbrk() string(3C) 文字列 s1 内に文字列 s2 内の任意の文字が現れる最初の位置へのポインターを返します。ま た、 s2 内の文字が s1 内にないときは、null ポインターを返します。 strspn() (strcspn()) 文字列 s1 内で、文字列 s2 内の文字 (文字列 s2 にない文字) だけからなる最大の先 頭セグメントの長さを返します。 strstr() (strrstr()) 文字列 s1 内に文字列 s2 が最初 (最後) に現れる位置へのポインターを返します。ま た、文字列中に s2 がなければ、NULL ポインターを返します。 s2 が大きさ0の文字列を指す とき、 strstr() (strrstr()) は s1 を返します。 strtok() 文字列 s1 を、分離された文字列 s2 内の1つ以上の文字で区切られた0以上のテキストトーク ンの連なりからなるものとみなします。最初の (null でないポインター s1 を指定しての) 呼び 出しで、最初のトークンの先頭の文字を指すポインターを返し、そのトークンに続いて s1 に null を書き込みます。個々の呼び出しで、文字列 s1 でのテキストトークンの位置を見失わな いので、以降の、最初の引き数を null ポインターにする呼び出しが、続く文字列に行われま す。このようにして、トークンが1つもなくなるまで、個々の呼び出しが文字列 s1 に行われ ます。分離された文字列 s2 は、呼び出しが違っていても構いません。 s1 にトークンが1つも なくなると、null ポインターが返されます。 strtok_r() strtok() と同じですが、3番目の引き数として文字列ポインターのアドレスが渡される点が異 なります。この引き数を使って、検索対象の文字列内の現在の位置を追跡します。ポインター を文字列内の現在のトークンに返すか、トークンが存在しない場合はヌル値を返します。 strcoll() s1 が指す文字列が、 s2 が指す文字列に対して大きいか、等しいか、小さいかによって、正の 整数、0、負の整数を返します。比較は、プログラムの locale (以下の「ロケール」を参照) に 適するように解釈された文字列に基づいています。 ‘‘C’’ の locale では、 strcoll() は、 strcmp() と同様に働きます。 strxfrm() s2 が指す文字列を変換し、その結果の文字列を s1 が指す配列に格納します。この変換は、 strcmp() 関数を変換された2つの文字列に用いる場合、変換前の2つの文字列に strcoll() 関数 を適用し、その結果に応じて正、0、負の値を返すようになっています。終端にある null 文字 を含んで、 n バイトしか出力文字列には格納されません。変換後の文字列が n バイト以下し かない場合、出力文字列の長さが返されます (終端にある null 文字は含まれていません)。 n バイト以上のとき、返す値は文字列 s1 が占めている (終端にある null 文字は含まれない) バ イト数になり、配列の内容は、確定しません。 指定した文字列が2、3回しか他の文字列と比較されない場合や、比較する文字列が長いけれど、相対的な順 序を決める文字列中の違いが通常、最初の2、3文字で決まってしまう場合には、 strcoll() が、 strxfrm() より 優れた性能を持っています。 strxfrm() は、たとえば、多くの文字列がそれぞれ一度だけ変換され、変換後の 文字列が互いに何度も比較し合うようなソートルーチンに対して優れた働きを行います。 多言語化対応 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-511 string(3C) string(3C) ロケール LC_CTYPE カテゴリは、 strcoll() および strxfrm() 関数に対する文字列引き数中のバイトの解釈を、半角文字 または全角文字、あるいはその両方として決定します。また strcasecmp() および strncasecmp() 関数に対し て、大文字小文字変換を行うことを決定します。 LC_COLLATE カテゴリは、 strcoll() および strxfrm() 関数で使われる照合順序を決定します。 サポートされる国際的コードセット シングル/ マルチバイトの文字コードセットは、 strcoll() および strxfrm() 関数に対してサポートされていま す。他のすべての関数は、シングルバイト文字コードセットのみをサポートしています。 例 以下のサンプルコードは、ブランクで区切られている、文字列 s 中のトークンを見つけるものです (トークン の最大数は MAXTOK とします)。 int i = 0; char *s, *last, *tok[MAXTOK]; tok[0] = strtok_r(s, " ", &last); while (tok[++i] = strtok_r(NULL, " ", &last)); 警告 関数 strcat(), strncat(), strcpy(), strncpy(), strtok(), および strtok_r() は、 s1 が指す配列の内容を変更します。こ れらの関数は、配列のオーバーフローをチェックしません。 宛先の文字列の null ポインターは、不定の動作を引き起こします。 文字の移動は、インプリメンテーションに依存しています。重複したソースと宛先の文字列の間の移動などで は、予測できないことが起こり得ます。 8ビットコードセットを使う言語に対して strxfrm() によって生成された変換後の文字列は、通常、元の文字 列の少なくとも2倍の大きさで、4倍の大きさにもなり得ます (通常の文字は、変換後の文字列中で2バイト を占め、1対2の文字は4バイト、2対1の文字は2バイト、関係のない文字は0バイトを占めます)。全角 コード設定のそれぞれの文字 (アジアの言語) は、変換後の文字列で、3バイトを占めます。 LC_COLLATE カテゴリと LC_CTYPE カテゴリが指定する言語が異なるコードセットを使う場合、関数 strcoll() および strxfrm() に対しては結果は定義されません。 また、 strtok_r() の使用に際して、この関数のプロトタイプは、新しいリリースでは POSIX の新しいスレッド 基準に準拠するように、変更されることに注意してください。 著者 string() は、カリフォルニア大学バークレイ校、AT&T、OSF、および HP で開発されました。 参照 conv(3C), malloc(3C), memory(3C), setlocale(3C), thread_safety(5) Section 3-512 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 string(3C) string(3C) 標準準拠 strcat(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strchr(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strcmp(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strcoll(): AES, SVID3, XPG3, XPG4, ANSI C strcpy(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strcspn(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strdup(): SVID2, SVID3 strlen(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strncat(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strncmp(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strncpy(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strpbrk(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strrchr(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strspn(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strstr(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strtok(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strxfrm(): AES, SVID3, XPG3, XPG4, ANSI C HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-513 strord(3C) strord(3C) 廃止予定 名称 strord − 文字列データ順序の変換 構文 #include <nl_types.h> char *strord(char *s1, const char *s2, nl_mode m); 説明 ファイルのテキストの書式 (モード) は、右から左 (非ラテン形式) または、左から右 (ラテン形式) が可能で す。このテキストの書式は、ファイル中でデータの配列方法に作用します。結果のデータ配列は、スクリーン オーダやキーボードオーダと呼ばれます。 strord() は、 s2 の文字の順序をスクリーンオーダからキーボードオーダへ、またはその逆に変換を行い、結果 を s1 に格納します。引き数 s1 と s2 は、文字列 (null で終了する文字配列) を指します。 strord() は、 s1 を返 します。 strord() は、引き数 m が示すモード情報に基づいた変換を行います。引き数 m は、ヘッダーファイル <nl_types.h> にある nl_mode 型からなります。モード引き数は、2つの値、 NL_LATIN と NL_NONLATIN を 取れます。 モード引き数が NL_LATIN の場合、テキストの書式は左から右になり、すべての非ラテン形式のサブストリ ングは、文字の並びが逆になります。非ラテン形式のサブストリングは、右から左へ書く任意の字数の言語文 字からなります。非ラテン形式のサブストリングは、 ASCII 形式の文字によって境界が定められています。 同様に、モード引き数が NL_NONLATIN の場合、テキストの書式は右から左になり、すべてのラテン形式の サブストリングは、文字の並びが逆になります。ラテン形式のサブストリングは、任意の字数の隣り合うプリ ント可能な ASCII 形式の文字からなります。ラテン形式のサブストリングは、右から左へ書く言語文字と ASCII 形式の制御コードによって境界が定められています。 右から左へ書く言語には、alternative numbers と呼ばれる、もう1つの数を表す記号セットを持つものもありま す。 alternative numbers は常に左から右へ書く形式になっています。 多言語化対応 ロケール LC_NUMERIC カテゴリは、右から左へ書く言語が alternative numbers を持つかどうかを決めます。 サポートされる文字コードセット シングルバイト文字コードセットがサポートされています。 警告 strord() は、 s1 で示される配列のオーバーフローをチェックしません。 廃止インタフェース strord() は、将来廃止される予定です。 Section 3-514 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strord(3C) strord(3C) 廃止予定 著者 strord() は、HP で開発されました。 参照 forder(1), nljust(1), setlocale(3C), environ(5), thread_safety(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-515 strptime(3C) strptime(3C) 名称 strptime − 日付と時刻の変換 構文 #include <time.h> char *strptime(const char *buf, const char *format, struct tm *tm); 説明 strptime() 関数は、 format で指定されている形式を使用して buf でポイントされている文字列を変換し、 tm でポイントされている tm 構造体に保存します。 format は、いくつかの指令で構成されます (指令がない場合もあります)。各指令は、1つ以上の空白文字 (isspace() 関数で指定)、一般の文字 (% と空白文字以外のもの)、または変換指定のいずれかで構成されます。こ の変換指定は、 % 文字と、必要な置き換えを指示する変換文字で構成されます。複数の変換指定がある場 合、空白文字または英数字以外の他の文字を使用して区切る必要があります。次の変換指定がサポートされて います。 曜日です。ロケールの曜日名を使用します。省略名または完全名を指定することができま %a す。 %A %a と同じです。 %b 月です。ロケールの月名を使用します。省略名または完全名を指定することができます。 %B %b と同じです。 %c 日付と時刻です。ロケールの日付と時刻のフォーマットを使用します (例: %x %X)。 %C 世紀を表す年代です [0,99]。先行するゼロがあってもかまいませんが、必須ではありません。 %d 日にちです [1,31]。先行するゼロがあってもかまいませんが、必須ではありません。 %D %m/%d/%y の形式の日付です。 %e %d と同じです。 %h %b と同じです。 (24 時間形式で表した) 時間です [0,23]。先行するゼロがあってもかまいませんが、必須では %H ありません。 (12 時間形式で表した) 時間です [0,12]。先行するゼロがあってもかまいませんが、必須では %I ありません。 Section 3-516 %j 年の通算日数です [1,366]。先行するゼロがあってもかまいませんが、必須ではありません。 %m 月です [1,12]。先行するゼロがあってもかまいませんが、必須ではありません。 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strptime(3C) strptime(3C) %M 分です [0,59]。先行するゼロがあってもかまいませんが、必須ではありません。 %n 空白文字です。 %p a.m. や p.m. に相当するロケール値です。 %r %I:%M:%S %p の形式の時刻です。 %R %H:%M の形式の時刻です。 %S 秒です [0,61]。先行するゼロがあってもかまいませんが、必須ではありません。 %t 空白文字です。 %T %H:%M:%S の形式の時刻です。 %U 10 進数で表した1年の中の週番号 (週の先頭は日曜日) です [0,53]。先行するゼロがあっても かまいませんが、必須ではありません。年の最初の日曜日より前にある日は週0とみなしま す。 %w 10 進数で表した曜日です [0,6]。日曜日を0とします。先行するゼロがあってもかまいません が、必須ではありません。 %W 10 進数で表した1年の中の週番号 (週の先頭は月曜日) です [0,53]。先行するゼロがあっても かまいませんが、必須ではありません。年の最初の月曜日より前にある日は週0とみなしま す。 %x ロケールの日付形式を使用した日付です。 %X ロケールの時刻形式を使用した時刻です。 %y 世紀内における年です [0,99]。先行するゼロがあってもかまいませんが、必須ではありませ ん。 (%C 指令の使用などにより) 世紀が指定されていない場合、69−99 の範囲の入力は 20 世 紀 (1900 年代) と想定されます。00−68 の範囲の入力は 21 世紀 (2000 年代) と想定されます。 %Y 世紀を含めた年です (例、1992)。 %% % に置き換えられています。 指令変更 E と O の修飾文字を使用して指令を変更することによって、通常の指令ではなく、代替の形式または仕様を使 用するよう指示することができます。現在のロケールに代替の形式または仕様がない場合は、通常の指令と同 じ動作になります。 %Ec ロケールの代替の日時表示形式です。 %EC ロケールの代替表示形式での年号 (時代) です。 %Ex ロケールの代替の日付表示形式です。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-517 strptime(3C) strptime(3C) %EX ロケールの代替の時刻表示形式です。 %Ey ロケールの代替表示形式での %EC からのオフセットです (年のみ)。 %EY 代替の完全な年表示形式です。 %Od ロケールの代替の数値記号を使用して表した月内の日にちです。先行するゼロがあってもかま いませんが、必須ではありません。 %Oe %Od と同じです。 %OH ロケールの代替の数値記号を使用して表した時間 (24 時) です。 %OI ロケールの代替の数値記号を使用して表した時間 (12 時) です。 %Om ロケールの代替の数値記号を使用して表した月です。 %OM ロケールの代替の数値記号を使用して表した分です。 %OS ロケールの代替の数値記号を使用して表した秒です。 %OU ロケールの代替の数値記号を使用して表した、1年の中の週番号 (週の先頭は日曜日) です。 %Ow ロケールの代替の数値記号を使用して表した曜日番号です (日曜日が0)。 %OW ロケールの代替の数値記号を使用して表した、1年の中の週番号 (週の先頭は月曜日) です。 %Oy ロケールの代替表示形式にある年 (%C からのオフセット) をロケールの代替の数値記号を使 用して表したものです。 空白文字で構成されている指令は、入力が空白文字以外の最初の文字 (走査されないで残ります) となるまで、 または文字がなくなるまで走査することによって実行されます。 一般の文字の指令は、バッファーから次の文字を走査することによって実行されます。バッファーから走査さ れた文字が指令を構成する文字と違っていると、指令は正常に実行せず、違っている文字と後に続く文字は走 査されないままで残ります。 %n、 %t、空白文字、または任意の組み合わせの一連の指令は、空白文字以外の最初の文字 (走査されないで 残ります) となるまで、または文字がなくなるまで走査することによって実行されます。 その他の変換指定は、次の指令と一致する文字を走査するまで、または文字がなくなるまで走査することに よって実行されます。次の指令と一致しない文字は、変換指定子と対応するロケール値と比べられます。一致 するものがあると、該当の tm 構造体のメンバーの値がロケール情報の値に設定されます。 buf 中の月名や週 名などの一致する項目の大文字と小文字は区別されません。一致するものがないと、 strptime() は正常に実行 せず、文字はそれ以上走査されません。32 ビット HP-UX において、指定された日付が time_t データ型で表さ れる最大時間 (Tuesday January 19 03:14:07 UTC, 2038) を超える場合、または 62 ビット HP-UX において、サ ポートされる最大日付 (Friday December 31 23:59:59 UTC, 9999) を超える場合、 strptime() は正常に実行せず、 ヌルポインターを返します。 Section 3-518 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 strptime(3C) strptime(3C) 多言語化対応 ロケール LC_NUMERIC カテゴリに、 %O 修飾子で使用できる代替記号 (alt_digit— localedef (4) 参照) が定義されてい る場合があります。 alt_digit 定義は alt_digits (LC_TIME) よりも優先されます。今後の HP-UX リリースで alt_digit のサポートが取り除かれる可能性があります。 LC_TIME カテゴリによって、上記に説明する指令に解釈される文字がロケールからのものであるかが決まり ます。 LC_CTYPE カテゴリによって、 format 内のバイトをシングルバイトとマルチバイトのどちらの文字として解 釈するかが決まります。 サポートされるコードセット シングルバイトとマルチバイトの文字コードセットがサポートされています。 戻り値 正常に終了すると、 strptime() は最後に解析した文字の後の文字を指すポインターを返します。そうでなけれ ば、ヌルポインターを返します。 例 次のプログラムセグメントは strptime() を使用して、文字列 (最初の引き数) を、2つ目の引き数に指定してい る形式に従った値に変換しています。 struct tm t; setlocale(LC_TIME, "en_US.iso88591"); strptime("1:04:23 PM on 10/6/92", "%I:%M:%S %p on %D", &t); 変換された値は、構造体に次のように保存されます。 t.tm_sec = 23 t.tm_min = 4 t.tm_hour = 13 t.tm_mday = 6 t.tm_mon = 9 t.tm_year = 92 t.tm_wday = 2 t.tm_yday = 279 t.tm_isdst = 1 著者 strptime() は、OSF および HP で開発されました。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-519 strptime(3C) strptime(3C) 参照 scanf(3S), strftime(3C), getdate(3C), ctime(3C), setlocale(3C), thread_safety(5) 標準準拠 strptime: XPG4 Section 3-520 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 strtoacl(3C) strtoacl(3C) 名称 strtoacl( ), strtoaclpatt( ), aclentrystart[ ] − 文字列形式の変換 構文 #include <acllib.h> int strtoacl( const char *string, int nentries, int maxentries, struct acl_entry *acl, uid_t fuid, gid_t fgid); int strtoaclpatt( const char *string, int maxentries, struct acl_entry_patt *acl); 廃止インタフェース int strtoacl_r( const char *string, int nentries, int maxentries, struct acl_entry *acl, uid_t fuid, gid_t fgid, char *entrystart[]); int strtoaclpatt_r( const char *string, int maxentries, struct acl_entry_patt *acl char *entrystart[]); 説明 strtoacl() は、厳密なシンボリック (文字列) 表現のアクセス制御リストを構造体形式に変換します。この関数 は、入力文字列を解析し、その妥当性を確認します。さらに文字列中のエントリーを変更内容として、すでに 存在している ACL に付け加えることもできます。 strtoaclpatt() は、シンボリック (文字列) 表現のアクセス制御リストパターンを構造体形式に変換します。この 関数は、入力文字列を解析し、その妥当性を確認します。 外部配列 aclentrystart[] は、上の2つのいずれかのルーチンが次に呼ばれるまで有効で、エラーの報告に用い HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-521 strtoacl(3C) strtoacl(3C) られます。以下の「エラー」の項を参照してください。 入力文字列として、「演算子形式」および「ショート形式」の ACL および ACL パターン (acl(5) の中で説明 されています) が使用できます。 string 中の最初の空白以外の文字が ( ならば、 ACL あるいは ACL パターン の場合はショート形式でなければなりません。それ以外の場合は演算子形式として解釈されます。 strtoacl() は、変換される文字列を指すポインターと、 ACL エントリーの配列 (acl[]) の先頭の要素を指すポイ ンターが必要です。この配列は、はじめは nentries で表示される個数 (0以上) の有効なエントリーを含んでい て、また maxentries で表示される個数までのエントリーを収容することが可能です。さらに strtoacl() は、 string 中の@文字との置換をするために、また acl[] 中の最終的なエントリー数を返すために、ファイルのユー ザー ID ( fuid) とグループ ID ( fgid) が必要です。 冗長なエントリー (@文字を処理した結果、同一のユーザー ID とグループ ID となったもの) は1つにまとめ られ、 acl[] 中には一意なエントリーが、登録された順序で入れられます。新しいエントリーがあるときは、 acl 配列の最後に付け加えられます。 strtoaclpatt( ) strtoaclpatt() は、 ACL の代わりに ACL パターンを処理する点が strtoacl() と異なります。すでに存在してい る最初の ACL の修正は無意味なので、サポートされていません。 ユーザー ID およびグループ ID がマッチするエントリーを1つにまとめることはしません。各エントリーの入 力は、返される配列中の1つのエントリーを与えます。 ユーザー ID およびグループ ID に置換される@文字 (acl(5) 参照) は、呼び出し時に与えた特定のユーザー名あ るいはグループ名ではなく、特別な値 (ACL_FILEOWNER あるいは ACL_FILEGROUP。これらは <acllib.h> 中で定義されています) に変換されます。したがって、各ファイルに対して ACL パターンを再解析するために strtoaclpatt() を呼び出す必要はありません。しかし ACL パターンを ACL と比較する場合は、呼び出し側でこ の特別な値を処理しなければなりません。 ユーザー名、グループ名、モード値にワイルドカードが使用できます。モード値に使用した場合、モード値に 使用した部分がないものとして扱われます。詳しくは acl(5) を参照してください。 strtoaclpatt() は strtoacl() とは異なった構造体を返します。 acl_entry_patt 構造体は、1つの mode 値ではな く、 onmode および offmode のマスクを持っています。 演算子形式の入力において、演算子は strtoaclpatt() には異なった効果を示します。 = onmode および offmode フィールド中のビットを、エントリー中のすでに存在しているビットと置 換して、あるいはこれより前にある演算子の指定を無視して、指定されたとおり設定します。 + onmode のビットを設定し、 offmode のビットを解除します。 − offmode のビットを設定し、 onmode のビットを解除します。 ショート形式の入力において、モードは演算子形式の = 演算子と同様に扱われます。 2つのルーチンとも、任意のユーザー ID およびグループ ID を表す % は、それぞれ ACL_NSUSER と Section 3-522 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 strtoacl(3C) strtoacl(3C) ACL_NSGROUP に変換されます。また strtoaclpatt() では、ユーザー ID およびグループ ID のワイルドカード * は、それぞれ ACL_ANYUSER と ACL_ANYGROUP に変換されます。これらの値は <acllib.h> の中で定義 されています。 エントリーは、 string 中どのような順序でもかまいません。 string は冗長なエントリーを含んでいてもよく、 また演算子形式では、 ACL エントリーのモードの修正 (厳密な形式の場合) あるいはモードビットの追加、削 除 ( パターンの場合) を行う + および − 演算子が冗長になっていてもかまいません。エントリーおよび修正 は、左から右へという順序で適用されます。 推奨される使用法 strtoacl() (strtoaclpatt()) を用いて新しい ACL (ACL パターン) 配列を構築するときは、必要な数の acl[] を定義 してください。これを strtoacl() (strtoaclpatt()) に渡すときには、 nentries に0を設定し (strtoacl() の場合だけ です)、 maxentries に acl[] の要素数を設定してください。 strtoacl() で、ファイルのすでに存在している ACL を修正する場合は、エントリーの可能な数の最大数 (NACLENTRIES です。 <sys/acl.h> 参照) だけ、 acl[] を定義してください。ファイルの ACL を読み取るため に getacl() (getacl(2) 参照) を呼び出し、またファイルの所有者とグループ ID を得るために stat() (stat(2) 参照) を呼び出します。そして、 maxentries に NACLENTRIES の値を設定して、現在のエントリー数、現在の ACL、および ID 値を strtoacl() に渡します。 strtoacl() が成功した場合、出力された ACL はすべての冗長部が解消されているため、問題なく setacl() (setacl(2) 参照) に渡すことができます。ただし、 strtoacl() と strtoaclpatt() はともにユーザー ID とグループ ID の妥当性を確認しないので、これらの値が無効なものである場合、 setacl() は失敗します。 効率化のための技法 通常 strtoacl() は、ユーザー名およびグループ名の@ を特定のユーザー ID およびグループ ID の値に置き換 え、冗長なエントリーをまとめます。したがって、 ACL を適用しようとする一連のファイルの各々に stat() お よび strtoacl() を用いるのが、時間はかかりますが最も簡単な方法です。 string の中に@文字がない場合、あるいは単に ACL をもう1つの別な ACL と比較する場合 (そして特別な値 自体を扱おうとする場合) は、 strtoacl() を1回呼び出すだけで十分で、各ファイルに対して stat() を呼び出す のは無意味です。この動作を行わせる場合、最初に fuid に ACL_FILEOWNER、 fgid に ACL_FILEGROUP を設定して strtoacl() を呼び出してください。ファイルを特定した fuid と fgid の値を渡して再びこの関数を呼 び出す必要があるのは、 acl[] 中の fuid と fgid に特別な値が設定されていて、かつ各ファイルに厳密な ACL を設定する必要があるときだけです。下の例の項を参照してください。 string の中に@があり、かつ acl[] を setacl() の呼び出しに使用しようとするときは、 ACL 文字列を解析するた めに各ファイルに対して strtoacl() を再び呼び出す必要があります。これは@で表された名前が特定の ID に置 き換えられないため、1回の実行ではすべての冗長なエントリーが結合されない可能性があるためです。この ことは2つの ACL の比較においても同様になります。その上、演算子形式の入力の演算子の情報は失われて しまうので、呼び出し側で後にエントリーを結合することはできません。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-523 strtoacl(3C) strtoacl(3C) 廃止インタフェース strtoacl_r() と strtoaclpatt_r() は、文字列形式をアクセス制御リスト (ACL) 構造体に変換します。 戻り値 strtoacl() (strtoaclpatt()) が成功すると、最終的な ACL (ACL パターン) のエントリーの数が返され、その値は常 に nentries (0) 以上です。 さらに strtoaclpatt() は、前後に空白を含んでいる可能性のある string の中から解析された、各パターンエント リーの先頭を指すために、グローバル配列 aclentrystart[] に値を設定します。この時設定されるのは、戻り値 より1個多いポインターです (決して NACLENTRIES + 1 個を超えません)。最後の有効な要素は、 string の末 尾の null 文字を指します。 strtoaclpatt() を呼び出した後、エントリーパターンの該当する入力文字列は、一時 的に string 中の次のエントリーパターンの先頭に null を挿入して、呼び出し側でエラーの報告のために使われ ます。 エラー エラーが起こった場合、 strtoacl() と strtoaclpatt() は負の値を返し、 acl の内容は不定です (おそらく内容は変 化しています)。この場合エラーの報告をわかりやすくするために、 aclentrystart[0] および aclentrystart[1] は それぞれ、解析中にエラーが起こったエントリーと次のエントリーの先頭を指すように設定されます。そのエ ントリーが ( で始まっていない場合、 aclentrystart[1] は aclentrystart[0] 以後の、次の null 文字あるいはカン マを指します。それ以外の場合は、次の null、あるいは次の ) に引き続く文字を指します。 エラーの場合に返される値は次のとおりです。 −1 構文エラー、ショート形式で、エントリーが ( で始まっていない場合 −2 構文エラー、ショート形式で、エントリーが ) で終っていない場合 −3 構文エラー、ユーザー名がドットで終っていない場合 −4 (strtoacl() のみ) 構文エラー、演算子形式の入力においてグループ名が演算子で終っていないか、 ショート形式の入力においてグループ名がカンマで終っていない場合 −5 構文エラー、ユーザー名が null の場合 −6 構文エラー、グループ名が null の場合 −7 無効なユーザー名 (/etc/passwd ファイル中にない、あるいは無効な番号) の場合 −8 無効なグループ名 (/etc/group ファイル中にない、あるいは無効な番号) の場合 −9 構文エラー、 0..7、 r、 w、 x、 - (ショート形式のみ)、 * (パターン中のみ)、 , (演算子形式でエ ントリーを終了させる)、あるいは ) (ショート形式でエントリーを終了させる) 以外の無効なモー ド文字の場合。もしくは 0..7 や * とともに他のモード文字がある場合 −10 最終的な ACL が maxentries 以上のエントリーになってしまいます。 Section 3-524 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 strtoacl(3C) strtoacl(3C) 例 次のコードの一部は、ACL の文字列を、ファイルの所有者として 103 という番号を fuid に使い、ファイルの グループとして 45 という番号を fgid に使った、エントリーの配列へ変換します。 #include <acllib.h> int nentries; struct acl_entry acl [NACLENTRIES]; if ((nentries = strtoacl (string, 0, NACLENTRIES, acl, 103, 45)) < 0) error (...); 次のコードは、 ../myfile ファイルに対する ACL, fuid, fgid を取得し、記述文字列を用いて ACL を修正し、さ らに ../myfile2 ファイルに対する ACL を新しいバージョンに変更します。 #include <sys/types.h> #include <sys/stat.h> #include <acllib.h> struct stat statbuf; int nentries; struct acl_entry acl [NACLENTRIES]; if (stat ("../myfile", & statbuf) < 0) error (...); if ((nentries = getacl ("../myfile", NACLENTRIES, acl)) < 0) error (...); if ((nentries = strtoacl (string, nentries, NACLENTRIES, acl, statbuf.st_uid, statbuf.st_gid)) < 0) { error (...); } if (setacl ("../myfile2", nentries, acl) < 0) error (...); 次のコードの一部は、 fuid と fgid の特別な値を用いて strtoacl() を呼び出して、それが acl[] 中に現れるかどう かをチェックします。 #include <acllib.h> int perfile = 0; /* need to stat() and reparse per file? */ int entry; HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-525 strtoacl(3C) strtoacl(3C) if ((nentries = strtoacl (string, 0, NACLENTRIES, acl, ACL_FILEOWNER, ACL_FILEGROUP)) < 0) { error (...); } for (entry = 0; entry < nentries; entry++) { if ((acl [entry] . uid == ACL_FILEOWNER) || (acl [entry] . gid == ACL_FILEGROUP)) { perfile = 1; break; } } 次のコードの一部は、文字列中の ACL パターンを、パターンエントリーの配列へ変換します。 #include <acllib.h> int nentries; struct acl_entry_patt acl [NACLENTRIES]; if ((nentries = strtoaclpatt (string, NACLENTRIES, acl)) < 0) error (...); for ループ中のコードの一部は、ファイルの ACL ( 変数名は a* です) のエントリーを、そのファイルのユー ザー ID およびグループ ID ( 変数名は f* です) を使用して、エントリーパターン ( 変数名は p*, onmask, offmask です) と比較します。 include <unistd.h> if (((puid == ACL_FILEOWNER) && (fuid != auid)) || ((puid != ACL_ANYUSER) && (puid != auid))) { continue; } if (((pgid == ACL_FILEGROUP) && (fgid != agid)) || ((pgid != ACL_ANYGROUP) && (pgid != agid))) { continue; } Section 3-526 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 strtoacl(3C) strtoacl(3C) if (((( amode) & MODEMASK & onmask ) != onmask) || (((˜ amode) & MODEMASK & offmask) != offmask)) { continue; } 警告 strtoacl_r() および strtoaclpatt_r() インタフェースは廃止され、現在では既存の DCE アプリケーションとの互 換性を保つためにだけサポートされています。新しいマルチスレッドアプリケーションでは、 strtoacl() および strtoaclpatt() を使用してください。 著者 strtoacl() および strtoaclpatt() は、HP で開発されました。 ファイル /etc/passwd /etc/group 参照 getacl(2), setacl(2), acltostr(3C), cpacl(3C), chownacl(3C), setaclentry(3C), acl(5), thread_safety(5) HP-UX 11i Version 2: August 2003 −7− Hewlett-Packard Company Section 3-527 strtod(3C) strtod(3C) 名称 strtod, strtof, strtold, strtow, strtoq, atof − 文字列を浮動小数点数に変換 構文 #include <stdlib.h> double strtod(const char *str, char **ptr); long double strtold(const char *str, char **ptr); double atof(const char *str); Itanium(R)ベース システムのみ float strtof(const char *str, char **ptr); extended strtow(const char *str, char **ptr); quad strtoq(const char *str, char **ptr); 説明 strtod() は、 str が指す文字列により示された値を倍精度の浮動小数点数として返します。文字列は、解釈不可 能な文字が検出されるまで (ctype(3C) の中の isspace() によって定義された先頭の空白文字は無視され) 解釈さ れます。変換が行われない場合0が返されます。 strtod() は、以下の順番で文字を解釈します。 1. 無視される「空白」文字からなるオプションの文字列 2. オプションの符号 次のいずれかが続きます。 3. 小数点キャラクタ ( オプション) を含む数字の文字列と、それに続く e または E ( オプション) と、それに続く符号または空白 (オプション) と、それに続く整数 4. INF または INFINITY (大文字小文字の区別なし) 5. NAN (大文字小文字の区別なし) 6. Itaniumベース システムの場合、 0x または 0X と、それに続く空でない 16 進数字列 (小数点キャ ラクタはオプション) と、それに続く p または P と、それに続く符号または空白 ( オプション) と、それに続く 10 進整数 小数点キャラクタは、ロードされた NLS 環境 (setlocale(3C) を参照) によって決まります。 setlocale() がうまく 呼び出されない場合、デフォルトの NLS 環境である"C" (lang(5) を参照) が使われます。デフォルトの環境 は、ピリオド (.) を小数点キャラクタとして指定します。 16 進数形式では、 p または P に続くオプションで符号が付く 10 進数は、2のべき乗数と解釈され、有効数字 部のスケーリングに使われます。 ptr の値が (char **)NULL でないとき、 * ptr が指す変数は、解釈を終了させた文字を指すように設定されま す。数値が生成されない場合、 ∗ptr に str が格納され、0が返されます。 Section 3-528 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strtod(3C) strtod(3C) atof(str) は strtod (str, (char **)NULL) と同等です。 strtold() は、 strtod() の long double 型バージョンで、 long double 型の結果を返します。 PA-RISC と Itanium ベース システムで、ユーザーが _LONG_DOUBLE_STRUCT を定義した場合、結果の型は long double でなく struct として宣言されます。 struct による宣言は廃止予定です。 Itaniumベース システムのみ strtof() は、 strtod() の float 型バージョンで、 float 型の結果を返します。 strtow() は、 strtod() の extended 型バージョンで、 extended 型の結果を返します。 strtoq() は、 strtold() と同等です。 多言語化対応 ロケール LC_NUMERIC カテゴリは、現在ロードされている NLS 環境内の小数点キャラクタの値を決定します。 アプリケーション使用法 Itaniumベース システムで strtow() または strtoq() を使用するには、 −fpwidetypes オプションを指定してコンパ イルしてください。 戻り値 正しい値がオーバーフローする場合、 strtod() は、値の符号に従って +/-HUGE_VAL (+/-INFINITY と同じ) を 返し、 errno に [ERANGE] を設定します。 正しい値が0でなく、 double 型の0でない値で表現するには絶対値が小さすぎる場合、 strtod() は0を返し、 errno に [ERANGE] を設定します。 Itaniumベース システムでは、入力パラメータ文字列を double に変換する ときにアンダーフロー例外が発生するときには、 strtod() は errno に [ERANGE] を設定します。 strtod() の入力パラメータ文字列が、(オプションの空白文字と符号の後で) INF (大文字小文字の区別なし) ま たは INFINITY ( 大文字小文字の区別なし ) である場合、 strtod() は、文字列で示される符号に従って +/-INFINITY を返します。 strtod() の入力パラメータ文字列が、(オプションの空白文字と符号の後で) NAN (大文字小文字の区別なし) で ある場合、 strtod() は、クワイエット NaN を返します。 Itaniumベース システムでは、これらの関数は、ISO/IEC C99 の仕様に従って、16 進数入力文字列と、有効数 字 36 桁までの 10 進数字列を正しく丸めます。 参照 ctype(3C), setlocale(3C), scanf(3S), strtol(3C), lang(5), thread_safety(5) 標準準拠 strtod(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, ANSI C atof(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-529 strtoimax(3C) strtoimax(3C) 名称 strtoimax( )、strtoumax( ) − 文字列から整数への変換 構文 #include <inttypes.h> intmax_t strtoimax(const char *str, char **ptr, int base); uintmax_t strtoumax(const char *str, char **ptr, int base); 説明 strtoimax() または strtoumax() は、 str が指す文字列を、 intmax_t または uintmax_t の表現にそれぞれ変換し ます。文字列は、基数と矛盾する文字が検出されるまでスキャンされます。先頭の「空白」文字 (ctype(3C) 内 の isspace() で定義されます) は無視されます。変換を実行できない場合は、ゼロが返されます。 base が2以上 36 以下である場合、この値は変換の基数として使用されます。省略可能な先頭符号の後に続く 先頭のゼロは無視されるほか、 base が 16 の場合は 0x または 0X も無視されます。 base がゼロの場合は、基数は文字列自体から判断されます。つまり、省略可能な先頭符号の後に続くものがゼ ロであれば8進数の変換を示し、 0x または 0X であれば 16 進数の変換を示します。それ以外の場合は、10 進 数の変換が行われます。 ptr の値が (char **)NULL でない場合は、スキャンの終了の原因となった文字を指すポインタが、 ptr が指す 場所に返されます。整数を作成できない場合は、 ptr が指す場所に str が設定され、ゼロが返されます。 戻り値 正常終了の場合、どちらの関数も変換した値があればそれを戻り値とします。 正しい値がオーバーフローを起こす場合は、次のようになります。 strtoimax() INTMAX_MAX または INTMAX_MIN (値の符号に基づきます) を返し、 errno を [ERANGE] に設定します。 strtoumax() UINTMAX_MAX を返し、 errno を [ERANGE] に設定します。 その他のエラーについてはすべてゼロが返され、 errno はそのエラーを示す値に設定されます。 エラー 以下のいずれかの条件が発生すると、 strtoimax() および strtoumax() は失敗し、 errno が設定されます。 [EINVAL] base の値がサポートされていません。 [ERANGE] 戻り値がオーバーフローを起こす恐れがあります。 著者 strtoimax() および strtoumax() は HP で開発されました。 Section 3-530 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strtoimax(3C) strtoimax(3C) 参照 ctype(3C)、 strtod(3C)、 strtol(3C)、 scanf(3S)、 thread_safety(5) 標準準拠 strtoimax(): C99 strtoumax(): C99 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-531 strtol(3C) strtol(3C) 名称 strtol( ), atol( ), atoi( ), strtoul( ), strtoll( ), strtoull( ) − 文字列を整数に変換 構文 #include <stdlib.h> long strtol(const char *str, char **ptr, int base); long long strtoll(const char *str, char **ptr, int base); long atol(const char *str); int atoi(const char *str); unsigned long strtoul(const char *str, char **ptr, int base); unsigned long long strtoull(const char *str, char **ptr, int base); 説明 strtol() または strtoul() は、 str が指す文字列を long int または unsigned long int 形式にそれぞれ変換します。 strtoll() または strtoull() は、 str が指す文字列を long long または unsigned long long 形式にそれぞれ変換しま す。文字列は、底の値と矛盾する文字が検出されるまで解釈されます。先頭の「空白」文字 (ctype(3C) 内の isspace() により定義) は無視されます。変換が行われない場合は、0が返されます。 引き数 base が、2以上 36 以下の場合、その値は変換用の底の値として用いられます。オプションの先頭符号 の後に続く先頭の0は無視され、 base が 16 のとき、 0x や 0X は無視されます。 base が0の場合、文字列の内容により底が決まります。つまり、オプションの先頭符号の後に続くものが0で あれば8進数への変換が行われ、 0x や 0X であれば 16 進数への変換が行われます。それ以外なら 10 進数へ の変換が行われます。 ptr の値が (char **)NULL でない場合、解釈を終了させる文字を指すポインターを ptr が指す位置に返しま す。文字列から整数が生成されない場合、 ptr が指す位置に str が設定され、ゼロが返されます。 atol(str) は、 strtol(str, (char **)NULL, 10) と同様です。 atoi(str) は、 int strtol(str, (char **)NULL, 10) と同様です。 戻り値 変換が正常に終了すれば、すべての関数は変換した値を返します。 正しい値がオーバーフローを起こした場合、 strtol() は (値の符号により) LONG_MAX または LONG_MIN を返し、 errno には [ERANGE] が格納 されます。 また、 strtoll() strtoul() は ULONG_MAX を返し、 errno には [ERANGE] が格納されます。 は ( 値の符号により ) LONG_LONG_MAX または LONG_LONG_MIN を返し、 errno には [ERANGE] が格納されます。 Section 3-532 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 strtol(3C) strtol(3C) strtoull() は ULONG_LONG_MAX を返し、 errno に [ERANGE] が格納されます。 atol() と atoi() は両方ともオーバーフロー条件を無視します。 その他のすべてのエラーに対しては0が返され、 errno にはエラーを示す値が格納されます。 エラー 次の条件のいずれかが起こると、 strtol() 、 strtoul() 、 strtoll() 、または strtoull() はエラーを引き起こし、 errno に以下の左側の値が格納されます。 [EINVAL] base の値がサポートされていない場合 [ERANGE] 返される値がオーバーフローを引き起こしている場合 著者 これらのインタフェースは、OSF と HP で開発されました。 参照 ctype(3C), strtod(3C), strtoimax(3C), scanf(3S), thread_safety(5) 標準準拠 strtol(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, ANSI C atoi(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C atol(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C strtoul(): AES, SVID3, XPG4, ANSI C strtoll(): C99 strtoull(): C99 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-533 subpad(3X) subpad(3X) 名称 subpad — 拡張パッド管理関数 構文 #include <curses.h> WINDOW *subpad(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x); 説明 subpad() 関数は、nlines 行、ncols カラムのパッド内にサブウィンドウを作成します。画面座標を使う subwin() とは異なり、ウィンドウはパッド上の位置 (begin_y、begin_x) に作成されます。このウィンドウは、ウィンド ウ orig の中央に作成されるので、一方のウィンドウに変更を行うと、両方のウィンドウが影響を受けます。 戻り値 subpad() 関数は、このパッドデータ構造へのポインターを返します。そうでなければ、ヌルポインターを返し ます。 エラー エラーは定義されていません。 アプリケーション使用法 パッドをリフレッシュするには、 wrefresh() ではなく、 prefresh() または pnoutrefresh() を呼び出します。 WINDOWS からのパッドを使うためにコードを移植する場合には、これらの関数には表示するパッドの部分お よびこの表示のために使用される画面上の位置を指定するために追加の引き数が必要であることに注意してく ださい。 サブウィンドウおよびその親パッドは、そのパッド内の文字を表現するメモリーを共有する可能性があります が、そのパッド内で何が変わったかについてのステータス情報を共有する必要はありません。したがって、 パッド内のサブウィンドウを変更した後には、 prefresh() を呼び出す前にそのパッドに対して touchwin() また は touchline() を呼び出すことが必要な場合があります。 参照 derwin(), doupdate(), is_linetouched(), newpad(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-534 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 swab(3C) swab(3C) 名称 swab( ) − バイトのスワップ 構文 #include <unistd.h> void swab(const void *from, void *to, ssize_t nbytes); 説明 swab() は、 from が指す nbytes バイトを、隣り合った奇数バイトと偶数バイトを交換して、 to が指す配列にコ ピーします。この関数は、バイトのスワップを行うマシンとバイトのスワップを行わないマシンの間でバイナ リデータを移植するのに便利です。 nbytes は負でない偶数にしてください。 nbytes が正の奇数のとき、 swab() は nbytes−1 を代わりに使います。 nbytes が負であれば、 swab() は何も行いません。 参照 thread_safety(5) 標準準拠 swab(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-535 syncok(3X) syncok(3X) 名称 syncok, wcursyncup, wsyncdown, wsyncup — ウィンドウとその親ウィンドウまたは子ウィンドウとの同期 構文 #include <curses.h> int syncok(WINDOW *win, bool bf); void wcursyncup(WINDOW *win); void wsyncdown(WINDOW *win); void wsyncup(WINDOW *win); 説明 syncok() 関数は、指定したウィンドウ内に変更があるときはいつでもそのウィンドウの上位ウィンドウがすべ て暗黙にタッチされるかどうかを調べます。 bf が TRUE の場合には、このような暗黙のタッチが発生してい ます。 bf が FALSE の場合には、このような暗黙のタッチは発生していません。初期状態は FALSE です。 wcursyncup() 関数は、win の現在のカーソルの位置を示すように、win の上位ウィンドウの現在のカーソル位 置をアップデートします。 wsyncdown() 関数は、上位ウィンドウのいずれかがタッチされると、win をタッチします。 wsyncup() 関数は、win のすべての上位ウィンドウを無条件にタッチします。 戻り値 正常に終了すると、 syncok() は OK を返します。そうでなければ ERR を返します。 ほかの関数は値を返しません。 エラー エラーは定義されていません。 アプリケーション使用法 アプリケーションが wsyncdown() を呼び出すことはほとんどありません。その理由は、この関数はすべてのリ フレッシュ操作によって呼び出されるからです。 参照 doupdate(), is_linetouched(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-536 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 syslog(3C) syslog(3C) 名称 syslog( ), openlog( ), closelog( ), setlogmask( ) − システムログの制御 構文 #include <syslog.h> void syslog(int priority, const char *message, ...); void openlog(const char *ident, int logopt, int facility); void closelog(void); int setlogmask(int maskpri); 特記事項 ANSI C では、", ..." は可変長の引き数リストを表します。ここに指定する任意の [または必須の] メンバーは、 コメント (/* */) に記述しておきます。 説明 syslog() syslogd (syslogd(1M) を参照) が保存しているシステムログにメッセージを書き込みま す。メッセージには、優先順位を表す priority のタグが付いています。 %m が、 errno の現在の値を伴ったエラーメッセージで置換されている点を除いて、 message は printf (3S) 形式の文字列と同様です。必要であれば、改行文字が追加されます。 このメッセージは、 syslogd によって記録され、システムコンソール、ログファイ ル、選択されたユーザーの端末に書き込まれ、また、適切な他のホスト上の syslogd に転送されます。 priority は、 level および facility の論理 OR としてコード化されます。 level は、メッ セージの緊急度を示し、 facility は、メッセージを生成するサブシステムを示しま す。 facility を priority 内で明示的にコード化できます。また、デフォルトの facility は、 openlog() (以下を参照) によって設定できます。 level は、以下に示す順序が与えられたリストから選ばれます。 LOG_EMERG パニック状態。通常すべてのユーザーにブロードキャストされ ます。 HP-UX 11i Version 2: August 2003 LOG_ALERT システムデータベースの破壊など、ただちに修復が必要な状態 LOG_CRIT ハードデバイスのエラーなど、危険な状態 LOG_ERR エラー LOG_WARNING 警告メッセージ LOG_NOTICE エラー状態ではないが、特別な取扱いが必要な状態 −1− Hewlett-Packard Company Section 3-537 syslog(3C) syslog(3C) LOG_INFO LOG_DEBUG 通知メッセージ 通常、プログラムのデバッグ時のみに使う情報を含むメッセー ジ syslog() は、 level が設定されていないメッセージは記録しません。 syslog() がメッセージを syslogd に渡せない場合、 LOG_CONS オプションが設定され ていれば ( 以下を参照 ) syslog() は /dev/console 上にメッセージの書き込みを試みま す。 openlog() 特別な処理が必要な場合、 openlog() を呼び出してログファイルを初期化することが できます。 ident は、すべてのメッセージの先頭に来る文字列です。 logopt は、ログ オプションを示す、論理 OR が施されたビットマスクです。 logopt の値は、次のとお りです。 LOG_PID 各メッセージとともにプロセス ID を記録します。特定のデー モンを識別するのに使います。 LOG_CONS メッセージを syslogd に送信できないとき、強制的にメッセー ジをコンソールに書き込みます。このオプションは、 syslog() がコンソールをオープンする前に分岐するため、制御ターミナ ルを持たないデーモンプロセスで安全に使えます。 LOG_NDELAY syslogd との接続をただちにオープンします。通常、このオー プンは、最初のメッセージが記録されてから行われます。ファ イル記述子の割当ての順序を管理する必要のあるプログラムで 使います。 LOG_NOWAIT 分岐した子プロセスがコンソール上にメッセージを記録するの を待ちません。このオプションは、 SIGCLD を使って子プロ セスの終了の通知を可能にするプロセスで使ってください。そ れ以外のプロセスでこのプロセスを使うと、子プロセスの終了 状態がすでに回収されているとき、子の待ち合わせを syslog() がブロックすることがあります。 syslog() によって記録され、明示的機能がコード化されていないすべてのメッセージ にはデフォルトの機能が割り当てられますが、 facility はこのデフォルト機能のコー ド化を行います。 LOG_KERN カーネルによって作成されたメッセージ。このメッセージは、 どのユーザープロセスでも作成できません。 LOG_USER ランダムなユーザープロセスによって作成されたメッセージ。 何も指定がない場合は、これがデフォルトの機能識別子となり Section 3-538 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 syslog(3C) syslog(3C) ます。 LOG_MAIL メールシステム LOG_DAEMON inetd(1M), ftpd(1M) などのシステムデーモン LOG_AUTH login(1), su(1), getty(1M) などの認証システム LOG_SYSLOG syslogd デーモンによって内部的に作成されたメッセージ LOG_LPR lp(1), lpsched(1M) などのラインプリンター スプーリングシステ ム LOG_NEWS news システムによって作成されたメッセージ LOG_UUCP UUCP システムによって作成されたメッセージ LOG_CRON CRON デーモンによって作成されたメッセージ LOG_LOCAL0 ロー カ ル 使 用 の た め の 予 備。 LOG_LOCAL1 から LOG_LOCAL7 も同様です。 facility と level では、 syslogd メッセージの記録にコード化されたコードを使用しま す。 facility と level のコード化されたコードは、次のとおりです。 LOG_KERN A LOG_EMERG LOG_USER B LOG_ALERT LOG_MAIL C LOG_CRIT LOG_DAEMON D LOG_AUTH E LOG_NEWS H LOG_UUCP I LOG_CRON J LOCAL0-7 closelog() setlogmask() G 1 2 LOG_ERR 3 LOG_WARNING 4 LOG_SYSLOG F LOG_LPR 0 LOG_NOTICE 5 LOG_INFO 6 LOG_DEBUG 7 Q-X ログファイルをクローズします。 ログ優先順位マスクを maskpri に設定し、それ以前のマスクを返します。優先順位が maskpri 内に設定されていない syslog() への呼び出しは拒否されます。個々の優先順位 である pri に対するマスクは、 LOG_MASK( pri) マクロによって計算され、 toppri ま でのすべての優先順位に対するマスクは LOG_UPTO(toppri) によって指定されます。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-539 syslog(3C) syslog(3C) デフォルトでは、優先順位はすべて記録されます。 エラー 次の条件のいずれかが起こると、 syslog はエラーを引き起こします。 [EAGAIN] 名前付きパイプ /dev/log が書き込み保護されている。 [ENOENT] 名前付きパイプ /dev/log が正常にオープンされない。 例 who により、いくつかの予期しない重大なエラーについて、メッセージを記録します。 syslog(LOG_ALERT, "who: internal error 23"); ftpd は、 openlog() を呼び出して ftpd のプロセス ID を記録し、必要であればコンソールに記録し、さらに daemon の機能名に記録することを指示します。 openlog("ftpd", LOG_PID|LOG_CONS, LOG_DAEMON); LOG_EMERG から LOG_ERR までの優先順位が持つメッセージを記録するように指示します。 setlogmask(LOG_UPTO(LOG_ERR)); 接続の情報を記録するための通常の syslog() の呼び出し方法です。 syslog(LOG_INFO, "Connection from host %s", CallingHost); 機能が openlog() によって設定されていない場合、 LOG_USER がデフォルトになります。 このメッセージに対する機能を明示的に設定します。 syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m"); 警告 syslog() への呼び出しは、システムログ デーモン (syslogd(1M) 参照) が実行されていない場合無効になりま す。 openlog() は、内部で ident 文字列をコピーしたり格納したりはせず、文字ポインターのみ格納します。そ れゆえ、プログラマは、ログファイルがクローズするまで ident 引き数が正しい文字列を指しているかの確認 を行う必要があります。 著者 syslog() は、カリフォルニア大学バークレイ校で開発されました。 参照 logger(1), syslogd(1M), thread_safety(5) Section 3-540 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 system(3S) system(3S) 名称 system( ) − シェルコマンドの発行 構文 #include <stdlib.h> int system(const char *command); 説明 system() は、 command の指す文字列で指定されるコマンドを実行します。実行されるコマンドの環境は、 fork() を使って子プロセスを作ります ( fork(2) 参照)。その子プロセスは、以下のような execl() コールによっ て (exec(2) 参照) sh-posix(1) ユーティリティを実行したときと同様になります。 execl("/usr/bin/sh", "sh", "−c", command, 0); system() はコマンドの終了を待っている間、 SIGINT と SIGQUIT シグナルを無視し、 SIGCHLD シグナルを ブロックします。これによりアプリケーションを終了させようとするシグナルを見逃してしまうおそれがある ときは、 system() からの戻り値を調べます。コマンドがシグナルの受信により終了した場合にはアプリケー ションにとって適当な動作を行うようにしてください。 system() は、それ自体が作るプロセスを除いて、呼び出したプロセスの子プロセスの終了ステータスに影響を 及ぼしません。 system() は、子プロセスが終了するまで戻りません。 アプリケーション使用法 system() の戻り値が −1 でない場合、その値は <sys/wait.h> 中のマクロによって解読できます。また、このマク ロは <stdlib.h> 中にもあるため便利です。 system() は子プロセスの終了を待っている間、 SIGINT と SIGQUIT を無視し SIGCHLD をブロックするの で、実行されるコマンドでのシグナルの取扱いは、 fork(2) と exec(2) に記されているとおりになります。たと えば SIGINT シグナルが、受信されるべきシグナルとして設定されているか、あるいは SIG_DFL として設定 されている場合、 system() が呼び出されると、子プロセスはその SIGINT の取扱いを SIG_DFL に設定して起 動します。 親プロセス中で SIGINT と SIGQUIT を無視すると、実行されるコマンドがこのいずれかのシグナルを無視あ るいは受信したときの、対等関係の問題 (たとえば同一のターミナルから2つのプロセスが読み取られるなど) が防げます。 戻り値 command がnullの場合、 system() は0でない値を返します。 command がnullでない場合、 system() はコマンド言語インタプリタの終了ステータスを wait(2) で規定される 形式で返します。コマンド言語インタプリタの終了ステータスは、 sh-posix(1) に対して規定されているものと ほぼ同様です。ただし、子プロセスを作成した後にエラーによりコマンド言語インタプリタが実行できなかっ たときの system() からの戻り値は、 _exit(127) を使ってインタプリタを終了したときと同様になります。子プ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-541 system(3S) system(3S) ロセスが作成できないとき、あるいはコマンド言語インタプリタの終了ステータスが得られないとき、 system() は −1 を返しそのエラーを示す errno を設定します。 診断 system() は、 string を実行するために、 /usr/bin/sh を exec() する子プロセスをfork します。 fork が失敗した場 合、 system() は −1 を返し errno を設定します。 execが失敗した場合、子プロセスは exit(127) を呼び出して終 了しますが、 system() は、その子プロセスの終了を待っていた関数 waitpid() (wait(2) 参照) から返ってくるス テータス値を呼び出し元プロセスに返します。 エラー エラーが発生すると、 system() は fork(2) に記述されている値を errno に設定します。 ファイル /usr/bin/sh 参照 sh(1), fork(2), exec(2), wait(2), thread_safety(5) 標準準拠 system(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2, ANSI C Section 3-542 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tan(3M) tan(3M) 名称 tan( ), tanf( ), tanl( ), tanw( ), tanq( ) − 正接関数 構文 #include <math.h> double tan(double x); float tanf(float x); Itanium(R)ベース システムのみ long double tanl(long double x); extended tanw(extended x); quad tanq(quad x); 説明 tan() は x の正接を返します (x の単位はラジアン)。 PA-RISC システムでは、 x が0から遠く離れていると、 tan() の精度が失われることがあります。 tanf() は、 tan() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ tanl() は、 tan() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返しま す。 tanw() は、 tan() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 tanq() は、HP-UX システムでは tanl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで tanw() または tanq() を使うには、 −fpwidetypes オプションも指定してコンパイルし てください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。詳細について は、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 PA-RISC のみ 関数 tan() および tanf() のミリコードバージョンが提供されています。数学ライブラリ関数のミリコードバー ジョンは、通常は標準ライブラリのものより処理が高速です。これらのバージョンを使用するには、 +Olibcalls または +Oaggressive の最適化オプションを指定して、プログラムをコンパイルしてください。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-543 tan(3M) tan(3M) 特殊な場合に、ミリコードバージョンは、その標準ライブラリと同じ値を返します (「戻り値」の項を参照)。 戻り値 tan(±0) は ±0 を返します。 x が ±INFINITY の場合、 tan() は NaN を返し、無効例外が発生します。 x が NaN の場合、 tan() は NaN を返します。 tan() で他の例外が発生しないときに、不正確例外が発生するかどうかは規定されていません。 エラー エラーは、定義されていません。 参照 atan(3M), atan(3M), atan2(3M), ctan(3M), tand(3M), tan(3M), math(5) 標準準拠 tan() : SVID3, XPG4.2, ANSI C, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) tanf(), tanl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-544 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tand(3M) tand(3M) 名称 tand( ), tandf( ), tandl( ), tandw( ), tandq( ) − 度で指定した引き数の正接関数 構文 #include <math.h> double tand(double x); float tandf(float x); Itanium(R)ベース システムのみ long double tandl(long double x); extended tandw(extended x); quad tandq(quad x); 説明 tand() は x の正接を返します (x を度で指定)。 PA-RISC システムでは、 x が0から遠く離れていると、 tand() の精度が失われることがあります。 tandf() は、 tand() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ tandl() は、 tand() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返し ます。 tandw() は、 tand() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 tandq() は、HP-UX システムでは tandl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで tandw() または tandq() を使うには、 −fpwidetypes オプションも指定してコンパイル してください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 tand(±0) は ±0 を返します。 x が ±INFINITY の場合、 tand() は NaN を返し、無効例外が発生します。 x が NaN の場合、 tand() は NaN を返します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-545 tand(3M) tand(3M) エラー エラーは、定義されていません。 参照 acosd(3M), asind(3M), atand(3M), atan2d(3M), cosd(3M), sincosd(3M), sind(3M), tan(3M), math(5) 標準準拠 これらの関数は、どの標準にも規定されていません。 Section 3-546 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tanh(3M) tanh(3M) 名称 tanh( ), tanhf( ), tanhl( ), tanhw( ), tanhq( ) − 双曲線正接関数 構文 #include <math.h> double tanh(double x); float tanhf(float x); Itanium(R)ベース システムのみ long double tanhl(long double x); extended tanhw(extended x); quad tanhq(quad x); 説明 tanh() は、 x の双曲線正接を返します。 tanhf() は、 tanh() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 Itaniumベース システムのみ tanhl() は、 tanh() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返し ます。 tanhw() は、 tanh() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返します。 tanhq() は、HP-UX システムでは tanhl() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで tanhw() または tanhq() を使うには、 −fpwidetypes オプションも指定してコンパイル してください。 これらの関数を使用するには、プログラムに <math.h> がインクルードされていることを確認した後、コンパ イラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 tanh(±0) は returns ±0 を返します。 x が ±INFINITY の場合、 tanh() はそれぞれ ±1.0 を返します。 x が NaN の場合、 tanh() は NaN を返します。 tanh() で不正確例外が発生するかどうかは規定されていません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-547 tanh(3M) tanh(3M) エラー エラーは、定義されていません。 参照 atanh(3M), cosh(3M), ctanh(3M), sinh(3M), math(5) 標準準拠 tanh() : SVID3, XPG4.2, ANSI C, ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) tanhf(), tanhl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) Section 3-548 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tcattribute(3C) tcattribute(3C) 名称 tcgetattr( ), tcsetattr( ) − tty デバイスの制御 構文 #include <termios.h> int tcgetattr(int fildes, struct termios *termios_p); int tcsetattr( int fildes, int optional_actions, const struct termios *termios_p ); 説明 tcgetattr() は、 fildes に対応するパラメータを取得し、 termios_p で参照される termios 構造体に格納されま す。ターミナルデバイスが分離ボーレートをサポートしていない場合、 termios 構造体中の入力ボーレートに は0が設定されます。この関数はバックグランドプロセスから実行できます (termio(7) を参照)。ただし、取得 したターミナルの属性は、その後フォアグランドプロセスによって変更されている可能性があるので注意が必 要です。 tcsetattr() は、 fildes に対応するパラメータを (利用できない下層ハードウェアからのサポートが必要でない限 り)、 termios_p で参照される termios 構造体によって以下のように設定します。 • • optional_actions が TCSANOW の場合、ただちに変更が行われます。 optional_actions が TCSADRAIN の場合、 fildes へ書き込まれた出力がすべて送出された後変更が行 われます。 • optional_actions が TCSAFLUSH の場合、 fildes へ書き込まれた出力がすべて送出された後変更が 行われ、また受信した後まだ読み取られていない入力を破棄します。 戻り値 正常終了した場合、0が返されます。失敗した場合 −1 を返し、そのエラーを示す errno が設定されます。 エラー tcgetattr() と tcsetattr() は、次の条件のいずれかのとき、エラーとなります。 [EBADF] [EINVAL] fildes が有効なファイル記述子ではない場合 optional_actions 引き数が正しい値ではない場合または tcsetattr() の要求がまったく実行できな かった場合 [ENOTTY] fildes に対応するファイルがターミナルではない場合 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-549 tcattribute(3C) tcattribute(3C) 警告 tcsetattr() は、要求をできるだけ完全に実行しようとします。しかし、使用されるハードウェアが、指定可能 な c_cflag の値をすべてサポートしているとは限りません。要求が一部でも実行できる場合は、サポートされて いる c_cflag の値が設定され、ハードウェアがサポートしていない値は無視されます。そして、tcsetattr() が正 常に実行されます。要求がまったく実行できない場合は、tcsetattr() が実行できず、errno が [EINVAL] に設定 されます。 入出力での分離ボーレートをサポートしていないハードウェアに対しては、異った入出力ボーレートを設定し ようとしても、効果がありません。 tcgetattr() は常に、実際にハードウェアに設定されている値を返します。入出力での分離ボーレートをサポー トしていないハードウェアに対しては、tcgetattr() は入力ボーレートの値としてゼロを返します。 参照 cfspeed(3C), tccontrol(3C), thread_safety(5), termio(7) 標準準拠 tcgetattr(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 tcsetattr(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 Section 3-550 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tccontrol(3C) tccontrol(3C) 名称 tcsendbreak( ), tcdrain( ), tcflush( ), tcflow( ) − tty 回線制御関数 構文 #include <termios.h> int tcsendbreak(int fildes, int duration); int tcdrain(int fildes); int tcflush(int fildes, int queue_selector); int tcflow(int fildes, int action); 説明 ターミナルが非同期のシリアルデータ転送を行っている場合、 tcsendbreak() は0値ビットの連続ストリームを 指定した時間送出します。 duration が0の場合、最低 0.25 秒間、ただし 0.5 秒を超えない範囲で0値ビットを 送出します。 duration が0以外の場合、0値ビットは送出されません。すべての HP-UX のインプリメンテー ションでは duration は無視されます。 tcdrain() は、 fildes へ書き込まれた出力データがすべて送出されるまで待機します。 tcflush() は、以下のような queue_selector の値に従って、 fildes へ書き込んだがまだ送出されていないデータ や、受信したもののまだ読み取られていないデータを破棄します。 • queue_selector が TCIFLUSH の場合、受信後まだ読み取られていないデータを消去します。 • queue_selector が TCOFLUSH の場合、書き込み後未送出のデータを消去します。 • queue_selector が TCIOFLUSH の場合、受信後読み取られていないデータ、および書き込み後未送 出のデータをともに消去します。 tcflow() は、以下のような action の値に従って、 fildes へのデータの送出や、 fildes からのデータの受信を中断 します。 • action が TCOOFF の場合、出力が中断されます。 • action が TCOON の場合、中断されている出力が再開されます。 • action が TCIOFF の場合、システムへのデータ送出を停止させる STOP 文字を、ターミナルに送出 します。 • action が TCION の場合、システムへのデータ転送を開始させる START 文字を、ターミナルに送出 します。 戻り値 成功した場合0が返されます。そうでない場合 −1 を返し、そのエラーを示す errno が設定されます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-551 tccontrol(3C) tccontrol(3C) エラー これらの関数は、以下のような場合、エラーとなります。 [EBADF] fildes が有効なファイル記述子ではない場合 [EINTR] tcdrain() の実行中にシグナルを受信した場合 [EINVAL] queue_selector または action の引き数が正しい値ではない場合 [ENOTTY] fildes が指すファイルがターミナルではない場合 参照 tcattribute(3C), tccontrol(3C), thread_safety(5), termio(7) 標準準拠 tcdrain(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 tcflow(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 tcflush(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 tcsendbreak(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 Section 3-552 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 tcgetpgrp(3C) tcgetpgrp(3C) 名称 tcgetpgrp( ) − フォアグラウンド プロセスグループ ID の取得 構文 #include <unistd.h> pid_t tcgetpgrp(int fildes); 説明 tcgetpgrp() は、 fildes で参照されるターミナルのフォアグラウンド プロセスグループのプロセスグループ ID の値を返します。 tcgetpgrp() はバックグラウンド プロセスグループのメンバーであるプロセスから実行する ことができます (termio(7) 参照)。ただし取得情報は、その後フォアグラウンド プロセスグループのメンバーで あるプロセスによって変更されている可能性があるので注意が必要です。 戻り値 成功した場合、 tcgetpgrp() は、 fildes で参照されるターミナルのフォアグラウンド プロセスグループのプロセ スグループ ID の値を返します。そうでない場合、 tcgetpgrp() は −1 を返し、そのエラーを示す値を errno に 設定します。 エラー tcgetpgrp() は、次の条件のいずれかのとき、エラーとなります。 [EACCES] fildes が示すファイルは呼び出し元プロセスの制御ターミナルだが、制御ターミナル に対するフォアグラウンド プロセスグループが定義されていない場合 [EBADF] [ENOTTY] fildes が有効なファイル記述子ではない場合 fildes が示すファイルが制御ターミナルでないか、呼び出し元プロセスが制御ターミ ナルを持っていない場合 警告 制御ターミナルがフォアグラウンド プロセスグループを持っていないときに返される [EACCES] エラーは、 POSIX 標準化の過程の中で、将来のリリースではなくなる可能性があります。したがって移植可能なアプリ ケーションのためには、このエラー状態に依存しないようにすべきです。 参照 setpgid(2), setsid(2), tcsetpgrp(3C), thread_safety(5), termio(7) 標準準拠 tcgetpgrp(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-553 tcgetsid(3C) tcgetsid(3C) 名称 tcgetsid() − ターミナルセッション ID の入手 構文 #include <termios.h> pid_t tcgetsid (int fildes); 説明 tcgetsid() 関数は、 fildes で参照される端末のフォアグラウンドプロセスのセッション ID を返します。バック グラウンド プロセスグループのメンバーであるプロセスから tcgetsid() を使用できます (termio(7) を参照)。 戻り値 正常に終了すると、 tcgetsid() は fildes で参照される端末のフォアグラウンドプロセスのセッション ID を返し ます。そうでなければ、 tcgetsid() は −1 の値を返し、 errno を該当のエラーに設定します。 エラー tcgetsid() 関数は、正常に動作しなかった場合に、 errno (errno(2) を参照) を以下のいずれかの値に設定しま す。 [EACCES] fildes と対応するファイルは呼び出しプロセスの制御ターミナルですが、その制御 ターミナルにはフォアグラウンド プロセスグループが定義されていません。 [EBADF] [ENOTTY] fildes が有効なファイル記述子ではありません。 fildes と対応するファイルが制御ターミナルではありません。または、呼び出しプロ セスに制御ターミナルがありません。 参照 getsid(2), setsid(2), tcgetpgrp(3C), thread_safety(5) Section 3-554 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 tcsetpgrp(3C) tcsetpgrp(3C) 名称 tcsetpgrp( ) − フォアグラウンド プロセスグループ ID の設定 構文 #include <unistd.h> int tcsetpgrp(int fildes, pid_t pgrp_id); 説明 呼び出し元プロセスが制御ターミナルを持っている場合、 tcsetpgrp() は、 fildes で参照されるターミナルの フォアグラウンド プロセスグループ ID を pgrp_id に設定します。 fildes に対応するファイルは呼び出し元の制 御ターミナルでなければなりません。また、制御ターミナルは呼び出し元プロセスのセッションと現時点で対 応している必要があります。 pgrp_id の値は、呼び出し元プロセスと同じセッション内のプロセスのプロセス グループ ID の1つと一致しなければなりません。 戻り値 正常終了すると、 tcsetpgrp() は0を返します。失敗すると、 tcsetpgrp() は −1 を返し、そのエラーを示す errno を設定します。 エラー tcsetpgrp() は、次の条件のいずれかのとき、エラーとなります。 [EBADF] fildes が有効なファイル記述子でない場合 [EINVAL] pgrp_id 引き数の値が無効である場合 [ENOTTY] 呼び出し元プロセスが制御ターミナルを持っていないか、 fildes が示すファイルが制 御ターミナルではない、あるいは制御ターミナルがすでに呼び出し元プロセスのセッ ションに対応していない場合 [EPERM] pgrp_id の値は有効だが、呼び出し元プロセスと同じセッション内のプロセスのプロ セスグループ ID と一致しない場合 参照 setpgid(2), setsid(2), tcgetpgrp(3C), thread_safety(5), termio(7) 標準準拠 tcsetpgrp(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-555 termattrs(3X) termattrs(3X) 名称 termattrs, term_attrs — サポートされている端末ビデオ属性の取得 構文 #include <curses.h> chtype termattrs(void); attr_t term_attrs(void); 説明 termattrs() 関数は、現在の端末のビデオ属性を抽出します。これらの属性は、 chtype データ型によってサポー トされます。 term_attrs() 関数は、現在の端末のビデオ属性を抽出します。これらの属性は、 cchar_t データ型に対してサ ポートされます。 戻り値 termattrs() 関数は、端末でサポートされているすべてのビデオ属性の A_ 値の論理 OR を返します。 term_attrs() 関数は、端末でサポートされているすべてのビデオ属性の WA_ 値の論理和を返します。 エラー エラーは定義されていません。 参照 attroff(3X), attr_get(3X), curses_intro(3X) の 「属性」の項, <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-556 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 termcap(3X) termcap(3X) 廃止予定 名称 termcap: tgetent(), tgetflag(), tgetnum(), tgetstr(), tgoto(), tputs() − /usr/share/lib/termcap にあるアクセスルーチンのエ ミュレート 構文 #include <curses.h> int tgetent(char *bp, const char *name); int tgetnum(const char *id); int tgetflag(const char *id); char *tgetstr(const char *id, char **area); char *tgoto(char *cm, int destcol, int destline); int tputs(char *cp, int affcnt, int (*outc)(int)); 説明 上記の関数は、コンパイルされたターミナル機能データベースから機能を取り出して使います (terminfo(4) を 参照)。これらの関数は、エミュレーションルーチンです。 tgetent() ターミナル名 name に対するコンパイルされたエントリーを取り出し、プログラマが アクセス可能なバッファーに代入します。以前の termcap ルーチンと違って、すべて の機能文字列 (カーソルのアドレス情報およびカーソルのパディング情報は除く) は、 tgetent() から値が返されるときにはすでに内部でコンパイルされ保存されています。 バッファーポインター bp は、エミュレーションでは必要ないので無視されます。意 味のある情報を示すとは限りません。 tgetent() は、 terminfo ディレクトリにアクセス できない場合、またはターミナル名 name に対する機能ファイルがない場合は −1、問 題がない場合は0を返します。環境変数 TERMINFO が設定されている場合、 tgetent() はまず TERMINFO/?/name (? の所には name の先頭の文字が入ります) を調 べ、そのファイルがアクセス不可能なら /usr/share/lib/terminfo/?/name を調べます。 tgetnum() 機能idである id の数値を取り出し、数値がターミナルに該当しない場合は−1を返し ます。 tgetnum() は、数値を持つ機能にのみ役立ちます。 tgetflag() 指定した機能がターミナルのエントリーにある場合は1を返し、ない場合は0を返し ます。 tgetflag() は、本質的に二値のブール代数の (すなわち、 terminfo(4) にあるかな いかどちらかの) 機能にのみ利用されます。 tgetstr() 機能idである id の文字列値を指すポインターを返します。さらに、 area が NULL ポ インターでないとき、 tgetstr() は機能を area にあるバッファーに置き、領域ポイン ターを先に進めます。カーソルのアドレス指定情報およびパディング情報を除いて、 返された文字列の機能はコンパイルされます。 tgetstr() は文字列値を持つ機能にのみ 利用されます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-557 termcap(3X) termcap(3X) 廃止予定 tgoto() cm からデコードされたカーソルのアドレス指定文字列を返し、 destline 行の destcol カラムに進みます。 tgoto() がこの時点でタブを出力できるので、 tgoto() を呼び出す プログラムでは TAB3 ビットをオフにする必要があります (termio(7) を参照)。 Ctrl-I を非破壊スペースなどの他の機能に使用しているターミナルもあるため、通常、 termcap を使うプログラムでは、とにかく TAB3 をオフにしてください。認識できな い % シーケンスが指定されていると、 tgoto() は [OOPS] を返します。 tputs() cp 文字列のパディング情報をデコードします。 affcnt は、この処理が適用する行数を 指定し、適用できない場合は1を指定します。 outc は、各文字とともに順次呼び出さ れるルーチンです。 terminfo 変数 pad_char は、null (@) が適用されない場合に使う ( pc 機能からの) パッド文字を含みます。 警告 以下のルーチンは、バックグラウンドで実行されるプログラムで使用されることを目的としたものではありま せん。 廃止インタフェース tgetent(), tgetnum(), tgetflag(), tgetstr(), tgoto(), および tputs() は、将来廃止される予定です。 ファイル /usr/lib/libcurses.a -lcurses ライブラリ /usr/share/lib/terminfo/?/* データベース 参照 ex(1), terminfo(4), termio(7) Section 3-558 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 termname(3X) termname(3X) 名称 termname — 端末名の取得 構文 #include <curses.h> char *termname(void); 説明 termname() 関数は、 setupterm() によって記録された通りの端末名を取得します。 戻り値 termname() 関数は端末名を指すポインタを返します。 エラー エラーは定義されていません。 参照 del_curterm(3X), initscr(3X), terminfo(4) の 「最低保証制限」の項, getenv(3C) (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-559 tgamma(3M) tgamma(3M) 名称 tgamma( ), tgammaf( ), tgammal( ), tgammaw( ), tgammaq( ) − 本当のガンマ関数 構文 #include <math.h> double tgamma(double x); float tgammaf(float x); long double tgammal(long double x); extended tgammaw(extended x); quad tgammaq(quad x); 説明 tgamma() 関数は、 x の本当のガンマ関数値を計算します。 これに対して、 lgamma()、 lgamma_r()、および gamma() 関数は、ガンマ関数の対数を計算します。 tgammaf() は、 tgamma() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 tgammal() は、 tgamma() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果 を返します。 tgammaw() は、 tgamma() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返し ます。 tgammaq() は、HP-UX システムでは tgammal() と同等です。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 tgammaw() または tgammaq() を使うには、 −fpwidetypes オプションも指定してコンパイルしてください。 これらの関数を使うには、プログラムに <math.h> がインクルードされていることを確認した後、コンパイラ またはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 x が ±0 の場合、 tgamma() は ±INFINITY を返し、ゼロ除算例外が発生します。 x が負の整数の場合、 tgamma() は NaN を返し、無効例外が発生します。 x が -INFINITY の場合、 tgamma() は NaN を返し、無効例外が発生します。 x が +INFINITY の場合、 tgamma() は +INFINITY を返します。 x が NaN の場合、 tgamma() は NaN を返します。 Section 3-560 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 tgamma(3M) tgamma(3M) tgamma() は、値が大きすぎる場合これに代えて無限大 (HUGE_VAL に等しい) を返し、オーバーフロー例外 と不正確例外を発生させます。 tgamma() では、丸めた結果が数学上の結果と等しくないときには必ず、不正確例外が発生します。 エラー x が負の整数の場合、 tgamma() は errno に [EDOM] を設定します。 Itaniumベース システムでの HP-UX の libm 関数群は、デフォルトでは errno を設定しません。 errno を設定 するには、 +Olibmerrno オプションを指定してコンパイルしてください。 参照 exp(3M), lgamma(3M), log(3M), math(5) 標準準拠 tgamma(), tgammaf(), tgammal() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-561 tigetflag(3X) tigetflag(3X) 名称 tigetflag, tigetnum, tigetstr, tparm —terminfo データベースからの機能の検索 構文 #include <term.h> 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); 説明 tigetflag() 、 tigetnum() 、および tigetstr() の各関数は、terminfo データベースの選択したレコードから論理機 能、数値機能、および文字列機能をそれぞれ取得します。 capname として使う値は、それぞれの機能ごとに、 terminfo(4) の 機能の定義 にある表の Capname という列に記載されています。 tparm() 関数は、文字列機能を cap として使います。 cap がパラメーター指定されている (terminfo(4) の パラ メーター付き文字列 で説明するように) 場合には、 tparm() は、そのパラメーターを解釈します。パラメー ター指定された文字列が %p1 から %p9 までのパラメータを示す場合には、 tparm() は、p1 から p9 までの値 をそれぞれ代入します。 戻り値 正常に終了すると、 tigetflg() 、 tigetnum() 、および tigetstr() の各関数は、指定した機能を返します。 tigetflag() 関数は、capname が論理機能でないと −1 を返します。 tigetnum() 関数は、capname が数値機能でないと −2 を返します。 tigetstr() 関数は、capname が文字列機能でないと (char *)−1 を返します。 正常に終了すると、 tparm() は、解決されたパラメーターとともに str を返します。そうでなければヌルポイ ンターを返します。 エラー エラーは定義されていません。 アプリケーション使用法 パラメーター指定された文字列機能に対して、上述のように、アプリケーションで tigetstr() から返される値を tparm() に渡す必要があります。 Curses を使う代わりに、端末に直接端末機能を送信する ( tputs() または putp() だけを使って実行される) つも りのアプリケーションでは、通常、以下の規則に従う必要があります。 • • 終了する前に、 reset_shell_mode() を呼び出して、表示モードを復元する。 カーソルのアドレス指定を使う場合には、起動時に enter_ca_mode を出力して、終了する前に exit_ca_mode を出力する。 Section 3-562 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 tigetflag(3X) tigetflag(3X) • シェ ル エ ス ケー プ を 使 う 場 合 に は、 そ の シェ ル を 呼 び 出 す 前 に exit_ca_mode を 出 力 し て reset_shell_mode() を 呼 び 出 し、 こ の シェ ル か ら 戻っ た 後 に reset_prog_mode() を 呼 び 出 し て enter_ca_mode を出力する。 このドキュメントで定義されるパラメーター指定される端末機能はすべて tparm() に渡すことができます。一 部の処理系では、それぞれ固有の機能を作成したり、端末以外の装置のための機能を作成したり、このドキュ メント内の機能を再定義したりすることができます。このような使用法は、上記の規則に従いません。その理 由は、 tparm() がこれらのユーザー定義文字列を解析できないからです。 参照 def_prog_mode(), tgetent(), putp(), <term.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-563 tmpfile(3S) tmpfile(3S) 名称 tmpfile( ) − 一時ファイルの作成 構文 #include <stdio.h> FILE *tmpfile(void); 説明 tmpfile() は、 tmpnam() (tmpnam(3S) を参照) で名前を生成して一時ファイルを作成し、対応する FILE ポイン ターを返します。ファイルがオープンできない場合は NULL ポインターが返されます。そのファイルは、使っ ているプロセスが終了すると自動的に削除されます。なお、ファイルは更新用にオープンされます (wb+)。 エラー 次のような場合、 tmpfile() は失敗します。 [EOVERFLOW] 指定したファイルが通常ファイルであり、この環境においてファイルのサ イズが off_t のサイズの変数で正しく示されない場合 下位の関数 fopen() によって、その他の errno 値が設定されることもあります ( fopen(3S) を参照)。 注意 HP-UX システム上では、 wb+ モードは w+ モードと同様です。 参照 creat(2), unlink(2), mktemp(3C), fopen(3S), fgetpos64(3S), tmpnam(3S), thread_safety(5) 標準準拠 tmpfile(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-564 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 tmpnam(3S) tmpnam(3S) 名称 tmpnam( ), tempnam( ) − 一時ファイルの名前の作成 構文 #include <stdio.h> char *tmpnam(char *s); char *tempnam(const char *dir, const char *pfx); 説明 tmpnam() と tempnam() は、一時ファイル用に安全に使えるファイル名を生成します。 tmpnam() 常にヘッダーファイル <stdio.h> 内で、 P_tmpdir として定義されているパス接頭辞を 使ってファイル名を生成します。 s が NULL の時、 tmpnam() は生成した名前を内部 静的領域に残し、その領域へのポインターを返します。次に tmpnam() を呼び出した とき、その領域の内容は上書きされてしまいます。 s が NULL ではないとき、その値 は少なくとも L_tmpnam バイトの大きさの配列のアドレスであるとみなされます。 L_tmpnam は <stdio.h> に定義されている定数です。 tmpnam() は生成した値を配列 に書き込み、 s を返します。マルチスレッドアプリケーションでは、 s が NULL ポイ ンターの場合、処理が実行されず、 NULL ポインターが返されます。 tempnam() この関数を使って、ユーザーはディレクトリの選択を制御できます。引き数 dir は、 ファイルが生成されるディレクトリ名を指します。 dir が NULL の時、もしくは適切 なディレクトリ名を示す文字列を指していないとき、ヘッダーファイル <stdio.h> 内 の P_tmpdir として定義されているパス接頭辞が用いられます。指定されたディレク トリがアクセスできない場合、最後の手段として /tmp が使われます。特定の一時 ファイルディレクトリの名前を値として持つ環境変数 TMPDIR をユーザーの環境内 に指定して、この一連の手順を省略できます。 tempnam() または tmpnam() をデフォルトで動作させるには、 tempnam() の場合は dir と pfx に、 tmpnam() の場合は s に NULL の値を渡す必要があります。有効な値が渡されない場合には、動作は不定となります。 一時ファイルの名前として、先頭の何文字かを特定の文字で統一しているアプリケーションがよくあります。 指定した接頭辞を定義するには引き数 pfx を使ってください。その引き数は、 NULL または5文字までの文字 列を示し、一時ファイル名の先頭部分として使われます。 tempnam() は、生成されたファイル名用に malloc() (malloc(3C) を参照) を使って空き領域を確保し、この領域 へのポインターを返します。したがって tempnam() から返されるポインターの値は、必ず free() (malloc(3C) を 参照) の引き数として使えます。 tempnam() が何らかの理由で期待した結果を返せない場合、つまり malloc() の処理が失敗するか、あるいは適切なディレクトリが前述の手順によって求められなかった場合、 NULL ポイ ンターが返されます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-565 tmpnam(3S) tmpnam(3S) 注意 tmpnam() と tempnam() は、複数回呼び出すとそのたびに違ったファイル名を生成します。しかし、単独のプ ロセスで TMP_MAX の回数より多く呼び出しが行われた場合、一度使った名前を再利用し始めます。 これらの関数および fopen() もしくは creat() ( fopen(3S) および creat(2) を参照) を使って作成したファイルは、 一時的に使うためのディレクトリ内に存在するという意味においてのみ一時ファイルであり、ファイル名は一 意です。ユーザーは、作成したファイルが必要でなくなったとき、 unlink(2) を使ってそのファイルを削除しな ければなりません。 警告 ファイル名が生成されてからそのファイルがオープンされるまでの間に、別のプロセスがそれと同じ名前を持 つファイルを作成する可能性があります。ただし、別のプロセスでもこれらの関数や mktemp を使っている場 合には、重複しないようにファイル名が選ばれるので、そのような同一のファイル名の生成はありません。 参照 creat(2), unlink(2), malloc(3C), mktemp(3C), fopen(3S), tmpfile(3S), thread_safety(5) 標準準拠 tmpnam(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C tempnam(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 Section 3-566 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 touchwin(3X) touchwin(3X) 名称 touchwin — ウィンドウリフレッシュ制御関数 構文 #include <curses.h> int touchwin(WINDOW *win); 説明 touchwin() 関数は、指定したウィンドウをタッチします (つまり、そのウィンドウに最後のリフレッシュ操作 よりも新しく変更したものとしてマークを付けます)。 戻り値 正常に終了すると、この関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 複数のウィンドウをオーバーラップしている場合には、あるウィンドウへの変更が別のウィンドウに影響する のに、この別のウィンドウの中の影響を受けた行が入っているレコードはこの変更内容を反映しないので、と きどき touchwin() または touchline() を呼び出す必要があります。 参照 doupdate(3X), is_linetouched(3X), curses_intro(3X) の 「画面、ウィンドウおよび端末」の項, <curses.h> 変更履歴 X/Open Curses 第2版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-567 towctrans(3C) towctrans(3C) 名称 towctrans( ), wctrans( ) − 文字変換 構文 #include <wctype.h> wint_t towctrans(wint_t wc, wctrans_t desc); wctrans_t wctrans(const char *charclass); 説明 towctrans() towctrans() 関数は、 desc により記述されたマッピングを使用して、ワイドキャラクタ コード wc を変換します。 LC_CTYPE カテゴリの現在の設定は、値 desc を返した wctrans() の呼び 出し時と同じでなければなりません。 desc の値が無効になった場合 (つまり、 wctrans() の呼 び出しによって取得できなかった場合)、またはカテゴリ LC_CTYPE に影響を与える setlocale() への後続呼び出しによって desc が無効になった場合、結果は未定義になります。 wctrans() wctrans() 関数は、現在のロケールで識別された有効文字マッピング名に対して定義されま す。 charclass は、コードセット固有の情報が必要な汎用文字マッピング名を識別する文字列 です。文字マッピング名 "tolower" および "toupper" が、すべてのロケールに定義されていま す。この関数は、タイプ wctrans_t の値を返します。この値は、 towctrans() の後続呼び出し の第2引き数として使用できます。 wctrans() 関数は、プログラムのロケール ( カテゴリ LC_CTYPE) 内の文字マッピング情報によって定義されたコード化キャラクタセットの規則に 従って、 wctrans_t の値を決定します。 wctrans() によって返される値は、 setlocale() を呼び 出してカテゴリ LC_CTYPE が変更されるまで有効です。 アプリケーション使用法 文字列 "tolower" および "toupper" は、標準マッピング名用に予約されています。以下の表で、左列の関数と右 列の関数は同じです。 towlower(wc) towctrans(wc, wctrans("tolower")) towupper(wc) towctrans(wc, wctrans("toupper")) 戻り値 正常終了した場合、 towctrans() 関数は、 desc により記述されたマッピングを使用して wc のマップされた値 を返します。それ以外の場合は、 wc を未変更のまま返します。 wctrans() 関数は、指定された文字マッピング名が現在のロケール (カテゴリ LC_CTYPE) に対して有効でない 場合に、(wchar_t)0 を返します。それ以外の場合は、タイプ wctrans_t のゼロでないオブジェクトを返しま す。これは、 towctrans() の呼び出しに使用できます。 エラー towctrans() 関数は、以下の場合に失敗します。 Section 3-568 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 towctrans(3C) [EINVAL] towctrans(3C) desc に、無効な変換記述子が含まれています。 wctrans() 関数は、以下の場合に失敗します。 [EINVAL] charclass によってポイントされた文字マッピング名が、現在のロケールで無効です。 著者 towctrans(), wctrans() は、HP および三菱電機により開発されました。 参照 wconv(3C), thread_safety(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-569 trunc(3M) trunc(3M) 名称 trunc( ), truncf( ), truncl( ), truncw( ), truncq( ) − 切り捨て関数 構文 #include <math.h> double trunc(double x); Itanium(R)ベース システムのみ float truncf(float x); long double truncl(long double x); extended truncw(extended x); quad truncq(quad x); 説明 trunc() 関数は、その引き数を、絶対値がそれを超えない最も近い整数値 (浮動小数点形式) に丸めます。 Itaniumベース システムのみ truncf() は、 trunc() の float バージョンで、 float 型の引き数をとり、 float 型の結果を返します。 truncl() は、 trunc() の long double バージョンで、 long double 型の引き数をとり、 long double 型の結果を返 します。 truncw() は、 trunc() の extended バージョンで、 extended 型の引き数をとり、 extended 型の結果を返しま す。 truncq() は、HP-UX システムでは truncl() と同等です。 使用方法 こ れ ら の 関 数 を 使 う に は、 デ フォ ル ト の −Ae オ プ ショ ン を 指 定 す る か、 ま た は −Aa オ プ ショ ン と −D_HPUX_SOURCE オプションを指定してコンパイルしてください。 Itaniumベース システムで truncw() または truncq() を使うには、 −fpwidetypes オプションも指定してコンパイ ルしてください。 これらの関数を使用するには、プログラムに、 <math.h> がインクルードされていることを確認した後、コン パイラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリとリンクしてください。 詳細については、 『HP-UX フローティング・ポイント・ガイド』を参照してください。 戻り値 x が ±INFINITY または ±0 の場合、 trunc() は x を返します。 x が NaN の場合、 trunc() は NaN を返します。 trunc() では、 x が整数でない有限値の場合、不正確例外が発生することがあります。 Section 3-570 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 trunc(3M) trunc(3M) エラー エラーは、定義されていません。 参照 ceil(3M), floor(3M), fabs(3M), fmod(3M), fegetround(3M), fesetround(3M), lrint(3M), llrint(3M), lround(3M), llround(3M), rint(3M), round(3M), math(5), fenv(5) 標準準拠 trunc(), truncf(), truncl() : ISO/IEC C99 (付録 F 『IEC 60559 floating-point arithmetic』を含む) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-571 tsearch(3C) tsearch(3C) 名称 tsearch( ), tfind( ), tdelete( ), twalk( ) − 二分木の操作 構文 #include <search.h> void *tsearch( const void *key, void **rootp, int (*compar)(const void *, const void *) ); void *tfind( const void *key, void * const *rootp, int (*compar)(const void *, const void *) ); void *tdelete( const void *key, void **rootp, int (*compar)(const void *, const void *) ); void twalk( const void *root, void (*action)(const void *, VISIT, int) ); 説明 tsearch(), tfind(), tdelete(), および twalk() は、二分木を操作するルーチンです。これらは、クヌース (6.2.2) のア ルゴリズム T および D を一般化したものです。比較はすべてユーザーが与えるルーチン、 compar で行われま す。このルーチンは、比較する二分木要素へのポインター2つを引き数として呼び出されます。そして、第1 引き数が第2引き数より小さい、等しい、大きいといった判断結果に従って、0よりも小さい、等しい、大き いような整数を戻り値として返します。この比較用ルーチンは、二分木要素の各バイトを調べる必要はないの で、比較すべき値以外の任意のデータも二分木要素中に入れることができます。 tsearch() は、二分木の構築およびアクセスを行います。 key は、アクセスまたは挿入を行う要素へのポイン ターです。二分木中にこの key の指すものに等しい要素がすでにあった場合は、等しいものの中で最後に挿入 したものに対応するキーへのポインターを返します。等しいものがなかった場合は、この key は二分木に挿入 され、これへのポインターを返します。返すのは key へのポインターであり、 key 自身もポインターですか ら、戻り値はポインターへのポインターであることに注意してください。このルーチンがコピーするのはポイ ンターだけです。よって、データはこれを呼び出したルーチンが記憶する必要があります。 rootp は、二分木 Section 3-572 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 tsearch(3C) tsearch(3C) のルートを指すポインター変数を指すポインターです。 rootp が指す変数の値が NULL ならば、二分木は空で あることになります。この場合、この変数はこの二分木のルートとなる要素を指すように設定されます。 tfind() は、 tsearch() と同様に二分木を検索し、等しい要素が見つかった場合はそれへのポインターを返しま す。ただし、見つからなかった場合には NULL ポインターを返します。 tfind() の引き数は、 tsearch() と同じ です。 tdelete() は、二分木からノードを削除します。引き数は、 tsearch() と同じです。削除したノードが二分木の ルートだった場合は、 rootp の指す変数の値も更新します。戻り値は、削除したものの上位のノードへのポイ ンターですが、上位のノードが無い場合は NULL ポインターとなります。 twalk() は、二分木をたどります。 root は、たどりたい二分木のルートです (二分木中の任意のノードをルート に選ぶことによって、それよりも下位の部分木のみを対象にすることができます)。 action は、各々のノード に対して実行するルーチンの名前です。このルーチンは、以下の3つの引き数を与えられながら、次々に呼び 出されます: • 第1引き数は、現在注目しているノードのアドレスです。 • 第2引き数は、列挙型 typedef enum { preorder, postorder, endorder, leaf } VISIT; (<search.h> ヘッ ダーファイルで定義されています) のどれかです。これは、このノードを注目したのが (下方優先、 左から右探査において) 1, 2, 3 回目であるか、または注目しているノードがリーフであるというこ とをそれぞれ示しています。 • 第3引き数は、この二分木におけるこのノードの深さです。ルートの深さは0です。 例 以下のプログラムは文字列を読み込み、各文字列へのポインターを含む構造体を記憶し、各文字列の長さを数 えます。次に、二分木をアルファベット順にたどっていき、記憶しておいた文字列とその長さを表示します。 #include <stdlib.h> #include <search.h> #include <stdio.h> #include <string.h> struct element /* pointers to these are stored in the tree */ { char *string; int length; }; char string_space[10000]; /* space to store strings */ struct element elements[500]; struct element *root = NULL; /* elements to store */ /* this points to the root */ void print_node(void *, VISIT, int); HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-573 tsearch(3C) tsearch(3C) int element_compare(const void *, const void *); main( ) { char *strptr = string_space; struct element *element_ptr = elements; struct element **ts_retval; int i = 0; while (gets(strptr) != NULL && i++ < 500) { /* set element */ element_ptr->string = strptr; element_ptr->length = strlen(strptr); /* put element into the tree */ ts_retval = (struct element **) tsearch((void *) element_ptr, (void **) &root, element_compare); if (*ts_retval == element_ptr) { (void) printf("The element \"%s\" ", (*ts_retval)->string); (void) printf("has now been inserted into the tree\n"); } else { (void) printf("The element \"%s\" ", (*ts_retval)->string); (void) printf("already existed in the tree\n"); } /* adjust pointers, so we don’t overwrite tree */ strptr += element_ptr->length + 1; element_ptr++; } twalk((void *) root, print_node); } /* This routine compares two elements, based on an alphabetical ordering of the string field. */ int Section 3-574 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 tsearch(3C) tsearch(3C) element_compare(elem1, elem2) void *elem1, *elem2; { return strcmp(((struct element *) elem1)->string, ((struct element *) elem2)->string); } /* This routine prints out a node, the first time twalk encounters it. */ void print_node(element, order, level) void *element; VISIT order; int level; { if (order == preorder || order == leaf) { (void) printf("string = %20s, length = %d\n", (*(struct element **) element)->string, (*(struct element **) element)->length); } } 戻り値 新しいノードを作るのに必要な使用可能領域が無い場合、 tsearch() は NULL ポインターを返します。 tsearch(), tfind(), および tdelete() が呼び出されたときに rootp が NULL である場合、 NULL ポインターを返しま す。 データが見つかった場合は、 tsearch() および tfind() は共にそれへのポインターを返します。見つからなかっ た場合は、 tfind() は NULL を返し、 tsearch() は、挿入したものへのポインターを返します。 警告 twalk() の root 引き数は、 tsearch() および tdelete() の rootp に比べて間接参照が1段階低くなっています。 ノードを何回注目したかということを表す専門用語は2種類あります。 tsearch() は、プリオーダー、ポスト オーダーおよびエンドオーダーを、それぞれ、下位のノードをたどる前、左側の下位のノードをたどった後か つ右側の下位のノードをたどる前、下位のノードを両方ともたどった後、という意味で使っています。この他 に、同じ意味でプリオーダー、インオーダーおよびポストオーダーを使う流儀もあります。このため、ポスト オーダーの意味を混乱する恐れがあります。 呼び出した関数が二分木のルートへのポインターを変更した場合の動作は保証されません。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-575 tsearch(3C) tsearch(3C) 参照 bsearch(3C), hsearch(3C), lsearch(3C), thread_safety(5) 標準準拠 tsearch(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 tdelete(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 tfind(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 twalk(): AES, SVID2, SVID3, XPG2, XPG3, XPG4 Section 3-576 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 ttyname(3C) ttyname(3C) 名称 ttyname( ), ttyname_r( ), isatty( ) − 端末名の取得 構文 #include <unistd.h> char *ttyname(int fildes); int ttyname_r(int fildes, char *buffer, size_t buflen); int isatty(int fildes); 説明 ttyname() は、ファイル記述子 fildes に対応する端末デバイスのパス名を表す、null で終了する文字列へのポイ ンターを返します。 isatty() は、 fildes が端末デバイスに対応する場合には1を、それ以外の場合は0を返します。 リエントラントインタフェース ttyname_r() は、与えられたバッファーに結果文字列を返します。 buffer は、 buflen 文字長で、名前と末尾の NULL 文字が入るだけの領域が必要です。端末名の最大サイズは TTY_NAME_MAX です。 戻り値 ttyname() は、 fildes がディレクトリ /dev にある端末デバイスに対応しない場合には NULL ポインターを返しま す。 ttyname_r() は、正常終了すると0を返し、失敗するとエラー番号を返します。 エラー isatty() および ttyname() は、次の条件のどれかに該当した場合には失敗します。 [EBADF] fildes 引き数が無効です。 [ENOTTY] 不正な I/O コントロール操作を行おうとしました。 アプリケーション使用法 ttyname() の戻り値のポインターは、静的データ領域を差しているので、この関数を呼び出すたびにオーバーラ イトされます。 警告 ストリーム pty に関しては、 ttyname() および isatty() は、マスター pty を tty デバイス であるとは考えませ ん。また、 ttyname() は、すべてのマスター pty デバイス対して、マスター pty 名へのポインターを返しま す。これは、デバイスファイルが互いにリンクしているからです。 ttyname_r() の使用に際しては、 POSIX.1c スレッド規格に準拠するために、このリリースではこの関数のプロ トタイプが変更になっていることに注意してください。 ttyname_r() の旧プロトタイプは、既存の DCE アプリ ケーションとの互換性を保つためだけにサポートされています。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-577 ttyname(3C) ttyname(3C) ファイル /dev/* /dev/pty/* 参照 thread_safety(5) 標準準拠 ttyname(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 ttyname_r(): POSIX.1c isatty(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1 Section 3-578 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ttyslot(3C) ttyslot(3C) 廃止予定 名称 ttyslot( ) − 現在のユーザーの utmpx ファイルにおける位置の取得 構文 #include <stdlib.h> int ttyslot(void); 説明 ttyslot() は、現在のユーザーが /etc/utmpx ファイルに登録されている位置を表すインデックスを返します。こ れは、標準入力、標準出力または標準エラー出力 ( ファイル記述子 0, 1, または 2) に対応する端末名を /etc/utmpx から探すことによって実現しています。 戻り値 ttyslot() は、端末名を取得できない場合や、ファイル記述子 0, 1, 2 がどれも端末デバイスに対応していない場 合には −1 を返します。 警告 廃止インタフェース ttyslot() は、将来廃止される予定です。 ファイル /etc/utmpx 参照 getutx(3C), ttyname(3C), thread_safety(5) 標準準拠 ttyslot(): XPG2 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-579 typeahead(3X) typeahead(3X) 名称 typeahead — タイプアヘッドの検査の制御 構文 #include <curses.h> int typeahead(int fildes); 説明 typeahead() 関数は、次のように、fildes の値に基づいて、リフレッシュ中にタイプアヘッドの検出を制御しま す。 • fildes が正しいファイル記述子の場合には、タイプアヘッドはリフレッシュ中使用可能です。つま り、Curses が定期的に入力を fildes で検査して、文字が使用可能な場合にはリフレッシュを中断し ます (これは初期設定であり、タイプアヘッドファイル記述子は initscr() または newterm() によっ て作成された画面に関連付けられている入力ファイルに対応します)。 fildes の値は、リフレッシュ が発生しているファイル記述子である必要はありません。 • fildes が −1 の場合には、Curses はリフレッシュ中にタイプアヘッドの検査を行いません。 戻り値 正常に終了すると、 typeahead() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 doupdate(), getch(), initscr(), curses_intro(3X) の 「入力処理」の項 , <curses.h>, X/Open System Interface Definitions, Issue 4, Version 2 specification, Section 9.2, Parameters That Can Be Set 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。この版では、 戻り値の項で、この関数が正常終 了時に OK を返し、そうでなければ ERR を返すことを記載しています。以前の版では、戻り値について定義 されていませんでした。 Section 3-580 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_accept(3) t_accept(3) 名称 t_accept() − 接続要求の受け入れ 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_accept (fd, resfd, call); int fd; int resfd; struct t_call *call; 説明 t_accept() は、トランスポートユーザーが接続要求を受け入れるために実行する関数です。 fd は、接続の指示 が到着したローカルトランスポート エンドポイントを示します。 resfd は、接続を確立するローカルトランス ポート エンドポイントを指定します。 call には、接続を完了するためにトランスポートプロバイダーが必要と する情報が入っています。パラメータ call は、以下のメンバーが入っている t_call 構造をポイントします。 struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data int sequence; /* sequence number */ */ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定義に使 用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置へのポインタ call の中の、 addr, opt, udata, sequence の各パラメータについてここで説明します。 addr は、呼び出しトランス ポートユーザーのプロトコルアドレスです。 opt は接続に関連するオプションを示します。 OSIトランスポー トプロバイダーを介したXTIの場合、この netbuf は isoco_options 型の構造体をポイントします。 udata は、呼 び出し側に戻されるユーザーデータを示します。 sequence は t_listen() によって戻される値で、以前に受信し た接続の指示と応答とを固有に関連づけるものです。呼び出し側のアドレス addr はヌル (長さゼロ) でもかま いません。 addr がヌルでない場合には、オプションでXTIによって検査されることがあります。 トランスポートユーザーは、接続指示が到着したものと同じ、または異なるローカルトランスポート エンドポ イントで、接続を受け入れることができます。接続を同じエンドポイントで受け入れる場合には (resfd==fd)、 ユーザーはそのトランスポートエンドポイントでそれまでに受信した接続指示に対して (t_accept() または t_snddis() を用いて) 応答しておかなければなりません。応答していないと t_accept() は実行されず、 t_errno に[TINDOUT]を設定します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-581 t_accept(3) t_accept(3) 異なるトランスポートエンドポイントを指定する場合には(resfd!=fd)、ユーザーは t_accept() を実行する前にエ ンドポイントをバインドするかしないかを選択することができます。 t_accept() の前にエンドポイントをバイ ンドしないと、トランスポートプロバイダーが自動的に、 fd がバインドされたものと同じプロトコルアドレス にバインドします。トランスポートユーザーがエンドポイントのバインドを選択する場合には、 qlen がゼロの プロトコルアドレスにバインドする必要があり、また t_accept() の実行前に T_IDLE 状態になっていなければ なりません。 t_accept() の呼び出しは、たとえば、エンドポイント fd に受信を待っている接続または接続切断の指示がある と実行されず、 t_errno に[TLOOK]を設定します。 udata 引き数を使用すると、呼び出されたトランスポートユーザーが呼び出し側に対してユーザーデータを送 信することができます。ユーザーデータの量は、 t_open() または t_getinfo() の info 引き数の connect フィール ドに戻される、トランスポートプロバイダーがサポートしている限界を超えてはなりません。 udata の len フィールドがゼロの場合には、呼び出し側にデータは送信されません。 maxlen フィールドは意味を持ちませ ん。 ユーザーがオプションを何も指定しないと(call->opt.len = 0)、接続を無条件に受け入れるものとみなされま す。接続が正常に受け入れられるように、デフォルト以外のオプションをトランスポートプロバイダーが選択 します。 スレッドでの安全性 t_accept() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っており、非同期キャンセル セーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 fd: T_INCON resfd (fd != resfd): T_IDLE 要注意 アドレスバインディングには、トランスポートプロバイダー固有の制約が存在することがあります。 一部のトランスポートプロバイダーは、接続指示と接続そのものとを区別しません。 t_listen() から正常に戻っ た後で接続がすでに確立されていると、 t_accept() は既存の接続を、 resfd によって指定されたトランスポート エンドポイントに割り当てます。 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 Section 3-582 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_accept(3) [TBADF] t_accept(3) ファイル記述子 fd または resfd がトランスポートエンドポイントを参照していないか、 ユーザーが、接続指示が到着したものと同じトランスポートエンドポイントの接続を 誤って受け入れようとしています。 [TOUTSTATE] fd が参照しているトランスポートエンドポイントで誤った順序で関数が実行されたか、 resfd が適切な状態ではありません。 [TACCES] ユーザーは、応答しているトランスポートエンドポイントで接続を受け入れるパーミッ ションを持たないか、指定のオプションを使用するパーミッションを持っていません。 [TBADOPT] 指定されたオプションの形式が誤っているか、オプションに無効な情報が含まれていま す。 [TBADDATA] 指定されたユーザーデータの量が、トランスポートプロバイダーが許可している制限値 を超えています。 [TBADADDR] 指定されたプロトコルアドレスの形式が誤っているか、オプションに不適当な情報が含 まれています。 [TBADSEQ] [TLOOK] 不適当なシーケンス番号が指定されました。 fd によって参照されているトランスポートエンドポイントで非同期イベントが発生し、 即時アテンションが必要です。 [TNOTSUPPORT] この関数は、基礎となるトランスポートプロバイダーによってサポートされていませ ん。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TINDOUT] fd==resfd で関数が呼び出されましたが、エンドポイントには未処理の接続指示がありま す。これらの接続指示は、 t_snddis() を用いて拒絶するか t_accept() を用いて別のエン ドポイントで受け入れるかして、処理しなければなりません。 [TPROVMISTMATCH] (XTIのみ) ファイル記述子 fd と resfd とが、同じトランスポートプロバイダーを参照し ていません。 [TRESQLEN] resfd によって参照されているエンドポイント (resfd != fd) が、ゼロより大きい qlen をも つプロトコルアドレスにバインドされていません。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切なXTI (t_errno) が該当しないことを示します。 [TRESADDR] このトランスポートプロバイダーでは、 fd と resfd の両方が同じアドレスにバインドさ れている必要があります。これらが同じアドレスにバインドされていないと、このエ ラーが発生します。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-583 t_accept(3) t_accept(3) ファイル /usr/include/xti.h XTIデータ構造体 /usr/include/xti_iso.h XTIデータ構造体 /usr/include/tiuser.h TLIデータ構造体 参照 t_connect(3), t_getstate(3), t_listen(3), t_open(3), t_rcvconnect(3) 標準準拠 t_accept(): SVID2, XPG3, XPG4 Section 3-584 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 t_alloc(3) t_alloc(3) 名称 t_alloc() −ライブラリー構造体の割り当て 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ char *t_alloc (fd, struct_type, fields); int fd; int struct_type; int fields; 説明 t_alloc() 関数は、以下に説明するさまざまなトランスポート関数の引き数構造体に、動的にメモリを割り当て ます。この関数は指定された構造体にメモリを割り当てるとともに、構造体によって参照されるバッファにも メモリを割り当てます。 メモリを割り当てる構造体は struct_type で指定し、次のいずれかでなければなりません。 T_BIND struct t_bind T_CALL struct t_call T_OPTMGMT struct t_optmgmt T_DIS struct t_discon T_UNITDATA struct t_unitdata T_UDERROR struct t_uderr T_INFO struct t_info これらの構造体はこの後、1つ以上のトランスポート関数の引き数として使用されることになります。 上記の構造体には、T_INFO を除いて、それぞれに struct netbuf 型のフィールドが少なくとも1 つ入っていま す。このタイプのフィールドの各々について、ユーザーはそのフィールド用のバッファも割り当てるかどうか を指定することができます。割り当てられるバッファの長さは、 t_open() または t_getinfo() の info 引き数に戻 される値に等しいか、それより大きくなります。 info 引き数の関連フィールドについて、次のリストで説明し ます。 fields 引き数はどのバッファを割り当てるかを指定するもので、引き数は以下のフィールドにビットご とのORを実行した結果になります。 T_ADDR t_bind、 t_call、 t_unitdata、または t_uderr 構造体の addr フィールド。 T_OPT t_optmgmt、 t_call、 t_unitdata、または t_uderr 構造体の opt フィールド。 T_UDATA t_call、 t_discon、または t_unitdata 構造体の udata フィールド。 T_ALL 指定された構造体のすべての関連フィールド。 fd で指定されたトランスポートプロバイ ダーによってサポートされていないフィールドは、割り当てられません (info の値 <= HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-585 t_alloc(3) t_alloc(3) 0)。 fields で指定された各フィールドについて、 t_alloc() はそのフィールドに対応するバッファのメモリを割り当 て、 len フィールドをゼロに初期化するとともに buf ポインタおよび maxlen フィールドもそれぞれ適切に初期 化します。割り当てられるバッファの長さは t_open() または t_getinfo() でユーザーに戻されるものと同じサイ ズ情報に基づいているため、 fd は、新しく割り当てられる構造体の受け渡しに使用するトランスポートエンド ポイントを参照していなければなりません。それによって、適切なサイズ情報にアクセスできるようになりま す。指定されたフィールドに対応するサイズの値が −1 か −2 の場合には (t_open(3) または t_getinfo(3) を参 照 ) 、 t_alloc() は割り当てるバッファのサイズを判別することができず、実行は失敗に終わって t_errno に [TSYSERR]を、 errno に[EINVAL]をそれぞれ設定します。 fields で指定されていないフィールドについては、 buf はヌルポインタに設定され、 maxlen はゼロに設定されます。 t_alloc() を使用して構造体を割り当てると、ユーザープログラムとトランスポートインタフェース関数の将来 のリリースとの互換性を確保することができます。 スレッドでの安全性 t_alloc() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、 POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 正常に完了すると、 t_alloc() は新しく割り当てられた構造を示すポインタを戻します。正常に実行されなかっ た場合には、ヌルポインタが戻されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 指定されたエンドポイント識別子がトランスポートエンドポイントを参照していませ [TBADF] ん。 この関数の実行中にシステムエラーが発生しました。 [TSYSERR] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 [TPROTO] 出され、適切なXTI (t_errno) が該当しないことを示します。 [TNOSTRUCTYPE] サポートされていない struct_type が要求されました。これには、指定されているトラン スポートプロバイダーのコネクション型かコネクションレス型のタイプと一致しない構 造体型が要求された場合も含まれます。 Section 3-586 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_alloc(3) t_alloc(3) 参照 t_free(3)、 t_getinfo(3)、 t_open(3) 標準準拠 t_alloc(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-587 t_bind(3) t_bind(3) 名称 t_bind() − トランスポートエンドポイントへのアドレスのバインド 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_bind (fd, req, ret); int fd; struct t_bind *req; struct t_bind *ret; 説明 t_bind() 関数は、プロトコルアドレスを fd によって指定されたトランスポートエンドポイントと関連づけ、そ のトランスポートエンドポイントをアクティブ化します。コネクションモードでは、トランスポートプロバイ ダーがそのトランスポートエンドポイントで着信接続指示の待ち行列化や接続要求へのサービスを開始するこ とができます。コネクションレスモードでは、トランスポートユーザーがそのトランスポートエンドポイント を介してデータ単位を送信または受信することができます。 req および ret 引き数は、以下のメンバーが入っている t_bind 構造体をポイントします。 struct netbuf addr; unsigned qlen; netbuf 型構造体は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定義 に使用するこの構造体には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置へのポインタ t_bind 構造体の addr フィールドは、プロトコルアドレスを指定します。 qlen フィールドは、未処理の接続指 示の最大数を表します。 パラメータ req は、 netbuf 構造体が表すアドレスをトランスポートエンドポイントにバインドするよう要求す るために使用します。パラメータ len はアドレスのバイト数を指定し、 buf はアドレスバッファを示します。 パラメータ maxlen は、 req 引き数に対しては意味を持ちません。戻り時には、トランスポートプロバイダーが そのトランスポートエンドポイントに実際にバインドしたアドレスが ret に入っています。これは req に指定 されているアドレスと同じです。 ret では、ユーザーはアドレスバッファの最大サイズである maxlen と、アド レスを入れるバッファを示す buf を指定します。戻り時には、 len はバインドされたアドレス内のバイト数を 示し、 buf はバインドされたアドレスを示します。戻されたアドレスが maxlen より大きいと、エラーが発生し ます。 Section 3-588 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_bind(3) t_bind(3) 要求アドレスを使用できない場合には、 t_bind() は −1 を戻し、 t_errno が該当する値に設定されます。 req に アドレスが指定されていない場合 (req の addr の len フィールドがゼロか、 req が NULL の場合)には、トラン スポートプロバイダーが適切なアドレスを割り当ててバインドし、 ret の addr フィールドにそのアドレスを戻 します。トランスポートプロバイダーがアドレスを割り当てられなかった場合には、 t_bind() は実行されず、 t_errno に [TNOADDR] を設定します。 HP OSI はアドレスの自動生成をサポートしません。 ユーザーがバインドするアドレスを指定したくなければ、パラメータ req をヌルポインタにすることができま す。その場合、 qlen の値はゼロとみなされ、トランスポートプロバイダーがトランスポートエンドポイントに アドレスを割り当てます。同様に、プロバイダーがバインドしたアドレスや qlen の折衝値をユーザーが知る必 要がなければ、 ret はヌルポインタでもかまいません。同じ呼び出しで req と ret の両方がヌルポインタになっ ていてもよく、その場合はプロバイダーがトランスポートエンドポイントにバインドするアドレスを選択し、 その情報をユーザーに戻しません。 qlen フィールドは、コネクションモードのサービスを初期化する場合にのみ意味をもちます。これは、トラン スポートエンドポイントについてトランスポートプロバイダーがサポートする未処理の接続指示の数を指定す るものです。未処理の接続指示とは、トランスポートプロバイダーがトランスポートユーザーに渡した後、ま だ受け入れも拒絶もされていない接続指示のことです。ゼロより大きい qlen の値は、他からの呼び出しを期待 する受動トランスポートユーザーが実行した場合にのみ意味を持ちます。トランスポートプロバイダーが指定 された数の未処理の接続指示をサポートできない場合には、 qlen の値はトランスポートプロバイダーとの折衝 によって変化することがあります。ただし折衝では、 qlen の値が要求されたゼロより大きい値からゼロになる ことはありません。これはトランスポートプロバイダー側の要件となります。下記の 要注意の項を参照してく ださい。戻り時には、 ret の qlen フィールドに折衝結果の値が入っています。 fd がコネクションモードのサービスを参照している場合には、この関数を使用して複数のトランスポートエン ドポイントを同じプロトコルアドレスにバインドすることができます (ただし、トランスポートプロバイダー がこの関数をサポートしている必要があります)。しかし、複数のプロトコルアドレスを同じトランスポートエ ンドポイントにバインドすることはできません。ユーザーが複数のトランスポートエンドポイントを同じプロ トコルアドレスにバインドする場合、そのプロトコルアドレスに対応する接続指示を受け入れるのに使用でき るのは1つのエンドポイントだけです。つまり、 qlen にゼロより大きい値を指定できるのは、1つのプロトコ ルアドレスについて 1つの t_bind() だけです。この方法により、トランスポートプロバイダーは着信接続指示 をどのトランスポートエンドポイントに通知すべきかを識別することができます。ユーザーが、 qlen の値がゼ ロより大きい時、2つ目のトランスポートエンドポイントにプロトコルアドレスをバインドしようとすると、 t_bind() は −1を戻し、 t_errno に [TADDRBUSY] (XTI) または [TBADADDR] (TLI) を設定します。リスニング エンドポイントとして使用されているトランスポートエンドポイントでユーザーが接続を受け入れると、 t_unbind() または t_close() の呼び出しが実行されるまでの接続期間中、バインドされたプロトコルアドレスが ビジーの状態になります。最初のリスニングエンドポイントが (そのデータ転送フェーズまたは T_IDLE 状態 で) アクティブな状態の間、他のトランスポートエンドポイントを同じプロトコルアドレスに受信のためにバ インドすることはできません。そのために、同じプロトコルアドレスにバインドされた複数のトランスポート エンドポイントが接続指示を受け入れてしまう事態を避けることができます。 fd がコネクションレスモードのサービスを参照している場合には、1つのプロトコルアドレスに1つのエンドポ HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-589 t_bind(3) t_bind(3) イントだけを対応させることができます。すでにバインドされているアドレスに対してユーザーが2つ目のト ランスポートエンドポイントをバインドしようとすると、 t_bind() は −1 を戻し、 t_errno に [TADDRBUSY] を設定します。 スレッドでの安全性 t_bind() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、 POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNBND 注意 HP XTI はアドレスの自動生成をサポートしません。したがって、 req に有効なローカル トランスポートアド レスを指定しなければなりません。 要注意 折衝によって、 qlen の値が要求されたゼロより大きい値からゼロに変化することはないという要件は、 XTI のインプリメンテーションではなく、トランスポートプロバイダーがこの制約を受け入れていることを意味し ています。 トランスポートプロバイダーは、同じプロトコルアドレスに複数の接続を受け入れることができても、同じプ ロトコルアドレスに複数のトランスポートエンドポイントを明示的にはバインドできない場合があります。し たがって移植を可能にするために、応答アドレスが呼び出されたアドレスと同じになる場合には、 t_accept() の呼び出しの中の応答エンドポイント (resfd) として使用されているトランスポートエンドポイントをバインド しないようにすることをお勧めします。 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定されたファイル記述子がトランスポートエンドポイントを参照していません。 [TOUTSTATE] 関数が誤った順序で実行されました。 [TBADADDR] 指定されたプロトコルアドレスの形式が誤っているか、不適当な情報が含まれていまし た。 [TNOADDR] トランスポートプロバイダーがアドレスを割り当てることができませんでした。 [TACCES] ユーザーが指定のアドレスを使用するパーミッションをもっていません。 Section 3-590 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_bind(3) [TBUFOVFLW] t_bind(3) 着信引き数に使用できるバイト数が少なすぎて、その引き数の値を保存することができ ません。プロバイダーの状態は T_IDLE に変化し、 ret に戻された情報は破棄されま す。 [TSYSERR] [TADDRBUSY] この関数の実行中にシステムエラーが発生しました。 要求されたアドレスは使用中で、トランスポートプロバイダーは新しいアドレスを割り 当てることができませんでした。 [TPROTO] (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検 出され、適切なXTI (t_errno) が該当しないことを示します。 ファイル /usr/include/xti.h XTIデータ構造体 /usr/include/xti_iso.h XTIデータ構造体 /usr/include/tiuser.h TLIデータ構造体 参照 t_alloc(3), t_close(3), t_open(3), t_unbind(3) 標準準拠 t_bind(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-591 t_close(3) t_close(3) 名称 t_close() − トランスポートエンドポイントのクローズ 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_close (fd); int fd; 説明 t_close() 関数はトランスポートプロバイダーに対し、ユーザーが fd で指定されているトランスポートエンドポ イントの使用を終えたことを伝え、そのエンドポイントに関連づけられたローカル ライブラリーリソースを解 放します。 t_close() はまた、そのトランスポートエンドポイントに対応するファイル記述子をクローズしま す。 t_close() は T_UNBND 状態から呼び出す必要があります (t_getstate(3) を参照)。ただしこの関数は状態情報を 検査しないため、どの状態から呼び出してもトランスポートエンドポイントをクローズすることができます。 その場合、そのエンドポイントに関連づけられたローカル ライブラリーリソースは自動的に解放されます。そ のファイル記述子に対して close() も実行されます。クローズは、そのファイルをオープンしている他のプロセ スがなければ打ち切りを実行し、そのエンドポイントに対応するトランスポート接続をすべて切断します。 スレッドでの安全性 t_close() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、 POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー [TBADF] [TPROTO] 指定されたファイル記述子がトランスポートエンドポイントを参照していません。 (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検 出され、適切な XTI (t_errno) が該当しないことを示します。 参照 t_getstate(3), t_open(3), t_unbind(3) Section 3-592 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_close(3) t_close(3) 標準準拠 t_close(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-593 t_connect(3) t_connect(3) 名称 t_connect() − 別のトランスポートユーザーとの接続の確立 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_connect (fd, sndcall, rcvcall); int fd; struct t_call *sndcall; struct t_call *rcvcall; 説明 この関数を使用すると、トランスポートユーザーは指定されたあて先のトランスポートユーザーとの接続を要 求することができます。この関数は T_IDLE 状態でのみ実行することができます。 fd は、通信を確立する ローカル トランスポートエンドポイントを指定します。 sndcall および rcvcall は、以下のメンバーが入ってい る t_call 構造体をポイントします。 struct netbuf addr; struct netbuf opt; struct netbuf udata; int sequence; netbuf 型構造体は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定義 に使用するこの構造体には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置へのポインタ sndcall は、トランスポートプロバイダーが接続を確立するために必要とする情報を指定します。 rcvcall は、 新しく確立される接続に関連する情報を指定します。 sndcall では、 addr はあて先トランスポートユーザーのプロトコルアドレスを指定します。 opt はトランス ポートプロバイダーによって必要となると思われるプロトコル固有の情報を表します。 udata は、接続の確立 中にあて先トランスポートユーザーに受け渡すオプションのユーザーデータを示します。 sequence は、この関 数では意味を持ちません。 戻り時には、 rcvcall の addr は応答トランスポートエンドポイントに関連づけられたプロトコルアドレスを戻 します。 opt は、接続に関連づけられたプロトコル固有の情報を表します。 udata は、接続の確立中にあて先 トランスポートユーザーによって戻されるオプションのユーザーデータを示します。 sequence は、この関数で は意味を持ちません。 Section 3-594 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_connect(3) t_connect(3) opt 引き数では、ユーザーはトランスポートプロバイダーに受け渡すオプションを定義することができます。 これらのオプションはトランスポートプロバイダーの基本プロトコルに固有のもので、 CAE Specification X/Open Transport Interface (XTI) マニュアルの付録 A "ISO Transport Protocol Information"、付録 B "Internet Protocol-specific Information"、および付録 F "Headers and Definitions" で、ISO および TCP プロトコルについて説明さ れています。ユーザーは opt の len フィールドをゼロに設定することによって、プロトコルオプションについ て折衝しないことを選択できます。この場合、プロバイダーはデフォルトのオプションを使用します。 opt 引き数を使用する場合には、 sndcall->opt.buf 構造体が対応するオプション構造体をポイントしていなけれ ばなりません。OSI トランスポートプロバイダーを介した XTI の場合、オプションバッファは isoco_options 型または tcp_options 型の構造体でなければなりません。TLIの場合には、使用しているトランスポートプロバ イダーの資料を参照してください。呼び出しの前に、 rcvcall->addr および rcvcall->opt がポイントする netbuf 構造体の maxlen および buf フィールドを設定しておかなければなりません。 udata 引き数を使用すると、呼び出し側はあて先トランスポートユーザーにユーザーデータを受け渡したり、 接続の確立中にあて先ユーザーからユーザーデータを受信したりできます。ただしユーザーデータの量は、 t_open() または t_getinfo() の info 引き数の connect フィールドに戻されるトランスポートプロバイダーがサ ポートする限界を超えることはできません。 sndcall で udata の len がゼロの場合には、あて先トランスポート ユーザーにデータは送信されません。 戻り時には、 rcvcall の addr, opt, udata の各フィールドは接続に関連する値を反映するようにアップデートされ ます。したがって、この関数を実行する前に各引き数の maxlen フィールドを設定して、それぞれのバッファの 最大サイズを指定しておかなければなりません。ただし rcvcall はヌルポインタでもよく、その場合には t_connect() からの戻り時にユーザーに情報が何も伝わりません。 デフォルトでは、 t_connect() は同期モードで実行され、あて先ユーザーの応答を待ってから、ローカルユー ザーに制御を戻します。正常に戻れば (戻り値はゼロ)、要求した接続が確立されたことを示しています。しか し O_NONBLOCKが (t_open() または fcntl() によって)設定されている場合には、 t_connect() は非同期モード で実行されます。この場合、呼び出しはリモートユーザーの応答を待たずにただちにローカルユーザーに制御 を戻し、 −1 を戻して t_errno に [TNODATA] を設定し、接続がまだ確立されていないことを示します。こうし て、単に接続要求をあて先トランスポートユーザーに送信するだけで接続確立の手順を開始します。要求した 接続のステータスを判別するためには、 t_connect() とともに t_rcvconnect() 関数を使用します。 同期の t_connect() 呼び出しがシグナルの到着によって中断されると、対応するトランスポートエンドポイント の状態が T_OUTCON になり、さらに t_rcvconnect(), t_rcvdis(), t_snddis() のいずれかの呼び出しを行えるよう になります。 スレッドでの安全性 t_connect() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-595 t_connect(3) t_connect(3) 有効な状態 T_IDLE 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー [TBADF] 指定されたファイル記述子がトランスポートエンドポイントを参照していません。 [TOUTSTATE] 関数が誤った順序で実行されました。 O_NONBLOCK が設定されたため、関数は正常に接続確立手順を開始しましたが、リ [TNODATA] モートユーザーからの応答を待ちませんでした。 [TBADADDR] 指定されたプロトコルアドレスの形式が誤っているか、不適当な情報が含まれていまし た。 指定されたプロトコルオプションの形式が誤っているか、不適当な情報が含まれていま [TBADOPT] した。 [TBADDATA] 指定されたユーザーデータの量がトランスポートプロバイダーの許す限界内ではありま せんでした。 ユーザーが指定のアドレスを使用するパーミッションをもっていません。 [TACCES] [TBUFOVFLW] 着信引き数に割り当てられたバイト数 (maxlen) はゼロより大きい値でしたが、その引き 数の値を保存するには小さすぎます。同期モードで実行されると、ユーザーの検出する プロバイダーの状態は T_DATAXFER に変化し、 rcvcall に戻される接続指示情報は破棄 されます。 このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 [TLOOK] 要です。 [TNOTSUPPORT] この関数は基本のトランスポートプロバイダーによってサポートされていません。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TADDRBUSY] このトランスポートプロバイダーは、同じローカルおよびリモートアドレスとの複数の 接続をサポートしていません。このエラーは、接続がすでに存在することを示します。 (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検 [TPROTO] 出され、適切な XTI (t_errno) が該当しないことを示します。 ファイル /usr/include/xti.h XTIデータ構造体 /usr/include/tiuser.h TLIデータ構造体 Section 3-596 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_connect(3) t_connect(3) 参照 fcntl(2), t_accept(3), t_alloc(3), t_getinfo(3), t_listen(3), t_open(3), t_rcvconnect(3) 標準準拠 t_connect(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-597 t_error(3) t_error(3) 名称 t_error() − エラーメッセージの生成 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ void t_error (errmsg); char *errmsg; extern int t_errno; extern char *t_errlist[]; extern int t_nerr; 説明 t_error() 関数は、トランスポート関数の呼び出し中に検出された最後のエラーを説明するメッセージを、ユー ザーの言語で標準エラーに生成します。引き数文字列 errmsg は、エラーに説明を与えるユーザー提供のエラー メッセージです。 エラーメッセージは次のように書き出されます。 まず最初に、 errmsg がヌルポインタでなく errmsg にポイントされた文字がヌル文字でなければ、 errmsg でポイントされた文字列が書き出されて、最後にコロンとスペースがつきます。 次に、 t_errno に定義されている現在のエラーの標準エラーメッセージ文字列が書き出されます。 t_errno の値が [TSYSERR] 以外であれば、メッセージ文字列の後に改行が続きます。しかし t_errno が [TSYSERR] の場合には、 t_errno 文字列の後に errno に定義されている現在のエラーの標準エラー メッセージ文字列が続き、最後に改行がつきます。 t_error() によって書き出されるエラーメッセージ文字列の言語は、システムで定義されている言語です。これ が英語の場合には、 t_errno の値を説明するエラーメッセージ文字列は <xti.h> で定義されている t_errno コー ドの後にあるコメントと同じです。 errno の値を説明するエラーメッセージ文字列の内容は、引き数として errno を与えた時に strerror() 関数が返すものと同じです。 さまざまなメッセージのフォーマットを単純化するために、メッセージ文字列の配列 t_errlist が用意されてい ます。 t_errno をこのテーブルの索引として使用し、改行のないメッセージ文字列を得ることができます。変 数 t_nerr は、 t_errlist テーブルに入る最大のメッセージ数です。 エラー番号 t_errno は、エラーが発生し、正常に実行された呼び出しでクリアされない場合にのみ設定されま す。 スレッドでの安全性 t_error() 関数はマルチスレッドアプリケイションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン Section 3-598 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_error(3) t_error(3) セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 XTI の場合、正常に完了すると値0が戻されます。 TLI は値を戻しません。 エラー t_error() 関数にはエラーは定義されていません。 例 指定したアドレスの誤りによって t_connect() 関数がトランスポートエンドポイント fd2 に対して正常に実行で きなかった場合、次の呼び出しによってそのエラーを表すメッセージを出力することができます。 t_error("t_connect failed on fd2"); プリントされる診断メッセージは次のようになります。 t_connect failed on fd2: Incorrect address format ここで、 Incorrect address format は発生したエラーを表し、 t_connect failed on fd2 はどの関数がどのトラン スポートエンドポイントで実行されなかったかをユーザーに知らせます。 ファイル TLI 用の NLS メッセージカタログ /usr/lib/nls/msg/C/libnsl_s.cat 標準準拠 t_error(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-599 t_free(3) t_free(3) 名称 t_free() − ライブラリー構造体の解放 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_free (ptr, struct_type); char *ptr; int struct_type; 説明 t_free() 関数は、それ以前に t_alloc() によって割り当てられたメモリを解放します。この関数は指定された構 造体のメモリを解放するとともに、その構造体によって参照されているバッファのメモリも解放します。 引き数 ptr は、 t_alloc() について説明されている7つの構造体型のいずれか1つをポイントします。 struct_type はその構造体の型を示し、次のいずれかでなければなりません。 T_BIND struct t_bind T_CALL struct t_call T_OPTMGMT struct t_optmgmt T_DIS struct t_discon T_UNITDATA struct t_unitdata T_UDERROR struct t_uderr T_INFO struct t_info これらの構造体はそれぞれ、1つ以上のトランスポート関数への引き数として使用されます。 t_free() は指定された構造体の addr, opt, udata の各フィールドを適宜に検査し、 netbuf 構造体の buf フィール ドが示すバッファを解放します。 buf がヌルポインタの場合には、 t_free() はメモリを解放しようとしませ ん。すべてのバッファが解放された後で、 t_free() は ptr がポイントする構造体に関連するメモリを解放しま す。 ptr または buf ポインタのいずれかが、以前に t_alloc() によって割り当てられたものでないメモリブロックを示 していると、未定義の結果が発生します。 スレッドでの安全性 t_free() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユー ザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャンセル セーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 Section 3-600 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_free(3) t_free(3) 有効な状態 T_UNINIT以外のすべて 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TNOSTRUCTYPE] サポートされていない struct_type が要求されました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、適切なXTI (t_errno) が該当しないことを示します。 参照 t_alloc(3) 標準準拠 t_free(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-601 t_getinfo(3) t_getinfo(3) 名称 t_getinfo() − プロトコル固有のサービス情報の入手 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_getinfo (fd, info); int fd; struct t_info *info; 説明 t_getinfo() 関数は、ファイル記述子 fd に対応する基本トランスポートプロトコルの現在の特性を戻します。 info 構造体を使用して、 t_open() によって戻される情報と同じ情報が戻されます。この関数によって、トラン スポートユーザーは通信のどのフェーズでもこの情報にアクセスすることができます。 この引き数は、次のメンバーをもつ t_info 構造体をポイントします。 t_scalar_t addr; /* max size of the transport protocol address */ t_scalar_t options; /* max number of bytes of protocol-specific options */ t_scalar_t tsdu; /* max size of a transport service data unit,TSDU */ t_scalar_t etsdu; /* max size of expedited transport service data unit,ETSDU */ t_scalar_t connect; /* max data allowed on connection establishment functions */ t_scalar_t discon; /* max data allowed on t_snddis and t_rcvdis functions */ t_scalar_t servtype; /* service type supported by the transport provider */ t_scalar_t flags; /* other info about the transport provider */ 各フィールドの値の意味は次のとおりです。 addr ゼロ以上の値は、トランスポートプロトコル アドレスの最大サイズを示します。 値 −1 は、アドレスサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーがトランスポートプロトコル アドレスへのユーザー アクセスを提供していないことを示します。 options ゼロ以上の値は、プロバイダーによってサポートされているプロトコル固有のオプションの 最大バイト数を示します。 値 −1 は、オプションサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーがユーザー設定可能なオプションをサポートしてい ないことを示します。 tsdu ゼロより大きな値は、トランスポートサービス データ単位(TSDU) の最大サイズを示しま す。 Section 3-602 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_getinfo(3) t_getinfo(3) 値0は、トランスポートプロバイダーが接続中は論理境界を持たないデータストリームの送 信をサポートしているが、TSDU の概念はサポートしていないことを示します。 値 −1 は、TSDU のサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーが通常データの転送をサポートしていないことを示 します。 etsdu ゼロより大きな値は、急送トランスポートサービス データ単位(ETSDU)の最大サイズを示 します。 値0は、トランスポートプロバイダーが接続中は論理境界を持たない急送データストリーム の送信をサポートしているが、ETSDU の概念はサポートしていないことを示します。 値 −1 は、ETSDU のサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーが急送データの転送をサポートしていないことを示 します。 connect ゼロ以上の値は、接続確立関数 t_connect() および t_rcvconnect() に関連づけることのでき るデータの最大量を示します。 値 −1 は、接続確立中に送信されるデータの量に制限がないことを示します。 値 −2 は、トランスポートプロバイダーが接続確立関数でのデータの送信を許可していない ことを示します。 discon ゼロ以上の値は、 t_snddis() および t_rcvdis() 関数に関連づけることのできるデータの最大 量を示します。 値 −1 は、これらの打ち切り解放関数で送信できるデータの量に制限がないことを示しま す。 値 −2 は、トランスポートプロバイダーが打ち切り解放関数でのデータの送信を許可してい ないことを示します。 servtype このフィールドはトランスポートプロバイダーによってサポートされているサービスタイプ を示します。これについては後で説明があります。 flags これは、トランスポートプロバイダーに関するその他の情報を指定するのに使用するビット フィールドです。このフラグで T_SENDZERO ビットがセットされていると、基本トラン スポートプロバイダーがゼロ長の TSDU の送信をサポートしていることを示します。TEDU でのゼロ長フラグメントの使用については、 CAE Specification X/Open Transport Interface (XTI) マニュアルの付録 A "ISO Transport Protocol Information" を参照してください。注意: HP は現時点では、 timod モジュール内の T_SENDZERO フラグはサポートしていません。 トランスポートユーザーがプロトコルの独立性に関心がある場合には、上記のサイズにアクセスして、各情報 を入れるために必要なバッファのサイズを判別することができます。あるいは t_alloc() 関数を使用してこれら HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-603 t_getinfo(3) t_getinfo(3) のバッファを割り当てることができます。トランスポートユーザーが、関数で使用が許されているデータサイ ズの制限を超えると、エラーが発生します。各フィールドの値はオプションの折衝によって変化することがあ り、ユーザーは t_getinfo() を使用して、基本トランスポートプロトコルの現在の特性を調べることができま す。 info の servtype フィールドは、戻り時に以下のいずれかの値を示します。 トランスポートプロバイダーはコネクションモードのサービスをサポートしますが、オプ T_COTS ションの正常解放関数はサポートしていません。 T_COTS_ORD トランスポートプロバイダーは、コネクションモードのサービスをオプションの正常解放関 数とともにサポートしています。 トランスポートプロバイダーはコネクションレスモードのサービスをサポートしています。 T_CLTS このサービスタイプでは、 t_open() は etsdu, connect, discon について −2 を戻します。 スレッドでの安全性 t_getinfo() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検出さ れ、適切なXTI (t_errno) が該当しないことを示します。 参照 t_alloc(3), t_open(3) 標準準拠 t_getinfo(): SVID2, XPG3, XPG4 Section 3-604 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_getprotaddr(3) t_getprotaddr(3) 名称 t_getprotaddr() − プロトコルアドレスの入手 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ int t_getprotaddr (fd, boundaddr, perraddr); int fd; struct t_bind *boundaddr; struct t_bind *peeraddr; 説明 t_getprotaddr() 関数は、 fd によって指定されているトランスポートエンドポイントに現在対応しているローカ ルおよびリモート プロトコルアドレスを戻します。 boundaddr および peeraddr で、ユーザーはアドレスバッ ファの最大サイズである maxlen と、アドレスを入れるバッファをポイントする buf を指定します。戻り時に は、現在 fd にバインドされているアドレスがあれば boundaddr の buf フィールドがそのアドレスをポイント し、 len フィールドがそのアドレスの長さを示します。トランスポートエンドポイントが T_UNBND の状態に なっている場合には、 boundaddr の len フィールドにゼロが戻されます。 peeraddr の buf フィールドは、現在 fd に接続されているアドレスがあればそのアドレスをポイント接続されているアドレスがあればそのアドレス を ポ イ ン ト し、 len フィー ル ド は そ の ア ド レ ス の 長 さ を 示 し ま す。 ト ラ ン ス ポー ト エ ン ド ポ イ ン ト が T_DATAXFER の状態になっていない場合には、 peeraddr の len フィールドにゼロが戻されます。 スレッドでの安全性 t_getprotaddr() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期 キャンセルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] [TBUFOVFLW] 指定された識別子はトランスポートエンドポイントを参照していません。 着信引き数に割り当てられたバイト数(maxlen) はゼロより大きくなっていますが、その引き 数の値を保存するには小さすぎます。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-605 t_getprotaddr(3) [TPROTO] t_getprotaddr(3) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検出され、他の適 切な XTI (t_errno) が該当しないことを示します。 参照 t_bind(3) Section 3-606 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_getstate(3) t_getstate(3) 名称 t_getstate() − 現在の状態の入手 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_getstate (fd); int fd; 説明 t_getstate() 関数は、 fd で指定されたトランスポートエンドポイントに関連づけられているアプリケーションか ら見た、現在のプロバイダーの状態を戻します。 スレッドでの安全性 t_getstate() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 戻り値 正常に完了すると状態が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定さ れます。現在の状態は次のいずれかです。 T_UNBND バインドされていない T_IDLE アイドル状態 T_OUTCON 発信接続が保留中 T_INCON 着信接続が保留中 T_DATAXFER データ転送 T_OUTREL 発信正常解放 (正常解放指示を待っている) T_INREL 着信正常解放 (正常解放要求を待っている) t_getstate() を呼び出した時点でプロバイダーが状態転移中であると、この関数は異常終了します。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TSTATECHNG] トランスポートプロバイダーの状態は転移中です。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-607 t_getstate(3) [TPROTO] t_getstate(3) (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検出さ れ、適切なXTI (t_errno) が該当しないことを示します。 参照 t_open(3) 標準準拠 t_getstate(): SVID2, XPG3, XPG4 Section 3-608 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_listen(3) t_listen(3) 名称 t_listen() − 接続要求の受け入れ待機 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_listen (fd, call); int fd; struct t_call *call; 説明 t_listen() 関数は、呼び出しトランスポートユーザーからの接続要求を受け入れ待機します。 fd は、接続指示が 到着するローカルトランスポートエンドポイントをポイントします。戻り時には、 call に接続指示に関する情 報が入ります。パラメータ call は、以下のメンバーが入っている t_call 構造体をポイントします。 struct netbuf addr; struct netbuf opt; struct netbuf udata; int sequence; netbuf 型構造体は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定義 に使用するこの構造体には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置へのポインタ call では、 addr が呼び出しトランスポートユーザーのプロトコルアドレスを戻します。このアドレスは、将来 の t_connect() の呼び出しで使用できる形式になっています。ただし、 t_connect() は他の理由で実行されない 場合があります。例えば [TADDRBUSY] などです。 opt は、接続要求に関連づけられたプロトコル固有のパラメータを戻します。 OSI トランスポートプロバイ ダーを介した XTI の場合、構造体 isoco_options を使用する必要があります。FLIの場合については、使用して いるトランスポートプロバイダーの資料を参照してください。 udata は、接続要求で呼び出し側が送信したユーザーデータを戻します。 sequence は、戻された接続指示を固有に識別する番号です。 sequence の値によって、ユーザーは複数の接続指 示を受け入れ待機してから、そのいずれかに応答することができます。 この関数は call の addr, opt, udata の各フィールドに値を戻すため、 t_listen を実行する前にそれぞれの maxlen フィールドを設定して、そのバッファの最大サイズを指定しなければなりません。 デフォルトでは、 t_listen は同期モードで実行され、接続指示の到着を待ってからユーザーに戻ります。ただ HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-609 t_listen(3) t_listen(3) し (t_open() または fcntl() によって) O_NONBLOCK が設定されている場合には、 t_listen() は非同期で実行さ れ、既存の接続指示へのポールになります。既存の接続指示がなければ −1 を戻し、 t_errno に [TNODATA] を 設定します。 スレッドでの安全性 t_listen() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_IDLE, T_INCON 要注意 一部のトランスポートプロバイダーは、接続指示と接続そのものとを区別しません。その場合、 t_listen() から 正常に戻ると、既存の接続があることを示します CAE Specification X/Open Transport Interface (XTI) の付録 B "Internet Protocol-specific Information" を参照してください。 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TBADQLEN] によって参照されているエンドポイントの引き数 qlen がゼロです。 [TBUFOVFLW] 着信引き数に割り当てられたバイト数(maxlen) が、その引き数の値を保存するには小さすぎ ます。ユーザーから見たプロバイダーの状態はT_INCONに変化し、 call に戻される接続指 示情報は破棄されます。XTIの場合だけは、戻された sequence の値を使用して t_snddis() を 実行することができます。 O_NONBLOCK が設定されていましたが、接続指示が待ち行列に入っていません。 [TNODATA] このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必要で [TLOOK] す。 [TOUTSTATE] この関数は、 fd で参照されたトランスポートエンドポイント上で誤った順序で実行されま した。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TQFULL] fd で参照されたエンドポイントで未処理の指示の最大数に達しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検出さ れ、適切なXTI (t_errno) が該当しないことを示します。 Section 3-610 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_listen(3) t_listen(3) ファイル /usr/include/xti.h XTIデータ構造体 /usr/include/tiuser.h TLIデータ構造体 参照 fcntl(2), t_accept(3), t_alloc(3), t_bind(3), t_connect(3), t_open(3), t_snddis(3), t_rcvconnect(3) 標準準拠 t_listen(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-611 t_look(3) t_look(3) 名称 t_look() − トランスポートエンドポイント上の現在のイベントの検出 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_look (fd); int fd; 説明 t_look() 関数は、 fd で指定されたトランスポートエンドポイント上の現在のイベントを戻します。この関数に よって、ユーザーが同期モードで関数を呼び出している場合に、トランスポートプロバイダーはトランスポー トユーザーに非同期イベントの発生を通知することができます。一部のイベントは、ユーザーへの即時の通知 を必要とし、現在の関数または次に実行する関数でエラー [TLOOK] によって示されます。 この関数を使用すると、トランスポートユーザーは定期的にトランスポートエンドポイントをポールして非同 期イベントを検出することもできます。 スレッドでの安全性 t_look() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユー ザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャンセル セーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて XTI インターネットプロトコルに関する情報 TCP緊急ポインタをセットしたセグメントが TCP 受信バッファに入ると同時に、 T_EXDATA イベントがセッ トされます。 T_EXDATA は、TCP 緊急ポインタが指すバイトまでのデータがすべて受信されるまでセットさ れた状態になります。緊急ポインタが更新された後、その前にポインタが指していたバイトがまだ受信されて いない場合でも、更新処理はユーザには透過に行われます。 戻り値 t_look() は正常に完了すると、以下の可能なイベントのいずれが発生したかを示す値、またはイベントが存在 しなければゼロを戻します。以下のイベントのいずれかが戻されます。 T_LISTEN 接続指示受信 T_CONNECT 接続確認受信 T_DATA 通常データ受信 Section 3-612 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_look(3) t_look(3) T_ERROR (TLIのみ) 致命的なエラー発生 T_EXDATA 急送データ受信 T_DISCONNECT 切断受信 T_UDERR データグラムエラー指示 T_ORDREL 正常解放指示 T_GODATA (XTIのみ) 通常データフローのフロー制御の制約が上がりました。通常データを再び送信 できます。 T_GOEXDATA (XTIのみ) 急送データフローのフロー制御の制約が上がりました。急送データを再び送信 できます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検出さ れ、適切なXTI (t_errno) が該当しないことを示します。 参照 t_open(3), t_snd(3), t_sndudata(3) 標準準拠 t_look(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-613 t_open(3) t_open(3) 名称 t_open() − トランスポートエンドポイントの確立 構文 #include <fcntl.h> #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_open (name, oflag, info); char *name; int oflag; struct t_info *info; 説明 t_open() 関数は、トランスポートエンドポイントの初期化の最初のステップとして呼び出さなければなりませ ん。この関数は、特定のトランスポートプロバイダーを識別するファイルをオープンするとともに、そのエン ドポイントを識別するファイル記述子を戻して、トランスポートエンドポイントを確立します。 引き数 name は、トランスポートプロバイダーを識別するファイル名を示します。 HP XTIを使用してOSIプロ トコルスタックを接続する場合には、 name はコネクションモード サービスでは /dev/ositpi、コネクションレ スサービスでは /dev/osicltpi でなければなりません。 HP XTI を使って TCP プロトコルスタックに接続する場 合、 name は /dev/tcp であるべきです。 UDP では name が /dev/udp であるべきです (「廃止予定インタフェー ス」の項も参照してください)。 TLI の場合は、希望のトランスポートプロバイダのデバイスファイル名を使 います。 HP TCP/UDP/IP と HP OSI COTS および CLTS は XTI のみをサポートすることに注意してください。 oflag は (open() の場合と同様の) オープンフラグを示し O_RDWR にオプションで O_NONBLOCK のORを実 行したもので構成されます。これらのフラグはヘッダーファイル <fcntl.h> で定義されます。 t_open() は、そ のローカル トランスポートエンドポイントを識別するためにその後のすべての関数で使用される、ファイル記 述子を戻します。 この関数はまた、 t_info 構造体のフィールドを設定することによって、基礎トランスポートプロトコルのさま ざまなデフォルト特性も戻します。この引き数は、次のメンバーをもつ t_info 構造体をポイントします。 t_scalar_t addr; /* max size of the transport protocol */ /* address */ t_scalar_t options; /* max number of bytes of */ /* protocol-specific options */ t_scalar_t tsdu; /* max size of a transport service data */ /* unit (TSDU) */ t_scalar_t etsdu; /* max size of an expedited transport */ /* service data unit (ETSDU) */ t_scalar_t connect; /* max amount of data allowed on */ Section 3-614 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_open(3) t_open(3) /* connection establishment functions */ t_scalar_t discon; /* max amount of data allowed on */ /* t_snddis and t_rcvdis functions */ t_scalar_t servtype; /* service type supported by the */ /* transport provider */ t_scalar_t flags; /* other info about the transport provider */ 各フィールドの値の意味は次のとおりです。 addr ゼロ以上の値は、トランスポートプロトコル アドレスの最大サイズを示します。 値 −1 は、アドレスサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーがトランスポートプロトコル アドレスへのユーザーア クセスを提供していないことを示します。 options ゼロ以上の値は、プロバイダーによってサポートされているプロトコル固有のオプションの最 大バイト数を示します。 値 −1 は、オプションサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーがユーザー設定可能なオプションをサポートしていな いことを示します。 tsdu ゼロより大きな値は、トランスポートサービス データ単位(TSDU)の最大サイズを示します。 値0は、トランスポートプロバイダーが接続中は論理境界を持たないデータストリームの送信 をサポートしているが、TSDU の概念はサポートしていないことを示します。 値 −1 は、TSDUのサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーが通常データの転送をサポートしていないことを示し ます。 etsdu ゼロより大きな値は、急送トランスポートサービス データ単位(ETSDU)の最大サイズを示し ます。 値0は、トランスポートプロバイダーが接続中は論理境界を持たない急送データストリームの 送信をサポートしているが、ETSDU の概念はサポートしていないことを示します。 値 −1 は、ETSDU のサイズに制限がないことを示します。 値 −2 は、トランスポートプロバイダーが急送データの転送をサポートしていないことを示し ます。 connect ゼロ以上の値は、接続確立関数 t_connect() および t_rcvconnect() に関連づけることのできる データの最大量を示します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-615 t_open(3) t_open(3) 値 −1 は、接続確立中に送信されるデータの量に制限がないことを示します。 値 −2 は、トランスポートプロバイダーが接続確立関数でのデータの送信を許可していないこ とを示します。 discon ゼロ以上の値は、 t_snddis() および t_rcvdis() 関数に関連づけることのできるデータの最大量 を示します。 値 −1 は、これらの打ち切り解放関数で送信できるデータの量に制限がないことを示します。 値 −2 は、トランスポートプロバイダーが打ち切り解放関数でのデータの送信を許可していな いことを示します。 servtype このフィールドはトランスポートプロバイダーによってサポートされているサービスタイプを 示します。これについては後で説明があります。 flags これは、トランスポートプロバイダーに関するその他の情報を指定するのに使用するビット フィールドです。このフラグで T_SENDZERO ビットがセットされていると、基本トランス ポートプロバイダーがゼロ長の TSDU の送信をサポートしていることを示します。TEDU で のゼロ長フラグメントの使用については、 CAE Specification X/Open Transport Interface (XTI) マ ニュアルの付録 A "ISO Transport Protocol Information" を参照してください。 トランスポートユーザーがプロトコルの独立性に関心がある場合には、上記のサイズにアクセスして、各情報 を入れるために必要なバッファのサイズを判別することができます。あるいは t_alloc() 関数を使用してこれら のバッファを割り当てることができます。トランスポートユーザーが、関数で使用が許されているデータサイ ズの制限を超えると、エラーが発生します。 info の servtype フィールドは、戻り時に以下のいずれかの値を示します。 T_COTS トランスポートプロバイダーはコネクションモードのサービスをサポートしますが、オプショ ンの正常解放関数はサポートしていません。 T_COTS_ORD トランスポートプロバイダーは、コネクションモードのサービスをオプションの正常解放関数 とともにサポートしています。 T_CLTS トランスポートプロバイダーはコネクションレスモードのサービスをサポートしています。こ のサービスタイプでは、 t_open() は etsdu, connect, discon について −2 を戻します。 1つのトランスポートエンドポイントが同時にサポートできるのは、上記のサービスのいずれ か1つだけです。 トランスポートユーザーが info をヌルポインタに設定すると、 t_open() でプロトコル情報は戻されません。 スレッドでの安全性 t_open() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、 POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 Section 3-616 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_open(3) t_open(3) 廃止予定インタフェース HP XTI を通して TCP および UDP を使用する時は、 name は、それぞれ、 /dev/inet_cots および /dev/inet_clts となります。これらの名称は旧製品との互換性のためにサポートされまています。将来のリリースでは、サ ポートされなくなるかもしれませんので、それぞれ、 /dev/tcp および /dev/udp に置き換えられるべきです。 戻り値 正常に完了すると、有効なエンドポイント識別子が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定されます。 HP OSIは、 T_COTS_ORD servtypeをサポートしていません。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADFLAG] 不適当なフラグが指定されています。 [TBADNAME] トランスポートプロバイダー名が不適当です。 [TSYSERR] この関数の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検出さ れ、適切なXTI (t_errno) が該当しないことを示します。 参照 open(2), t_sync(3) 標準準拠 t_open(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-617 t_optmgmt(3) t_optmgmt(3) 名称 t_optmgmt() − トランスポートエンドポイントのオプションの管理 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_optmgmt (fd, req, ret); int fd; struct t_optmgmt *req; struct t_optmgmt *ret; 説明 t_optmgmt() 機能を使用すると、トランスポートユーザーはプロトコルオプションの取り出しと確認、またト ランスポートプロバイダーとのオプションの折衝を行なうことができます。引き数 fd はバインドされたトラン スポートエンドポイントを示します。 req および ret 引き数は、次のメンバーが入っている t_optmgmt 構造を示します。 struct netbuf opt; t_scalar_t flags; opt フィールドはプロトコルオプションを識別します。 flags フィールドは、それらのオプションでとるアク ションを指定するのに用います。 オプションは netbuf 構造によって、 t_bind() のアドレスと同様の方法で表されます。引き数 req は、プロバイ ダーの特定のアクションの要求と、プロバイダーへのオプションの送信に使用されます。引き数 len はオプ ションのバイト数を指定します。 buf はオプションバッファを示します。 req 引き数には、 maxlen は意味を持 ちません。 OSIトランスポートプロバイダーを介したXTIの場合には、オプションバッファはコネクション型 サービスでは isoco_options 構造、コネクションレスサービスでは isocl_options 構造にする必要があります。 TLIの場合については、使用しているトランスポートプロバイダーの資料を参照してください。 トランスポートプロバイダーは、オプションおよびフラグの値を ret を用いてユーザーに戻すことができま す。 ret については、 maxlen がオプションバッファの最大サイズを指定し、 buf がオプションを入れるバッ ファを示します。 OSI トランスポートプロバイダーを介したXTI の場合には、オプションバッファはコネク ション型サービスでは isoco_options 構造、コネクションレスサービスでは isocl_options 構造にする必要があり ます。TLIの場合については、使用しているトランスポートプロバイダーの資料を参照してください。戻り時 に、 len は戻されたオプションのバイト数を示します。 maxlen の値は req 引き数には意味をもちませんが、 ret 引き数ではオプションバッファに入る最大バイト数を指定するために設定しなければなりません。オプショ ンの実際の内容は、トランスポートプロバイダーによって決まります。 オプションバッファ内の各オプションは struct t_opthdr の形式をもち、その後にオプションの値が続きます。 構造 t_opthdr の level フィールドは、トランスポートプロバイダーのXTIレベルまたはプロトコルを識別しま Section 3-618 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_optmgmt(3) t_optmgmt(3) す。 name フィールドは、レベル内のオプションを識別します。 len にはその合計長が入ります。オプション ヘッダー t_opthdr の長さに、オプションの値の長さを加えたものです。アクション T_NEGOTIATE が設定さ れた状態で t_optmgmt() が呼び出された場合には、戻されたオプションの status フィールドに折衝の成否に関 する情報が入っています。 入力または出力オプションバッファ内の各オプションは、 t_uscalar_t の境界で始まっていなければなりませ ん。それを達成するために、マクロ OPT_NEXTHDR(pbuf, buflen, option) を使用することができます。パラ メータ pbuf はオプションバッファ opt.buf を示すポインタを表し、 buflen はその長さを表します。パラメータ option はオプションバッファ内の現在のオプションを示します。 OPT_NEXTHDR は、次のオプションの位置 を示すポインタを戻すか、オプションバッファを使いきった場合にはヌルポインタを戻します。マクロは書き 込みと読取りに便利に使用できます。正確な定義については、 X/Open Company Limited 発行の CAE Specification X/Open Transport Interface (XTI) マニュアルで <xti.h> を参照してください。 トランスポートユーザーが入力で複数のオプションを指定する場合には、すべてのオプションが同じレベルを アドレスしていなければなりません。 オプションバッファのいずれかのオプションが最初のオプションと同じレベルを示していないか、サポートさ れていないレベルを指定していると、 t_optmgmt() 要求の実行は失敗に終わり、[TBADOPT]が設定されます。 エラーが検出された場合、一部のオプションはすでに正しく折衝を終えている可能性があります。トランス ポートユーザーは、 T_CURRENT フラグをセットして t_optmgmt() を呼び出し、現在のステータスを調べる ことができます。 req の flags フィールドは、以下のアクションのいずれか1つを指定していなければなりません。 T_NEGOTIATE このアクションでは、トランスポートユーザーがオプション値の折衝を実行することができ ます。 ユーザーは対象となるオプションとその値を、 req->opt.buf および req->opt.len で指定され たバッファ内に指定します。折衝の済んだオプション値は、 ret->opt.buf が示すバッファ内 に戻されます。戻された各オプションのステータスフィールドは、折衝の結果を示すように 設定されます。ステータスは次のいずれかです。 T_SUCCESS 提案した値が折衝後もそのまま受け入れられた場合。 T_PARTSUCCESS 折衝によって値が引き下げられた場合。 T_FAILURE 折衝規則によって折衝が失敗に終わった場合。 T_NOTSUPPORT トランスポートプロバイダーがこのオプションをサポートしていない か、不当に特権オプションの折衝を要求している場合。 T_READONLY 読み取り専用オプションの変更が要求された場合。 ステータスが T_SUCCESS, T_FAILURE, T_NOTSUPPORT, T_READONLY のいずれかの 場合、戻されるオプション値は入力で要求したものと同じになります。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-619 t_optmgmt(3) t_optmgmt(3) 折衝の全体的な結果は、 ret->flags に戻されます。 このフィールドには最悪の結果が 1 つ入り、 T_NOTSUPPORT, T_READONLY, T_FAILURE, T_PARTSUCCESS, T_SUCCESS の順序に従って評価されます。値 T_NOTSUPPORT が最悪の結果で、 T_SUCCESS が最良の結果です。 各レベルについて、オプション T_ALLOPT を入力で要求することができます。このオプ ションには値は指定せず、 t_opthdr の部分だけを指定します。この入力は、このレベルの サポートされているすべてのオプションを、折衝によってデフォルト値にするよう要求する ものです。結果はオプションごとに、 ret->opt.buf に戻されます。 (トランスポートエンド ポイントの状態によって、デフォルトの折衝要求がすべて成功するわけではないことに注意 してください。) このアクションでは、ユーザーは req に指定されたオプションがトランスポートプロバイ T_CHECK ダーによってサポートされているかどうかを確認することができます。 オプションがオプション値なしで指定されていると (t_opthdr 構造のみで構成されている と)、そのオプションが戻される場合の status フィールドは、そのオプションがサポートさ れていれば T_SUCCESS に、サポートされていないか追加のユーザー特権が必要であれば T_NOTSUPPORT に、またそれが(現在の状態で)読み取り専用であれば T_READONLY に 設定されます。オプション値は戻されません。 オプションがオプション値を伴って指定されていると、戻されるオプションの status フィー ルドは、ユーザーが T_NEGOTIATE でこの値の折衝を試みたかのように、同じ値を持って います。ステータスが T_SUCCESS, T_FAILURE, T_NOTSUPPORT, T_READONLY のい ずれかであれば、戻されるオプション値は入力で要求したものと同じになります。 オプション検査の全体的な結果は、 ret->flags に戻されます。このフィールドにはオプショ ン検査の最悪の結果が1つ入り、その評価は T_NEGOTIATE と同様です。 折衝は行なわれないことに注意してください。現在有効なオプション値はすべて、変化しま せん。 T_DEFAULT このアクションでは、トランスポートユーザーがデフォルトのオプション値を取り出すこと ができます。ユーザーは必要なオプションを req->opt.buf に指定します。オプション値は関 係なく、無視されます。オプションの t_opthdr 部分を指定するだけで十分です。デフォル ト値は ret->opt.buf に戻されます。 戻される status フィールドは、次のうちの1つです。 T_NOTSUPPORT プロトコルレベルがこのオプションをサポートしていないか、トラ ンスポートユーザーが不当に特権オプションを要求した場合。 T_READONLY Section 3-620 Hewlett-Packard Company オプションが読み取り専用の場合。 −3− HP-UX 11i Version 2: August 2003 t_optmgmt(3) t_optmgmt(3) T_SUCCESS その他のすべての場合。 要求の全体的な結果は ret->flags に戻されます。このフィールドには最悪の結果が 1 つ入 り、その評価は T_NEGOTIATE と同様です。 各レベルについて、オプション T_ALLOPT を入力で要求することができます。このレベル のサポートされているすべてのオプションが、そのデフォルト値とともに戻されます。この 場合、呼び出しの前に ret->opt.maxlen には少なくとも値 info->options を指定する必要があ ります (t_getinfo(3), t_open(3) を参照)。 T_CURRENT このアクションでは、トランスポートユーザーが現在有効なオプション値を取り出すことが できます。ユーザーは必要なオプションを req->opt.buf に指定します。オプション値は関係 なく、無視されます。オプションの t_opthdr 部分を指定するだけで十分です。有効なオプ ション値は ret->opt.buf に戻されます。 戻される status フィールドは、次のうちの1つです。 T_NOTSUPPORT プロトコルレベルがこのオプションをサポートしていないか、トラ ンスポートユーザーが不当に特権オプションを要求した場合。 T_READONLY オプションが読み取り専用の場合。 T_SUCCESS その他のすべての場合。 要求の全体的な結果は ret->flags に戻されます。このフィールドには最悪の結果が 1 つ入 り、その評価は T_NEGOTIATE と同様です。 各レベルについて、オプション T_ALLOPT を入力で要求することができます。このレベル のサポートされているすべてのオプションが、その現在の有効値とともに戻されます。 オプション T_ALLOPT は、 t_optmgmt() およびアクション T_NEGOTIATE, T_DEFAULT, T_CURRENT のいずれかとともにのみ、使用することが可能です。これはサポートされて いるどのレベルにでも使用でき、このレベルのサポートされているすべてのオプションにア ドレスします。オプションに値はなく、 t_opthdr のみで構成されます。 t_optmgmt() の呼 び出しでは1つのレベルのオプションしかアドレスできないため、このオプションを他のオ プションとともに要求してはなりません。機能は、このオプションの処理が終わるとただち に戻ります。 オプションは、入力オプションバッファにある順序で、それぞれ独立して処理されます。1 つのオプションが2回以上入力された場合、使用システムによって、その回数だけ出力され る場合と1回だけ戻される場合とがあります。 トランスポートプロバイダーは、 T_NEGOTIATE や T_CHECK 機能をサポートできるイ ンタフェースを提供できないことがあります。その場合には、エラー [T_NOTSUPPORT] が 戻されます。 機能 t_optmgmt() は、さまざまな状況や使用システムによって、ブロックすることがあります。例えば、呼び HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-621 t_optmgmt(3) t_optmgmt(3) 出しで指定されたプロトコルが別のコントローラー上にある場合、この機能はブロックします。また、フロー 制御の制約によってもブロックすることがあります。例えば以前にこのトランスポートエンドポイントを通過 したデータセットが、まだ完全に処理されていない場合などです。この機能がシグナルによって割り込まれる と、その時点までに終了していたオプションの折衝は有効なままです。 O_NONBLOCK が設定されている と、機能の動作は変化しません。 XTIレベルのオプション XTIレベルのオプションは、特定のトランスポートプロバイダーに固有のものではありません。XTIの各システ ムは、以下に定義するオプションをまったくサポートしない場合も、すべてをサポートする場合も、一部だけ をサポートする場合もあります。特権モードや読み取り専用モード、あるいは特定のトランスポートプロバイ ダーの fd でのみ提供して、これらのオプションの使用を制限するシステムもあります。 以下のオプションは、アソシエーションに関連するものではありません。 T_UNINIT を除くすべての XTI状態 で折衝されます。 プ ロ ト コ ル レ ベ ル は XTI_GENERIC で す。 こ の レ ベ ル で は 以 下 の オ プ ショ ン が 定 義 さ れ て い ま す。 XTI_DEBUG の要求は絶対必要条件です。 XTI_LINGER をアクティブ化する要求は絶対必要条件です。この オ プ ショ ン の タ イ ム ア ウ ト 値 は そ う で は あ り ま せ ん。 XTI_RCVBUF, XTI_RECVLOWAT, XTI_SNDBUF, XTI_SNDLOWAT は、絶対必要条件ではありません。 XTI_DEBUG このオプションはデバッギングを可能にします。このオプションの値はシステムごとに定義 されています。このオプションに値が指定されていない場合、すなわちオプションヘッダー のみで指定されている場合には、デバッグを行えません。 システムはトレースを処理するユーティリティを提供しています。また、各システムはデ バッグを可能にする他の手段を提供していることもあります。 XTI_LINGER このオプションは、送信バッファ内にまだ待ち行列化されているデータ送信がある場合に t_close() または close() の実行を遅らせるために使用します。オプションの値は、実行の遅 延期間を指定します。 close() または t_close() が実行され、送信バッファが空でない場合、 システムは指定の遅延期間の間エンドポイントをクローズせずに、保留されているデータの 送信を試みます。遅延期間が過ぎた後も保留されているデータは、破棄されます。 システムによって、 t_close() または close() が最高で遅延期間だけブロックする場合と、た だちに戻ってそこでシステムが最高で遅延期間だけ既存の接続を維持する場合とがありま す。 オプションは、次のように宣言された構成 t_linger から成ります。 struct t_linger{ t_uscalar_t l_onoff; /* switch option on/off */ t_uscalar_t l_linger; /* linger period in seconds */ } Section 3-622 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 t_optmgmt(3) t_optmgmt(3) l_onoff の有効な値は次のいずれかです。 T_NO switch option off T_YES activate option l_onoff の値は絶対必要条件です。 フィールド l_linger は、遅延期間を秒数で指定します。トランスポートユーザーはこの フィールドを T_UNSPEC に設定して、デフォルト値を要求することができます。デフォル トのタイムアウト値は、基本トランスポートプロバイダーによって異なります (多くの場合 はT_INFINITE)。このフィールドの有効な値は、 T_UNSPEC, T_INFINITE およびすべての 正の数です。 l_linger 値は絶対必要条件ではありません。システムは、この値に上限と下限を設定するこ とができます。下限より短い期間を要求すると、折衝によって下限の値に設定されます。 このオプションは t_snddis() の実行は遅らせないことに注意してください。 XTI_RCVBUF このオプションは、受信バッファに割り当てる内部バッファサイズの調整に使用します。 バッファサイズは、通信量の多い接続のために拡大したり、着信データのバックログを制限 するために縮小したりすることができます。デフォルトと最大のバッファサイズは、プロト コルによって異なります。 tcp(7P) や udp(7P) などの各プロトコルのマニュアルエントリを 参照してください。最大バッファサイズは、使用している基幹プロトコルに基づいて ndd 変数 tcp_recv_hiwater_max および udp_recv_hiwater_max によって管理されます。 この要求は絶対必要条件ではありません。システムは、オプション値に上限と下限を設定す ることができます。下限より小さい値を要求すると、折衝によって下限の値に設定されま す。 有効な値は、すべての正の数です。 XTI_RCVLOWAT このオプションは、受信バッファの最低マークを設定するために使用します。オプション値 は、このバイト数まで受信バッファ内にデータが蓄積されてはじめてトランスポートユー ザーが受信バッファ内のデータを検出できるという、最小のバイト数です。蓄積された受信 データが最低マークを超えると T_DATA イベントが作成され、イベントメカニズム(例えば poll() や select()) がデータを示し、 t_rcv() または t_rcvudata() によってデータを読み取れる ようになります。 この要求は絶対必要条件ではありません。システムは、オプション値に上限と下限を設定す ることができます。下限より小さい値を要求すると、折衝によって下限の値に設定されま す。 有効な値は、すべての正の数です。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-623 t_optmgmt(3) t_optmgmt(3) XTI_SNDBUF このオプションは、送信バッファに割り当てる内部バッファサイズの調整に使用します。こ のバッファのデフォルト最大サイズは、ndd 変数 tcp_xmit_hiwater_max によって制御されま す。 この要求は絶対必要条件ではありません。システムは、オプション値に上限と下限を設定す ることができます。下限より小さい値を要求すると、折衝によって下限の値に設定されま す。 有効な値は、すべての正の数です。 XTI_SNDLOWAT このオプションは、送信バッファの 最低マークを設定するために使用します。オプション値は、このバイト数まで送信バッファ 内にデータが蓄積されてはじめてデータが送信されるという、最小のバイト数です。 この要求は絶対必要条件ではありません。システムは、オプション値に上限と下限を設定す ることができます。下限より小さい値を要求すると、折衝によって下限の値に設定されま す。 有効な値は、すべての正の数です。 スレッドでの安全性 t_optmgmt() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 TLIは、TPI (トランスポート プロバイダー インタフェース) に適合するトランスポートプロバイダーをすべて サポートします。ユーザーは /usr/lib/libnsl_s.a をリンクすることによって、TLIバージョンの t_* ルーチンにア クセスすることができます。 TLIの詳細については、 STREAMS/UX for HP 9000 Reference Manual のTLIの項を 参照してください。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TOUTSTATE] 機能が誤った順序で実行されました。 [TACCES] ユーザーは指定されたオプションを折衝するパーミッションを持っていません。 [TBADOPT] 指定されたプロトコルオプションの形式が誤っているか、無効な情報が含まれていまし た。 Section 3-624 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 t_optmgmt(3) [TBADFLAG] [TBUFOVFLW] t_optmgmt(3) 無効なフラグが指定されました。 着信引き数に割り当てられたバイト数(maxlen) はゼロより大きくなっていますが、その 引き数の値を保存するには小さすぎます。 ret に戻される情報は破棄されます。 [TSYSERR] [TPROTO] この機能の実行中にシステムエラーが発生しました。 (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、既存のXTI t_errno が該当しないことを示します。 [TNOTSUPPORT] (XTI のみ) このアクションは基本トランスポートプロバイダーによってサポートされて いません。 参照 t_accept(3)、 t_alloc(3)、 t_connect(3)、 t_getinfo(3)、 t_listen(3)、 t_open(3)、 t_rcvconnect(3) 標準準拠 t_optmgmt(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-625 t_rcv(3) t_rcv(3) 名称 t_rcv() − 接続を介して送信されたデータまたは急送データの受信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_rcv (fd, buf, nbytes, flags); int fd; char *buf; unsigned nbytes; int *flags; 説明 t_rcv() 機能は、通常データまたは急送データを受信します。 fd は、データが到着するローカル トランスポー トエンドポイントを指定します。 buf は、ユーザーデータが入る受信バッファを示します。 nbytes は受信バッ ファのサイズを指定します。 flags は t_rcv() からの戻り時に設定され、以下に説明するオプションフラグを指 定します。 デフォルトでは、 t_rcv() は同期モードで動作し、現在入手可能なデータがなければデータの到着を待ちます。 ただし (t_open() または fcntl() によって) O_NONBLOCK が設定されている場合には、 t_rcv() は非同期モード で実行されて、入手可能なデータがないと実行は失敗に終わります。 (下記の[TNODATA]を参照。) 呼び出しからの戻り時に flags が T_MORE に設定されていると、もっとデータがあることを示します。した がって、現在のトランスポートサービス データ単位(TSDU) または急送トランスポートサービス データ単位 (ETSDU)を複数の t_rcv() 呼び出しで受信しなければなりません。非同期モードでは、受信バイト数が指定の受 信バッファサイズより少ない場合にも t_rcv() からの戻り時に T_MORE フラグが設定されることがあります。 T_MORE フラグが設定された t_rcv() は、現在のTSDUの続きのデータを得るためにすぐに別の t_rcv() を続け て実行しなければならないことを示しています。 T_MORE フラグの設定されていない t_rcv() 呼び出しからの 戻りによって、TSDUの末尾が示されます。トランスポートプロバイダーが、 t_open() または t_getinfo() から の戻り時に info 引き数に示されているTSDUの概念をサポートしない場合には、 T_MORE フラグは意味を持 たず、無視されます。 t_rcv() の呼び出しで nbytes がゼロより大きい場合、 t_rcv() はTSDUの末尾がユーザー に戻された場合にのみ0を戻します。 戻り時に flags が T_EXPEDITED に設定されていると、戻されたデータは急送データです。急送データのバイ ト数が nbytes を超えると、 t_rcv() は最初の呼び出しからの戻り時に T_EXPEDITED と T_MORE を設定しま す。残りのETSDUを取り出すための後続の呼び出しでは、戻り時に T_EXPEDITED が設定されたままになり ます。 T_MORE フラグの設定されていない t_rcv() 呼び出しからの戻りによって、ETSDUの末尾が示されま す。 TSDUの一部を受信した後で急送データが到着すると、ETSDUの処理が済むまで、 TSDUの残りの部分の受信 は一時停止されます。ETSDU全体の受信が完了した (戻り時に T_MORE が設定されなかった)後でのみ、ユー Section 3-626 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_rcv(3) t_rcv(3) ザーはTSDUの残りを受信できるようになります。 同期モードでユーザーが通常データまたは急送データの到着を知るには、この機能を実行するか、 t_look() 機 能を用いて T_DATA または T_EXDATA イベントの発生を調べるかの方法をとらなければなりません。 スレッドでの安全性 t_rcv() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユー ザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャンセル セーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 XTI インターネット固有の情報 通常のデータ送られると、 T_MORE フラグは無視されます。 TCPアージェントポインタがデータストリーム 中のバイトを指している場合、このマークの付いたバイトと、これに先行する全バイトがアージェントバイト として扱われ、 T_EXPEDITED フラグをセットして受信されます。ユーザーが提供するバッファが不足し て、全アージェントデータが収まらない場合は、 T_MORE フラグがセットされ、アージェントデータの読み 取りが可能であることが示されます。なお、 T_EXPEDITED フラグをセットして受信されたバイト数は、必 ずしも T_EXPEDITED フラグをセットして送られたバイト数とは一致しないことに注意してください。 戻り値 正常に完了すると、 t_rcv() は受信したバイト数を戻します。それ以外の場合には値 −1 が戻され、 t_errno は エラーを示す値に設定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TNODATA] O_NONBLOCK が設定されましたが、現在トランスポートプロバイダーから入手できる データはありません。 [TLOOK] このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 要です。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TOUTSTATE] (XTI のみ) fd が参照するエンドポイントで、機能が誤った順序で実行されました。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切なXTI (t_errno) が該当しないことを示します。 参照 fcntl(2), t_getinfo(3), t_look(3), t_open(3), t_snd(3) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-627 t_rcv(3) t_rcv(3) 標準準拠 t_rcv(): SVID2, XPG3, XPG4 Section 3-628 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_rcvconnect(3) t_rcvconnect(3) 名称 t_rcvconnect() − 接続要求からの確認の受信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_rcvconnect (fd, call); int fd; struct t_call *call; 説明 t_rcvconnect() 機能を使用すると、呼び出しトランスポートユーザーは以前に送信した接続要求のステータスを 判別することができます。 t_rcvconnect() を t_connect() とともに使用して、非同期モードでの接続確立を行う こともできます。接続は、この機能が正常に完了した時点で確立されます。 fd は、通信を確立するローカル トランスポートエンドポイントを示します。 call には新しく確立された接続に 関連する情報が入ります。 call は、以下のメンバーが入っている t_call 構造を示します。 struct netbuf addr; struct netbuf opt; struct netbuf udata; int sequence; タイプ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定 義に使用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置を示す call では、 addr は応答トランスポートエンドポイントに対応するプロトコルアドレスを戻します。 opt は、接 続に関連するプロトコル固有の情報を表します。 OSI トランスポートプロバイダーを介した XTI の場合、構造 isoco_options を使用する必要があります。TLI の場合については、使用しているトランスポートプロバイダー の資料を参照してください。 udata は、接続確立時にあて先トランスポートユーザーが戻すオプションのユー ザーデータを示します。 sequence は、この機能では意味を持ちません。 この機能を実行する前に各引き数の maxlen フィールドを設定して、それぞれのバッファの最大サイズを指定し なければなりません。ただし、 call はヌルポインタでもよく、その場合は t_rcvconnect() からの戻り時にユー ザーに情報が提供されなくなります。デフォルトでは、 t_rcvconnect() は同期モードで実行され、接続の確立 を待ってから戻ります。戻り時には、 addr, opt, udata の各フィールドは接続に関連した値を反映しています。 O_NONBLOCK が (t_open() または fcntl() によって)設定されている場合には、 t_rcvconnect() は非同期で実行 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-629 t_rcvconnect(3) t_rcvconnect(3) され、既存の接続確認へのポールになります。接続確認がなければ t_rcvconnect() の実行は失敗に終わり、接 続の確立を待たずにただちに戻ります(下記の [TNODATA] を参照)。後でもう一度 t_rcvconnect() を実行して接 続確立のフェーズを完了させ、 call に戻された情報を取り出す必要があります。 スレッドでの安全性 t_rcvconnect() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期 キャンセルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_OUTCON 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 指定された識別子はトランスポートエンドポイントを参照していません。 [TBADF] [TBUFOVFLW] 着信引き数に割り当てられたバイト数が、その引き数の値を保存するには小さすぎ、 call に戻される接続情報は破棄されます。ユーザーから見たプロバイダーの状態は T_DATAXFER に変化します。 O_NONBLOCK が設定されましたが、接続確認はまだ到着していません。 [TNODATA] このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 [TLOOK] 要です。 [TNOTSUPPORT] [TOUTSTATE] この機能は基本トランスポートプロバイダーによってサポートされていません。 fd が参照するトランスポートエンドポイントで、この機能が誤った順序で実行されまし た。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、既存のXTI (t_errno) が該当しないことを示します。 ファイル /usr/include/xti.h XTIデータ構造 /usr/include/tiuser.h TLIデータ構造 Section 3-630 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_rcvconnect(3) t_rcvconnect(3) 参照 fcntl(2), t_accept(3), t_alloc(3), t_bind(3), t_connect(3), t_listen(3), t_open(3) 標準準拠 t_rcvconnect(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-631 t_rcvdis(3) t_rcvdis(3) 名称 t_rcvdis() − 切断情報の取り出し 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_rcvdis (fd, discon); int fd; struct t_discon *discon; 説明 t_rcvdis() 機能は、切断の原因を識別し、切断によって送信されたユーザーデータを取り出すのに使用します。 fd は接続が存在したローカル トランスポートエンドポイントを示します。 discon は、以下のメンバーが入っ ている t_discon 構造を示します。 struct netbuf udata; int reason; int sequence; タイプ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定 義に使用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置を示す reason は、プロトコル固有の理由コードによって、切断の理由を示します。 OSI トランスポートプロバイダー を介した HP XTI の場合、これらのコードは OTS/9000 マニュアルの「トランスポートエラー」の項で説明し てあります。 TLI の場合については、使用しているトランスポートプロバイダーの資料を参照してください。 udata は、切断とともに送信されたユーザーデータを示します。 sequence は、その切断に対応する未処理の接 続指示を示します。 sequence が意味を持つのは、 1つ以上の t_listen() 機能を実行してその結果の接続指示を処 理している受動トランスポートユーザーが t_rcvdis() を実行した場合だけです。切断指示が発生すると、 sequence を使用して、どの未処理の接続指示がその切断に対応しているかを識別することができます。 ユーザーが着信データの有無に関心がなく、 reason や sequence の値を知る必要がない場合には、 discon をヌ ルポインタにしても構いません。その場合、切断に関連するユーザーデータは破棄されます。ただし、ユー ザーが (t_listen() によって) 複数の未処理の接続指示を取り出した場合に、 discon がヌルポインタになってい ると、どの接続指示が切断に対応するかを判別できなくなります。 Section 3-632 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_rcvdis(3) t_rcvdis(3) スレッドでの安全性 t_rcvdis() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_DATAXFER, T_OUTCON, T_OUTREL, T_INREL, T_INCON (ocnt > 0) 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TNODIS] 指定されたトランスポートエンドポイントに、現在切断指示はありません。 [TBUFOVFLW] 着信データに割り当てられたバイト数が、データを保存するには小さすぎます。 fd が受動 エンドポイントで、 ocnt (未処理の接続の数) > 1 の場合には、状態は T_INCON のままに なります (t_getstate を参照)。それ以外の場合には、エンドポイントの状態は T_IDLE にな ります。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TOUTSTATE] (XTI のみ) fd が参照するエンドポイントで、機能が誤った順序で実行されました。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検出さ れ、既存の XTI (t_errno) が該当しないことを示します。 参照 t_alloc(3), t_connect(3), t_listen(3), t_open(3), t_snddis(3) 標準準拠 t_rcvdis(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-633 t_rcvrel(3) t_rcvrel(3) 名称 t_rcvrel() − トランスポートエンドポイントでの正常解放指示の受信に対する確認 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_rcvrel (fd); int fd; 説明 t_rcvrel() 機能は、トランスポートエンドポイントでの正常解放指示の受信を確認するために、コネクション モードで使用します。解放されるエンドポイントは fd によって指定されますが、これは t_open() 機能で以前 に戻されたファイル記述子です。 fd で指定されたトランスポートエンドポイントでこの正常解放指示を受信した後、トランスポートユーザーは そのトランスポートエンドポイントからそれ以上のデータを受信しようとしてはなりません。解放されたトラ ンスポートエンドポイントからそれ以上データを受信しようとすると、ブロックの状態が続きます。ただし、 t_sndrel() 機能の呼び出しによってトランスポートユーザーが解放を送信するまでは、その接続を介してデータ の送信を続けることができます。 t_rcvrel() 機能は、 t_open() または t_getinfo() 機能によって戻された servtype サービスタイプが T_COTS_ORD の場合 (オプションの正常解放機能を伴うコネクションモードのサービスをサポートの場合) にのみ、使用する ことができます。 スレッドでの安全性 t_rcvrel() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_DATAXFER, T_OUTREL 注意 HP OSI XTI は t_rcvrel() をサポートしていません。 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 Section 3-634 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_rcvrel(3) t_rcvrel(3) [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TNOREL] 指定されたトランスポートエンドポイントに、現在正常解放指示はありません。 [TBUFOVFLW] 着信データに割り当てられたバイト数が、データを保存するには小さすぎます。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TLOOK] fd が参照するトランスポートエンドポイントで非同期イベントが発生し、即時アテン ションが必要です。 [TSYSERR] [TPROTO] この機能の実行中にシステムエラーが発生しました。 (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切なXTI (t_errno) が該当しないことを示します。 [TOUTSTATE] (XTI のみ) fd が参照するトランスポートエンドポイントで、機能が誤った順序で実行さ れました。 参照 t_getinfo(3), t_open(3), t_sndrel(3) 標準準拠 t_rcvrel(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-635 t_rcvudata(3) t_rcvudata(3) 名称 t_rcvudata() − リモート トランスポートプロバイダー ユーザーからのデータ単位の受信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_rcvudata (fd, unitdata, flags); inf fd; struct t_unitdata *unitdata; int *flags; 説明 t_rcvudata() 機能は、リモート トランスポートプロバイダー ユーザーからデータ単位を受信するために、コネ クションレスモードで使用します。引き数 fd は、データの受信に使用するローカル トランスポートエンドポ イントを示します。 unitdata には受信データ単位に関連する情報が入ります。 flags は戻り時に、完全なデータ 単位を受信しなかったことを示すよう設定されます。引き数 unitdata は、以下のメンバーが入っている t_unitdata 構造を示します。 struct netbuf addr; struct netbuf opt; struct netbuf udata; タイプ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定 義に使用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置を示す この機能を呼び出す前に、 addr, opt, udata の maxlen フィールドを設定し、それぞれのバッファの最大サイズを 指定しておかなければなりません。 この呼び出しからの戻り時には、 addr は送信ユーザーのプロトコルアドレスを示し、 opt はこのデータ単位に 関連づけられたプロトコル固有のオプションを示し、 udata は受信したユーザーデータを示します。 デフォルトでは t_rcvudata() は同期モードで実行されます。 t_rcvudata() 機能は fd で指定されたトランスポー トエンドポイントでのデータの到着を待ってから、この機能を呼び出したトランスポートユーザーに制御を戻 します。ただし、 fd パラメータで指定されたトランスポートエンドポイントに t_open() または fcntl() 機能に よって O_NONBLOCK オプションが設定されている場合には、 t_rcvudata() は非同期モードで実行されま す。非同期モードでは、データ単位が入手可能でなければ制御はただちに呼び出し側に戻されます。 unitdata の udata フィールドで定義されているバッファが小さすぎて現在のデータ単位の全体が入らない場合 Section 3-636 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_rcvudata(3) t_rcvudata(3) には、バッファがいっぱいになった後、戻り時に flags が T_MOREに設定されて、データ単位の残りの部分を 取り出すために再び t_rcvudata() を呼び出す必要があることを示します。その後の t_rcvudata() の呼び出しで は、データ単位の全体が受信されるまで、アドレスおよびオプションの長さにゼロが戻されます。 スレッドでの安全性 t_rcvudata() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_IDLE 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定されたファイル記述子はトランスポートエンドポイントを参照していません。 [TNODATA] O_NONBLOCK が設定されましたが、トランスポートプロバイダーから現在データ単位 を入手することはできません。 [TBUFOVFLW] 着信プロトコルアドレスまたはプロトコルオプションに割り当てられたバイト数が、そ の情報を保存するには小さすぎます。通常は unitdata に戻される単位データ情報は破棄 されます。 [TLOOK] このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 要です。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TOUTSTATE] (XTI のみ) fd が参照するトランスポートエンドポイントで、機能が誤った順序で実行さ れました。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切な XTI (t_errno) が該当しないことを示します。 参照 fcntl(2), t_alloc(3), t_open(3), t_optmgmt(3), t_rcvuderr(3), t_sndudata(3) 標準準拠 t_rcvudata(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-637 t_rcvuderr(3) t_rcvuderr(3) 名称 t_rcvuderr() − 単位データエラー指示の受信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_rcvuderr (fd, uderr); int fd; struct t_uderr *uderr; 説明 t_rcvuderr() 機能は、以前に送信したデータ単位のエラーに関する情報を受信するために、コネクションレス モードで使用します。この機能は、単位データエラー指示の後でのみ、実行するようにしてください。これは トランスポートユーザーに、特定のあて先アドレスとプロトコルオプションをもつデータ単位でエラーが発生 したことを伝えます。引き数 fd は、エラーレポートを受信するローカル トランスポートエンドポイントを示 します。 uderr は、 fd パラメータで指定されたトランスポートエンドポイントを介して送信されたデータ単位 に関連する、プロトコルアドレス、プロトコルオプション、およびエラーの性質を指定するタイプ t_uderr 構 造を示します。 t_uderr には以下のメンバーがあります。 struct netbuf addr; struct netbuf opt; long error; タイプ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定 義に使用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置を示す この機能を呼び出す前に addr および opt の maxlen フィールドを設定し、それぞれのバッファの最大サイズを 指定しておかなければなりません。 この呼び出しからの戻り時には、 addr 構造はエラーのあるデータ単位のあて先プロトコルアドレスを示し、 opt 構造はそのデータ単位に関連づけられたプロトコル固有のオプションを示し、 error はプロトコル固有のエ ラーコードを示します。 ユーザーがエラーの発生したデータ単位を識別したくなければ uderr をヌルポインタに設定してもよく、その 場合は t_rcvuderr() はエラー指示をクリアするだけで、ユーザーに情報を提供しません。 Section 3-638 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_rcvuderr(3) t_rcvuderr(3) スレッドでの安全性 t_rcvuderr() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_IDLE 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] [TNOUDERR] 指定されたファイル記述子はトランスポートエンドポイントを参照していません。 指定されたトランスポートエンドポイントに、現在単位データエラー指示はありませ ん。 [TBUFOVFLW] 着信プロトコルアドレスまたはオプション情報に割り当てられたバイト数が、その情報 を保存するには小さすぎます。 uderr に戻されるはずの単位データエラー情報は破棄さ れます。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切なXTI (t_errno) が該当しないことを示します。 参照 t_look(3), t_rcvudata(3), t_sndudata(3) 標準準拠 t_rcvuderr(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-639 t_snd(3) t_snd(3) 名称 t_snd() − 接続を介したデータまたは急送データの送信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_snd (fd, buf, nbytes, flags); int fd; char *buf; unsigned nbytes; int flags; 説明 この機能は、通常または急送データの送信に使用します。 fd はデータを送信するローカル トランスポートエ ンドポイントを示します。また、 buf はユーザーデータ、 nbytes は送信するユーザーデータのバイト数、 flags は以下に説明するオプションフラグを示します。 T_EXPEDITED flags にこれが設定されていると、データは急送データとして送信され、トランスポートプ ロバイダーの解釈に従います。 T_MORE flags にこれが設定されていると、トランスポートサービス データ単位TSDU (または急送ト ランスポートサービス データ単位-ETSDU) が複数の t_snd() 呼び出しによって送信される ことを示します。 T_MORE が設定された t_snd() は、現在のTSDUの続きのデータをもつ 別の t_snd() がその後にあることを表しています。 T_MORE フラグが設定されていない t_snd() の呼び出しが、TSDU (またはETSDU) の末尾を示します。 T_MORE を使用すると 大きい論理データ単位を分割し、接続の相手側でも単位境界を失うことなく送信できるよう になります。このフラグは、トランスポートインタフェースの下での転送データのパッケー ジ方法については、何も意味を持っていません。トランスポートプロバイダーが、 t_open() または t_getinfo() からの戻り時に info 引き数が示すようにTSDUの概念をサポートしていな い場合には、 T_MORE フラグは意味を持たず、無視されます。 ゼロ長フラグメントのTSDUまたはETSDUの送信は、TSDUまたはETSDUの末尾を示すために使用する場合の み、許されます。すなわち、 T_MORE フラグが設定されていない場合です。トランスポートプロバイダーに よっては、ゼロ長の TSDUおよびETSDUを禁止している場合もあります。 デフォルトでは t_snd() は同期モードで動作し、フロー制御の制約のために呼び出しの実行時にローカル トラ ンスポートプロバイダーがデータを受け入れない場合でも、待機します。ただし O_NONBLOCK が (t_open() または fcntl() によって)設定されている場合には、 t_snd() は非同期モードで実行され、フロー制御の制約があ るとただちに実行は失敗に終わります。XTIのみでは、フロー制御の制約が t_look() によってクリアされた時 点で通知を受けるよう、プロセスを設定することができます。 Section 3-640 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_snd(3) t_snd(3) t_snd() は、 O_NONBLOCK が設定されていても、STREAMS内部リソースが使用できない場合には待機しま す。 O_NONBLOCK の非ブロック動作は、フロー制御の条件にのみ適用されます。 正常に完了すると、 t_snd() はトランスポートプロバイダーによって受け入れられたバイト数を戻します。同 期モードでは、これは nbytes で指定したバイト数と等しくなります。しかし O_NONBLOCK (非同期モード) が設定されていると、データの一部分だけがトランスポートプロバイダーによって受け入れられることもあり ます。その場合には t_snd() はトランスポートプロバイダーで受け入れられるデータに T_MORE を設定し、 nbytes の値よりも小さい値を戻します。 nbytes がゼロで、ゼロオクテットの送信が基本トランスポートサービスでサポートされていない場合には、 t_snd() は −1 を戻し、 t_errno が [TBADDATA] に設定されます。 TSDUまたはETSDUのサイズは、トランスポートプロバイダーで決められている制限を超えることはできませ ん。この制限は、 t_open() または t_getinfo() の info 引き数のTSDU またはETSDU フィールドに戻される値で す。これに違反すると、プロトコルエラーが発生します。(下記の [TSYSERR] を参照。) XTIのみでは、イベント(例えば切断)が発生したプロセスを知らせるために、エラー [TLOOK] が戻されること があります。 TLIのみでは、トランスポートプロバイダーが T_DATAXFER または T_INREL 以外の状態にある場合に、ト ランスポートプロバイダーは t_errno を [TSYSERR] に設定し、システムの errno を [EPROTO] に設定します。 スレッドでの安全性 t_snd() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユー ザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャンセル セーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 要注意 トランスポートプロバイダーは、1つのトランスポートエンドポイントのすべてのユーザーを単一のユーザー として扱うことを覚えておいてください。したがって、複数のプロセスが同時に t_snd() 呼び出しを実行する と、異なるデータが混ざり合うことがあります。 最大TSDU またはETSDU サイズを超える複数の送信は、XTI によって検出されないことがあります。その場 合、後続のXTI呼び出しで(トランスポートプロバイダーが生成した)システム固有のエラーが発生するものと 思われます。このエラーは、接続打ち切り、[TSYSERR], [TBADDATA], [TPROTO] のいずれかの形をとること になります。 最大TSDU またはETSDU サイズを超える複数の送信がXTI によって検出されると、 t_snd() の実行は失敗に終 わって、[TBADDATA] が戻されます。 戻り値 正常に完了すると、 t_snd() はトランスポートプロバイダーによって受け入れられたバイト数を戻します。そ れ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定されます。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-641 t_snd(3) t_snd(3) エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TBADDATA] データの量が無効です。 単一の送信で、info引き数のTSDUまたはETSDUフィールドの現在の値によって指定さ れているよりも大きいTSDU (ETSDU) またはフラグメントTSDU (ETSDU) を指定しよう としました。 ゼロバイトTSDU (ETSDU) またはTSDU (ETSDU) のゼロバイト フラグメントの送信は、 プロバイダーによってサポートされていません。 複数の送信が試みられた結果、 info 引き数のTSDUまたはETSDUフィールドの現在の値 によって指定されているよりも大きいTSDU (ETSDU) になりました。このようなエラー を XTIが検出できるかどうかは、システムによって異なります。 [TBADFLAG] 無効なフラグが指定されました。 O_NONBLOCK が設定されましたが、フロー制御のメカニズムによってトランスポート [TFLOW] プロバイダーは今回のデータの全部または一部を受け入れることができませんでした。 このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 [TLOOK] 要です。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TOUTSTATE] fd が参照するエンドポイントで、機能が誤った順序で実行されました。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切なXTI (t_errno) が該当しないことを示します。 参照 t_getinfo(3), t_open(3), t_rcv(3) 標準準拠 t_snd(): SVID2, XPG3, XPG4 Section 3-642 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_snddis(3) t_snddis(3) 名称 t_snddis() − ユーザー開始切断要求の送信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_snddis (fd, call); int fd; struct t_call *call; 説明 t_snddis() 機能は、すでに確立されている接続の打ち切り解放を開始するか、接続要求を拒絶するために使用 します。 fd は接続のローカル トランスポートエンドポイントを示し、 call は打ち切り解放に関連する情報を 示します。また call は、以下のメンバーが入っている t_call 構造を示します。 struct netbuf addr; struct netbuf opt; struct netbuf udata; int sequence; タイプ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定 義に使用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置を示す call 内の値は、 t_snddis() の呼び出しの文脈に応じて異なる意味を持っています。接続要求を拒絶する場合に は、 call はヌルでないポインタでなければならず、トランスポートプロバイダーに対して拒絶された接続指示 を固有に識別する sequence の有効な値が入っていなければなりません。 sequence パラメータは、トランス ポート接続が T_INCON 状態にある場合にのみ意味を持ちます (t_getstate(3) を参照)。 call の addr および opt フィールドは無視されます。その他のすべての場合には、 call は切断要求を伴ったデータが送信されている場 合にのみ使用する必要があります。 t_call 構造の addr, opt, sequence の各フィールドは無視されます。ユー ザーがリモートユーザーにデータを送信したくなければ、 call の値はヌルポインタでもかまいません。 udata は、リモートユーザーに送信するユーザーデータを指定します。ユーザーデータの量は、トランスポー トプロバイダーがサポートしている制限を超えることはできません。この制限は、 t_open() または t_getinfo() の info 引き数の discon フィールドに戻される値です。 udata の len フィールドがゼロの場合には、リモート ユーザーにデータは送信されません。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-643 t_snddis(3) t_snddis(3) スレッドでの安全性 t_snddis() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_DATAXFER, T_OUTCON, T_OUTREL, T_INREL, T_INCON (ocnt > 0) 要注意 t_snddis() は打ち切り切断です。したがって、接続エンドポイントに t_snddis() を実行すると、以前に t_snd() で送信されたデータまたはまだ受信されていないデータが失われることがあります (ただしエラーが戻されま す)。 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TOUTSTATE] fd が参照するトランスポートエンドポイントで、この機能が誤った順序で実行されまし た。 [TBADDATA] (XTI のみ) 指定されたユーザーデータの量が、トランスポートプロバイダーによって許 可されている境界以内ではありませんでした。このエンドポイントの待ち行列に入った 発信データの一部が失われることがあります。 無効な順序が指定されたか、接続要求の拒絶時にヌルの call ポインタが指定されまし [TBADSEQ] た。このエンドポイントの待ち行列に入った発信データの一部が失われることがありま す。 このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 [TLOOK] 要です。 [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切な XTI (t_errno) が該当しないことを示します。 参照 t_connect(3), t_getinfo(3), t_listen(3), t_open(3) Section 3-644 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 t_snddis(3) t_snddis(3) 標準準拠 t_snddis(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-645 t_sndrel(3) t_sndrel(3) 名称 t_sndrel() − 正常解放の開始 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_sndrel (fd); int fd; 説明 t_sndrel() 機能は、トランスポートエンドポイントでの正常解放を開始するために、コネクションモードで使用 します。解放するエンドポイントは fd によって指定されますが、これは t_open() 機能で以前に戻されたファ イル記述子です。 この正常解放を指示した後、トランスポートユーザーはそのトランスポートエンドポイントからそれ以上の データを送信しようとしてはなりません。解放されたトランスポートエンドポイントにそれ以上データを送信 しようとすると、ブロックの状態が続きます。ただし、正常解放指示が受信されるまでは、トランスポート ユーザーはその接続を介してデータの受信を続けることができます。この機能はトランスポートプロバイダー のオプションのサービスで、トランスポートプロバイダーが t_open() または t_getinfo() でサービスタイプ T_COTS_ORD を戻した場合にのみ、サポートされます。 スレッドでの安全性 t_sndrel() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 注意 HP OSI XTIは t_sndrel() をサポートしていません。 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TFLOW] O_NONBLOCK が設定されて非同期モードが指示されていますが、トランスポートプロ バイダーはフロー制御の制約によって解放を受け入れることができません。 [TLOOK] このトランスポートエンドポイントで非同期イベントが発生し、即時アテンションが必 要です。 Section 3-646 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_sndrel(3) t_sndrel(3) [TNOTSUPPORT] この機能は基本トランスポートプロバイダーによってサポートされていません。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検 出され、他の適切なXTI (t_errno) が該当しないことを示します。 参照 t_getinfo(3), t_open(3), t_rcvrel(3) 標準準拠 t_sndrel(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-647 t_sndudata(3) t_sndudata(3) 名称 t_sndudata() − データ単位の送信 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_sndudata(fd, unitdata); int fd; struct t_unitdata *unitdata; 説明 t_sndudata() 機能は、別のトランスポートユーザーにデータ単位を送信するために、コネクションレスモード で使用します。引き数 fd は、データの送信に使用するローカル トランスポートエンドポイントを示します。 引き数 unitdata はタイプ t_unitdata 構造を示し、これは fd パラメータによって指定されたトランスポートエン ドポイントから送信するデータ単位の指定に使用されます。 t_unitdata 構造には以下のメンバーがあります。 struct netbuf addr; struct netbuf opt; struct netbuf udata; タイプ netbuf 構造は、 <xti.h> または <tiuser.h> ヘッダーファイルで定義されます。バッファパラメータの定 義に使用するこの構造には、次のメンバーがあります。 unsigned int maxlen データバッファの最大バイト長 unsigned int len バッファに書き込まれるデータの実際のバイト長 char *buf バッファ位置を示す unitdata では、 addr はあて先ユーザーのプロトコルアドレスを指定します。また、 opt はユーザーがこの要求 に対応させたいプロトコル固有のオプションを示し、 udata は送信するユーザーデータを指定します。ユー ザーは、 opt の len フィールドをゼロに設定することによって、転送に対応させるプロトコルオプションを指 定しないこともできます。その場合には、プロバイダーがデフォルトのオプションを使用します。 udata の len フィールドがゼロで、ゼロオクテットの送信が基本トランスポートサービスでサポートされていな い場合には、 t_sndudata() は −1 を戻し、 t_errno が[TBADDATA]に設定されます。 デフォルトでは t_sndudata() は同期モードで動作し、フロー制御の制約のために呼び出しの実行時にローカル トランスポートプロバイダーがデータを受け入れない場合でも、待機します。ただし O_NONBLOCK が (t_open() または fcntl() によって)設定されている場合には、 t_sndudata() は非同期モードで実行され、そのよ うな条件のもとでは実行は失敗に終わります。 t_look() またはEMインタフェースを介して制約のクリアを通 知できるよう、プロセスを設定することができます。 udata に指定されているデータの量が、 t_open() または t_getinfo() の info 引き数の tsdu フィールドに戻された Section 3-648 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_sndudata(3) t_sndudata(3) TSDUサイズを超えると、 [TBADDATA]エラーが発生します。あて先ユーザーがそのトランスポートエンドポ イントをアクティブ化する前に t_sndudata() を呼び出すと、データ単位は破棄されることがあります。 トランスポートプロバイダーがエラー [TBADADDR]および[TBADOPT]の原因になった条件をただちに検出す ることができない場合には、これらのエラーは t_rcvuderr() によって戻されます。そのため、アプリケーショ ンはこれらのエラーをこの2つの方法のどちらでも受け取れるよう、準備しておく必要があります。 スレッドでの安全性 t_sndudata() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 戻り値 正常に完了すると、値0が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設定 されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADDATA] データの量が無効です。ゼロオクテットはサポートされていません。 [TBADF] 指定されたファイル記述子はトランスポートエンドポイントを参照していません。 [TFLOW] O_NONBLOCK が設定されて非同期モードが指示されていますが、トランスポートプロ バイダーはフロー制御の制約によってデータを受け入れることができません。 [TLOOK] (XTI のみ) このトランスポートエンドポイントで非同期イベントが発生し、即時アテン ションが必要です。 [TNOTSUPPORT] [TOUTSTATE] この機能は基本トランスポートプロバイダーによってサポートされていません。 (XTI のみ ) fd パラメータによって参照されたトランスポートエンドポイントで、 t_sndudata() 機能が誤った順序で実行されました。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 fd パラメータによって指定された トランスポートエンドポイントにアクセスする次の呼び出しが実行されるまでは、プロ トコルエラーによって t_sndudata() 機能の実行が失敗に終わることはありません。 [TBADADDR] 指定されたプロトコルアドレスの形式が誤っているか、無効な情報が含まれています。 [TBADOPT] 指定されたオプションの形式が誤っているか、無効な情報が含まれています。 [TPROTO] このエラーは、XTIとトランスポートプロバイダーとの間で通信の問題が検出され、他 の適切なXTI (t_errno) が該当しないことを示します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-649 t_sndudata(3) t_sndudata(3) 参照 fcntl(2), t_alloc(3), t_open(3), t_rcvudata(3), t_rcvuderr(3) 標準準拠 t_sndudata(): SVID2, XPG3, XPG4 Section 3-650 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 t_strerror(3) t_strerror(3) 名称 t_strerror() − エラーメッセージ文字列の生成 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ int *t_strerror (errnum); int errnum; struct info *info; 説明 t_strerror() 機能は、 XTI エラーに対応する errnum 内のエラー番号を言語固有のエラーメッセージ文字列に マップし、その文字列を示すポインタを戻します。ポインタが示す文字列はプログラムによって変更されるこ とはありませんが、その後の t_strerror() 機能の呼び出しによって上書きされることがあります。文字列の末 尾には改行文字はありません。 t_strerror() が書き出すエラーメッセージ文字列の言語は、システムで設定さ れている言語です。言語が英語の場合には、 t_errno の値を説明するエラーメッセージ文字列は <xti.h> で定義 されている t_errno の後にあるコメントと同じです。エラーコードがわからない場合、言語が英語ならば t_strerror() は次のような文字列を戻します。 "error: error unknown" ここで error は入力で指定したエラー番号です。その他の言語でも、これと同じ意味のメッセージが出されま す。 スレッドでの安全性 t_strerror() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて 戻り値 機能 t_strerror() は、生成されたメッセージ文字列を示すポインタを戻します。 参照 t_error(3) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-651 t_sync(3) t_sync(3) 名称 t_sync() − トランスポートライブラリーの同期化 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_sync (fd); int fd; 説明 fd で指定されているトランスポートエンドポイントについて、 t_sync() 機能は、トランスポートライブラリー によって管理されているデータ構造を、基本トランスポートプロバイダーからの情報と同期化します。その場 合、初期化されていないファイル記述子 (open(), dup() によって得られたものか、 fork() と exec() の結果とし て得られたもの)を初期化されたエンドポイントに変換することができます。変換にあたっては、ファイル記述 子がトランスポートエンドポイントを参照していたものと仮定し、必要なライブラリーデータ構造のアップ デートと割り当てを実行します。また、この機能を使用すると、2つの共同プロセスのトランスポートプロバ イダーとの対話を同期化することもできます。 例えばプロセスが新しいプロセスに分岐して exec() を実行した場合、新しいプロセスは t_sync() を実行し、ト ランスポートエンドポイントに対応するプライバートライブラリーデータ構造を構築するとともに、そのデー タ構造と関連するプロバイダー情報との同期をとらなければなりません。 トランスポートプロバイダーは、1つのトランスポートエンドポイントのすべてのユーザーを単一のユーザー として扱うことを覚えておいてください。複数のプロセスが同じエンドポイントを使用している場合には、そ のトランスポートエンドポイントの状態に違反しないようにそれぞれの活動を調整しなければなりません。機 能 t_sync() はトランスポートエンドポイントの現在の状態をユーザーに戻すので、ユーザーはそれによって状 態を確認してからアクションを進めることができます。この調整は共同プロセスの間でのみ有効で、 t_sync() の実行後にプロセスや着信イベントによってエンドポイントの状態が変化する可能性もあります。 t_sync() を呼び出した時点で、トランスポートエンドポイントが状態変換中の場合には、この機能の実行は失 敗に終わります。 スレッドでの安全性 t_sync() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、 POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 有効な状態 T_UNINIT 以外のすべて Section 3-652 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_sync(3) t_sync(3) 戻り値 t_sync は、正常に完了するとトランスポート接続エンドポイントの状態を戻し、失敗に終わると −1 を戻して t_errno をエラーを示す値に設定します。戻される状態は次のいずれかです。 T_UNBND バインドされていない T_IDLE アイドル状態 T_OUTCON 発信接続が保留中 T_INCON 着信接続が保留中 T_DATAXFER データ転送 T_OUTREL 発信正常解放 (正常解放指示を待っている) T_INREL 着信正常解放 (正常解放要求を待っている) エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定されたファイル記述子はトランスポートエンドポイントを参照していません。このエ ラーは、 fd が以前にクローズされているか、呼び出しに誤った値を指定した場合に戻され ます。 [TSTATECHNG] トランスポートエンドポイントは状態変化の途中です。 [TSYSERR] この機能の実行中にシステムエラーが発生しました。 [TPROTO] (XTI のみ) このエラーは、XTI とトランスポートプロバイダーとの間で通信の問題が検出さ れ、他の適切な XTI (t_errno) が該当しないことを示します。 参照 t_open(3), t_getstate(3), dup(2), exec(2), fork(2), open(2) 標準準拠 t_sync(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-653 t_unbind(3) t_unbind(3) 名称 t_unbind() − トランスポートエンドポイントの使用停止 構文 #include <xti.h> /* for X/OPEN Transport Interface - XTI */ /* or */ #include <tiuser.h> /* for Transport Layer Interface - TLI */ int t_unbind (fd); int fd; 説明 t_unbind() 機能は、 fd で指定され、以前に t_bind() によってバインドされたトランスポートエンドポイント を、使用不能にします。この呼び出しが完了すると、このトランスポートエンドポイントに宛てたそれ以上の データやイベントは、トランスポートプロバイダーによって受け入れられなくなります。 スレッドでの安全性 t_unbind() 関数はマルチスレッドアプリケーションで支障なく呼び出すことができ、POSIX スレッドと DCE ユーザースレッドの両方についてスレッドセーフです。キャンセルポイントを持っていますが、非同期キャン セルセーフでも非同期シグナルセーフでもありません。最終的には、フォーク対応でもありません。 注意 ユーザーは /usr/lib/libxti.a をリンクすることによって、XTI バージョンの t_* ルーチンにアクセスすることが できます。XTI の詳細については、 HP-UX/9000 XTI Programmer’s Guide を参照してください。 TLIは、TPI (トランスポート プロバイダー インタフェース) に適合するトランスポートプロバイダーをすべて サポートします。ユーザーは /usr/lib/libnsl_s.a をリンクすることによって、TLIバージョンの t_* ルーチンにア クセスすることができます。 TLIの詳細については、 STREAMS/UX for HP 9000 Reference Manual の TLI の項を 参照してください。 有効な状態 T_IDLE 戻り値 正常に完了すると、値 0 が戻されます。それ以外の場合には値 −1 が戻され、 t_errno はエラーを示す値に設 定されます。 エラー 正常に実行されなかった場合、 t_errno は次のいずれかの値に設定されます。 [TBADF] 指定された識別子はトランスポートエンドポイントを参照していません。 [TOUTSTATE] 機能が誤った順序で実行されました。 [TLOOK] このトランスポートエンドポイントで非同期イベントが発生しました。 Section 3-654 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 t_unbind(3) [TSYSERR] t_unbind(3) この機能の実行中にシステムエラーが発生しました。 参照 t_bind(3) 標準準拠 t_unbind(): SVID2, XPG3, XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-655 uc_access(3) uc_access(3) 名称 uc_access: __uc_get_reason(), __uc_set_prs(), __uc_get_brs(), __uc_get_grs(), __uc_set_grs(), __uc_get_frs(), __uc_set_brs(), __uc_get_ip(), __uc_set_ip(), __uc_set_frs(), __uc_get_prs(), __uc_get_cfm(), __uc_set_cfm(), __uc_get_um(), __uc_set_um(), __uc_get_ar_rsc(), __uc_set_ar_rsc(), __uc_get_ar_bsp(), __uc_get_ar_bspstore(), __uc_get_ar_csd(), __uc_set_ar_csd(), __uc_get_ar_ssd(), __uc_set_ar_ssd(), __uc_get_ar_ccv(), __uc_set_ar_ccv(), __uc_get_ar_unat(), __uc_set_ar_unat(), __uc_get_ar_fpsr(), __uc_set_ar_fpsr(), __uc_get_ar_pfs(), __uc_set_ar_pfs(), __uc_get_ar_lc(), __uc_set_ar_lc(), __uc_get_ar_ec(), __uc_set_ar_ec(), __uc_get_ed(), __uc_set_ed(), __uc_get_rsebs(), __uc_set_rsebs(), __uc_get_rsebs64(), __uc_set_rsebs64(), __uc_get_ar(), __uc_set_ar(), __uc_get_cr() − ucontext_t ( ユーザーコンテキスト) アクセス 構文 cc [ flag . . . ] file. . . −luca [ library. . . ] #include <sys/types.h> #include <machine/sys/reg_struct.h> #include <signal.h> #include <uc_access.h> int __uc_get_reason(const ucontext_t *ucp, uint16_t *value); int __uc_get_grs(const ucontext_t *ucp, unsigned int first, unsigned int count, uint64_t values[], unsigned int *NaT); int __uc_set_grs(ucontext_t *ucp, unsigned int first, unsigned int count, const uint64_t values[], unsigned int NaT); int __uc_get_frs(const ucontext_t *ucp, unsigned int first, unsigned int count, fp_regval_t values[]); int __uc_set_frs(ucontext_t *ucp, unsigned int first, unsigned int count, const fp_regval_t values[]); int __uc_get_prs(const ucontext_t *ucp, uint64_t *values); int __uc_set_prs(ucontext_t *ucp, uint64_t values); int __uc_get_brs(const ucontext_t *ucp, unsigned int first, unsigned int count, uint64_t values[]); int __uc_set_brs(ucontext_t *ucp, unsigned int first, unsigned int count, const uint64_t values[]); int __uc_get_ip(const ucontext_t *ucp, uint64_t *value); int __uc_set_ip(ucontext_t *ucp, uint64_t value); int __uc_get_cfm(const ucontext_t *ucp, uint64_t *value); int __uc_set_cfm(ucontext_t *ucp, uint64_t value); int __uc_get_um(const ucontext_t *ucp, uint64_t *value); int __uc_set_um(ucontext_t *ucp, uint64_t value); int __uc_get_ar_rsc(const ucontext_t *ucp, rsc_t *value); Section 3-656 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 uc_access(3) uc_access(3) int __uc_set_ar_rsc(ucontext_t *ucp, rsc_t value); int __uc_get_ar_bsp(const ucontext_t *ucp, uint64_t *value); int __uc_get_ar_bspstore(const ucontext_t *ucp, uint64_t *value); int __uc_get_ar_csd(const ucontext_t *ucp, uint64_t *value); int __uc_set_ar_csd(ucontext_t *ucp, uint64_t value); int __uc_get_ar_ssd(const ucontext_t *ucp, uint64_t *value); int __uc_set_ar_ssd(ucontext_t *ucp, uint64_t value); int __uc_get_ar_ccv(const ucontext_t *ucp, uint64_t *value); int __uc_set_ar_ccv(ucontext_t *ucp, uint64_t value); int __uc_get_ar_unat(const ucontext_t *ucp, uint64_t *value); int __uc_set_ar_unat(ucontext_t *ucp, uint64_t value); int __uc_get_ar_fpsr(const ucontext_t *ucp, fpsr_t *value); int __uc_set_ar_fpsr(ucontext_t *ucp, fpsr_t value); int __uc_get_ar_pfs(const ucontext_t *ucp, pfs_t *value); int __uc_set_ar_pfs(ucontext_t *ucp, pfs_t value); int __uc_get_ar_lc(const ucontext_t *ucp, uint64_t *value); int __uc_set_ar_lc(ucontext_t *ucp, uint64_t value); int __uc_get_ar_ec(const ucontext_t *ucp, uint64_t *value); int __uc_set_ar_ec(ucontext_t *ucp, uint64_t value); int __uc_get_ed(const ucontext_t *ucp, uint64_t *value); int __uc_set_ed(ucontext_t *ucp, uint64_t value); int __uc_get_rsebs(const ucontext_t *ucp, uint64_t *addr, unsigned int count, uint64_t values[]); int __uc_set_rsebs(ucontext_t *ucp, uint64_t *addr, unsigned int count, const uint64_t values[]); int __uc_get_rsebs64(const ucontext_t *ucp, ptr64_t addr, unsigned int count, uint64_t values[]); int __uc_set_rsebs64(ucontext_t *ucp, ptr64_t addr, unsigned int count, const uint64_t values[]); int __uc_get_ar(const ucontext_t *ucp, unsigned int reg, uint64_t *value); int __uc_set_ar(ucontext_t *ucp, unsigned int reg, uint64_t value); HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-657 uc_access(3) uc_access(3) int __uc_get_cr(const ucontext_t *ucp, unsigned int reg, uint64_t *value); 説明 Ucontext Access インタフェースにより、アプリケーションは ucontext_t ユーザーコンテキスト構造体内の、非 公開の mcontext_t 構造体に含まれる Itanium(R)ベース レジスタにアクセスすることができます。 これらのすべてのインタフェースでは、 ucp は、シグナルハンドラーの3番目の引き数としてアプリケーショ ンに渡された ucontext_t、ユーザーが割り当てたメモリーに getcontext() で設定した ucontext_t、またはアプリ ケーションの core ファイルから読み取られた ucontext_t へのポインターです。 システムコールは関数呼び出しを介して実行されるため、システムコールで作成されたコンテキストでは、以 下に記すようにスクラッチレジスタとその他の個別の値が除外されます。 以下の関数を使うには、コンパイラまたはリンカーのコマンド行で −luca を指定して、ucontext アクセスライ ブラリとリンクします。 個々のインタフェースの説明 __uc_get_reason() コンテキストが、システムコールで作成されたものである場合は、 value 引き数が指す場所にゼロ を格納して返し、コンテキストが、ユーザーコードの実行中に発生した割り込みの処理中に作成さ れたものである場合は、ゼロ以外の値を返します。 __uc_get_grs() first から first + count−1 の範囲の静的汎用レジスタの保存された値を values[] 配列に格納して返 し、対応する NaT ビット値を NaT 引き数に格納して返します。静的汎用レジスタ (GR1−GR31) だ けがこのインタフェースで読み取ることができます。スタック汎用レジスタ (GR32−GR127) は、 RSE バッキングストアまたは RSE バッキングストアのオーバーフロー領域から読み取る必要があ ります (後述の __uc_get_rsebs() を参照)。 要求された汎用レジスタに対応する NaT ビットは、NaT 引き数の対応するビットに設定されま す。たとえば、 NaT & (1 << 5) は GR5 の NaT ビットを表します。 システムコールで作成されたコンテキストの場合、スクラッチレジスタ (GR2 、 GR3 お よ び GR14−GR31) は、 values[X] == 0、 (NaT >> X) && 1 == 1 として読み取ります。 __uc_set_grs() first から first + count−1 の範囲の静的汎用レジスタの保存された値を、 values[] 配列の最初の count 個の要素の内容で上書きして、対応する NaT ビットを NaT 引き数に設定されているビットで上書 きします。静的汎用レジスタ (GR1−GR31) にのみ、このインタフェースで書き込むことができま す。スタック汎用レジスタ (GR32−GR127) の場合は、RSE バッキングストアまたは RSE バッキン グストアのオーバーフロー領域に書き込む必要があります (後述の __uc_set_rsebs() を参照)。 指定された汎用レジスタに対応する NaT ビットが、NaT 引き数の対応するビットに設定されてい る必要があります。たとえば、GR5 の NaT ビットは NaT & (1 << 5) で上書きされます。 Section 3-658 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 uc_access(3) uc_access(3) システムコールで作成されたコンテキストの場合、スクラッチレジスタ (GR2 、 GR3 お よ び GR14−GR31) に書き込もうとすると、 [EINVAL] が返されます。 __uc_get_frs() first から first + count−1 までの範囲の浮動小数点レジスタの保存された値を、 values[] 配列に格納 して返します。 シ ス テ ム コー ル で 作 成 さ れ た コ ン テ キ ス ト の 場 合、 ス ク ラッ チ レ ジ ス タ (FR6−FR15 と FR32−FR127) は、 0.0 として読み取ります。 __uc_set_frs() first から first + count−1 までの範囲の浮動小数点レジスタの保存された値を、 values[] 配列の最初 の count 個の要素の内容で上書きします。 シ ス テ ム コー ル で 作 成 さ れ た コ ン テ キ ス ト の 場 合、 ス ク ラッ チ レ ジ ス タ (FR6−FR15 と FR32−FR127) に書き込もうとすると、 [EINVAL] が返されます。 FP 値のビット {127:82} を設定し ようとすると、 [EINVAL] が返されます。 __uc_get_prs() プレディケートレジスタの保存された値を、 values 引き数が指す場所に格納して返します。 シ ス テ ム コー ル で 作 成 さ れ た コ ン テ キ ス ト の 場 合、 ス ク ラッ チ プ レ ディ ケー ト レ ジ ス タ (PR6−PR15) は、 0 として読み取ります。 __uc_set_prs() プレディケートレジスタの保存された値を、 values で上書きします。 シ ス テ ム コー ル で 作 成 さ れ た コ ン テ キ ス ト の 場 合、 ス ク ラッ チ プ レ ディ ケー ト レ ジ ス タ (PR6−PR15) に設定しようとすると、 [EINVAL] が返されます。 PR[0] をクリアしようとすると、エラー表示なしで無視されます。 __uc_get_brs() first から first + count−1 までの範囲のブランチレジスタの保存された値を、 values[] 配列に格納し て返します。 システムコールで作成されたコンテキストの場合、スクラッチレジスタ (BR6−BR7) は、 0 として 読み取ります。 __uc_set_brs() first から first + count−1 までの範囲のブランチレジスタの保存された値を、 values[] 配列の最初の count 個の要素の内容で上書きします。 システムコールで作成されたコンテキストの場合、スクラッチレジスタ (BR6−BR7) に書き込もうと すると、 [EINVAL] が返されます。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-659 uc_access(3) uc_access(3) __uc_get_ip() 命令ポインターレジスタの保存された値を、 value 引き数に格納して返します。 割り込みの処理中に作成されたコンテキストの場合、 value は次に実行する命令の命令ポインター になります。命令スロットは、 value の下位2ビットの値 0、 1 または 2 で表されます。トラップ と割り込みの場合、 value は次の命令を指します。フォルトの場合、 value はフォルトが発生した 命令を指します。システムコールで作成されたコンテキストの場合、 value はシステムコールから のリターンポインターになります。 value の下位2ビットは 0 になります。 __uc_set_ip() 命令ポインターレジスタの保存された値を value で上書きします。 割り込みの処理中に作成されたコンテキストの場合、 value の下位2ビットで表される命令スロッ トは、次に実行する命令になります。システムコールで作成されたコンテキストの場合、命令ス ロットとしてゼロでない値を設定しようとすると、 [EINVAL] が返されます。 __uc_get_cfm() カレントフレームマーカー レジスタの保存された値を、 value 引き数に格納して返します。 システムコールで作成されたコンテキストの場合、 value はカーネルを呼び出した関数に対応する フレームマーカーになります。 __uc_set_cfm() カレントフレームマーカー レジスタの保存された値を value で上書きします。 __uc_get_um() ユーザーマスクレジスタの保存された値を、 value 引き数に格納して返します。 __uc_set_um() 保存されたユーザーマスクレジスタを value で上書きします。予約されたビットを設定しようとす ると、 [EINVAL] が返されます。 __uc_get_ed() 例外延期ビットの保存された値を value 引き数の下位ビットに格納して返します。このビットは割 り込みコンテキストにのみ保存されます。システムコールで保存されたコンテキストからこのビッ トを読み込もうとすると、 [EINVAL] が返されます。 __uc_set_ed() 保存された例外延期ビット値を、指定された value の下位ビットで上書きします。このビットは割 り込みコンテキストにのみ保存されます。このビットを、システムコールで保存されたコンテキス トに書き込もうとすると、 [EINVAL] が返されます。 CR.ISR.ED が設定されていない場合にこの ビットを設定しようとすると、 [EINVAL] が返されます。 __uc_get_ar_rsc() 保存された AR.RSC レジスタの値を、 value 引き数に返します。 Section 3-660 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 uc_access(3) uc_access(3) __uc_set_ar_rsc() 保存された AR.RSC レジスタの値を、 value で上書きします。 __uc_get_ar_bsp() 保存された AR.BSP レジスタの値を value 引き数に返します。規約上、この値は、システムコール に入る時に使用される br.call 、または割り込みの処理で使用される cover の効果を反映していま す。次回の実行時に設定される AR.BSP の値を調べるには、以下の処理が必要です。 1) __uc_get_reason() を呼び出して、コンテキストが、システムコールあるいは割り込みの処理い ずれで作成されたのかを確認する。 2) 3) Call __uc_get_cfm() を呼び出して、現在のフレームマーカーを取得する。 CFM.sol (システムコール コンテキストの場合)、または CFM.sof (割り込みコンテキストの場 合) を使って AR.BSP の値を調節する。 __uc_get_ar_bspstore() 保存された AR.BSPSTORE レジスタの値を、 value 引き数に返します。 __uc_get_ar_csd() 保存された AR.CSD レジスタの値を、 value 引き数に返します。システムコール内で作成されたコ ンテキストでは、この値は未定義です。 __uc_set_ar_csd() 保存された AR.CSD レジスタの値を、 value で上書きします。システムコール内で作成されたコン テキストでは、この呼び出しは [EINVAL] を返します。(他の副作用はありません) __uc_get_ar_ssd() 保存された AR.SSD レジスタの値を、 value 引き数に返します。システムコール内で作成されたコ ンテキストでは、この値は未定義です。 __uc_set_ar_ssd() 保存された AR.SSD レジスタの値を、 value で上書きします。システムコール内で作成されたコン テキストでは、この呼び出しは [EINVAL] を返します。(他の副作用はありません) __uc_get_ar_ccv() 保存された AR.CCV レジスタの値を、 value 引き数に返します。システムコール内で作成されたコ ンテキストでは、この値は未定義です。 __uc_set_ar_ccv() 保存された AR.CCV レジスタの値を、 value で上書きします。システムコール内で作成されたコン テキストでは、この呼び出しは [EINVAL] を返します。(他の副作用はありません) __uc_get_ar_unat() 保存された AR.UNAT レジスタの値を、 value 引き数に返します。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-661 uc_access(3) uc_access(3) __uc_set_ar_unat() 保存された AR.UNAT レジスタの値を、 value で上書きします。 __uc_get_ar_fpsr() 保存された AR.FPSR レジスタの値を、 value 引き数に返します。 __uc_set_ar_fpsr() 保存された AR.FPSR レジスタの値を、 value で上書きします。 __uc_get_ar_pfs() 保存された AR.PFS レジスタの値を、 value 引き数に返します。システムコール内で作成されたコ ンテキストでは、この値は未定義です。現在のフレームマーカーを読み込むには __uc_get_cfm() を、現在のエピローグ数を読み込むには __uc_get_ar_ec() を使用します。 __uc_set_ar_pfs() 保存された AR.PFS レジスタの値を、 value で上書きします。システムコール内で作成されたコン テキストでは、 __uc_set_ar_pfs() は [EINVAL] を返します。(他の副作用はありません) __uc_get_ar_lc() 保存された AR.LC レジスタの値を、 value 引き数に返します。 __uc_set_ar_lc() 保存された AR.LC レジスタの値を、 value で上書きします。 __uc_get_ar_ec() 保存された AR.EC レジスタの値を、 value 引き数に返します。 __uc_set_ar_ec() 保存された AR.EC レジスタの値を、 value の下位 6ビットの値で上書きします。 __uc_get_ar() reg で指定されたアプリケーションレジスタの保存された値を、 value 引き数に格納して返しま す。 __uc_set_ar() reg で指定されたアプリケーションレジスタの保存された値を value で上書きします。 次のアプリケーションレジスタを指定することができます。 Section 3-662 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 uc_access(3) uc_access(3) reg レジスタ get set 16 AR_RSC X 17 AR_BSP X 18 AR_BSPSTORE X X 25 AR_AR_CSD(*) X X 26 AR_AR_SSD(*) X X 32 AR_CCV(*) X X 36 AR_UNAT X X 40 AR_FPSR X X 64 AR_PFS(+) X X 65 AR_LC X X 66 AR_EC X X X AR_CSD と AR_SSD はスクラッチレジスタです。システムコールで作成されたコンテキストの場合、 AR_CCV は0として読み取られます。 AR_CCV に書き込もうとすると、 [EINVAL] が返されま す。 + 呼び出し元のプログラムでは、アンワインド情報でシグナル配信に先行する関数を調べて、 AR.PFS レジスタに有効なデータが含まれているかどうか判断する必要があることに注意してくだ さい。 __uc_get_cr() reg で指定された制御レジスタの保存された値を、 values 引き数に格納して返します。 次の制御レジスタを指定することができます。 reg レジスタ 注記 17 CR_ISR 20 CR_IFA 22 CR_IIPA 特定のタイプの割り込みでのみ有効 システムコールで作成されたコンテキストの場合、制御レジスタは 0 として読み取ります。 __uc_get_rsebs(), __uc_set_rsebs(), __uc_get_rsebs64(), __uc_set_rsebs64 シグナルハンドラーが起動されるとき、カーネルはすべてのダーティ RSE レジスタをオリジナルの RSE バッキングストアに書き込もうとします。このような操作を実行できない場合 (つまり、メモ リーがマップされていない場合)、カーネルは残りのダーティレジスタを ucontext_t 内のオーバー HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-663 uc_access(3) uc_access(3) フロー領域に書き込みます。これらのインタフェースは、このオーバーフロー領域に保存された、 それらの値にアクセスするために用意されています。 __uc_get_ar() を使用して、 AR.BSP および AR.BSPSTORE の値を取り出します。 アクセスしたい値のアドレス アクセス方法 < AR.BSPSTORE 直接の読み取り/書き込み AR.BSPSTORE <= addr < AR.BSP __uc_[gs]et_rsebs{64}() 最後の NaT コレクションの特別な場合: __uc_[gs]et_rsebs{64}() addr == AR.BSP | 0x1f8 NaT ビットは、 AR.RNAT 値とオーバーフロー領域の間で分割されることがあります。 アドレス NaT の検索場所 addr < AR.BSPSTORE & ˜0x1ff direct read/write of backing store addr < AR.BSPSTORE & ˜0x1ff バッキングストアの 直接の読み取り/書き込み AR.BSPSTORE & ˜0x1ff <= addr < AR.BSP __uc_[gs]et_rsebs{64}(addr|0x1f8) 呼び出し元が 32 ビットの場合、 __uc_get_rsebs() と __uc_set_rsebs() は、addr 引き数を拡張 (swizzle) します。 __uc_[gs]et_rsebs64() は、 64 ビットアプリケーション内に生成された ucontext_t を読み取る 32 ビットプログラム用に用意されています。 __uc_[gs]et_rsebs64() は、addr 引き数が拡張されない点 で __uc_[gs]et_rsebs() とは異なります。 __uc_[gs]et_rsebs64() は 32 ビットバージョンのライブラリ にのみ含まれています。 戻り値 正常終了の場合、すべてのインタフェースは0を返して正常終了を表します。また、無効な引き数を渡した場 合、 [EINVAL] を返します。 エラー Ucontext Access インタフェースは、次の条件のいずれかを満たす場合に失敗します。 [EINVAL] 上にリストした任意のインタフェースで、 ucp 引き数が NULL ポインターである か、または無効なバージョンやサイズを持つ ucontext_t を指している場合。 Section 3-664 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 uc_access(3) uc_access(3) [EINVAL] __uc_get_grs() または __uc_set_grs() 呼び出しで、 first と count で指定したレジスタ の範囲に、1〜 31 の範囲以外の値が含まれている場合。 [EINVAL] __uc_set_grs() 呼び出しで、 ucp がシステムコールで作成されていて、 first と count で指定したレジスタの範囲にスクラッチレジスタが含まれている場合。 [EINVAL] __uc_get_frs() または __uc_set_frs() 呼び出しで、 first と count で指定したレジスタの 範囲に、2〜 127 の範囲以外の値が含まれている場合。 [EINVAL] __uc_set_frs() 呼び出しで、 ucp がシステムコールで作成されていて、 first と count で指定したレジスタの範囲にスクラッチレジスタが含まれている場合。あるいは、FP 値のビット {127:82} を設定しようとした場合。 [EINVAL] __uc_set_prs() 呼び出しで、 ucp がシステムコールで作成されていて、 value に、設 定されたスクラッチビットが含まれている場合。 [EINVAL] __uc_get_brs() または __uc_set_brs() 呼び出しで、 first と count で指定したレジスタ の範囲に、0〜7の範囲以外の値が含まれている場合。 [EINVAL] __uc_set_brs() 呼び出しで、 ucp がシステムコールで作成されていて、 first と count で指定したレジスタの範囲にスクラッチレジスタが含まれている場合。 [EINVAL] __uc_set_ip() 呼び出しで、 ucp がシステムコールで作成されていて、 value の下位2 ビットがゼロでない場合。あるいは、 ucp がシステムコールで作成されたものではな く、 value の下位2ビットが 0x3 の場合。 [EINVAL] __uc_set_cfm() 呼び出しで、範囲 37:0 以外のビットが設定されている場合。 [EINVAL] __uc_set_um() 呼び出しで、範囲 5:1 以外のビットが設定されている場合。 [EINVAL] __uc_set_ar_rsc()、 __uc_set_ar_fpsr()、または __uc_set_ar_pfs() 呼び出しで、予約済 みビットが 0 ではない場合。 [EINVAL] __uc_get_ar()、 __uc_set_ar()、または __uc_get_cr() 呼び出しで、無効なレジスタが 指定されている場合。 [EINVAL] __uc_set_ar() 呼び出しで、 reg が有効なレジスタを指定していて、設定された予約済 みビットが value に含まれている場合。 [EINVAL] __uc_get_ed() または __uc_set_ed() 呼び出しで、 ucp がシステムコールで作成されて いた場合。 [EINVAL] __uc_set_ed() 呼び出しで、 value の下位ビット以外のビットがセットされている場 合。または下位ビットがセットされていて、保存された CR.ISR.ED ビットがクリアさ れている場合。 [EINVAL] __uc_get_rsebs{64}() または __uc_set_rsebs{64}() 呼び出しで、 addr と count で指定し たメモリー位置の範囲に、 AR.BSPSTORE (包括的) と AR.BSP (排他的) の範囲以外 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 3-665 uc_access(3) uc_access(3) の値が含まれている場合。あるいは、最後の NaT コレクション位置を指定していて、 count != 1 の場合。 警告 引き数については、最低限のチェックしか行われません。レジスタやレジスタフィールドに、無効な値や範囲 外の値を書き込まないように十分に注意してください。無効な値や範囲外の値でレジスタが上書きされた場 合、シグナルハンドラや setcontext(2) 呼び出しから戻った際の動作は未定義です。 __uc_get_ar() は、廃止予定です。既存のアプリケーション以外では使用せず、代わりに __uc_get_ar_rsc()、 __uc_get_ar_bsp() 、 __uc_get_ar_bspstore() 、 __uc_get_ar_csd() 、 __uc_get_ar_ssd() 、 __uc_get_ar_ccv() 、 __uc_get_ar_unat()、 __uc_get_ar_fpsr()、 __uc_get_ar_pfs()、 __uc_get_ar_lc()、および __uc_get_ar_ec() を使 用することを推奨します。 __uc_set_ar() は、廃止予定です。既存のアプリケーション以外では使用せず、代わりに __uc_set_ar_rsc()、 __uc_set_ar_csd() 、 __uc_set_ar_ssd() 、 __uc_set_ar_ccv() 、 __uc_set_ar_unat() 、 __uc_set_ar_fpsr() 、 __uc_set_ar_pfs() 、 __uc_set_ar_lc() 、および __uc_set_ar_ec() を使用することを推奨します。 __uc_get_cr() は、廃止予定です。既存のアプリケーション以外では使用しないでください。 著者 UContext Access ライブラリは HP で開発されました。 ファイル /usr/include/sys/uc_access.h インタフェースのプロトタイプ宣言 参照 core(4), getcontext(2), sigaction(2), signal(5), <ucontext.h> Section 3-666 Hewlett-Packard Company − 11 − HP-UX 11i Version 2: August 2003 unctrl(3X) unctrl(3X) 名称 unctrl — 文字のプリント可能表現を生成 構文 #include <unctrl.h> char *unctrl(chtype c); 説明 unctrl() 関数は、c のプリント可能表現の文字列を生成します。 c が制御文字の場合には、ˆX 表記に変換され ます。 c に修飾情報が入っている場合には、結果は不定です。 戻り値 正常に終了すると、 unctrl() は生成された文字列を返します。そうでなければヌルポインタを返します。 エラー エラーは定義されていません。 参照 keyname(3X), wunctrl(3X), <unctrl.h> 変更履歴 X/Open Curses 第2版にて新規リリース X/Open Curses 第4版 分かりやすくするために、エントリー内容が変更されました。この版では、 「戻り値」の項で、この関数がヌ ルポインタを返す可能性があることを記載しています。以前の版では、この状態について記載されていません でした。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-667 ungetc(3S) ungetc(3S) 名称 ungetc( ) − 文字を入力ストリームに戻す 構文 #include <stdio.h> int ungetc(int c, FILE *stream); 廃止インタフェース int ungetc_unlocked(int c, FILE *stream); 説明 ungetc() は、文字 c を (符号なし char 型に変換して) 入力ストリーム stream に対応するバッファーに挿入しま す。この文字 c は、次にこの stream に対して getc() を呼び出したときに返されます (getc(3S) 参照)。この stream に対して、ファイル中の位置を変更する関数 (fseek(), fsetpos(), または rewind()) が呼び出され正常終了 すると、挿入された文字は消去されます。 ungetc() は、入力ストリーム stream に対応するバッファーにのみ影響します。 stream に対応するファイルの内 容には影響しません。 確実に戻すことができるのは1文字です。 c が EOF であれば、 ungetc() はバッファーに対しては何もせずに、EOF を返します。 廃止インタフェース ungetc_unlocked() は入力ストリームに文字を戻します。 アプリケーション使用法 ungetc() がストリームに適用された後は、ストリームはバイト指向になります (orientation(5) を参照)。 戻り値 ungetc() および ungetc_unlocked() は、正常終了すると c を返し、このストリームのエンドオブファイルフラグ をクリアします。文字をバッファーに挿入できない場合には、 ungetc() および ungetc_unlocked() は、EOF を 返します。 警告 ungetc_unlocked() インタフェースは廃止され、現在では既存のDCEアプリケーションとの互換性を保つために だけサポートされています。新しいマルチスレッドアプリケーションでは、 ungetc() を使用してください。 参照 flockfile(3S), fseek(3S), fgetpos(3S), getc(3S), setbuf(3S), orientation(5), thread_safety(5) 標準準拠 ungetc(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C Section 3-668 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ungetch(3X) ungetch(3X) 名称 ungetch, unget_wch — 文字の入力キューへのプッシュ 構文 #include <curses.h> int ungetch(int ch); int unget_wch(const wchar_t wch); 説明 ungetch() 関数は、1バイト文字 ch を入力キューの先頭にプッシュします。 unget_wch() 関数は、ワイドキャラクタ wch を入力キューの先頭にプッシュします。 1 文字のプッシュバックは保証されています。これらの関数が getch() または get_wch() の仲介呼び出しなしに 何度も呼び出されると、操作は失敗する可能性があります。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 curses_intro中の入力処理, getch(), get_wch(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-669 ungetwc(3C) ungetwc(3C) 名称 ungetwc( ) − ワイドキャラクタを入力ストリームに戻す 構文 #include <wchar.h> wint_t ungetwc(wint_t wc, FILE *stream); 廃止インタフェース wint_t ungetwc_unlocked(wint_t wc, FILE *stream); 注記: この関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ I/O 関数にしたがっています。動作 は、 ungetc(3S) で定義されている8ビット文字の I/O 関数と同様です。 説明 ungetwc() は、ワイドキャラクタ コード wc に対応する文字を入力ストリーム stream に対応するバッファーに 戻します。このワイドキャラクタ コード wc は、次にこの stream に対して getwc() を呼び出したときに返され ます (getwc(3S) 参照 ) 。この stream に対して、ファイル中の位置を変更する関数 (fseek(), fsetpos(), または rewind()) が呼び出され、正常終了すると挿入された文字は消去されます。 ungetwc() は、入力ストリーム stream に対応するバッファーにのみ影響します。 stream に対応するファイルの 内容には影響しません。 確実に戻すことができるのは1文字です。 wc が WEOF であれば、 ungetwc() はバッファーに対しては何もせずに、 WEOF を返します。 この関数、 wint_t 型、および WEOF の値は、ヘッダーファイル <wchar.h> で定義してあります。 廃止インタフェース ワイドキャラクタを入力ストリームに戻す ungetwc_unlocked() アプリケーション使用法 ungetwc() がストリームに適用された後は、ストリームはワイド指向になります (orientation(5) を参照)。 多言語化対応 ロケール ワイドキャラクタがどのように処理されるかは LC_CTYPE カテゴリによって決ります。 サポートされる文字コードセット シングル/マルチバイトの文字コードセットがサポートされています。 戻り値 ungetwc() および ungetwc_unlocked() は、正常終了すると wc を返し、このストリームのエンドオブファイルフ ラグをクリアします。 ungetwc() および ungetwc_unlocked() は、ワイドキャラクタをバッファーに挿入できな い場合には、 WEOF を返します。 Section 3-670 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ungetwc(3C) ungetwc(3C) 警告 ungetwc_unlocked() インタフェースは廃止され、現在では既存の DCE アプリケーションとの互換性を保つた めにだけサポートされています。新しいマルチスレッドアプリケーションでは、 ungetwc() を使用してくださ い。 著者 ungetwc() および ungetwc_unlocked() は、OSF および HP で開発されました。 参照 flockfile(3S), fseek(3S), fgetpos(3S), getwc(3C), setbuf(3S), orientation(5), thread_safety(5) 標準準拠 ungetwc(): XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-671 unlockpt(3C) unlockpt(3C) 名称 unlockpt − 一組みのSTREAMS ptyマスターおよびスレーブのロック解除 構文 int unlockpt (int fildes); 説明 この関数へ渡されるパラメーター fildes は、マスターpty(疑似ターミナル)デバイスのオープンが正常終了した ときに戻されるファイル記述子です。 unlockpt() 関数は、スレーブptyを、対応するマスターptyからロック解 除します。そのために、ロックフラグをクリアし、スレーブptyのオープンが可能になるようにします。安全運 用上の理由から、 unlockpt(3C) より前に grantpt(3C) を実行しなければなりません。 戻り値 unlockpt() 関数は、正常終了した場合に値0(ゼロ)を戻します。それ以外の場合は値-1を戻します。 異常終了するのは、以下の条件が発生した場合です。 • fildes パラメーターで指定されたファイル記述子は、オープンしているファイルのファイル記述子 ではありません。 • fildes パラメーターで指定されたファイル記述子は、 STREAMS ptyマスターデバイスに結び付けら れていません。 例 次に、 unlockpt の典型的な使用例を示します。 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"); 著者 unlockpt() はHPおよびOSFが開発しました。 参照 open(2), grantpt(3C), ptsname(3C), ptm(7), pts(7), ptem(7). Section 3-672 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 use_env(3X) use_env(3X) 名称 use_env — 画面サイズの情報ソースの指定 構文 #include <curses.h> void use_env(bool boolvalue); 説明 use_env() 関数は、処理系が画面のサイズを決定するための手段を指定します。 boolvalue が FALSE の場合に は、処理系は、terminfo データベース内に指定されている lines および columns の値を使います。 boolvalue が TRUE の場合には、処理系は、 LINES および COLUMNS 環境変数を使います。初期値は TRUE です。 use_env() の呼び出しはすべて initscr(), newterm() または setupterm() の呼び出しよりも前に行う必要がありま す。 戻り値 この関数は値を返しません。 エラー エラーは定義されていません。 参照 del_curterm(3X), initscr(3X), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-673 uwx(3X) uwx(3X) 名称 uwx − Unwind Express ライブラリ 構文 #include <uwx.h> #include <uwx_self.h> struct uwx_env *uwx_init(); struct uwx_self_info *uwx_self_init_info(struct uwx_env *env); int uwx_register_callbacks( struct uwx_env *env, intptr_t tok, copy_cb copyin, lookupip_cb lookupip ); int uwx_self_init_context(struct uwx_env *env); int uwx_init_context( struct uwx_env *env, uint64_t ip, uint64_t sp, uint64_t bsp, uint64_t cfm ); int uwx_step(struct uwx_env *env); int uwx_get_reg(struct uwx_env *env, int regid, uint64_t *valp); int uwx_get_abi_context_code(struct uwx_env *env); int uwx_self_do_context_frame( struct uwx_env *env, struct uwx_self_info *info ); int uwx_free(struct uwx_env *env); int uwx_self_free_info(struct uwx_self_info *info); int uwx_register_alloc_cb(alloc_cb alt_alloc, free_cb alt_free); Section 3-674 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 uwx(3X) uwx(3X) 説明 Unwind Express ライブラリは、Itaniumベース システムでのプロセススタックをアンワインドするための軽量ラ イブラリです。このライブラリは、「セルフアンワインド」( つまり、スレッドが自分のスタックをトレース バックする)、または「クロスアンワインド」(つまり、デバッガまたはその他のツールが、他のターゲットス レッドまたはプロセスのスタックを調査する) に使用できます。 Unwind Express ライブラリを使用するには、コンパイラまたはリンカーのコマンド行に -lunwind オプションを 付けて、アプリケーションをリンクします。すべてのソースコードに、ヘッダーファイル <uwx.h> をインク ルードする必要があります。このライブラリを使ってセルフアンワインドするソースコードでは、ヘッダー ファイル <uwx_self.h> もインクルードする必要があります。 Unwind Express ライブラリは、単一のアンワインド環境構造の内部に、全体の状態を保持しています。スタッ クをアンワインドする場合、クライアントアプリケーションは、アンワインド環境に初期コンテキストを渡 し、スタックを1フレームずつアンワインドします。スタックの末尾に到達した後、そのアンワインド環境 は、新しい初期コンテキストを渡すことで、その後に行うアンワインド操作に再利用されるようになるか、ま たは破棄され、使用していたメモリーが解放されます。 クライアントアプリケーションは、個別のアンワインド環境をいくつでも作成でき、その環境はそれぞれ独立 して動作し、お互いの影響を受けることはありません。 Unwind Express ライブラリは、コールバックルーチンを通じて個々の環境に適合させることができる、コアア ンワインドエンジンから成ります。セルフアンワインドの場合、標準的なコールバックルーチンのセットが、 ライブラリの一部として用意されています。クロスアンワインドの場合、アンワインドエンジンからターゲッ トのスレッドまたはプロセスへのインタフェースとなるコールバックルーチンをクライアントが用意しなけれ ばなりません。 セルフアンワインド セルフアンワインドを準備するために、クライアントアプリケーションは次のような手順で、新しいアンワイ ンド環境を作成して初期化しなければなりません。 1. uwx_init() を呼び出して、新しいアンワインド環境を作成します。戻り値は、アンワインド環境へ のポインターです。 2. uwx_self_init_info() を呼び出して、標準的なコールバック環境を初期化します。戻り値は、コール バック情報構造体へのポインターです。 3. uwx_register_callbacks() を 呼 び 出 し て、 標 準 の コー ル バッ ク、 uwx_self_copyin() と uwx_self_lookupip() を登録します。 上記の処理は、スタックのアンワインドを実行する前にいつでも実行できます。結果として作成されるアンワ インド環境は、その後繰り返し使用できます。 アプリケーション内のある地点からスタックのアンワインドを実行する場合、クライアントは次のような処理 を行わなければなりません。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-675 uwx(3X) uwx(3X) 1. uwx_self_init_context() を呼び出して、現在のスレッドのコンテキストをアンワインドの開始地点と して指定します。この関数の呼び出し元のスタックフレームが、現在のフレームになります。 2. uwx_step() を呼び出して、コールスタック内で1フレーム戻ります。1ステップごとに、新しいフ レームが現在のフレームになり、クライアントは uwx_get_reg() を呼び出して、新しいフレーム用 に再構築したコンテキストから値を取得できます。このステップは、プロセスがスタックの末尾ま たはシグナルコンテキストフレームに到達するまで繰り返すことができます。 3. シグナルコンテキストフレームに到達すると、クライアントは uwx_self_do_context_frame() を呼び 出して、割り込み位置でのコンテキストに基づいて、アンワインドの新しい開始地点を指定できま す。シグナルで割り込まれた関数のスタックフレームが、現在のフレームになります。その後に uwx_step() を呼び出すと、そこから続行されます。 クロスアンワインド クロスアンワインドを準備する場合、クライアントアプリケーションは、次のような手順で、新しいアンワイ ンド環境を作成して初期化しなければなりません。 1. uwx_init() を呼び出して、新しいアンワインド環境を作成します。戻り値は、アンワインド環境へ のポインターです。 2. uwx_set_remote() を呼び出して、クロスアンワインド用のアンワインド環境をセットアップしま す。この呼び出しでは、クライアントがターゲットプロセスのバイト順序 (リトルエンディアンま たはビッグエンディアン) を指定することもできます。 3. uwx_register_callbacks() を呼び出して、クライアントが用意したコールバック関数を登録します。 詳細は、後述する 「コールバックルーチンの記述」の項を参照してください。 上記の処理は、スタックのアンワインドを実行する前にいつでも実行できます。結果として作成されるアンワ インド環境は、その後繰り返し使用できます。 スタックのアンワインドを実行する場合、クライアントは次のような処理を行わなければなりません。 1. uwx_init_context() を呼び出して、基本初期コンテキストをアンワインドの開始地点として指定しま す。この初期コンテキストは、IP (命令ポインター)、SP (スタックポインター)、BSP (バッキング ストアポインター)、CFM (カレントフレームマーカー) で構成されます。これらの値で示されるフ レームが、現在のフレームになります。アンワインドエンジンは、ターゲットスレッドのコンテキ スト内にある他のレジスタの値を必要とする場合には、必要に応じてコールバックインタフェース を通じて値を要求します。 2. uwx_step() を呼び出して、コールスタック内で1フレーム戻ります。1ステップごとに、新しいフ レームが現在のフレームになり、クライアントは uwx_get_reg() を呼び出して、新しいフレーム用 に再構築したコンテキストから値を取得できます。このステップは、プロセスがスタックの末尾ま たはシグナルコンテキストフレームに到達するまで繰り返すことができます。 3. シグナルコンテキストフレームに到達すると、クライアントは uwx_get_abi_context_code() を呼び 出して、フレームに対するアンワインド記述子に記録された abi および context パラメータを取得 Section 3-676 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 uwx(3X) uwx(3X) することができます。このルーチンは、2つの値に対して ((abi << 8) | context) を計算し、1つの int として返します。次に、 uwx_init_context() を再度呼び出して、割り込み地点のコンテキストに基 づいて、アンワインドの新しい開始地点を指定する必要があります。シグナルで割り込まれた関数 のスタックフレームが、現在のフレームになります。その後に uwx_step() を呼び出すと、そこから 続行されます。 現在のフレームのコンテキストからの情報の取得 現在のフレームに格納されているレジスタは、 uwx_get_reg() を使って読み取ることができます。 regid パラ メータに対してサポートされる値は、以下のとおりです。 UWX_REG_IP 命令ポインター (IP)。 UWX_REG_SP スタックポインター (SP)。 UWX_REG_BSP バッキングストアポインター (BSP)。この値は、現在のフレームの GR32 が保 存される、バッキングストア内の位置を定義します。 UWX_REG_CFM カレントフレームマーカー (CFM) とエピローグカウンター (AR.EC) を、1つ のレジスタとして連結して AR.PFS に格納したもの。 UWX_REG_PREDS プレディケートレジスタ PR0-PR63。保存されたプレディケートレジスタのみ が、意味のある値になります。 UWX_REG_PRIUNAT 現在のフレーム内にある GR4-7 の NaT ビット。 UWX_REG_RNAT RSE NaT コレクションレジスタ (AR.RNAT)。 UWX_REG_UNAT ユーザー NaT コレクションレジスタ (AR.UNAT)。 UWX_REG_FPSR 浮動小数点ステータスレジスタ (AR.FPSR)。 UWX_REG_LC ループカウンターレジスタ (AR.LC)。 UWX_REG_GR(x) 汎用レジスタ GRx 。 GR4-GR7 (保存された GR) および GR32-GR127 (スタッ ク GR) のみが読み取り可能です。 UWX_REG_BR(x) ブランチレジスタ BRx 。 BR1-BR5 ( 保存された BR) のみが読み取り可能で す。 代替メモリーアロケータの使用 Unwind Express ライブラリは、できるだけ少ないメモリーを割り当てようとします。通常の状況では、 uwx_init() お よ び uwx_self_init_info() の 呼 び 出 し で の み、 メ モ リー の 割 り 当 て を 行 い ま す。 た だ し、 uwx_step() の呼び出しの際に、さらにメモリーが必要になる場合があります。 代替メモリーアロケータを使用する場合、クライアントは uwx_register_alloc_cb() を呼び出して、代替の「 allocate ( 割り当て ) 」および「 free ( 解放 ) 」コールバックを登録しなければなりません。このルーチンは、 uwx_init() も含めて Unwind Express ライブラリの他の関数よりも先に呼び出さなければなりません。 これらのルーチンの関数プロトタイプは、それぞれ malloc() および free() に対するものと同じです。 HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-677 uwx(3X) uwx(3X) コールバックルーチンの記述 コールバックのメカニズムは、アンワインドを行う個々の環境からアンワインドエンジンを使うためのインタ フェースになります。このメカニズムは「トークン」と2つのコールバックルーチンで構成されます。トーク ンは、任意のポインターサイズの値で、クライアントから渡され、アンワインドエンジンがコールバックルー チンを呼び出すときに渡されます。最初のコールバックルーチンは、命令ポインター (IP) を検査して、その IP に対応するロードモジュールを検索するためにアンワインドエンジンから呼び出されます。2番目のコール バックルーチンは、アンワインドされるプロセスのメモリー空間からデータを読み取るために呼び出されま す。 コールバックトークン タイプ intptr_t として宣言されるトークンは、通常は、クライアントが定義して渡すコールバック情報構造体 へのポインターです。この構造体には、クライアントと、クライアントが用意するコールバックルーチンとの 間で共有する必要がある情報が格納されています。また、この構造体には、コールバックルーチンがキャッ シュした情報を保持するための記憶領域もあります。 「クロスアンワインド」の場合、コールバック情報構造体は、アドレス空間のマッピング情報とともに、ター ゲットプロセスに関する情報 (スレッド ID やプロセス ID など) を含んでいなければなりません。 また、コールバック情報構造体は、アンワインドを開始した初期コンテキストのコピー、またはそれへの参照 も含んでいなければなりません。アンワインド環境自体は、保存されたレジスタの状態と、主要なスタック マーカーの値 (IP、SP、BSP、CFM) のみをトラッキングします。リーフ関数、または関数プロローグの始めの あたりで実行が停止した場合、重要な値がスクラッチレジスタに入っている場合があります (リターンポイン ター、RP がまだ BR0 にあるなど)。アンワインドエンジンは、レジスタにまだ入っていない値が必要であると 判断した場合、その値を得るために "Copy-in" コールバックを使ってその値を取得します。 Lookup IP コールバック "Lookup IP" コールバックは、指定した IP の情報を得るために使われます。プロトタイプは、 <uwx.h> で次の ように定義されています。 typedef int (*lookupip_cb)( int request, uint64_t ip, intptr_t tok, uint64_t **resultp ); アンワインドエンジンは、コールバックルーチンに以下のパラメータを渡します。 Section 3-678 request アンワインドエンジンからの要求のタイプを識別します。 ip 情報が必要な IP。 tok コールバックトークン。 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 uwx(3X) uwx(3X) resultp 結果として作成されるベクターポインターのアドレス。 アンワインドエンジンは、このコールバックを2種類の要求に使用します。 UWX_LKUP_LOOKUP コールバックが、指定した IP の情報を検索するように要求します。コール バックは、結果のベクターを割り当て、そのベクター内にロード情報を格納 し、結果のベクターへのポインターを (*resultp) に返さなければなりません。 UWX_LKUP_FREE 結果のベクターを解放しても安全であることを、コールバックに通知しま す。 Lookup 要求で返されたベクターへのポインターは、(*resultp) に渡され ます。この要求では、 ip パラメータは使用されません (結果のベクターがダ イナミックに割り当てられていない場合、この要求は無視できます)。 あ る フ レー ム か ら ス タッ ク 上 の 直 前 の フ レー ム に 戻 る と き に は、 libuwx は 現 在 の IP で 開 始 し、 UWX_LKUP_LOOKUP 要求を発行して、この IP に関する情報を取得します。 コールバックは、 UWX_LKUP_LOOKUP 要求に対して、以下のステータスコードのいずれかを返さなければ なりません。 UWX_LKUP_UTABLE ロードモジュールが見つかりました。結果のベクターには、ロードモジュー ルとアンワインドテーブルの情報が含まれています。 UWX_LKUP_NOTFOUND この IP の情報は見つかりませんでした。 UWX_LKUP_ERR エラーが発生しました。 通常、コールバックは指定した IP に関して、テキストセグメントのベースアドレス、アンワインドテーブルの 開始および終了アドレス、アンワインドフラグ (オプション) を取得します。コールバックは、この情報を結果 のベクター内に格納し、 UWX_LKUP_UTABLE のステータスコードを返します。 結果のベクターは、ペアになった符号なし 64 ビット整数値の配列です。各ペアの最初の値はキーで、2番目 の値がそれに対応する値です。このベクターは、キーが0であるようなキー/値のペアによって終了します。 結果のベクターには次のようなキーが返されます。 UWX_KEY_TBASE テキストセグメントのベースアドレス。 UWX_KEY_USTART アンワインドテーブルの開始アドレス。 UWX_KEY_UEND アンワインドテーブルの終了アドレス。 UWX_KEY_FLAGS アンワインドフラグ (HP-UX のみ)。 HP-UX では、 dlmodinfo() ルーチンでロード情報を得ることができます (<dlfcn.h> を参照)。このルーチンは、 テキストセグメントのベースアドレスと、アンワインドヘッダーのアドレスを含む記述子を返します。アンワ インドヘッダーは、アンワインドフラグと、アンワインドテーブルの開始および終了位置のセグメント相対オ フセット値で構成されます。コールバックは、テキストセグメントのベースアドレスを加えることで、セグメ HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-679 uwx(3X) uwx(3X) ント相対オフセットを仮想アドレスに変換しなければなりません。アンワインドフラグには、アンワインド テーブルフォーマットのバージョン番号と、アンワインドテーブルのエントリーが 32 ビットと 64 ビットのど ちらであるかを示すフラグが含まれています (他のオペレーティングシステムでは、アンワインドテーブルに は必ず 64 ビットのエントリーが含まれるので、アンワインドフラグを指定する必要はありません)。 情報が見つからなかった場合、コールバックは UWX_LKUP_NOTFOUND ステータスコードを返します。 resultp パラメータは変更しないままにしておく必要があります。 コールバックが UWX_LKUP_NOTFOUND を返した場合、アンワインドエンジンは、その IP がデフォルトの アンワインドプロパティを持つリーフプロシージャの IP であるとみなし、それに応じてアンワインドしようと します。 エラー状態が発生してアンワインドエンジンが正しくアンワインドできなくなった場合、コールバックは UWX_LKUP_ERR を返して、 resultp パラメータはそのままにしておく必要があります。 Copy-In コールバック "Copy in" コールバックは、アンワインドされているプロセスのアドレス空間から値を取得するために使用しま す。このコールバックのプロトタイプは、 <uwx.h> で次のように定義されています。 typedef int (*copyin_cb)( int request, char *loc, uint64_t rem, int len, intptr_t tok ); アンワインドエンジンは、以下のパラメータをコールバックルーチンに渡します。 request loc アンワインドエンジンからの要求のタイプを識別します。 要求されたデータを格納するローカルメモリーのアドレス。このアドレスは、要求された 長さのオブジェクトに対して、常に正しく整列されています。 rem リモートデータを読み取るリモートメモリーのアドレス、またはターゲットプロセスのコ ンテキストから読み取るレジスタの ID。 len ターゲットアドレス空間から読み取るバイト数。 UWX_COPYIN_UINFO 要求の場合は、 常に4または8になります。他の要求の場合は、常に8になります。 tok コールバックトークン。 アンワインドエンジンは、このコールバックを以下の4種類の要求に対して使用します。 UWX_COPYIN_UINFO ターゲットプロセスのアンワインド情報領域からデータを読み取ります。 この領域はテキストセグメント内にあるので、デバッガはこの情報をファ イルから直接読み取るか、またはターゲットプロセスのメモリーではなく Section 3-680 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 uwx(3X) uwx(3X) ローカルメモリー内のコピーから読み取るようにすることもできます。 UWX_COPYIN_MSTACK ターゲットプロセスのメモリースタックからデータを読み取ります。 UWX_COPYIN_RSTACK ターゲットプロセスのレジスタスタック バッキングストアからデータを読 み取ります。バッキングストアから読み取る際には、考慮しなければなら ないことがあります (たとえば、HP-UX では、BSP と BSPSTORE の間の領 域から ttrace() または uc_access ライブラリを用いて読み取りを行うときに は、特別なタイプの要求が必要になります)。 UWX_COPYIN_REG 現在のプロセスコンテキスト内のレジスタからデータを読み取ります。ア ンワインドがシグナルコンテキストレコードから開始または再開された場 合、この要求では、シグナルコンテキストレコードからデータを読み取る 必要があります。 UWX_COPYIN_REG 以外のすべての要求では、データの読み取り元になるリモートメモリーのアドレスが rem パラメータに設定されています。このアドレスは、要求された長さのオブジェクトに対して、常に正しく 整列されています。 UWX_COPYIN_REG リクエストの場合、 rem パラメータには、値を読み取るレジスタのレジスタ ID が含ま れています。レジスタ ID は以下のいずれかになります。 UWX_REG_PFS ar.pfs UWX_REG_PREDS プレディケートレジスタ (PR0-PR63) UWX_REG_RNAT ar.rnat UWX_REG_UNAT ar.unat UWX_REG_FPSR ar.fpsr UWX_REG_LC ar.lc UWX_REG_GR(x) GRx (1 - 31) UWX_REG_FR(x) FRx (2 - 127) UWX_REG_BR(x) BRx (0 - 7) コピー動作が正常に完了したときには、コールバックは読み取ったバイト数を返さなければなりません (これ は len パラメータと一致していなければなりません)。エラーが発生したときには、コールバックは0を返す必 要があります。 例 次に示すプログラムコードは、現在のスレッドでスタックのアンワインドを実行します。 int status; HP-UX 11i Version 2: August 2003 −8− Hewlett-Packard Company Section 3-681 uwx(3X) uwx(3X) struct uwx_env *env; struct uwx_self_info *info; uint64_t ip; env = uwx_init(); info = uwx_self_init_info(env); status = uwx_register_callbacks(env, (intptr_t)info, uwx_self_copyin, uwx_self_lookupip); status = uwx_self_init_context(env); for (;;) { status = uwx_step(env); if (status != UWX_OK) break; status = uwx_get_reg(env, UWX_REG_IP, &ip); printf("IP: %016llx\n", ip); } uwx_self_free_info(info); uwx_free(env); 制限 Unwind Express ライブラリには、現在次のような制限があります。 • X フォーマットのアンワインド記述子を認識しません。現在、HP コンパイラではこれを使っていません。 • 保存された浮動小数点レジスタのトラッキングと復元を行いません。 • 汎用レジスタに対応する NaT ビットを適切にサポートしていません。 エラー ポインター値を返す API では、NULL ポインターはメモリー割り当てのエラーを示します。エラーでないとき には、opaque オブジェクトへのポインターが返されます。 その他の API では、整数のステータスコードが返されます。コードを以下に示します。 UWX_OK 要求は正常に完了しました。 UWX_BOTTOM uwx_step() がスタックの末尾に到達しました。 UWX_ABI_FRAME uwx_step() がシグナルコンテキストフレームに到達しました。 UWX_ERR_NOENV env パラメータが NULL です。 UWX_ERR_IPNOTFOUND 現在のフレームの IP に対するモジュール情報が見つかりませんでした。 UWX_ERR_LOOKUPERR "Lookup IP" コールバックでエラーが発生しました。 Section 3-682 Hewlett-Packard Company −9− HP-UX 11i Version 2: August 2003 uwx(3X) uwx(3X) UWX_ERR_BADKEY "Lookup IP" コールバックが結果のベクターに無効なキーを返しました。 UWX_ERR_COPYIN_UTBL アンワインドテーブルの読み取りでエラーが発生しました。 UWX_ERR_COPYIN_UINFO アンワインド情報ブロックの読み取りでエラーが発生しました。 UWX_ERR_COPYIN_MSTK メモリースタックの値の読み取りでエラーが発生しました。 UWX_ERR_COPYIN_RSTK レジスタスタック バッキングストアの値の読み取りでエラーが発生しまし た。 UWX_ERR_COPYIN_REG UWX_ERR_NOUDESC 初期コンテキストからのレジスタの読み取りでエラーが発生しました。 アンワインド情報ブロックが見つかりましたが、現在のフレームの IP を記述 していません。 UWX_ERR_BADUDESC アンワインド情報ブロックに無効な記述子が含まれています。 UWX_ERR_NOMEM 追加のメモリーの割り当てが失敗しました。 UWX_ERR_PROLOG_UF アンワインド情報ブロックが無効です。プロローグ領域のネストがつり合っ ていません。 UWX_ERR_UNDEFLABEL アンワインド情報ブロックが無効です。未定義のラベルが参照されていま す。 UWX_ERR_BADREGID UWX_ERR_CANTUNWIND レジスタ ID が無効です。 記述子がサポートされていないため、アンワインドエンジンは、現在のフ レームからアンワインドすることができません。 UWX_ERR_NOCALLBACKS コールバックルーチンが登録されていません。 UWX_ERR_NOCONTEXT 初期コンテキストが指定されていません。 著者 uwx ルーチンは、HP で開発されました。 HP-UX 11i Version 2: August 2003 − 10 − Hewlett-Packard Company Section 3-683 U_STACK_TRACE(3X) U_STACK_TRACE(3X) 名称 U_STACK_TRACE(), _UNW_STACK_TRACE() − アンワインドライブラリを使ったプロシージャコールスタック のバックトレース情報の出力 構文 #include <unwind.h> void U_STACK_TRACE(); _UNW_ReturnCode _UNW_STACK_TRACE(FILE * out_file); 説明 U_STACK_TRACE() は、 フォー マッ ト さ れ た ス タッ ク ト レー ス 情 報 を 標 準 エ ラー 出 力 に 出 力 し ま す。 _UNW_STACK_TRACE() は、フォーマットされたスタックトレース情報を、パラメータ out_file で指定された 出力ストリームに出力します。出力を書き出すためには、ストリームは書き出し可能なストリームでなければ なりません。 アプリケーション使用法 U_STACK_TRACE() と _UNW_STACK_TRACE() は、スレッドセーフです。これらの関数は、非同期キャンセ ル セー フ で な い fprintf() を 使 用 し て い る の で、 非 同 期 キャ ン セ ル セー フ で は あ り ま せ ん。 ス レッ ド が U_STACK_TRACE() を実行しているときに、キャンセルポイントに達する可能性があります。 戻り値 なし エラー U_STACK_TRACE() は、以下の条件ではスタックの完全なバックトレース情報を出力できないことがありま す。 • メモリー不足。アンワインドライブラリが、スタックのバックトレースまたは、出現した命令ポインターア ドレスに対応するシンボルの検索に必要なメモリーを割り当てることができない場合。 • Itaniumベース システムの Runtime Architecture に準拠していない実行可能ファイルや共有ライブラリがある とき。たとえば、無効であったり不完全であるアンワインドテーブルを持っている、あるいはアンワインド テーブルを持っていない場合。または、無効な、または正しくないアンワインド情報ブロックを持っている 場合など。 例 次のような C プログラムがあったとします。 #include <unwind.h> foo() { U_STACK_TRACE(); } main() Section 3-684 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 U_STACK_TRACE(3X) U_STACK_TRACE(3X) { foo(); } このプログラムをコンパイルして実行すると、次のような出力が得られます。 (0) 0x0000000004000a00 foo + 0x10 [a.out] (1) 0x0000000004000a50 main + 0x10 [a.out] (2) 0x60000000c0066e20 main_opd_entry + 0x40 [/usr/lib/hpux32/dld.so] 著者 U_STACK_TRACE() は HP で開発されました。 参照 _UNW_createContextForSelf(3X), _UNW_currentContext(3X), _UNW_getGR(3X), unwind(5) HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-685 vidattr(3X) vidattr(3X) 名称 vidattr, vid_attr, vidputs, vid_puts — 端末への属性の出力 構文 #include <curses.h> int vidattr(chtype attr); int vid_attr(attr_t attr, short color_pair_number, void *opt); int vidputs(chtype attr, int (*putfunc)(int)); int vid_puts(attr_t attr, short color_pair_number, void *opt, int (*putwfunc)(int)); 説明 これらの関数は、端末の属性を変更するコマンドを端末に出力します。 terminfo データベースによって、使用中の端末が attr によって指定される修飾情報で文字を表示できることが 示されている場合には、 vidattr() は、1つまたは複数のコマンドを出力して、端末がその修飾情報で後続の文 字を表示することを要求します。この関数は、 putchar() を呼び出すことによって出力を行います。 vidattr() 関数は、Curses が保持している以前の修飾情報モードのモデルを使うこともアップデートすることもありませ ん。 vidputs() 関数は、attr に基づいて、 vidattr() が計算するのと同じ端末出力文字列を計算しますが、 vidputs() は、ユーザー提供関数 putfunc を呼び出すことによって出力を行います。 ユーザー提供関数 putfunc (vidputs() への引き数として指定される) は、 putchar() または同じプロトタイプの別 の関数のいずれかです。 vidputs() 関数は、 putfunc の戻り値を無視します。 vid_attr() および vid_puts() の両関数は、それぞれ vidattr() および vidputs() に相当しますが、属性に対する attr_t データ型のいずれか、カラーペア番号に対する short および void * という引き数の集合を使うので、 WA_ 接頭辞の付いた属性定数をサポートします。 opts 引き数は、このドキュメントの以降の版での定義のために予約されています。現状では、アプリケーショ ンで opts としてヌルポインタを指定する必要があります。 ユーザー提供関数 putwfunc (vid_puts() への引き数として指定される) は putwchar() または同じプロトタイプの 別の関数のいずれかです。 vid_puts() 関数は、 putwfunc の戻り値を無視します。 戻り値 正常に終了すると、これらの関数は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 これらの関数のいずれかを使った後、Curses が保持している端末の状態のモデルが端末の実際の状態と一致し ない可能性があります。 Curses の従来の使用を再開する前に、アプリケーションでウィンドウをタッチしてリ Section 3-686 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vidattr(3X) vidattr(3X) フレッシュする必要があります。 これらの関数を使うには、Curses を使う目的を無効にできるほど多くの端末の特定のクラスに関する情報がア プリケーションにあることが要求されます。 一部の端末では、修飾情報を変更するためのコマンドが、概念的に、スクリーンバッファ (幅があるものまた はないもの) 内のスペースを占有します。したがって、端末を新しい修飾情報に設定するためのコマンドは、 既に表示されている一部の文字の修飾情報を変更することになります。 参照 doupdate(3X), is_linetouched(3X), tigetflag(3X), putchar() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), putwchar() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-687 vprintf(3S) vprintf(3S) 名称 vprintf(), vfprintf(), vsprintf(), vsnprintf() − フォーマットしたvarargs引き数リストの出力 構文 #include <stdarg.h> #include <stdio.h> int vprintf(const char *format, va_list ap); int vfprintf(FILE *stream, const char *format, va_list ap); int vsprintf(char *s, const char *format, va_list ap); int vsnprintf(char *s, size_t maxsize, const char *format, va_list ap); 説明 vprintf(), vfprintf(), vsprintf(), お よ び vsnprintf() の 動 作 は、 そ れ ぞ れ printf(), fprintf(), sprintf() お よ び snprintf() と同じです。違いは、可変長引き数ではなく、 <stdarg.h> で定義される引き数リストを使うという ことです。 例 vfprintf() を使ってエラールーチンを書いた例です。 #include <stdarg.h> #include <stdio.h> . . . /* * error should be called using the form: * error(function_name, format, arg1, arg2...); */ /*VARARGS0*/ void error(va_alist) va_dcl { va_list args; char *fmt; va_start(args); /* print out name of function causing error */ Section 3-688 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vprintf(3S) vprintf(3S) (void)fprintf(stderr, "ERROR in %s: ", va_arg(args, char *)); fmt = va_arg(args, char *); /* print out remainder of message */ (void)vfprintf(stderr, fmt, args); va_end(args); (void)abort( ); } 参照 printf(3S), setlocale(3C), thread_safety(5), varargs(5) 標準準拠 vprintf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C vfprintf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C vsprintf(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-689 vscanf(3S) vscanf(3S) 名称 vscanf( ), vfscanf( ), vsscanf( ) − ストリームファイルからの入力をフォーマットに従ってvarargs引き数リストに変 換する 構文 #include <stdio.h> #include <varargs.h> int vscanf(const char *format, va_list ap); int vfscanf(FILE *stream, const char *format, va_list ap); int vsscanf(char *s, const char *format, va_list ap); 説明 vscanf(), vfscanf(), および vsscanf() は、それぞれ scanf(), fscanf(), および sscanf() と同じ動作をします。違い は、可変長引き数ではなく、 varargs(5) で定義される引き数リストを使うということです。 参照 scanf(3S), setlocale(3C), thread_safety(5), varargs(5) Section 3-690 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vwprintf(3C) vwprintf(3C) 名称 vfwprintf( ), vwprintf( ), vswprintf( ) − stdarg 引き数リストのワイドキャラクタ形式による出力 構文 #include <stdarg.h> #include <wchar.h> int vwprintf(const wchar_t *format, va_list arg); int vfwprintf(FILE *stream, const wchar_t *format, va_list arg); int vswprintf(wchar_t *s, size_t n, const wchar_t *format, va_list arg); 説明 vwprintf()、 vfwprintf() および vswprintf() の各関数は、それぞれ wprintf()、 fwprintf() および swprintf() と同 じですが、引き数の変数を使って呼び出されるのではなく、 <stdarg.h> によって定義された引き数リストを 使って呼び出されます。 これらの関数は va_end マクロを呼び出しません。ただし、これらの関数は va_arg マクロを呼び出すため、リ ターン後の ap の値は不定となります。 アプリケーション使用法 これらの関数を使用するアプリケーションは、クリーンアップのために、あとで va_end(ap) を呼び出す必要が あります。 戻り値 fwprintf() を参照してください。 エラー fwprintf() を参照してください。 著者 vwprintf()、 vfwprintf()、および vswprintf() は、HP と三菱電機により開発されました。 参照 fwprintf(3C), stdarg(5), thread_safety(5) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-691 vwprintw(3X) vwprintw(3X) 名称 vwprintw — 形式化した出力をウィンドウにプリント 構文 #include <stdarg.h> #include <curses.h> int vwprintw(WINDOW *win, char *fmt, va_list varglist); 説明 vwprintw() 関数は、可変引き数リストを使って、 wprintw() と同じ効果をもたらします。 3 番目の引き数は va_list で、これは <stdarg.h> に定義されている通りです。 戻り値 正常に終了すると、 vwprintw() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 vwprintw() 関数は、 X/Open System Interfaces and Headers, Issue 4, Version 2 specification の中の低重要度の関数を 使っているので、重要ではありません。 vw_printw() 関数のほうが、一般的に使用されます。 参照 mvprintw(3X), vw_printw(3X), fprintf() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <curses.h>, <stdarg.h> (X/Open System Interfaces and Headers, Issue 4, Version 2 specification) 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-692 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vwscanw(3X) vwscanw(3X) 名称 vwscanw — ウィンドウからの形式化されている入力の変換 構文 #include <stdarg.h> #include <curses.h> int vwscanw(WINDOW *win, char *fmt, va_list varglist); 説明 vwscanw() 関数は、可変引き数リストを使って、 wscanw() と同じ結果を達成します。 3 番目の引き数は va_list で、これは <stdarg.h> に定義されている通りです。 戻り値 正常に終了すると、 vwscanw() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 アプリケーション使用法 vwscanw() 関数は、 X/Open System Interfaces and Headers, Issue 4, Version 2 specification の中の低重要度の関数を 使っているので、重要ではありません。 vw_scanw() 関数のほうが、一般的に使用されます。 参照 mvscanw(3X), fscanf() (X/Open System Interfaces and Headers, Issue 4, Version 2 specification), vw_scanw(), <curses.h>, <stdarg.h> (X/Open System Interfaces and Headers, Issue 4, Version 2 specification) 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-693 vw_printw(3X) vw_printw(3X) 廃止予定 名称 vw_printw — 形式化した出力のウィンドウへのプリント 構文 #include <stdarg.h> #include <curses.h> int vw_printw(WINDOW *win, char *fmt, va_list varglist); 説明 vw_printw() 関数は、可変引き数リストを使って、 wprintw() と同じ効果をもたらします。 3 番目の引き数は va_list で、これは <stdarg.h> に定義されてる通りです。 戻り値 正常に終了すると、 vw_printw() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 mvprintw(3X), fprintf() (in the X/Open System Interfaces and Headers, Issue 4, Version 2 specification ), <curses.h>, <stdarg.h> (in the X/Open System Interfaces and Headers, Issue 4, Version 2 specification) 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-694 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 vw_scanw(3X) vw_scanw(3X) 廃止予定 名称 vw_scanw — ウィンドウからの形式化した入力の変換 構文 #include <stdarg.h> #include <curses.h> int vw_scanw(WINDOW *win, char *fmt, va_list varglist); 説明 vw_scanw() 関数は、可変引き数リストを使って、 wscanw() と同じ結果を達成します。 3 番目の引き数は va_list で、これは <stdarg.h> に定義されている通りです。 戻り値 正常に終了すると、 vw_scanw() は OK を返します。そうでなければ ERR を返します。 エラー エラーは定義されていません。 参照 mvscanw(3X), fscanf() (in the X/Open System Interfaces and Headers, Issue 4, Version 2 specification), <curses.h>, <stdarg.h> (in the X/Open System Interfaces and Headers, Issue 4, Version 2 specification) 変更履歴 X/Open Curses 第4版にて新規リリース HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-695 wconv(3C) wconv(3C) 名称 towupper( ), towlower( ) − ワイドキャラクタの変換 構文 #include <wchar.h> wint_t towupper(wint_t wc); wint_t towlower(wint_t wc); 特記事項: これらの関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ変換用関数にしたがっていま す。その動作は、 conv(3C) で定義されている8ビット文字の変換用関数と同様です。 説明 towupper() および towlower() は、 wint_t をドメインとしています。 wint_t で表せる値は、 wchar_t で表せる か、 WEOF であるかのどちらかです。引き数がこれ以外の値である場合の動作は定義されていません。 towupper() の引き数が小文字を表す場合、戻り値はそれに対応する大文字です。 towlower() の引き数が大文字 を表す場合、戻り値はそれに対応する小文字です。それ以外の場合は、引き数がそのまま戻り値となります。 これらの関数、 wint_t, wchar_t の型、および WEOF の値は、ヘッダーファイル <wchar.h> で定義してありま す。 多言語化対応 ロケール どのような変換が行われるかは LC_CTYPE カテゴリによって決ります。 サポートされる国際的コードセット シングル/マルチバイト文字コードセットがサポートされています。 著者 wconv() は、IBM, OSF, HP で開発されました。 参照 conv(3C), multibyte(3C), wctype(3C), setlocale(3C), lang(5), thread_safety(5) 標準準拠 towlower(): XPG4 towupper(): XPG4 Section 3-696 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 wcrtomb(3C) wcrtomb(3C) 名称 wcrtomb( ) − ワイドキャラクタ コードの文字への変換 (再開可能) 構文 #include <wchar.h> size_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps); 説明 s がヌルポインタの場合、 wcrtomb() 関数は以下を呼び出すことと同じです。 wcrtomb(buf, L’\0’, ps) この場合の buf は、内部バッファです。 s がヌルポインタ以外の場合、 wcrtomb() 関数は、 wc により指定されたワイドキャラクタに対応する文字の 表示に必要なバイト数 (シフトシーケンスを含む) を決定し、最初の要素が s によってポイントされている配列 にその結果のバイトを保存します。最大 MB_CUR_MAX バイトが保存されます。 wc がヌル ワイドキャラク タの場合はヌルバイトが保存され、初期シフト状態の復元にシフトシーケンスが必要な場合は、そのシフト シーケンスが先行します。その結果、初期変換状態が記述されます。 ps がヌルポインタの場合、 wcrtomb() 関数は独自の内部 mbstate_t オブジェクトを使用します。このオブジェ クトは、プログラム起動時に初期化されて、初期変換状態になっています。ヌルポインタ以外の場合は、 ps によってポイントされた mbstate_t オブジェクトを使用して、関連する文字シーケンスの現在の変換状態を完 全に記述します。処理系は、この指定で定義された関数が wcrtomb() を呼び出さなかったかのように動作しま す。 多言語化対応 locale この関数の動作は、現在のロケールの LC_CTYPE カテゴリの影響を受けます。 戻り値 wcrtomb() 関数は、配列オブジェクトに保存されたバイト数 (シフトシーケンスを含む) を戻します。 wc が有 効なワイドキャラクタでない場合は、エンコーディングエラーが発生します。その場合、この関数はマクロ EILSEQ の値を errno に保存して、 (size_t)-1 を戻します。変換状態は未定義になります。 エラー wcrtomb() 関数は、以下の場合に異常終了します。 [EINVAL] ps がポイントしているオブジェクトに無効な変換状態が含まれています。 [EILSEQ] 無効なワイドキャラクタ コードが検出されました。 著者 wcrtomb() は、HP と三菱電機により開発されました。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-697 wcrtomb(3C) wcrtomb(3C) 参照 mbsinit(3C) Section 3-698 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcsftime(3C) wcsftime(3C) 名称 wcsftime( ) − 日付および時刻のワイドキャラクタ文字列への変換 構文 #include <wchar.h> size_t wcsftime( wchar_t *ws, size_t maxsize, const char *format, const struct tm *timeptr ); _INCLUDE__STDC_A1_SOURCE only size_t wcsftime( wchar_t *ws, size_t maxsize, const wchar_t *format, const struct tm *timeptr ); 特記事項: これらの関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ フォーマット関数に従っていま す。動作は、 strftime(3C) で定義されている8ビット文字列フォーマット関数と同様です。 説明 wcsftime() は、 tm 構造体 (ctime(3C) 参照) の内容を整形し、日付と時刻のワイドキャラクタ文字列に変換しま す。 wcsftime() は、 format で指令したフォーマットに従って、 ws が指す配列にワイドキャラクタを出力します。 文字列 format は、0個以上の指令文字および通常文字からなります。指令は、文字 % で始まり、フィールド 幅および精度指定をオプションので行い、指令の内容を表す文字で終ります。通常の文字は、終端の null 文字 も含め、対応するワイドキャラクタに変換され、配列にコピーされます。配列に出力されるワイドキャラクタ は、 maxsize 文字を超えることはありません。指令は、それぞれ以下のリストにしたがって、適切なワイド キャラクタに置き換えられます。これが、どのようなワイドキャラクタであるかは、プログラムの locale, timeptr が指す構造体の内容、および、環境変数 TZ (後述の多言語化対応の項を参照) で決まります。 この関数および wchar_t 型は、ヘッダーファイル <wchar.h> で定義してあります。 _INCLUDE__STDC_A1_SOURCE のみ wcsftime() は format によって指令されたワイドキャラクタ文字列によって制御される ws によって指された配 列内にワイドキャラクタを配置します。 wcsftime() の機能は format のデータタイプを除いて同じです。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-699 wcsftime(3C) wcsftime(3C) 指令 以下にあげる指令は、それぞれ対応するワイドキャラクタで置き換えられます。これらはオプションのフィー ルド幅指定および精度指定なしで表示してあります。 %a ロケールに従った曜日の省略形 %A ロケールに従った曜日の完全形 %b ロケールに従った月の省略形 %B ロケールに従った月の完全形 %c ロケールに従った日付および時刻の表現 10 進数表記による世紀表示 (西暦の年数を 100 で割ったものを、整数になるよう切り捨て %C た値) [00-99] 月の始めから数えた 10 進数で表される [01,31] の範囲の日 %d %D 指令文字列 %m/%d/%y と同じ %e 月の日付 (10 進数表記) [1,31]。1桁の場合は、前にスペースが挿入されます。 %h %b と同じ。 %H 10 進数で表した [00,23] の範囲の時間 (24 時間法) %I 10 進数で表した [00,12] の範囲の時間 (12 時間法) %j 年の始めから数えた 10 進数で表される [001,366] の範囲の日 %m 10 進数で表した [01,12] の範囲の月 %M 10 進数で表した [00,59] の範囲の分 %n ニューラインに対応するワイドキャラクタ %p ロケールに従った AM または PM に対応した表現 %r AM および PM 表記による時刻の表示。POSIX のロケールでは、%I:%M:%S %p に相当し ます。 24 時間表示による時刻の表示 (%H:%M) %R %S 10 進数で表した [00,61] の範囲の秒 %t タブに対応するワイドキャラクタ %T 時間、分、秒形式による時刻の表示 (%H:%M:%S) %u 10 進数による曜日の表示 [1 (月曜日),7] %U 1年の週数 (10 進数表記) [00,53]。週の最初は日曜日になります。新年の最初の日曜日より 前の日は、第0週とみなします。 10 進数で表された1年の週数 (週の最初は月曜日になります)。[01,53] 1月1日が含まれる %V 週に、新年になってからの日数が4日以上ある場合、第1週とみなします。それ以外の場 合、その週は前年の第 53 週、翌週が第1週となります。 10 進数で表した [0 (日曜日),6] の範囲の曜日 %w %W 1年の週数 (10 進数表記) [00,53]。週の最初は月曜日になります。新年の最初の月曜日より 前の日は、第0週とみなします。 Section 3-700 %x ロケールに従った日付の表現 %X ロケールに従った時刻の表現 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcsftime(3C) wcsftime(3C) %y 10 進数で表した上位2桁を除いた [00,99] の範囲の年 %Y 10 進数で表した上位2桁を含む年 %Z 時間帯名 (存在しない場合は指令自体を削除) %% パーセント文字 以下の指令は、 date(1) および ctime(3C) 関数で使用できる指令との互換性を保つために用意してあります。こ れらの命令は、将来リリースされる製品では使用できなくなる可能性があります。これらを使わないで、上述 の指令を使うことをお勧めします。 %E ロケールの皇帝/時代の名前と年代 (代わりに %EC%Ey を使用) %F ロケールに従った月の完全形 (代わりに %B を使用) %N ロケールの皇帝/時代の名前 (代わりに %EC を使用) %o ロケールの皇帝/時代の年代 (代わりに %Ey を使用) %z 時間帯名 (存在しない場合は指令自体を削除) (代わりに %Z を使用) これら以外の指令があった場合の動作は定義されていません。 修飾された変換指定子 変換指定子の中には、E または O 修飾子で修飾し、修飾されていない変換指定子が通常使うものとは異なる代 替フォーマットまたは指定方法を使わなければならないことを示す場合があります。現在のロケールに対する 代替フォーマットまたは指定方法が存在しない場合は、修飾されていない変換指定子が使われた場合と同様に 動作します。代替数値シンボルは、ロケールの ALT_DIGIT (langinfo(5) を参照) で定義されたシンボルを参照 します。 %Ec ロケールの、適切な代替日時表示 %EC ロケールの代替表示における、基本となる年数の表示方法 (皇帝/時代) %Ex ロケールの代替日付表示 %EX ロケールの代替時刻表示 %Ey ロケールの代替表示と %EC (年数のみの表示) との差 %EY 完全な、代替年数表示 %Od 月の日付。ロケールの代替数値シンボルを使い、ゼロに相当する代替シンボルがある場合 は、必要に応じて前にゼロが挿入されます。それ以外の場合は、前にスペースが挿入され ます。 %Oe 月の日付。ロケールの代替数値シンボルを使い、必要に応じて前にスペースが挿入されま す。 %OH ロケールの代替数値シンボルを使った時間表示 (24 時間形式) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-701 wcsftime(3C) wcsftime(3C) %OI ロケールの代替数値シンボルを使った時間表示 (12 時間形式) %Om ロケールの代替数値シンボルを使った月の表示 %OM ロケールの代替数値シンボルを使った分の表示 %OS ロケールの代替数値シンボルを使った秒の表示 %Ou ロケールの代替表示における、数値による週の表示 (月曜日=1) %OU ロケールの代替数値シンボルを使った1年の週数 ( 週の最初は日曜日で、%U に準拠しま す。) %OV ロケールの代替数値シンボルを使った1年の週数 ( 週の最初は月曜日で、%V に準拠しま す。) %Ow ロケールの代替数値シンボルを使った曜日 (日曜日=0) %OW ロケールの代替数値シンボルを使った1年の週数 (週の最初は月曜日になります。) %Oy ロケールの代替表示における、ロケールの代替シンボルを使った年の表示 (%C との差) フィールド幅および精度 指令開始の % の直後には、オプションのでフィールド幅および精度指定を行うことができます。以下にあげ る順序で指定してください。 [- 0]w 10 進数を表す数字列 w で、変換結果の最小フィールド幅を指定します。既定では変 換結果はこの幅に右詰めされます (左側は空白文字で埋めます) が、オプションので文 字 - を指定した場合は右側を空白文字で埋め、左詰めにします。オプションので文字 0 を指定した場合は左側を0で埋め、右詰めにします。 10 進数を表す数字列 p は、 d, H, I, j, m, M, o, S, U, w, W, y および Y の各指令につい .p ては、出力する数の最小数字数を指定し、 a, A, b, B, c, D, E, F, h, n, N, p, r, t, T, x, X, z, Z, および % の各指令については、出力する最大ワイドキャラクタ数を指定しま す。前者では、指令に対応する数の桁数が精度指定よりも少なければ左に0を追加し ます。後者では、指令に対応する文字数が精度指定よりも多ければ余分な右側の文字 を削除します。 d, H, I, m, M, S, U, W, y, および j の各指令について、フィールド幅および精度指定をしなかった場合、 j につ いては .3 が、その他については .2 がそれぞれ指定されたことになります。 アプリケーション使用法 _INCLUDE__STDC_A1_SOURCE プロトタイプを使用するには、 _INCLUDE__STDC_A1_SOURCE フラグを コンパイラオプションとして渡してください。 多言語化対応 Section 3-702 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 wcsftime(3C) wcsftime(3C) ロケール 上で説明した指令のなかで、ロケールに従って行うものをどのような文字に置き換えるかは LC_TIME カテゴ リによって決ります。 format 中の各バイトが、シングルバイト文字であるか、マルチバイト文字であるか、また、ワイドキャラクタ をどのように変換するかは、 LC_CTYPE カテゴリによって決ります。 数を変換結果とする指令が、数字列を作るために使う文字は、 LC_NUMERIC カテゴリによって決ります。 ALT_DIGITS (langinfo(5) を参照) が locale として定義されている場合、既定の ASCII 文字に代わって、指定さ れた文字を使います。 ALT_DIGITS および ALT_DIGIT が、どちらもロケール用に定義されている場合、 ALT_DIGITS の定義が ALT_DIGIT よりも優先されます。 環境変数 TZ によって、 %Z および %z を置き換える時間帯名が決ります。時間帯名は外部変数 tzname (ctime(3C) を参 照) を設定する関数 tzset() を呼び出すことによって決ります。 サポートされる文字コードセット シングル/マルチバイト文字コードがサポートされています。 戻り値 変換結果のワイドキャラクタの総数が終端の null ワイドキャラクタを含めても maxsize を超えない場合、 wcsftime() は、 ws が指す配列に出力したワイドキャラクタの数 (終端の null ワイドキャラクタは数えない) を戻り 値とします。それ以外の場合、戻り値は0となり、配列の内容は不定です。 例 timeptr 引き数は次のようになっているとします。 timeptr->tm_sec = 4; timeptr->tm_min = 9; timeptr->tm_hour = 15; timeptr->tm_mday = 4; timeptr->tm_mon = 6; timeptr->tm_year = 88; timeptr->tm_wday = 1; timeptr->tm_yday = 185; timeptr->tm_isdst = 1; LC_TIME カテゴリと、フォーマット文字列の組合せと、その出力は次のようになります。 HP-UX 11i Version 2: August 2003 LC_TIME フォーマット文字列 出力 en_US.roman8 %x Mon, Jul 4, 1988 de_De.roman8 %x Mo., 4. Juli 1988 en_US.roman8 %X 03:09:04 PM −5− Hewlett-Packard Company Section 3-703 wcsftime(3C) wcsftime(3C) fr_FR.roman8 %X 15h09 04 any * %H:%M:%S 15:09:04 any * %.1H:%.1M:%.1S 15:9:4 any * %2.1H:%-3M:%03.1S 15:9 :004 * これらの例で使っている指令は locale の LC_TIME カテゴリの影響を受けません。 警告 wcsftime() を呼び出すと、時間帯名を配列に出力しない場合でも、必ず関数 tzset() を呼び出します。 %S の返す範囲 ([0,61]) は1または2秒の閏秒のために 61 まで使えるようになっています。しかし、システム は閏秒を使用せず、関数 localtime() および gmtime() (ctime(3C) を参照) が作る tm 構造体は閏秒を無視してい ます。 timeptr が指す構造体中の値が、 tm 構造体 (ctime(3C) を参照) として定義してある範囲を超えていたり、矛盾 していたりする場合 (たとえば、 tm_yday 要素が1月1日を表す0となっていて、 tm_mon 要素が 12 月を表 す 11 となっているなど)、結果は不定です。 著者 wcsftime() は、OSF および HP で開発されました。 参照 date(1), ctime(3C), setlocale(3C), environ(5), langinfo(5), thread_safety(5) 標準準拠 wcsftime(): XPG4 Section 3-704 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 wcsrtombs(3C) wcsrtombs(3C) 名称 wcsrtombs( ) − ワイドキャラクタ文字列の文字列への変換 (再開可能) 構文 #include <wchar.h> size_t wcsrtombs(char *dst, const wchar_t **src, size_t len, mbstate_t *ps); 説明 wcsrtombs() 関数は、 src によって間接的にポイントされた配列のワイドキャラクタ文字列を対応する文字列に 変換します。その際に、 ps によりポイントされたオブジェクトによって記述される変換状態から始めます。 dst がヌルポインタ以外の場合、変換された文字は dst によってポイントされる配列に保存されます。変換はヌ ル終了ワイドキャラクタまで続行され、変換されたヌル終了ワイドキャラクタも保存されます。変換は、以下 の場合に途中で停止します。 • コードが、有効な文字に対応しない箇所に達した場合。 • 次の文字が、 dst (dst がヌルポインタ以外の場合) によってポイントされた配列に保存される合計バイト数 len の制限を超える場合。 それぞれの変換は、 wcrtomb() 関数を呼び出したかのように実行されます。 dst がヌルポインタ以外の場合、 src によってポイントされたポインタオブジェクトにはヌルポインタ (ヌル終 了ワイドキャラクタに到達したために変換が停止した場合) と、最後に変換されたワイドキャラクタの直後の アドレス (ある場合) のどちらかが割り当てられます。終了ヌル ワイドキャラクタに到達したために変換が停 止した場合は、その結果として初期変換状態が記述されます。 ps がヌルポインタの場合は、 wcsrtombs() 関数が独自の内部 mbstate_t オブジェクトを使用します。このオブ ジェクトは、プログラム起動時に初期化されて初期変換状態になっています。それ以外の場合は、 ps によっ てポイントされる mbstate_t 関数を使用して、関連文字シーケンスの現在の変換状態を完全に記述します。処 理系は、この指定で定義された関数が wcsrtombs() を呼び出さなかったかのように動作します。 多言語化対応 locale この関数の動作は、現在のロケールの LC_CTYPE カテゴリの影響を受けます。 戻り値 有効な文字に対応しないコードに到達したために変換が停止した場合は、エンコーディングエラーが発生しま す。その場合、 wcsrtombs() 関数はマクロ EILSEQ の値を errno に保存して、 (size_t)-1 を戻します。変換状 態は未定義になります。それ以外の場合は、結果として生成された文字シーケンスのバイト数を戻します。バ イト数には、ヌル終了文字 (ある場合) は含まれません。 エラー wcsrtombs() 関数は、以下の場合に異常終了します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-705 wcsrtombs(3C) wcsrtombs(3C) [EINVAL] ps がポイントしているオブジェクトに無効な変換状態が含まれています。 [EILSEQ] ワイドキャラクタ コードが有効な文字に対応していません。 著者 wcsrtombs() は、HP と三菱電機により開発されました。 参照 mbsinit(3C), wcrtomb(3C) Section 3-706 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcstod(3C) wcstod(3C) 名称 wcstod( ) − ワイドキャラクタ文字列の倍精度数への変換 構文 #include <wchar.h> double wcstod(const wchar_t *nptr, wchar_t **endptr); 特記事項: この関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ整形用関数に従っています。動作 は、 strtod(3C) で定義されている8ビット文字の整形用関数と同様です。 説明 wcstod() は、 nptr が指すワイドキャラクタ文字列が表す数を、倍精度浮動小数点数値として返します。このワ イドキャラクタ文字列を先頭から不適切な文字が現れるまで走査します。先頭の空白文字 (wctype(3C) の iswspace() で定義) は無視します。何も変換しなかった場合、戻り値は0です。 wcstod() は、ワイドキャラクタを次の手順で認識します。 1. オプションの「空白」ワイドキャラクタからなる文字列を無視し、 2. オプションの符号、 3. 数字の列 (オプションとして小数点キャラクタを持つ)、 4. オプションで e または E に続いて、オプションの符号または空白、さらに続いて整数。 小数点キャラクタは、現在の NLS 環境 (setlocale(3C) を参照) で決まります。 setlocale() が呼び出され、かつ正 常終了したのではない場合、既定の NLS 環境である、"C" (lang(5) を参照) を使います。デフォルトでは、ピリ オド (.) を小数点キャラクタとします。 endptr の値が (wchar_t **)NULL でない場合、これが指す変数を、認識した最後の数字の次のワイドキャラク タを指すように設定します。何も変換しなかった場合、 *endptr を nptr に設定し、戻り値は0となります。 この関数と wchar_t 型はヘッダーファイル <wchar.h> で定義してあります。 多言語化対応 ロケール 現在の NLS 環境での、小数点キャラクタの値は、 LC_NUMERIC カテゴリによって決まります。 ワイドキャラクタコードがどのように処理されるかは、 LC_CTYPE カテゴリによって決まります。 サポートされる国際的コードセット シングル/マルチバイトの文字コードセットがサポートされています。 戻り値 正しい変換値がオーバーフローを起こす場合、その符号に従って +HUGE_VAL または -HUGE_VAL を戻り値 とし、 errno を ERANGE に設定します。 正しい変換値がアンダーフローを起こす場合、戻り値は0となり、 errno を ERANGE に設定します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-707 wcstod(3C) wcstod(3C) wcstod() が、入力されたワイドキャラクタから inf または infinity を検出した場合 (どちらも大文字小文字の区 別なし)、 HUGE_VAL を返します。また、 nan (大文字小文字の区別なし) を検出した場合は _DNANQ を返し ます。 著者 wcstod() は、AT&T と HP で開発されました。 参照 wctype(3C), setlocale(3C), scanf(3S), wcstol(3C), lang(5), thread_safety(5) 標準準拠 wcstod(): XPG4 Section 3-708 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcstoimax(3C) wcstoimax(3C) 名称 wcstoimax( )、wcstoumax( ) − ワイドキャラクタ文字列から long 整数への変換 構文 #include <inttypes.h> intmax_t wcstoimax(const wchar_t *nptr, wchar_t **endptr, int base); uintmax_t wcstoumax(const wchar_t *nptr, wchar_t **endptr, int base); 説明 wcstoimax() または wcstoumax() は、 nptr が指すワイドキャラクタ文字列を、 intmax_t または uintmax_t の表 現にそれぞれ変換します。ワイドキャラクタ文字列は、基数と矛盾するワイドキャラクタが検出されるまでス キャンされます。先頭の「空白」ワイドキャラクタ (wctype(3C) 内の iswspace() で定義されます) は無視されま す。変換を実行できない場合は、ゼロが返されます。 base が2以上 36 以下である場合、この値は変換の基数として使用されます。省略可能な先頭符号の後に続く 先頭のゼロは無視されるほか、 base が 16 の場合は 0x または 0X も無視されます。 base がゼロの場合は、基数はワイドキャラクタ文字列自体から判断されます。つまり、省略可能な先頭符号の 後に続くものがゼロであれば8進数の変換を示し、 0x または 0X であれば 16 進数の変換を示します。それ以 外の場合は、10 進数の変換が行われます。 endptr の値が (wchar_t **)NULL でない場合は、スキャンの終了の原因となったワイドキャラクタを指すポイ ンタが、 endptr が指す場所に返されます。整数を作成できない場合は、 endptr が指す場所に nptr が設定さ れ、ゼロが返されます。 これらの関数および型 wchar_t の定義は <wchar.h> ヘッダーファイルに含まれています。 多言語化対応 ロケール LC_CTYPE カテゴリによって、ワイドキャラクタコードの解釈方法が決まります。 サポートされるコードセット シングルバイトおよびマルチバイトの文字コードセットがサポートされます。 戻り値 正常終了の場合、どちらの関数も変換した値があればそれを戻り値とします。 正しい値がオーバーフローを起こす場合は、次のようになります。 wcstoimax() INTMAX_MAX または INTMAX_MIN (値の符号に基づきます) を返し、 errno を [ERANGE] に設定します。 wcstoumax() UINTMAX_MAX を返し、 errno を [ERANGE] に設定します。 その他のエラーについてはすべてゼロが返され、 errno はそのエラーを示す値に設定されます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-709 wcstoimax(3C) wcstoimax(3C) エラー 以下のいずれかの条件が発生すると、 wcstoimax() および wcstoumax() は失敗し、 errno が設定されます。 [EINVAL] base の値がサポートされていません。 [ERANGE] 戻り値がオーバーフローを起こす恐れがあります。 著者 wcstoimax() および wcstoumax() は HP で開発されました。 参照 wctype(3C)、 wcstod(3C)、 wcstol(3C)、 scanf(3S)、 thread_safety(5) 標準準拠 wcstoimax(): C99 wcstoumax(): C99 Section 3-710 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcstol(3C) wcstol(3C) 名称 wcstol( ), wcstoll( ), wcstoul( ), wcstoull( ) − ワイドキャラクタ文字列から long 整数への変換 構文 #include <wchar.h> long int wcstol(const wchar_t *nptr, wchar_t **endptr, int base); long long wcstoll(const wchar_t *nptr, wchar_t **endptr, int base); unsigned long int wcstoul(const wchar_t *nptr, wchar_t **endptr, int base); unsigned long long wcstoull(const wchar_t *nptr, wchar_t **endptr, int base); 特記事項: これらの関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ整形用関数に従っていて、 strtol(3C) で定義されている8ビット文字の整形用関数と同様の動作をします。 説明 wcstol() または wcstoul() は、 nptr が指すワイドキャラクタ文字列を long int または unsigned long int の数値に それぞれ変換します。 wcstoll() または wcstoull() は、 nptr が指すワイドキャラクタ文字列を long long または unsigned long long の数値にそれぞれ変換します。この文字列を先頭から、基数 base に対して不適切なワイド キャラクタが現れるまで走査します。文字列の先頭の「空白」ワイドキャラクタ (wctype(3C) の iswspace() に よって定義) は無視します。変換できなかった場合には、戻り値は0となります。 base が2以上で 36 以下の場合、これを基数とします。先頭には、オプションので符号をつけることができま す。この後ろに0があっても無視されます。 base が 16 の場合には、 0x や 0X も無視します。 base が0の場合、基数はワイドキャラクタ文字列自体から判断します。先頭のオプションの符号の次に0が あった場合は8進数とし、 0x や 0X があった場合は 16 進数とし、それ以外の場合は 10 進数として変換しま す。 endptr の値が (wchar_t **)NULL でない場合、変換のための走査を終了する原因となったワイドキャラクタへ のポインターを endptr が指す場所に格納します。整数への変換を何もしなかった場合、 endptr が指す場所に は、 nptr が格納され、戻り値は0となります。 これらの関数と wchar_t 型は、ヘッダーファイル <wchar.h> で定義してあります。 多言語化対応 ロケール ワイドキャラクタがどのように処理されるかは LC_CTYPE カテゴリによって決まります。 サポートされるコードセット シングル/マルチバイト文字コードセットがサポートされています。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-711 wcstol(3C) wcstol(3C) 戻り値 正常終了の場合、どちらの関数も変換した値があればそれを戻り値とします。 正しい変換値がオーバーフローを起こす場合、 wcstol() はその符号に従い、 LONG_MAX または LONG_MIN を戻り値とし、 errno を [ERANGE] に設定します。 wcstoul() は、戻り値を ULONG_MAX とし、 errno を [ERANGE] に設定します。 wcstoll() は (値の符号により) LONG_LONG_MAX または LONG_LONG_MIN を返し、 errno には [ERANGE] が格納されます。 wcstoull() は、戻り値を ULONG_LONG_MAX とし、 errno を [ERANGE] に設定します。 その他のエラーについては戻り値は0となり、 errno をエラーに従って設定します。 エラー wcstol()、 wcstoul()、 wcstoll()、および wcstoull() は、次の条件のどれかに当てはまった場合は失敗し、 errno を対応する値に設定します。 [EINVAL] base がサポートされていない値になっています。 [ERANGE] 戻り値がオーバーフローを起こす恐れがあります。 著者 これらのインタフェースは、OSF と HP で開発されました。 参照 wctype(3C), wcstod(3C), wcstoimax(3C), scanf(3S), thread_safety(5) 標準準拠 wcstol(): XPG4 wcstoul(): XPG4 wcstoll(): C99 wcstoull(): C99 !> . Section 3-712 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcstring(3C) wcstring(3C) 名称 wcscat( ), wcsncat( ), wcscmp( ), wcsncmp( ), wcscpy( ), wcsncpy( ), wcslen( ), wcschr( ), wcsrchr( ), wcsstr( ), wcspbrk( ), wcsspn( ), wcscspn( ), wcswcs( ), wcstok( ), wcscoll( ), wcwidth( ), wcswidth( ), wcsxfrm( ) − ワイドキャラクタ文字列操 作 構文 #include <wchar.h> wchar_t *wcscat(wchar_t *ws1, const wchar_t *ws2); wchar_t *wcsncat(wchar_t *ws1, const wchar_t *ws2, size_t n); int wcscmp(const wchar_t *ws1, const wchar_t *ws2); int wcsncmp(const wchar_t *ws1, const wchar_t *ws2, size_t n); wchar_t *wcscpy(wchar_t *ws1, const wchar_t *ws2); wchar_t *wcsncpy(wchar_t *ws1, const wchar_t *ws2, size_t n); size_t wcslen(const wchar_t *ws); wchar_t *wcschr(const wchar_t *ws, wchar_t wc); wchar_t *wcsrchr(const wchar_t *ws, wchar_t wc); wchar_t *wcspbrk(const wchar_t *ws1, const wchar_t *ws2); size_t wcsspn(const wchar_t *ws1, const wchar_t *ws2); size_t wcscspn(const wchar_t *ws1, const wchar_t *ws2); wchar_t *wcswcs(const wchar_t *ws1, const wchar_t *ws2); wchar_t *wcstok(wchar_t *ws1, const wchar_t *ws2); int wcscoll(const wchar_t *ws1, const wchar_t *ws2); int wcwidth(wint_t wc); int wcswidth(const wchar_t *ws, size_t n); size_t wcsxfrm(wchar_t *ws1, const wchar_t *ws2, size_t n); _INCLUDE__STDC_A1_SOURCE のみ wchar_t *wcstok(wchar_t *ws1, const wchar_t *ws2, wchar_t **ptr); wchar_t *wcsstr(const wchar_t *ws1, const wchar_t *ws2); 廃止インタフェース wchar_t *wcstok_r(wchar_t *ws1, const wchar_t *ws2, wchar_t **wlast); HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-713 wcstring(3C) wcstring(3C) 特記事項 これらの関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ文字列操作関数に従っていま す。動作は、 string(3C) で定義されている8ビット文字列の関数と同様です。 説明 引き数 ws1, ws2, および ws は、ワイドキャラクタ文字列 (null 値で終わる、 wchar_t 型の配列) を指します。 wcscat() は、ワイドキャラクタ文字列 ws2 のコピーをワイドキャラクタ文字列 ws1 の後ろに追加します。 wcsncat() は、最大で n 文字追加します。 ws2 が、 n 文字より短い場合は、追加する文字数は n より少なくな ります。どちらも、結果として得られる null で終了する文字列へのポインター (ws1 の値) を戻り値とします。 wcscmp() は、引き数を辞書順で比較し、 ws1 が ws2 に対して小さいか、等しいか、大きいかに応じて、それ ぞれ0に対して小さい、等しい、または大きい整数を戻り値とします。ワイドキャラクタの比較は、そのワイ ドキャラクタ コードの数値の比較で行っています。 ws1 や ws2 が null ポインターの場合、空の文字列へのポ インターであるかのように扱います。 wcsncmp() は、最大でも n 文字しか比較しないことを除いては同じです (n が0に等しいかそれよりも小さい場合、等しいと判断します)。 wcscpy() は、ワイドキャラクタ文字列 ws2 を、 ws1 にコピーします。null 値をコピーすると終了します。 wcsncpy() は、 ws2 から最大で n 文字コピーします。コピーする文字数がちょうど n となるように、必要だけ ws1 の後ろに null 値を追加します。 ws2 の長さが n に等しいかそれ以上の場合、結果は null で終了する文字列 ではありません。どちらの関数も、 ws1 を戻り値とします。任意の構造体をコピーするために wcsncpy() を使 うべきではありません。その構造体が、 sizeof(wchar_t) バイトの連続する null を含んでいた場合、構造体全体 をコピーしないことがあります。任意のバイナリデータをコピーする場合は、 memcpy() 関数 (memory(3C) を 参照) を使ってください。 wcslen() は、 ws の中のワイドキャラクタの数を戻り値とします。終端 null ワイドキャラクタは含みません。 wcschr() (wcsrchr()) は、ワイドキャラクタ文字列 ws 中の最初 (最後) のワイドキャラクタ wc へのポインター を戻り値とします。 wc が、文字列中にない場合は、null ポインターを戻り値とします。ワイドキャラクタ文 字列の終端 null ワイドキャラクタは、文字列の一部であるとします。 wcsstr() は、 ws1 によって指示されたワイドキャラクタ文字列の中で、 ws2 によって指示されたワイドキャラ クタ文字列内のワイドキャラクタ シーケンス (終端 null ワイドキャラクタを除く) の最初の出現箇所を探しま す。正常終了すると、 wcsstr() は検出されたワイドキャラクタ文字列へのポインターを返し、ワイドキャラク タ文字列が見つからなかった場合には null ポインターを返します。 ws2 がゼロ長のワイドキャラクタ文字列を 指示する場合、この関数は ws1 を返します。 wcspbrk() は、ワイドキャラクタ文字列 ws2 中のワイドキャラクタのどれかが、はじめてワイドキャラクタ文 字列 ws1 中に現れる場所へのポインターを返します。ワイドキャラクタ文字列 ws2 中のワイドキャラクタが ws1 中にない場合は、null ポインターを戻り値とします。 wcsspn() (wcscspn()) は、 ws1 の先頭にある、 ws2 中の (以外の) ワイドキャラクタだけからなる最長セグメン トの文字数を戻り値とします。 wcswcs() は、ワイドキャラクタ文字列 ws2 がワイドキャラクタ文字列 ws1 中に最初に現れる場所へのポイン Section 3-714 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wcstring(3C) wcstring(3C) ターを戻り値とします。 ws2 が ws1 中に現れない場合は null ポインターを戻り値とします。 ws2 が、大きさ ゼロのワイドキャラクタ文字列を指す場合、 wcswcs() は、 ws1 を戻り値とします。 wcstok() は、ワイドキャラクタ文字列 ws1 が、ワイドキャラクタ文字列 ws2 の中の文字1つ、またはそれ以上 によって区切られる0個以上のトークンの列びとして処理します。1回目に null でないポインター ws1 を指定 して呼び出すと、最初のトークンの最初のワイドキャラクタへのポインターを返し、 ws1 中のこのトークンの 直後に null ワイドキャラクタを書き込みます。この関数はこの位置を記憶しているので、次に第1引き数を null ポインターにして呼び出すとこの続きを調べます。このようにしてトークンがなくなるまでワイドキャラ クタ文字列 ws1 全体を走査できます。区切りのワイドキャラクタの文字列 ws2 は、呼び出しのたびに異なって も構いません。 ws1 中にトークンがなくなると、null ポインターを返します。 3番目の引き数は、 _INCLUDE__STDC_A1_SOURCE 環境用に追加されています。3番目の引き数 ptr は、 wcstok() が同じワイドキャラクタ文字列の走査を続行するのに必要な情報を保存している、呼び出し側により 提供された wchar_t ポインターを指示します。 wcscoll() は、引き数を比較し、 ws1 の指すワイドキャラクタ文字列が ws2 の指すワイドキャラクタ文字列に対 して小さいか、等しいか、大きいかに応じて、それぞれ0に対して小さい、等しい、または大きい整数を戻り 値とします。比較は、プログラムのロケール (後述の「ロケール」を参照) に従って適切な方法で行われます。 ‘‘C’’ ロケールでは、 wcscoll() の動作は wcscmp() と同じです。 wcwidth() は、ワイドキャラクタ wc の幅を桁数で返します。 wc が、null ワイドキャラクタの場合、戻り値は 0です。 wc がプリント不可能なワイドキャラクタの場合、戻り値は -1 です。 wcswidth() は、 ws が指すワイドキャラクタ文字列の先頭の n 文字 (n 文字より前に null ワイドキャラクタがあ る場合は、 n 文字よりも少ない ) の幅を桁数で返します。 ws が null ワイドキャラクタを指す場合、 wcswidth() の戻り値は0です。 ws にプリント不可能なワイドキャラクタが含まれる場合または ws が NULL ポインターの場合、 wcswidth() の戻り値は -1 です (どちらの場合も errno に [EINVAL] が設定されます)。 wcsxfrm() は、 ws2 が指すワイドキャラクタ文字列を変換して、 ws1 が指す配列に結果を格納します。変換 は、 wcscmp() を変換された2つのワイドキャタクタ文字列に用いる場合、変換前の2つのワイドキャタクタ 文字列に wcscoll() を適用し、その結果に応じて、正、0、負の値を返すようになっています。末尾の NULL ワ イドキャラクタを含め n 個までのワイドキャラクタ コードが、 ws1 で指定された結果用配列に格納されま す。 n が0の場合、 ws1 には NULL ポインターが指定できます。領域が重なるオブジェクト間でコピーが行 われた場合、動作は不定になります。 wcsxfrm() は、変換したワイドキャラクタの長さを (末尾の NULL ワイ ドキャラクタは含まないで) 返します。返された値が n またはそれよりも大きい場合、 ws1 が指す配列の値は 不定です。エラーが発生した場合、 wcsxfrm() は (size_t) -1 を返し、 errno に [EINVAL] (ws2 が指すワイド キャラクタ文字列に、照合順序の範囲外にあるワイドキャラクタ コードが含まれている場合 ) 、または [NOSYS] (関数がサポートされていない場合) を設定します。 これらの関数と wchar_t 型はヘッダーファイル <wchar.h> に定義してあります。 廃止インタフェース ワイドキャラクタ文字列を操作する wcstok_r() HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-715 wcstring(3C) wcstring(3C) 多言語化対応 ロケール wcscoll() 関数が使う照合順は、 LC_COLLATE カテゴリによって決ります。 wcwidth() および wcswidth() の両関数が幅を計算する方法は、 LC_CTYPE カテゴリによって決まります。 エラー wcswidth() は以下の場合に失敗します。 [EINVAL] ws がヌルか ws にプリント不可なワイドキャラクタがある場合。 wcsxfrm() は以下の場合失敗します。 [EINVAL] ws2 ドメインの照合順序外でワイドキャラクタを含む文字列を指す場合。 [ENOSYS] wcsxfrm() がサポートされていない場合。 例 以下のサンプルコードは、空白で区切られている、文字列 s 中のトークンを見つけるものです (トークンの最 大数は MAXTOK とします)。 int i = 0; wchar_t *ws, *wlast, *wtok[MAXTOK]; wtok[0] = wcstok_r(ws, L" ", &wlast); while (wtok[++i] = wcstok_r(NULL, L" ", &wlast)); アプリケーション使用法 _INCLUDE__STDC_A1_SOURCE プロトタイプを使用するには、 _INCLUDE__STDC_A1_SOURCE フラグを コンパイラオプションとして引き渡します。 警告 関数 wcscat(), wcsncat(), wcscpy(), wcsncpy(), wcstok(), wcsstr() および wcstok_r() は、 ws1 が指す配列の内容を 変更します。これらの関数は、配列のオーバーフローを確認しません。 宛先のワイドキャラクタ文字列が null ポインターの場合の動作は定義されていません。 ワイドキャラクタの移動方法はインプリメンテーションに依存しています。コピーを行う場合に、コピー元の ワイドキャラクタ文字列と宛先が重なっていると予想外の結果を生じることがあります。 カテゴリ LC_COLLATE と LC_CTYPE が指定する言語が、互いに異なった文字セットを使用する場合、 wcscoll() 関数の動作は定義されません。 wcstok_r() インタフェースは廃止され、現在では既存の DCE アプリケーションとの互換性を保つためにだけサ ポートされています。新しいマルチスレッドアプリケーションでは、 wcstok() を使用してください。 ws が指すワイドキャラクタで指定された n 文字のワイドキャラクタ用に必要なカラム数が INT_MAX を超え た場合、 wcswidth() は不正確な負の値を返します。 Section 3-716 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 wcstring(3C) wcstring(3C) 著者 wcstring 関数は OSF および HP で開発されました。 参照 wconv(3C), memory(3C), multibyte(3C), setlocale(3C), string(3C), thread_safety(5) 標準準拠 wcscat(): XPG4 wcschr(): XPG4 wcscmp(): XPG4 wcscoll(): XPG4 wcscpy(): XPG4 wcscspn(): XPG4 wcslen(): XPG4 wcsncat(): XPG4 wcsncmp(): XPG4 wcsncpy(): XPG4 wcspbrk(): XPG4 wcsrchr(): XPG4 wcsspn(): XPG4 wcstok(): XPG4 wcswcs(): XPG4 wcswidth(): XPG4 wcwidth(): XPG4 wcsxfrm(): XPG4 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-717 wctype(3C) wctype(3C) 名称 iswalpha( ), iswupper( ), iswlower( ), iswdigit( ), iswxdigit( ), iswalnum( ), iswspace( ), iswpunct( ), iswprint( ), iswgraph( ), iswcntrl( ), wctype( ), iswctype( ) − ワイドキャラクタの分類 構文 #include <wchar.h> wctype_t wctype(const char *charclass); int iswctype(wint_t wc, wctype_t prop); int iswalnum(wint_t wc); int iswalpha(wint_t wc); int iswcntrl(wint_t wc); int iswdigit(wint_t wc); int iswgraph(wint_t wc); int iswlower(wint_t wc); int iswprint(wint_t wc); int iswpunct(wint_t wc); int iswspace(wint_t wc); int iswupper(wint_t wc); int iswxdigit(wint_t wc); 特記事項: これらの関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ分類関数に従っています。動作 は、 ctype(3C) で定義されている8ビット文字の分類関数と同様です。 説明 これらの関数はワイドキャラクタの値を文字セットに従って分類します。文字セットは、最後に setlocale() (setlocale(3C) を参照) を呼び出し、正常終了したときに定義したものを使います。 この関数を呼び出すまでに setlocale() を呼び出し、正常終了したのではない場合、文字は既定の ASCII 7ビッ ト文字セット (setlocale(3C) を参照) に従って分類します。 分類関数はどれも、真の時は0以外を、偽の時は0を返す述語関数です。 wctype() は、現在の locale で定義されている、有効な文字クラス名について定義されています。 charclass は文 字クラスを指定する一般化された文字列です。指定したクラスを表す文字セットに依存した型の情報が得られ ます。次のクラス名はどの locale についても定義してあります: alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper, および xdigit 。ユーザー定義のクラス名は、現在のロケールで setlocale() (setlocale(3C) を参照) によって定義されている場合に指定することができます。 wctype() は、 wctype_t 型の値を戻 り値とします。これはその後の iswctype() の呼び出しに使用できます。 charclass が現在の locale で無効な場 合、戻り値は (wctype_t)-1 となります。 分類関数の戻り値は、条件を満たした場合0以外となり、それ以外の場合0となります。 Section 3-718 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 wctype(3C) wctype(3C) iswctype(wc, prop) wc は、 prop で定義された属性をもつ iswalpha(wc) wc は、英文字である iswupper(wc) wc は、大文字である iswlower(wc) wc は、小文字である iswdigit(wc) wc は、10 進数を表す数字である (ASCII では文字 [0-9]) iswxdigit(wc) wc は、16 進数を表す数字である (ASCII では文字 [0-9], [A-F] または [a-f]) iswalnum(wc) wc は、英数字である (英文字か数字) iswspace(wc) wc は、表示すると「空白」となる文字である (ASCII ではスペース、タブ、キャ リッジリターン、ニューライン、垂直タブ、およびフォームフィード) iswpunct(wc) wc は、句読点文字である (ASCII ではスペース (040)、数字、英文字を除くすべ ての表示可能な文字) iswprint(wc) iswgraph(wc) wc は、表示可能な文字である wc は、可視文字である (ASCII ではスペース (040) を除くすべての表示可能な文 字) iswcntrl(wc) wc は、制御文字である (ASCII では文字コードが 040 よりも小さいものと削除文 字 (0177)) これらの関数の引き数が定義域にない場合、戻り値は0 (偽) です。 これらの関数と wint_t, wchar_t, および wctype_t の型はヘッダーファイル <wchar.h> に定義してあります。 多言語化対応 ロケール 文字の分類方法は LC_CTYPE カテゴリで決ります。 サポートされる国際的コードセット シングル/マルチバイト文字コードセットがサポートされています。 著者 wctype() は、IBM, OSF, HP で開発されました。 参照 ctype(3C), multibyte(3C), setlocale(3C), ascii(5), thread_safety(5) 標準準拠 wctype(): XPG4 iswalnum(): XPG4 iswalpha(): XPG4 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-719 wctype(3C) wctype(3C) iswcntrl(): XPG4 iswctype(): XPG4 iswdigit(): XPG4 iswgraph(): XPG4 iswlower(): XPG4 iswprint(): XPG4 iswpunct(): XPG4 iswspace(): XPG4 iswupper(): XPG4 iswxdigit(): XPG4 Section 3-720 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 wmemory(3C) wmemory(3C) 名称 wmemchr( ), wmemcmp( ), wmemcpy( ), wmemmove( ), wmemset( ) − ワイドキャラクタに基づくメモリー操作 構文 #include <wchar.h> wchar_t *wmemchr(const wchar_t *ws, wchar_t wc, size_t n); int wmemcmp(const wchar_t *ws1, const wchar_t *ws2, size_t n); wchar_t *wmemcpy(wchar_t *ws1, const wchar_t *ws2, size_t n); wchar_t *wmemmove(wchar_t *ws1, const wchar_t *ws2, size_t n); wchar_t *wmemset(wchar_t *ws, wchar_t wc, size_t n); 説明 これらの関数は、メモリー領域 (長さ指定されたワイドキャラクタの配列で、ヌル ワイドキャラクタで終了し ていないもの) で効果的に動作します。受け取り側メモリー領域のオーバーフローについてはチェックしませ ん。 これらの関数はロケールの影響を受けず、すべての wchar_t 値は同一に処理されます。有効な文字に対応しな いヌル ワイドキャラクタと wchar_t 値は、とくに処理されません。 wmemchr() wmemchr() 関数は、 ws によってポイントされるオブジェクトの最初から n ワイドキャラク タ中で最初の wc の出現箇所を検出します。 wmemchr() 関数は、検出されたワイドキャラク タに対するポインター、あるいは、オブジェクト内にワイドキャラクタが検出されなかった場 合には、ヌルポインターを返します。 wmemcmp() wmemcmp() 関数は、 ws1 によってポイントされたオブジェクトの最初の n 個のワイドキャラ クタを ws2 によってポイントされたオブジェクトの最初の n 個のワイドキャラクタと比較し ます。 wmemcmp() 関数は、 ws1 によってポイントされたオブジェクトが ws2 によってポイ ントされたオブジェクトよりも大きいか、等しいか、または小さいかに応じて、正、ゼロ、ま たは負の整数を返します。 wmemcpy() wmemcpy() 関数は、 ws2 によってポイントされたオブジェクトから n 個のワイドキャラクタ を ws1 によってポイントされたオブジェクトにコピーします。有効な文字に対応しないヌル ワイドキャラクタと wchar_t 値は、とくに処理されません。 wmemcpy() 関数は、 ws1 の値を 返します。 wmemmove() wmemmove() 関数は、 ws2 によってポイントされたオブジェクトの n 個のワイドキャラクタ を ws1 によってポイントされたオブジェクトにコピーします。コピーは、 ws2 によってポイ ントされたオブジェクトの n 個のワイドキャラクタが ws1 または ws2 によってポイントされ たオブジェクトとオーバーラップしない n 個のワイドキャラクタの一時配列に最初にコピー され、そのあとで一時配列の n 個のワイドキャラクタが ws1 によってポイントされたオブ ジェクトにコピーされます。 wmemmove() 関数は、 ws1 の値を返します。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-721 wmemory(3C) wmemory(3C) wmemset() 関数は、 wc の値を ws によってポイントされたオブジェクトの最初の n 個のワイ wmemset() ドキャラクタのそれぞれにコピーします。 wmemset() 関数は、 ws の値を返します。 エラー エラーは定義されていません。 著者 wmemchr()、 wmemcmp()、 wmemcpy()、 wmemmove()、 wmemset() は、HP と三菱電機により開発されまし た。 参照 thread_safety(5) Section 3-722 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wordexp(3C) wordexp(3C) 名称 wordexp(), wordfree() − 単語の展開 構文 #include <wordexp.h> int wordexp(const char *words, wordexp_t *pwordexp, int flags); void wordfree(wordexp_t *pwordexp); 説明 wordexp() は、単語を展開し、展開した単語のリストを pwordexp が指す構造体に格納します。 引き数 words は、展開する1つまたは複数の単語の入った文字列へのポインターです。展開結果は、シェル (sh-posix(1) を参照) のコマンドラインに、何かのユーティリティへの引き数としてこの文字列を与えた場合と 同じです。よって、 words は、引用符で囲わない限り、ニューライン文字やシェルの特殊文字 |, &, ;, < または > を含んでいてはいけません。ただし、シェルコマンド置換の場合は例外です。 words が、引用符に囲われて いないコメント文字 # を含んでいる場合、 wordexp() はこれをコメントを表すトークンの開始文字として扱 い、この文字以降を無視します。 構造体型 wordexp_t は、ヘッダーファイル <wordexp.h> で定義してあり、以下の要素を持ちます。 we_wordc words がマッチした単語数を格納する size_t 型変数 we_wordv 展開した単語のリストへのポインターを格納する char** 型変数 we_offs pwordexp−>we_wordv の先頭に予約領域として空けておくポインター格納場所 の数を指示する size_t 型変数 wordexp() は、展開した単語の数を pwordexp−>we_wordc に格納します。フィールド分離やパス名展開で分け られた各々のフィールドが、それぞれ pwordexp−>we_wordv リストの1単語となります。単語の順序は、シェ ルの単語展開の項で説明されているとおりです。最後の単語を指すポインターの次のポインターは null ポイン ターです。パラメータ (たとえば $$ や $* など) の展開については特に指定はありません。 pwordexp が 指 す 記 憶 領 域 は、 関 数 を 呼 び 出 す 側 で 割 り 当 て て く だ さ い。 そ れ 以 外 に つ い て は、 pwordexp−>we_wordv が指すメモリーも含め、 wordexp() が必要に応じて割り当てます。 wordfree() は、直前の wordexp() で割り当てた pwordexp に対応するメモリーをすべて解放します。 引き数 flags は wordexp() の動作を制御します。 flags の値は、以下の定数を0個またはそれ以上、ビット毎の 論理的 OR をとったものです。これらの定数は、 <wordexp.h> に定義してあります。 WRDE_APPEND WRDE_DOOFFS 展開した単語を、前回 wordexp() を呼び出したときの結果に追加する。 pwordexp−>we_offs を 使 用 し ま す。 こ の フ ラ グ を 立 て る と、 pword- exp−>we_wordv の先頭に pwordexp−>we_offs 個の null ポインターを格納しま す。つまりこの場合、 pwordexp−>we_wordv は、 pwordexp−>we_offs 個の null ポインターを指し、それに pwordexp−>we_wordc 個の単語へのポインターが続 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-723 wordexp(3C) wordexp(3C) き、最後に null ポインターがあることになります。 WRDE_NOCMD コマンド置換の要求があった場合に、失敗します。 WRDE_REUSE 引き数 pwordexp は、前回 wordexp() を呼び出し、正常終了したときに使ったも ので、その後 wordfree() を呼び出していないことを表します。これは、アプリ ケーションが、まず wordfree() を呼び出し、次に WRDE_REUSE なしで wordexp() を呼び出すことと同じです。 WRDE_SHOWERR stderr を /dev/null にリダイレクトしません。 WRDE_UNDEF 未定義のシェル変数を展開しようとした場合に、エラーを報告します。 WRDE_APPEND フラグを使って、以前に wordexp() で展開した単語の後ろに新しい単語の組を追加すること ができます。同じ pwordexp を使って、 wordexp() を2回またはそれ以上続けて呼び出し、間に wordfree() を 呼び出さなかった場合の規則は次のとおりです。 • 1回目の呼び出しでは WRDE_APPEND を立ててはいけません。2回目以降では立てなければなり ません。 • すべての呼び出しで WRDE_DOOFFS を立てるか、どの呼び出しでも立てないかのどちらかに統一 する必要があります。 • 2回目以降の呼び出しの後、 pwordexp−>we_wordv が指すリストの内容は次のとおりです。 • WRDE_DOOFFS および pwordexp−>we_offs で指定した、0個またはそれ以上の null ポイン ターがあります。 • 呼び出す前に pwordexp−>we_wordv にあった単語へのポインターが、順序を変えずにありま す。 • • • 今回の呼び出しで展開された新しい単語へのポインターがあります。 pwordexp−>we_wordc に格納される値はそれまでの呼び出しで展開した単語の総数です。 アプリケーションは wordexp() を呼び出した後にリスト中の項目を変更してもかまいません。しか し そ の 場 合、 次 に 同 じ pwordexp を 使っ て wordfree() を 呼 び 出 し た り、 WRDE_APPEND や WRDE_REUSE フラグを指定して wordexp() を呼び出したりする前に、変更したものを元の値に戻 さなければなりません。 words 中に、ニューライン, |, &, ;, <, >, 小かっこ、 中かっこの各文字が、引用符に囲われない不適切な構文で 現れた場合、 wordexp() は失敗し、展開した単語数は0となります。 WRDE_SHOWERR flags を立てない場合、 wordexp() は、 words の展開でコマンド置換を行う場合に起動する ユーティリティの stderr を /dev/null にリダイレクトします。立てた場合は、 words の展開作業中に構文エラー を見つけると stderr メッセージを出力します。 WRDE_DOOFFS を立てる場合、同じ wordexp を使って呼び出す wordexp() と wordfree() について、 pwordexp−>we_offs を常に同じ値にします。 Section 3-724 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 wordexp(3C) wordexp(3C) 戻り値 展開が正常に終了した場合 wordexp() は、0を戻り値とします。それ以外の場合は <wordexp.h> で定義してあ る0以外の値でエラーを表します。 WRDE_BADCHAR words 中に、 |, &, ;, <, >, 小かっこ、 中かっこのどれかの文字が引用符なしで不 適切な構文で使われています。 WRDE_BADVAL flags に WRDE_UNDEF が立ててある場合に、未定義のシェル変数を参照しまし た。 WRDE_CMDSUB flags に WRDE_NOCMD が立ててある場合に、コマンド置換を行おうとしまし た。 WRDE_NOSPACE WRDE_SYNTAX メモリーの割当てに失敗しました。 閉じていない文字列や対応のとれていないかっこがあるなどのシェル構文エ ラーが発生しました。 WRDE_INTERNAL 内部エラーが発生しました。 戻 り 値 が エ ラー WRDE_NOSPACE の 場 合、 wordexp() は、 pwordexp−>we_wordc お よ び pwordexp−>we_wordv を、正常に展開した単語について設定します。それ以外のエラーの場合は、何も変更しませ ん。 著者 wordexp() および wordfree() は、OSF と HP で開発されました。 参照 sh-posix(1), fnmatch(3C), glob(3C), regexp(5), thread_safety(5) 標準準拠 wordexp(): XPG4, POSIX.2 wordfree(): XPG4, POSIX.2 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-725 wunctrl(3X) wunctrl(3X) 名称 wunctrl — ワイドキャラクタのプリント可能表現の生成 構文 #include <curses.h> wchar_t *wunctrl(cchar_t *wc); 説明 wunctrl() 関数は、ワイドキャラクタ wc のプリント可能表現のワイドキャラクタの文字列を生成します。 この関数は、入力引き数に対して以下の処理も実行します。 • 制御文字を ˆX 表記に変換します。 • 修飾情報を削除します。 戻り値 正常に終了すると、 wunctrl() は生成された文字列を返します。そうでなければヌルポインターを返します。 エラー エラーは定義されていません。 参照 keyname(), unctrl(), <curses.h> 変更履歴 X/Open Curses 第4版にて新規リリース Section 3-726 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 xdr(3N) xdr(3N) 名称 xdr − 外部データ表現のライブラリルーチン 説明 XDR ルーチンを使用すれば、C プログラマは、マシンに依存しない方法で任意のデータ構造を記述することが できます。リモートプロシージャコール (RPC) のデータは、これらのルーチンによって伝送されます。 ルーチンのインデックス 以下に、 XDR ルーチン、およびそれらについて説明しているマニュアル参照ページのリストを示します。 XDR ルーチン マニュアル参照ページ xdr_array xdr_complex(3N) xdr_bool xdr_simple(3N) xdr_bytes xdr_complex(3N) xdr_char xdr_simple(3N) xdr_control xdr_admin(3N) xdr_destroy xdr_create(3N) xdr_double xdr_simple(3N) xdr_enum xdr_simple(3N) xdr_float xdr_simple(3N) xdr_free xdr_simple(3N) xdr_getpos xdr_admin(3N) xdr_hyper xdr_simple(3N) xdr_inline xdr_admin(3N) xdr_int xdr_simple(3N) xdr_long xdr_simple(3N) xdr_longlong_t xdr_simple(3N) xdr_opaque xdr_complex(3N) xdr_pointer xdr_complex(3N) xdr_quadruple xdr_simple(3N) xdr_reference xdr_complex(3N) xdr_setpos xdr_admin(3N) xdr_short xdr_simple(3N) xdr_sizeof xdr_admin(3N) xdr_string xdr_complex(3N) xdr_u_char xdr_simple(3N) xdr_u_hyper xdr_simple(3N) xdr_u_int xdr_simple(3N) xdr_u_long xdr_simple(3N) HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-727 xdr(3N) xdr(3N) xdr_u_longlong_t xdr_simple(3N) xdr_u_short xdr_simple(3N) xdr_union xdr_complex(3N) xdr_vector xdr_complex(3N) xdr_void xdr_simple(3N) xdr_wrapstring xdr_complex(3N) xdrmem_create xdr_create(3N) xdrrec_create xdr_create(3N) xdrrec_endofrecord xdr_admin(3N) xdrrec_eof xdr_admin(3N) xdrrec_readbytes xdr_admin(3N) xdrrec_skiprecord xdr_admin(3N) xdrstdio_create xdr_create(3N) マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ント (キャンセルポイントである関数を呼び出す点) となる場合があります。 マルチスレッド環境では、 fork() の後と exec() の前に子プロセスでこれらの関数を支障なく呼び出すことはで きません。これらの関数は、非同期キャンセルや非同期シグナルをサポートしているマルチスレッドアプリ ケーションで呼び出してはなりません。 参照 rpc(3N), xdr_admin(3N), xdr_complex(3N), xdr_create(3N), xdr_simple(3N). Section 3-728 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 xdr_admin(3N) xdr_admin(3N) 名称 xdr_admin, xdr_control, xdr_getpos, xdr_inline, xdrrec_endofrecord, xdrrec_eof, xdrrec_readbytes, xdrrec_skiprecord, xdr_setpos, xdr_sizeof − 外部データ表現のライブラリルーチン 構文 #include <rpc/xdr.h> bool_t xdr_control(XDR *xdrs, int req, void *info); u_int xdr_getpos(const XDR *xdrs); long *xdr_inline(XDR *xdrs, const int len); bool_t xdrrec_endofrecord(XDR *xdrs, int sendnow); bool_t xdrrec_eof(XDR *xdrs); int xdrrec_readbytes(XDR *xdrs, caddr_t addr, u_int nbytes); bool_t xdrrec_skiprecord(XDR *xdrs); bool_t xdr_setpos(XDR *xdrs, const u_int pos); unsigned long xdr_sizeof(xdrproc_t func, void *data); 説明 XDR ライブラリルーチンを使用すれば、C プログラマは、マシンに依存しない方法で任意のデータ構造を記述 することができます。リモートプロシージャコール (RPC) などのプロトコルでは、これらのルーチンを使用し てデータのフォーマットを記述します。 これらのルーチンは、限定的に XDR ストリームの管理を取り扱います ルーチン XDR データ構造の定義については、 rpc(3N) を参照してください。 XDR ルーチンに渡されるバッファはすべ て正しく整列させる必要があります。これらのバッファの割り当てに malloc(3C) を使用するか、あるいは、プ ログラマは、必ずバッファアドレスが 4 で割り切れるようにしてください。 bool_t xdr_control() XDR ストリームに関するさまざまな情報を変更または取り出すための関数マクロです。 req は操作の タイプを示し、 info は情報を指すポインタです。 reqのサポートされている値、それらの引き数ならび に機能は次の通りです。 XDR_GET_BYTES_AVAIL xdr_bytesrec * ストリーム内で未使用のまま の多数のバイト、およびこれ が最後のフラグメントである かどうかを示すフラグを戻し ます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-729 xdr_admin(3N) xdr_admin(3N) u_int xdr_getpos() XDR ストリーム xdrs と結合している位置取り込みルーチンを呼び出すマクロです。このルーチンは、 XDR バイトストリームの位置を示す符号なし整数を戻します。 XDR ストリームの望ましい機能は、 その XDR ストリームインスタンスで保証していない場合でも、簡単な算術でこの数値を処理すること です。したがって、移植性を備えるために作成されたアプリケーションは、この機能から独立させる 必要があります。 long *xdr_inline() XDR ストリーム xdrs に結合しているインラインルーチンを呼び出すマクロです。このルーチンは、こ のストリームのバッファの 1つの隣接部分を指すポインタを戻します。len は所要バッファのバイト長 です。注 : ポインタは、 long * を指すように入れられます。 警告 : xdr_inline() は、バッファの 1つの隣接部分を割り振ることができない場合に、 NULL (0) を戻す ことがあります。したがって、この動作は、ストリームインスタンスによって異なることがありま す。つまり、この動作は効率性を得るために存在します。また、移植性を備えるために作成されたア プリケーションは、この機能から独立させる必要があります。 bool_t xdrrec_endofrecord() このルーチンは、 xdrrec_create() で作成されたストリーム (xdr_create(3N) を参照) 上でのみ呼び出す ことができます。出力バッファ内のデータは完了済みレコードとしてマークされ、 sendnow が非ゼロ である場合、その出力バッファは任意で書き出されます。このルーチンは、正常終了すると TRUE を 戻し、異常終了すると FALSE を戻します。 bool_t xdrrec_eof() このルーチンは、 xdrrec_create() で作成されたストリーム上でのみ呼び出すことができます。そのス トリーム内に残っていた現在のレコードをすべて使用した後に、そのストリームの入力バッファ内に データがなければ、このルーチンは TRUE を戻します。そのストリームの入力バッファ内に追加デー タがあれば、このルーチンは FALSE を戻します。 int xdrrec_readbytes() このルーチンは、 xdrrec_create() で作成されたストリーム上でのみ呼び出すことができます。この ルーチンは、XDR ストリームから、 addr で指しているバッファ内に nbytes バイトを読み込もうとし ます。このルーチンは、正常終了すると、読み込んだ多数のバイトを戻し、異常終了すると −1 を戻し ます。 0 の戻り値はレコードの終端を示します。 bool_t xdrrec_skiprecord() このルーチンは、 xdrrec_create() で作成されたストリーム (xdr_create(3N) を参照) 上でのみ呼び出す ことができます。 XDR 実行の際、このルーチンによって、そのストリームの入力バッファ内に残って いる現在のレコードのすべてを破棄する必要があると通知されます。このルーチンは、正常終了する と TRUE を戻し、異常終了すると FALSE を戻します。 Section 3-730 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 xdr_admin(3N) xdr_admin(3N) bool_t xdr_setpos() XDR ストリーム xdrs と結合している位置設定ルーチンを呼び出すマクロです。パラメータ pos は、 xdr_getpos() から取得された位置の値です。このルーチンは、XDR ストリームの位置が再設定された 場合は TRUE を戻し、それ以外の場合は FALSE を戻します。 警告 : ある種の XDR ストリームの場合、その位置を再設定するのは困難であるため、ストリームのタ イプによって、このルーチンが正常終了したり異常終了したりすることがあります。したがって、移 植性を備えるために作成されたアプリケーションは、この機能から独立させる必要があります。 unsigned long xdr_sizeof() このルーチンは、XDR フィルタ処理関数 func を使用し、 data のエンコードに必要な多数のバイトを 戻します。この場合、RPC ヘッダーやレコードマーカなどの潜在的なオーバヘッドは除かれます。エ ラーの発生時には、 0 (ゼロ) が戻されます。この情報は、転送プロトコルを選択する場合、RPC クラ イアントとサーバの作成ルーチンのさまざまな下位のバッファサイズを決定する場合、あるいは、 RPC サブシステム外部で XDR が使用されるときに記憶領域を割り振る場合に使用されることがあり ます。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ント (キャンセルポイントである関数を呼び出す点) となる場合があります。 マルチスレッド環境では、 fork() の後と exec() の前に子プロセスでこれらの関数を支障なく呼び出すことはで きません。これらの関数は、非同期キャンセルや非同期シグナルをサポートしているマルチスレッドアプリ ケーションで呼び出してはなりません。 参照 malloc(3C), rpc(3N), xdr_complex(3N), xdr_create(3N), xdr_simple(3N) HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-731 xdr_complex(3N) xdr_complex(3N) 名称 xdr_complex, xdr_array, xdr_bytes, xdr_opaque, xdr_pointer, xdr_reference, xdr_string, xdr_union, xdr_vector, xdr_wrapstring − 外部データ表現のライブラリルーチン 構文 #include <rpc/xdr.h> bool_t xdr_array(XDR *xdrs, caddr_t *arrp, u_int *sizep, const u_int maxsize, const u_int elsize, const xdrproc_t elproc); bool_t xdr_bytes(XDR *xdrs, char **sp, u_int *sizep, const u_int maxsize); bool_t xdr_opaque(XDR *xdrs, caddr_t cp, const u_int cnt); bool_t xdr_pointer(XDR *xdrs, char **objpp, u_int objsize, const xdrproc_t xdrobj); bool_t xdr_reference(XDR *xdrs, caddr_t * pp, u_int size, const xdrproc_t proc); bool_t xdr_string(XDR *xdrs, char **sp, const u_int maxsize); bool_t xdr_union(XDR *xdrs, enum_t *dscmp, char *unp, const struct xdr_discrim *choices, const xdrproc_t (*defaultarm); bool_t xdr_vector(XDR *xdrs, char *arrp, const u_int size, const u_int elsize, const xdrproc_t elproc); bool_t xdr_wrapstring(XDR *xdrs, char **sp); 説明 XDR ライブラリルーチンを使用すれば、C プログラマは、マシンに依存しない方法で複雑なデータ構造を記述 することができます。リモートプロシージャコール (RPC) などのプロトコルでは、これらのルーチンを使用し てデータのフォーマットを記述します。これらのルーチンは、複雑なデータ構造用の XDR ライブラリルーチ ンで、XDR ストリームの作成 ( xdr_create(3N) を参照) が必須です。 ルーチン XDR データ構造の定義については、 rpc(3N) を参照してください。 XDR ルーチンに渡されるバッファはすべ て正しく整列させる必要があります。これらのバッファの割り当てに malloc() を使用するか、あるいは、プロ グラマは、必ずバッファアドレスが 4 で割り切れるようにしてください。 bool_t xdr_array() xdr_array() は、変数長配列とそれらに対応している外部表現との間の変換を行います。パラメータ arrp は、この配列を指すポインタのアドレスであり、sizep は、 この配列の要素カウントのアドレスで す。この要素カウントは、maxsize を超えてはなりません。パラメータ elsize は、この配列の要素のサ イズであり、elproc は、この配列の要素の C 形式とそれらの外部表現との間の変換をサポートする XDR ルーチンです。デコード時に *arrp がヌルである場合、 xdr_array() はメモリを割り当て、 *aarp Section 3-732 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 xdr_complex(3N) xdr_complex(3N) はそのメモリを指します。このルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_bytes() xdr_bytes() は、カウントされたバイト文字列とそれらの外部表現との間の変換を行います。パラメー タ sp は、この文字列のポインタのアドレスです。この文字列の長さは、アドレス sizep に配置されま す。 文 字 列 の 長 さ は、 maxsize を 超 え て は な り ま せ ん。 デ コー ド 時 に *sp が ヌ ル で あ る 場 合、 xdr_bytes() はメモリを割り当て、 *sp はそのメモリを指します。このルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_opaque() xdr_opaque() は、固定サイズのオペークデータとその外部表現との間の変換を行います。パラメータ cp はオペークオブジェクトのアドレスで、cnt はそのサイズ (バイト数) です。このルーチンは、正常 終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_pointer() これは、 NULL ポインタをシリアル化する以外は xdr_reference() と同様の働きをします。 xdr_reference() はこのポインタのシリアル化は行いません。したがって、 xdr_pointer() は、バイナリツリーや リンクリストなどの再帰的なデータ構造を表現することが可能です。デコード時に *objpp がヌルであ る場合、 xdr_pointer() はメモリを割り当て、 *objpp はそのメモリを指します。 bool_t xdr_reference() xdr_reference() によって、構造体内のポインタ追跡が可能になります。パラメータ pp はそのポインタ のアドレスで、size は、*pp が指す構造体の サイズです。また、proc は、構造体の C 形式とその外部 表現との間の変換をサポートする XDR プロシージャです。デコード時に * pp がヌルである場合、 xdr_reference() はメモリを割り当て、 * pp はそのメモリを指します。このルーチンは、正常終了する と 1 を戻し、異常終了すると 0 を戻します。 警告 : このルーチンは、 NULL ポインタが解釈できません。代わりに xdr_pointer() を使用してくださ い。 bool_t xdr_string() xdr_string() は、C 文字列とそれに対応する外部表現との間の変換を行います。文字列の長さは、 maxsize を超えてはなりません。注 :sp は文字列のポインタのアドレスです。デコード時に *sp がヌルであ る場合、 xdr_string() はメモリを割り当て、 *sp はそのメモリを指します。このルーチンは、正常終了 すると TRUE を戻し、異常終了すると FALSE を戻します。注 : xdr_string() は、NULL 文字列ではな くて、空の文字列 (" ") を送信する場合に使用できます。 bool_t xdr_union() xdr_union() は、判別 C 共用体とそれに対応する外部表現との間の変換を行います。まず最初に、 dscmp に配置されている共用体の判別式を変換します。この判別式は常に enum_t です。次に、unp に 配置されている共用体を変換します。パラメータ choices は、 xdr_discrim 構造体の配列を指すポイン タです。各構造体には、1つの [value, proc] の順序対が入っています。共用体の判別式が、それに結合 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-733 xdr_complex(3N) xdr_complex(3N) している value に等しければ、その共用体を変換するために proc が呼び出されます。 xdr_discrim 構 造体配列の終端は、値 NULL のルーチンによって表わされます。判別式が choices 配列にない場合 は、defaultarm プロシージャが呼び出されます (ただし NULL でない場合)。正常終了すると TRUE を 戻し、異常終了すると FALSE を戻します。 bool_t xdr_vector() は、固定長の配列とそれに対応する外部表現との間の変換を行います。パラメータ arrp は、その配列 を指すポインタのアドレスで、size は、その配列の要素カウントです。パラメータ elsize は、配列のぞ れぞれの要素の サイズで、elproc は、配列の要素の C 形式とその外部表現との間の変換をサポートす る XDR ルーチンです。このルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻 します。 bool_t xdr_wrapstring() xdr_string(xdrs, sp, maxuint) を呼び出すルーチンです。この場合の maxuint は、符号なし整数の最大値 です。 xdr_array() 、 xdr_pointer() 、および xdr_vector() などの多数のルーチンでは、2つの引き数を要する xdrproc_t() タイプの関数ポインタが使用されます。最も使用頻度の高いルーチンの 1 つである xdr_string() には 3つの引き数が必須ですが、 xdr_wrapstring() に必要な引き数は 2つだけです。これ らのルーチンに関しては、 xdr_wrapstring() を使用することをお勧めします。このルーチンは、正常 終了すると TRUE を戻し、異常終了すると FALSE を戻します。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ント (キャンセルポイントである関数を呼び出す点) となる場合があります。 マルチスレッド環境では、 fork() の後と exec() の前に子プロセスでこれらの関数を支障なく呼び出すことはで きません。これらの関数は、非同期キャンセルや非同期シグナルをサポートしているマルチスレッドアプリ ケーションで呼び出してはなりません。 参照 rpc(3N), xdr_admin(3N), xdr_create(3N), xdr_simple(3N). Section 3-734 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 xdr_create(3N) xdr_create(3N) 名称 xdr_create, xdr_destroy, xdrmem_create, xdrrec_create, xdrstdio_create − 外部データ表現ストリーム作成のライブラ リルーチン 構文 #include <rpc/xdr.h> void xdr_destroy(XDR *xdrs); void xdrmem_create(XDR *xdrs, const caddr_t addr, const u_int size, const enum xdr_op op); void xdrrec_create(XDR *xdrs, const u_int sendsz, const u_int recvsz, const caddr_t handle, const int (*readit)(const void *read_handle, char *buf , const int len), const int (*writeit)(const void *write_handle, const char *buf , const int len)); void xdrstdio_create(XDR *xdrs, FILE * file, const enum xdr_op op); 説明 XDR ライブラリルーチンを使用すれば、C プログラマは、マシンに依存しない方法で任意のデータ構造を記述 することができます。リモートプロシージャコール (RPC) などのプロトコルでは、これらのルーチンを使用し てデータのフォーマットを記述します。 これらのルーチンでは、XDR ストリームの作成を取り扱います。 XDR ストリームを作成しなければ、どの データも XDR フォーマットに変換することはできません。 ルーチン XDR 、 CLIENT 、および SVCXPRT データ構造の定義については、 rpc(3N) を参照してください。 XDR ルーチンに渡されるバッファはすべて正しく整列させる必要があります。これらのバッファの割り当てに malloc(3C) を使用するか、あるいは、プログラマは、必ずバッファアドレスが 4 で割り切れるようにしてくださ い。 void xdr_destroy() XDR ストリーム xdrs と結合している消去ルーチンを呼び出すマクロです。通常、消去には、そのスト リームと結合しているプライベートデータ構造の解放が関与します。 xdr_destroy() の呼び出しの後に xdrs を使用すると動作は不定です。 void xdrmem_create() このルーチンは、xdrs が指している XDR ストリームオブジェクトを初期化します。そのストリームの データは、位置 addr(この長さは size のバイト長以上) にあるメモリのかたまりに書き込まれたり、あ るいはそのかたまりから読み取られたりします。 xdrmem_create() 関数は、 size の値が INT_MAX を 越 え る 場 合 は、 size の 値 を INT_MAX に 設 定 し ま す。 op は、 XDR ス ト リー ム の 指 示 ( XDR_ENCODE 、 XDR_DECODE 、または XDR_FREEのいずれか) を決めます。 HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-735 xdr_create(3N) xdr_create(3N) void xdrrec_create() このルーチンは、xdrs が指している読み取り用 XDR ストリームオブジェクトを初期化します。そのス トリームのデータは、サイズ sendsz のバッファに書き込まれます。値 0 は、システムで適切なデフォ ルト値を使用する必要があることを示します。ストリームのデータは、サイズ recvsz のバッファから 読み取られます。このデータは、値 0 を渡すことで適切なデフォルト値に設定することも可能です。 ストリームの出力バッファが一杯である場合は、writeit が呼び出されます。同様に、ストリームの入 力バッファが空である場合は、readit が呼び出されます。これら 2 つのルーチンの動作は、システム コール read() と write() (それぞれに read(2) と write(2) を参照) に似ています。ただし、ファイル記述 子ではなく最初のパラメータとして、適切なハンドル (read_handle または write_handle) が前のルーチ ンに渡されることは除きます。 XDR ストリームの op フィールドは、呼び出し側で設定しなければな らないことに注意してください。 警告 : この XDR ストリームは、中間レコードストリームを実現します。したがって、ストリーム内 に、レコードの境界情報を提供するためのいくつかのバイトが追加されます。 void xdrstdio_create() このルーチンは、xdrs が指す XDR ストリームオブジェクトを初期化します。 XDR ストリームデータ は、標準の入出力ストリーム file に書き込まれたり、あるいはそこから読み取られたりします。パラ メータ op は、XDR ストリームの指示 ( XDR_ENCODE 、 XDR_DECODE 、または XDR_FREEのい ずれか) を決めます。 警告 : このような XDR ストリームと結合している消去ルーチンは、file ストリーム上の fflush() を呼び 出しますが、 fclose() を呼び出すことはありません ( fclose(3S) を参照) 。 xdrrec_create() 関数に発生したどのような障害も、 xdrrec_create() 関数を呼び出す前に、 XDR 構造 ( xdrs -> x_ops) の x_ops フィールドを NULL に初期化することによって検出されます。 xdrrec_create() 関数から戻った 後、 x_ops フィールドが依然 NULL であれば、その呼び出しは異常終了しています。 x_ops フィールドに他の値が入っていれば、その呼び出しは正常終了したと見なして差し支えありません。 xdrmem_create() や xdrstdio_create() 関数では、障害は検出されません。 マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ント (キャンセルポイントである関数を呼び出す点) となる場合があります。 マルチスレッド環境では、 fork() の後と exec() の前に子プロセスでこれらの関数を支障なく呼び出すことはで きません。これらの関数は、非同期キャンセルや非同期シグナルをサポートしているマルチスレッドアプリ ケーションで呼び出してはなりません。 Section 3-736 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 xdr_create(3N) xdr_create(3N) 参照 read(2), write(2), malloc(3C), rpc(3N), xdr_admin(3N), xdr_complex(3N), xdr_simple(3N), fclose(3S). HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-737 xdr_simple(3N) xdr_simple(3N) 名称 xdr_simple, xdr_bool, xdr_char, xdr_double, xdr_enum, xdr_float, xdr_free, xdr_hyper, xdr_int, xdr_long, xdr_longlong_t, xdr_quadruple, xdr_short, xdr_u_char, xdr_u_hyper, xdr_u_int, xdr_u_long, xdr_u_longlong_t, xdr_u_short, xdr_void − 外 部データ表現のライブラリルーチン 構文 #include <rpc/xdr.h> bool_t xdr_bool(XDR *xdrs, bool_t *bp); bool_t xdr_char(XDR *xdrs, char *cp); bool_t xdr_double(XDR *xdrs, double *dp); bool_t xdr_enum(XDR *xdrs, enum_t *ep); bool_t xdr_float(XDR *xdrs, float * fp); void xdr_free(xdrproc_t proc, char *objp); bool_t xdr_hyper(XDR *xdrs, longlong_t *llp); bool_t xdr_int(XDR *xdrs, int *ip); bool_t xdr_long(XDR *xdrs, long *lp); bool_t xdr_longlong_t(XDR *xdrs, longlong_t *llp); bool_t xdr_quadruple(XDR *xdrs, long double * pq); bool_t xdr_short(XDR *xdrs, short *sp); bool_t xdr_u_char(XDR *xdrs, unsigned char *ucp); bool_t xdr_u_hyper(XDR *xdrs, u_longlong_t *ullp); bool_t xdr_u_int(XDR *xdrs, unsigned *up); bool_t xdr_u_long(XDR *xdrs, unsigned long *ulp); bool_t xdr_u_longlong_t(XDR *xdrs, u_longlong_t *ullp); bool_t xdr_u_short(XDR *xdrs, unsigned short *usp); bool_t xdr_void(void); 説明 XDR ライブラリルーチンを使用すれば、C プログラマは、マシンに依存しない方法で簡単なデータ構造を記述 することができます。リモートプロシージャコール (RPC) などのプロトコルでは、これらのルーチンを使用し てデータのフォーマットを記述します。 これらのルーチンの場合、XDR ストリームの作成が必要です ( xdr_create(3N) を参照) 。 Section 3-738 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 xdr_simple(3N) xdr_simple(3N) ルーチン XDR データ構造の定義については、 rpc(3N) を参照してください。 XDR ルーチンに渡されるバッファはすべ て正しく整列させる必要があります。これらのバッファの割り当てに malloc(3C) を使用するか、あるいは、プ ログラマは、必ずバッファアドレスが 4 で割り切れるようにしてください。 bool_t xdr_bool() xdr_bool() は、論理 (C 整数) とその外部表現との間の変換を行います。データのエンコード時に、こ のフィルタは、 1 か 0 のいずれかの値を作成します。このルーチンは、正常終了すると TRUE を戻 し、異常終了すると FALSE を戻します。 bool_t xdr_char() xdr_char() は、C 文字とその外部表現との間の変換を行います。このルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。エンコードされた文字はパックされずに、文字ご とに 4バイトを占有することに注意してください。文字の配列の場合は、 xdr_bytes() 、 xdr_opaque() 、または xdr_string() を考慮に入れることをお勧めします ( xdr_complex(3N) を参照) 。 bool_t xdr_double() xdr_double() は、C double 精度数値とその外部表現との間の変換を行います。このルーチンは、正常 終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_enum() xdr_enum() は、C enum (実際に整数) とその外部表現との間の変換を行います。このルーチンは、正 常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_float() xdr_float() は、C floating とその外部表現との間の変換を行います。このルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 void xdr_free() 一般的な解放ルーチンです。 1 番目の引き数は、解放されるオブジェクトの XDR ルーチンです。 2 番目の引き数は、そのオブジェクト自体を指すポインタです。注 : このルーチンに渡されるポインタは 解放されませんが、そのポインタの対象物が (その XDR ルーチンに応じて再帰的に) 解放されます。 bool_t xdr_hyper() xdr_hyper() は、ANSI C の long long 整数とその外部表現との間の変換を行います。このルーチンは、 正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_int() xdr_int() は、 C 整数とその外部表現との間の変換を行います。このルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_long() xdr_long() は、C long 整数とその外部表現との間の変換を行います。このルーチンは、正常終了する と TRUE を戻し、異常終了すると FALSE を戻します。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-739 xdr_simple(3N) xdr_simple(3N) bool_t xdr_longlong_t() xdr_longlong_t() は、ANSI C の long long 整数とその外部表現との間の変換を行います。このルーチン は、 正 常 終 了 す る と TRUE を 戻 し、 異 常 終 了 す る と FALSE を 戻 し ま す。 こ の ルー チ ン は、 xdr_hyper() と同じです。 bool_t xdr_quadruple() xdr_quadruple() は、IEEE 4 倍精度の浮動小数点数値とその外部表現との間の変換を行います。この ルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_short() xdr_short() は、C short 整数とその外部表現との間の変換を行います。このルーチンは、正常終了する と TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_u_char() xdr_u_char() は、 unsigned C 文字とその外部表現との間の変換を行います。このルーチンは、正常終 了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_u_hyper() xdr_u_hyper() は、符号なしの ANSI C の long long 整数とその外部表現との間の変換を行います。この ルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_u_int() C unsigned 整数とその外部表現との間の変換をサポートするフィルタプリミティブです。このルーチ ンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_u_long() xdr_u_long() は、C unsigned long 整数とその外部表現との間の変換を行います。このルーチンは、正 常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_u_longlong_t() xdr_u_longlong_t() は、符号なし ANSI C の longlong 整数とその外部表現との間の変換を行います。こ のルーチンは、正常終了すると TRUE を戻し、異常終了すると FALSE を戻します。このルーチン は、 xdr_u_hyper() と同じです。 bool_t xdr_u_short() xdr_u_short() は、C unsigned short 整数とその外部表現との間の変換を行います。このルーチンは、正 常終了すると TRUE を戻し、異常終了すると FALSE を戻します。 bool_t xdr_void(void); このルーチンは、常に TRUE を戻します。このルーチンは、関数パラメータが必須の RPC ルーチンに 渡されますが、そこでは何も実行されません。 マルチスレッドの使用法 Thread Safe : Section 3-740 Yes Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 xdr_simple(3N) xdr_simple(3N) Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数は、マルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイ ント (キャンセルポイントである関数を呼び出す点) となる場合があります。 マルチスレッド環境では、 fork() の後と exec() の前に子プロセスでこれらの関数を支障なく呼び出すことはで きません。これらの関数は、非同期キャンセルや非同期シグナルをサポートしているマルチスレッドアプリ ケーションで呼び出してはなりません。 参照 malloc(3C), rpc(3N), xdr_admin(3N), xdr_complex(3N), xdr_create(3N). HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-741 y0(3M) y0(3M) 名称 y0( ), y1( ), yn( ) − 第2種ベッセル関数 構文 #include <math.h> double y0(double x); double y1(double x); double yn(int n, double x); 説明 y0() と y1() は、それぞれ0次と1次の x の第2種ベッセル関数を返します。 yn() は、 n 次の x の第2種ベッ セル関数を返します。 x の値は、ゼロより大きくなければなりません。 使用方法 これらの関数を使用するには、デフォルトの −Ae オプションを指定するか、または −Aa オプションと −D_HPUX_SOURCE オプションを指定してコンパイルしてください。プログラムに <math.h> がインクルード されていることを確認した後、コンパイラまたはリンカーのコマンド行で −lm を指定して、数学ライブラリと リンクしてください。 戻り値 x が負数またはゼロの場合、 y0()、 y1()、および yn() は −HUGE_VAL ( −INFINITY に等しい) を返します。 x が NaN の場合、 y0()、 y1()、および yn() は NaN を返します。 正しい結果がオーバーフローする場合、 y0()、 y1()、および yn() は −HUGE_VAL を返します。 エラー エラーは、定義されていません。 参照 j0(3M), math(5) M. Abramowitz と I. Stegun の 『Handbook of Mathematical Functions』 (New York: Dover Publications, 1972) 標準準拠 y0(): SVID3, XPG4.2 y1(): SVID3, XPG4.2 yn(): SVID3, XPG4.2 Section 3-742 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 ypclnt(3C) ypclnt(3C) 名称 ypclnt( ), yp_all( ), yp_bind( ), yp_first( ), yp_get_default_domain( ), yp_master( ), yp_match( ), yp_next( ), yp_order( ), yp_unbind( ), yperr_string( ), ypprot_err( ) − Network Information Serviceのクライアントインタフェース 構文 cc [ flag . . . ] file . . . −lnsl [ library . . . ] #include <rpcsvc/ypclnt.h> #include <sys/types.h> #include <rpc/rpc.h> #include <rpcsvc/yp_prot.h> int yp_all( char *indomain, char *inmap, struct ypall_callback *incallback ); int yp_bind(char *indomain); int yp_first( char *indomain, char *inmap, char **outkey, int *outkeylen, char **outval, int *outvallen ); int yp_get_default_domain(char **outdomain); int yp_master( char *indomain, char *inmap, char **outmaster ); int yp_match( char *indomain, char *inmap, char *inkey, int inkeylen, char **outval, HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-743 ypclnt(3C) ypclnt(3C) int *outvallen ); int yp_next( char *indomain, char *inmap, char *inkey, int inkeylen, char **outkey, int *outkeylen, char **outval, int *outvallen ); int yp_order( char *indomain, char *inmap, unsigned long *outorder ); void yp_unbind(char *indomain); char *yperr_string(int incode); int ypprot_err(unsigned int incode); 特記事項 ネットワーク情報サービス (NIS) は、従来イエローページ (YP) として知られていたものです。 名前は変更さ れましたが、サービスの機能は変わりません。 説明 これらの関数はネットワーク情報サービス (NIS) のネットワーク参照機能のインタフェースを提供します。 map や NIS domain, NIS を構成する各種のサーバ、データベース、およびコマンドについての説明などの概要 については ypfiles(4) および ypserv(1M) を参照してください、 入力パラメータの名前は in ではじまり、出力パラメータの名前は out ではじまっています。 char** 型の出力 パラメータは、初期化されていない文字ポインタのアドレスとしてください。 NIS クライアントパッケージ内 では、 malloc() を使ってメモリを割り当てています。返された情報にアプリケーションが最後にアクセスした 後は、解放して構いません (malloc(3C) を参照)。 outkey および outval については、ニューラインおよびnullが この順で現れた後にさらに2 バイト余分なメモリを割り当ててあります。しかし、この2 バイトは、 outkeylen および outvallen では考慮されていません。 indomain および inmap 文字列はnullであってはならず、またnullで 終了する文字列でなければなりません。長さを表すパラメータのある文字列パラメータは、nullであってはな りません。長さのパラメータを0として、null文字列を指すのは構いません。長さを指定してある文字列はnull で終了する必要はありません。 Section 3-744 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ypclnt(3C) ypclnt(3C) NIS の参照呼出しには、マップ (データベース) 名および NIS ドメインネームが必要です。クライアントプロセ スは必要なマップの名前を知っている必要があります。ホストの NIS ドメインは yp_get_default_domain() を 呼び出して得た outdomain をその後の NIS 関係の呼出しの indomain として使ってください。 NIS 機能を使うためには、クライアントプロセスは yp_bind() を使って適切な NIS ドメインを管理する NIS サーバに「バインド」する必要があります。バインド作業はユーザーが明示的に行う必要はなく、NIS 参照関 数を呼び出すと自動的に行われます。 NIS サービスが得られないときにバックアップ方法 (ローカルファイル などで) を使用するプロセスは直接 yp_bind() を呼び出して構いません。 1つバインドするたびにクライアントプロセスのソケット記述子を1つ使用します。 1つの NIS ドメインにバイ ンドするたびに1つのソケット記述子を使用します。しかし、同じ NIS ドメインに対して複数の要求をする場 合は、同じ記述子を使用します。複数の NIS ドメインを扱うときにソケット記述子を明示的に操作するプロセ スのために、 yp_unbind() クライアントインタフェースが用意してあります。 yp_unbind を呼び出すと NIS ド メインを unbound にし、バインドするためにプロセス当り、ノード当りに必要としていた、リソースを解放し ます。 バインドされた NIS ドメインを使用中に RPC に失敗すると、そのドメインは自動的に解放されます。この場 合、 ypbind が実行中で (ypserv(1M) を参照)、次のどちらかに該当するのならば、ypclnt階層はその操作が成功 するまでリトライし続けます。 1. クライアントプロセスが正しい NIS ドメインのサーバをバインドできない。 または、 2. サーバへの RPC リクエストが失敗する。 エラーが RPC 関連でない場合、 ypbind が実行中でない場合、または、バインドされた ypserv プロセスが (成 功または失敗という) 応答をする場合、ypclnt階層はユーザープログラムに制御を戻します。この場合、エラー コードを返すか、結果を返して正常終了するかのどちらかとなります (ypserv(1M) の ypbind についての説明を 参照)。 動作 yp_match() 渡したキーに対応する値を返します。このキーは正確でなければなりません。パターン マッチングはできません。 yp_first() yp_next() 指定した NIS ドメインの指定したマップの最初のキーと値の組を返します。 指定したマップの次のキーと値の組を返します。 2 番目の組を得るためには、 inkey パ ラメータは yp_first() を1回目に呼び出しのときに返された outkey にします。(n + 1) 番 目の組を得るためには、inkey は、n 回目の yp_next() が返した outkey を使います。 first とnext を使った方式は、特に、処理する NIS マップの構造に依存します。組が得ら れる順序は、元の ASCII 形式のファイル内での辞書順や、キーとキー値の組の値の大き さの順ではありません。保証されているのは、あるマップに対して yp_first() を呼び出 し、 同 じ サー バ の 同 じ マッ プ に 対 し て [YPERR_NOMORE] エ ラー が 起 こ る ま で yp_next() を呼び出し続けると、データベース中のすべてのエントリーが重複なしに得ら HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-745 ypclnt(3C) ypclnt(3C) れるということです。同じ手続きを同じサーバの同じマップについて行うと、エント リーが得られる順序は同じです。 サーバの負荷が大きい場合や、サーバに異常があった場合、クライアントの実行中に NIS ドメインが一度解放され、(場合によっては別のサーバに) バインドされることがあ ります。このような処理が起こると、列挙の規則どおりにならないことがあります。つ まり、クライアントは、あるエントリーを2回受け取ったり、1回も受け取らなかったり することがあります。この仕様は、列挙の最中にクライアントがエラーメッセージを受 け取らないようにするためのものです。 マップ中のすべてのエントリーを得る方法については、 yp_all() が、よりよい解決方法 を提供します。 yp_all() TCP (このパッケージの他の関数は UDP を使用します) を使用し、1回の要求でマップ全 体をサーバからクライアントへ転送する方法を提供します。トランザクション全体を1 回の RPC 要求および応答として行います。 yp_all() の呼出しは、他の NIS 関数と同様 に、マップを指定し、キーと値の組を処理する関数名を与えることによって実現できま す。 yp_all() から処理が戻るのは、トランザクションが ( 正常または異常に) 終了する か、 foreach 関数がこれ以上キーと値の組を必要としないと判断するかのどちらかの場 合だけです。 yp_all() の第3パラメータは次の構造体です。 struct ypall_callback *incallback { int (*foreach)(); char *data; }; 関数 foreach() は次のように呼び出されます。 foreach( int instatus; char *inkey; int inkeylen; char *inval; int invallen; char *indata; ); ここで、 instatus は、 <rpcsvc/yp_prot.h> で定義されるステータス値で、 YP_TRUE ま たはエラーコード (NIS プロトコルのエラーコードを <rpcsvc/ypclnt.h> で定義されるypclnt階層のエラーコードに変換する関数については、後 Section 3-746 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 ypclnt(3C) ypclnt(3C) 述の ypprot_err() を参照) です。 inkey inval キーと値のパラメータは上述の 構文の項での定義とやや異ります。ま ず、 inkey および inval が指すメモリは、 yp_all() 内で静的で、新しい キーと値の組が届くたびにオーバライトされます。よって、 foreach() は、このメモリの内容を利用するわけですが、そのメモリ自体を割り当 てられてるわけではありません。 foreach() が受け取るキーと値は、 サーバのマップの内容と正確に一致しています。よって、これらがマッ プ中でニューラインやnull文字で終了していない場合、ここでもニュー ラインやnull文字はつきません。 indata これは、 yp_all() に渡した incallback −> data 要素です。 callback構造体 の data 要素は主処理と foreach() で共用できます。この用途はオプショ ンのです。 NIS クライアントパッケージ内でこの内容を調べることは ありません。必要に応じて何かにキャストするなり無視するなりしてく ださい。 foreach() 関数はブール値を返します。次のキーと値の組で呼び出されるためには0を戻 り値とし、中断するためには 0 以外の値を戻り値とします。 foreach() が 0 以外の値を 返すと、呼び出しは中断され、 yp_all() の戻り値は0となります。 yp_order() マップ中の序数を返します。 yp_master() マップを管理しているマスター NIS サーバのホスト名を返します。 yperr_string() エラーメッセージ文字列へのポインタを返します。この文字列は、 null で終了します が、ピリオドやニューラインを含みません。 ypprot_err() NIS プロトコルのエラーコードを引き数とし、ypclnt 階層のエラーコードを戻り値とし ます。この戻り値を yperr_string() の引き数として使います。 マルチスレッドの使用法 Thread Safe: Yes Cancel Safe: Yes Fork Safe: No Async-cancel Safe: No Async-signal Safe: No これらの関数はマルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイン トの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では、 fork() の後と exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではあ りません。非同期キャンセルもしくは非同期シグナルをサポートするマルチスレッドアプリケーションでこれ らの関数を呼び出さないようにしてください。 HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-747 ypclnt(3C) ypclnt(3C) 戻り値 このパッケージ中の int を返す関数は、正常終了すると0を戻り値とし、異常終了すると次のエラーのどれかを 戻り値とします。 [YPERR_ACCESS] データベースへの不正なアクセスをしています。 [YPERR_BADARGS] 関数への引き数が正しくありません。 [YPERR_BADDB] NIS マップに欠陥があります。 [YPERR_BUSY] データベースがビジーです。 [YPERR_DOMAIN] この NIS ドメインにバインドできません。 [YPERR_KEY] マップ中にそのようなキーはありません。 [YPERR_MAP] サーバの NIS ドメインにはそのようなマップはありません。 [YPERR_NODOM] ローカル NIS ドメインネームが設定されていません。 [YPERR_NOMORE] マップ中にこれ以上レコードがありません。 [YPERR_PMAP] ポートマップと交信できません。 [YPERR_RESRC] リソースの割当てができません。 [YPERR_RPC] RPC に失敗しました − NIS ドメインを解放しました。 [YPERR_VERS] NIS クライアントとサーバのバージョンが一致しません。 NIS サーバは、Version 1プロトコルを使うように組み込まれているので、 yp_all() の機能を提供 できません。 [YPERR_YPBIND] ypbindと交信できません。 [YPERR_YPERR] NIS サーバまたはクライアントが内部エラーを起こしました。 [YPERR_YPSERV] ypservと交信できません。 著者 ypclnt() は、Sun Microsystems, Inc. が開発しました。 参照 domainname(1)、 rpcinfo(1M)、 ypserv(1M)、 ypfiles(4) Section 3-748 Hewlett-Packard Company −6− HP-UX 11i Version 2: August 2003 yppasswd(3N) yppasswd(3N) 名称 yppasswd( ) − Network Information Serviceでのユーザーパスワードの更新 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <pwd.h> #include <rpcsvc/yppasswd.h> int yppasswd(char *oldpass, struct passwd *newpw); 説明 oldpass がユーザーの元の暗号化されていないパスワードに一致するならば、このルーチンは、そのパスワード エントリーを暗号化された newpw に置き換えます。 RPC 情報 プログラム番号: YPPASSWDPROG XDRルーチン: xdr_yppasswd(xdrs, yp) XDR *xdrs; struct yppasswd *yp; xdr_passwd(xdrs, pw) XDR *xdrs; struct passwd *pw; 手続き: YPPASSWDPROC_UPDATE 瑤箸靴頓 f2struct yppasswd をとり、整数を返します。 yppasswd ( ) 関数と同じ動作をします。 UNIX の認証を行います。 バージョン: YPPASSWDVERS 構造体: struct yppasswd { char *oldpass; /* old (unencrypted) password */ struct passwd newpw; /* new pw structure */ }; HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-749 yppasswd(3N) yppasswd(3N) マルチスレッドの使用法 Thread Safe : Yes Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数はマルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイン トの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では、 fork() の後と exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではあ りません。非同期キャンセルもしくは非同期シグナルをサポートするマルチスレッドアプリケーションでこれ らの関数を呼び出さないようにしてください。 戻り値 yppasswd() は、正常終了すると0を、エラーが発生すると−1を戻り値とします。 著者 yppasswd() は、Sun Microsystems, Inc. で開発されました。 参照 yppasswd(1), yppasswdd(1M) Section 3-750 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 ypupdate(3C) ypupdate(3C) 名称 ypupdate − NIS情報の変更 構文 cc [ flag . . . ] file. . . −lnsl [ library. . . ] #include <rpcsvc/ypclnt.h> yp_update (domain, map, ypop, key, keylen, data, datalen) char *domain; char *map; unsigned ypop; char *key; int keylen; char *data; int datalen; 特記事項 ネットワーク情報サービス(NIS)は、以前はイエローページ(yp)と呼ばれていました。名称は変わりましたが、 サービスの機能は同じです。 説明 yp_update() ルー チ ン は、 ネッ ト ワー ク 情 報 サー ビ ス (NIS) デー タ ベー ス の 変 更 に 使 用 し ま す。 構 文 は yp_match() と同じですが (ypclnt(3C)を参照) 、次の4つの値のいずれかをとるパラメーター ypopが加わってい る点だけが異なっています。 YPOP_CHANGE キーに対応するデータが新しい値に変更されます。データベース内にそのキー が見つからない場合には、 yp_update() は [YPERR_KEY] を戻します。 キー−値のペアがデータベースに挿入されます。データベース内にすでにその YPOP_INSERT キーがある場合には、エラー [YPERR_KEY] が戻されます。 キー−値のペアが、データベース内にすでに存在するしないに関係なく、デー YPOP_STORE タベースに保存されます。 キー−値のペアがデータベースから削除されます。 YPOP_DELETE このルーチンは保護RPCに依存するもので、ネットワークで保護RPCが実行中でなければ機能しません。 マルチスレッドの使用法 Thread Safe : HP-UX 11i Version 2: August 2003 Yes −1− Hewlett-Packard Company Section 3-751 ypupdate(3C) ypupdate(3C) Cancel Safe : Yes Fork Safe : No Async-cancel Safe : No Async-signal Safe : No これらの関数はマルチスレッド環境で支障なく呼び出すことができます。これらの関数は、キャンセルポイン トの関数を呼び出した時点でキャンセルポイントになります。 マルチスレッド環境では、 fork() の後と exec() の前の子プロセスでこれらの関数を呼び出すことは安全ではあ りません。非同期キャンセルもしくは非同期シグナルをサポートするマルチスレッドアプリケーションでこれ らの関数を呼び出さないようにしてください。 著者 yp_update ルーチンは Sun Microsystems, Inc. によって開発されました。 参照 ypclnt(3C) Section 3-752 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 _UNW_createContextForSelf(3X) _UNW_createContextForSelf(3X) 名称 _UNW_createContextForSelf(), _UNW_createContext(), _UNW_destroyContext() − アンワインドライブラリデータ構 造の割り当てと割り当て解除 構文 #include <unwind.h> _Unwind_Context * _UNW_createContextForSelf(void); _Unwind_Context * _UNW_createContext( _UNW_ReadTargetMem read_tgt_mem, _UNW_LoadMapFromIP load_map_from_ip, uint32_t ident); void _UNW_destroyContext(_Unwind_Context* p); 説明 _UNW_createContextForSelf と _UNW_createContext は、いずれも _Unwind_Context と呼ばれるデータ構造体 を初期化します。 _Unwind_Context は、 libunwind.so で提供されるスタックアンワインドライブラリにより管 理されます。 _UNW_createContextForSelf は通常、プロセスが自身のスタックをアンワインドするときに使用 します。 _UNW_createContext は通常、プロセスが、自身以外のプロセスのスタックをアンワインドすると き、またはコアファイルに保存されている「終了済み」プロセスのスタックをアンワインドするときに使用し ます。 _UNW_createContext を使用して、プロセス (ターゲットプロセスと呼びます) をアンワインドするとき、クラ イアントプロセスは、3つのパラメータを提示する必要があります。 1. パラメータ read_tgt_mem は、アンワインドライブラリが、ターゲットプロセスのメモリーから値を読 み出すために呼び出す関数です。読み出す値には、アンワインドヘッダー、アンワインドテーブル、 アンワインド情報ブロック、プロシージャコールスタック、RSE (Register Stack Engine) のバッキング ストアがあります。この関数は 64 ビットアドレス空間のどこからでも読める必要があります (32 ビッ トアプリケーションの場合も)。これは、Itanium ベース システムのカーネル割り込みのアンワインド ヘッダーをカーネルゲートウェイ メモリーページから読み出すからです。 read_tgt_mem は、 _UNW_ReadTargetMem 型として定義され、この型は、 unwind.h で以下のように 定義されています。 typedef void * (* _UNW_ReadTargetMem) (void *dst, uint64_t src, size_t length, uint32_t ident); パラメータの意味は memcpy(3C) のものとほとんど同じです。パラメータ dst は、パラメータ src で示 す位置から、パラメータ length で示すバイト長だけコピーする際のコピー先アドレスです。 src は、 カーネルゲートウェイ ページを読み出すのに必要な 64 ビットアドレスを表せるように、型が uint64_t HP-UX 11i Version 2: August 2003 −1− Hewlett-Packard Company Section 3-753 _UNW_createContextForSelf(3X) _UNW_createContextForSelf(3X) になっていることに注意してください。 64 ビットアプリケーションによりアンワインドする場合は、 アンワインドの際に使用する src と dst のすべてのアドレスは 64 ビットポインターです。 32 ビットア プリケーションによりアンワインドする場合は、アンワインドの際に使用する多くのアドレスは 32 ビットポインターです。ただし、ターゲットメモリーリーダーを呼び出す前に、アンワインドライブ ラリがこれらのアドレスを、完全な 64 ビットアドレスに 拡張 (swizzle) します。メモリーモデルと拡 張 (swizzle) という用語の詳細は 『Itanium Processor Family Runtime Architecture Supplement : 32-Bit Runtime Architecture for HP-UX』 の Section 1: Memory Model に説明されています。 64 ビットポインターを必要とするアドレス範囲 (したがって、32 ビットアドレス空間ではアクセスで きない) は、カーネルのシグナルハンドラー ラッパー関数 __user_sendsig 用のアンワインドヘッダー とアンワインド情報に関連するアドレスのみです。クライアントのメモリーリードコールバック関数 は、このアドレス範囲を検出し、このアドレス範囲からの読み込みができる必要があります。この範 囲 は、 プ ロ グ ラ ム ス ター ト アッ プ 時 に マ イ ク ロ ロー ダー と ダ イ ナ ミッ ク ロー ダー に よ り、 /usr/include/crt0.h で定義された構造体 load_info_t 内に (または、完全にバインドされた実行可能ファ イルの場合は crt0.o 内に ) 定義されます。 『 Itanium Processor Family Runtime Architecture Supplement: Signal Handling on HP-UX 』および 『 Itanium Processor Family Runtime Architecture Supplement: Program Startup on HP-UX』を参照してください。 read_tgt_mem の第4パラメータ ident は、アンワインドライブラリ自身には透過的であり、アンワイン ドを実行するクライアントプログラムで使用するように用意されています。クライアントプログラム は、 (_UNW_createContext の呼び出しにより) ident 用の値をアンワインドライブラリに渡し、アンワ インドライブラリは、この値を read_tgt_mem コールバックに渡します。たとえば、デバッガは、ター ゲットプロセス内の個々のスレッドを識別するために ident を使用することができます。 2. パラメータ load_map_from_ip は、アンワインドライブラリがターゲットプロセスメモリー中の特定の IP アドレスに対する load_module_desc を取得する必要があるとき、 dlmodinfo の呼び出しの代わりに 呼び出す関数です (dlmodinfo(3C) を参照)。呼び出されると、 load_map_from_ip は、構造 load_module_desc のフィールド linkage_ptr、 unwind_base、 text_base に、 (__user_sendsig に関連するインス トラクションアドレスを含む) 有効なユーザープロセスインストラクションアドレスに対する正確な値 を設定する必要があります。 unwind_base ( アンワインドヘッダーのロケーション) および text_base (ELF の .text セグメントがロードされるロケーション) は、いずれも (拡張されていない 32 ビットのポ インターではなく) 完全な 64 ビットアドレスである必要があります。 linkage_ptr は、プロシージャの GP レジスタの (完全な 64 ビットの) 値です。 『Itanium Processor Family Software Conventions and Runtime Architecture』の Chapter 8, Procedure Linkage を参照してください。 __user_sendsig 用のアンワイン ド情報は、上記の read_tgt_mem の説明で述べたように、カーネルゲートウェイ ページでやりとりしま す。 load_map_from_ip の型 _UNW_LoadMapFromIP は、 unwind.h で以下のように定義されています。 typedef void (* _UNW_LoadMapFromIP) ( struct load_module_desc * new_load_map, uint64_t ip, Section 3-754 Hewlett-Packard Company −2− HP-UX 11i Version 2: August 2003 _UNW_createContextForSelf(3X) _UNW_createContextForSelf(3X) uint32_t ident); パラメータ new_load_map は、事前に割り当てられた構造体 load_module_desc へのポインターで、 load_map_from_ip により設定されます。 パラメータ ip は、情報を要求しているロードモジュールに対応する命令ポインターです。 パラメータ ident は、アンワインドライブラリ自身には透過的であり、アンワインドを実行するクライ アントプログラムで使用するように用意されています。クライアントプログラムは、 (_UNW_createContext の呼び出しにより) ident 用の値をアンワインドライブラリに渡し、アンワインドライブラリ は、この値を load_map_from_ip コールバックに渡します。たとえば、デバッガは、ターゲットプロセ ス内の個々のスレッドを識別するために ident を使用することができます。 _UNW_createContext の第3パラメータ ident は、アンワインドを実行するクライアントプログラムで 3. 使 用 す る よ う に 用 意 さ れ て い ま す。 こ の パ ラ メー タ の 用 法 は、 上 記 の read_tgt_mem お よ び load_map_from_ip の項で説明しています。 _UNW_createContext は、自身以外のプロセスをアンワインドするときの要件を満足するように設計されてい ますが、 _UNW_createContext で作成された _Unwind_Context は、プロセスが自身をアンワインドするために も使用できます。そのような操作が必要になる理由としては、ダイナミックに生成されたコードや実行時の計 測 機 能 付 コー ド の ア ン ワ イ ン ド な ど が あ り ま す。 こ の よ う な 状 況 で は、 ク ラ イ ア ン ト は _UNW_LoadMapFromIP および _UNW_ReadTargetMem コールバックの登録が必要になる場合があります。 _UNW_destroyContext は、 _UNW_createContextForSelf や _UNW_createContext によって割り当てられたメモ リーを解放します。メモリーリークを避けるためには、 _Unwind_Context オブジェクトを割り当てるアプリ ケーションは _Unwind_Context が不要になった時点で _UNW_destroyContext を呼び出す必要があります。 アプリケーション使用法 _UNW_createContextForSelf、 _UNW_createContext、 _UNW_destroyContext はスレッドセーフです。 戻り値 構造体 _Unwind_Context へのポインター エラー _UNW_createContextForSelf および _UNW_createContext は、次の状況で、アンワインドコンテキストデータ 構造体の作成に失敗することがあります。 • メモリー不足。メモリー不足の状況でも、アンワインドライブラリの以下の動作は保証されます。 _Unwind_Context の作成に失敗しても、クライアントプログラムが、スタックアンワインドライブラリの _UNW_getAlertCode() のエントリーポイントを呼び出せるだけの _Unwind_Context オブジェクトは作成さ れます。このエントリーポイントは、 _Unwind_Context の生成に失敗していたり、 _Unwind_Context ポイ ンターがヌル ( これも生成の失敗を意味します) であったりした場合には、 _UNW_MEMORY_ALLOCATION_ERROR を返します。生成が成功していた場合は、 _UNW_getAlertCode() は _UNW_OK を返しま す。 HP-UX 11i Version 2: August 2003 −3− Hewlett-Packard Company Section 3-755 _UNW_createContextForSelf(3X) _UNW_createContextForSelf(3X) 極端なメモリー不足の状況で生成に失敗した場合は、 NULL を返すことで通知します。実際には、 _Unwind_Context へのポインターに NULL をセットします。 _Unwind_Context のポインターが NULL だ と、その後、戻り値の型が _UNW_ReturnCode のインタフェース関数を呼び出したときに、 _UNW_MEMORY_ALLOCATION_ERROR が返されます。 例 例1 実行中のプロセスをアンワインドするために、 _Unwind_Context を割り当てて初期化します。 #include <unwind.h> #include <stdio.h> _Unwind_Context *uc; _UNW_ReturnCode retcode; uc = _UNW_createContextForSelf(); if (uc == NULL) { /* Code to notify user of low memory problem */ } if (_UNW_getAlertCode(uc) == _UNW_MEMORY_ALLOCATION_ERROR) { /* Code to notify user of low memory problem */ } /* Example use of the _Unwind_Context * follows: */ if ((retcode = _UNW_currentContext(uc)) != _UNW_OK) { /* Notify user: Couldn’t determine current context. */ } 例2 実行中のプロセス以外のプロセスをアンワインドするために、 _Unwind_Context を割り当てて初期化します。 #include <unwind.h> #include <stdio.h> _Unwind_Context *uc; _UNW_ReturnCode retcode; extern _UNW_ReadTargetMem my_mem_reader; extern _UNW_LoadMapFromIP my_dlmodule_info; uint64_t target_ip; /* Target process instruction pointer */ uc = _UNW_createContext(my_mem_reader, my_dlmodule_info,1); if (_UNW_getAlertCode(uc) == _UNW_MEMORY_ALLOCATION_ERROR) { /* Code to notify user of low memory problem */ } /* Example use of the _Unwind_Context * follows: */ if ((retcode = _UNW_setIP(uc,target_ip)) != _UNW_OK) { Section 3-756 Hewlett-Packard Company −4− HP-UX 11i Version 2: August 2003 _UNW_createContextForSelf(3X) _UNW_createContextForSelf(3X) /* Notify user: Initialization problem */ } 著者 _UNW_createContextForSelf、 _UNW_createContext、 _UNW_destroyContext は HP で開発されました。 参照 U_STACK_TRACE(3X), _UNW_currentContext(3X), _UNW_getGR(3X), unwind(5) HP-UX 11i Version 2: August 2003 −5− Hewlett-Packard Company Section 3-757 _UNW_currentContext(3X) _UNW_currentContext(3X) 名称 _UNW_currentContext(), _UNW_clear(), _UNW_jmpbufContext(), _UNW_setAR(), _UNW_setBR(), _UNW_setCFM(), _UNW_setFR(), _UNW_setGR(), _UNW_setGR_NaT(), _UNW_setIP(), _UNW_setPR(), _UNW_setPreds(), _UNW_GR_PhysicalNumber(), _UNW_FR_PhysicalNumber(), _UNW_PR_PhysicalNumber(), _UNW_step() − アンワ インドライブラリ データ構造体の値の操作 構文 #include <unwind.h> _UNW_ReturnCode _UNW_currentContext(_Unwind_Context* p); _UNW_ReturnCode _UNW_clear(_Unwind_Context* p); _UNW_ReturnCode _UNW_jmpbufContext(_Unwind_Context* p, jmp_buf env); _UNW_ReturnCode _UNW_setGR(_Unwind_Context* p, uint32_t num, uint64_t value); _UNW_ReturnCode _UNW_setGR_NaT(_Unwind_Context* p, uint32_t num, uint64_t value, _UNW_Boolean NaTval); _UNW_ReturnCode _UNW_setFR(_Unwind_Context* p, uint32_t num, uint64_t first_container, uint64_t second_container); _UNW_ReturnCode _UNW_setBR(_Unwind_Context* p, uint32_t num, uint64_t value); _UNW_ReturnCode _UNW_setAR(_Unwind_Context* p, _UNW_AppReg num, uint64_t value); _UNW_ReturnCode _UNW_setPR(_Unwind_Context* p, uint32_t num, _UNW_Boolean value); _UNW_ReturnCode _UNW_setPreds(_Unwind_Context* p, uint64_t value); _UNW_ReturnCode _UNW_setIP(_Unwind_Context* p, uint64_t value); _UNW_ReturnCode _UNW_setCFM(_Unwind_Context* p, uint64_t value); Section 3-758 Hewlett-Packard Company −1− HP-UX 11i Version 2: August 2003 _UNW_currentContext(3X) _UNW_currentContext(3X) uint32_t _UNW_GR_PhysicalNumber(_Unwind_Context* p, uint32_t logical_num); uint32_t _UNW_FR_PhysicalNumber(_Unwind_Context* p, uint32_t logical_num); uint32_t _UNW_PR_PhysicalNumber(_Unwind_Context* p, uint32_t logical_num); _UNW_ReturnCode _UNW_step(_Unwind_Context* p); 説明 _UNW_currentContext() は、 _UNW_currentContext を呼び出しているプロシージャのプロセッサ状態 (言い換 えれば「自身」のプロセッサ状態) を記述するためのオブジェクト _Unwind_Context を初期化します。 _UNW_jmpbufContext() setjmp(3C) を 呼 び 出 し て jmp_buf に 取 得 し た プ ロ セッ サ 状 態 を 記 述 す る た め の _Unwind_Context オブジェクトを初期化します。 _UNW_clear() は、 _Unwind_Context オブジェクトを「作成直後」の状態にリセットします。 _Unwind_Context のすべてのレジスタの値は無効になります。アンワインドライブラリは Init 状態になるため、クライアン トは _UNW_set ルーチンを使用して _Unwind_Context 内の値を初期化できるようになります。 Init 状態につい ては unwind(5) で詳細に説明しています。 _UNW_setGR() は、パラメータ p が指す _Unwind_Context 内の番号 num の汎用レジスタの値を value で初期 化します。該当レジスタの NaT ビットには _UNW_FALSE がセットされます。 _UNW_setGR_NaT() は、パラメータ p が指す _Unwind_Context 内の番号 num の汎用レジスタの値を value で 初期化します。該当レジスタの NaT ビットには NaTval がセットされます。 _UNW_setFR() は、パラメータ p が指す _Unwind_Context 内の番号 num の浮動小数点レジスタの値を、パラ メータ first_container および second_container で示される値のイメージで初期化します。これらの2つのコンテ ナーは浮動小数点レジスタ (スピル/フィル メモリー形式) の連続するダブルワードを表します。 『Intel IA-64 アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル , 第1巻: IA-64 アプリケーション・アーキテク チャ』 の 第 5.3 項「浮動小数点命令」を参照してください。 _UNW_setBR() は、パラメータ p が指す _Unwind_Context 内の番号 num の分岐レジスタの値を value で初期 化します。 _UNW_setAR() は、パラメータ p が指す _Unwind_Context 内の、列挙型項目 num で示されるアプリケーショ ン レ ジ ス タ の 値 を value で 初 期 化 し ま す。 ア プ リ ケー ショ ン レ ジ ス タ に ア ク セ ス す る た め に、 列 挙 型 _UNW_AppReg を使用します。 _UNW_setPR() は、パラメータ p が指す _Unwind_Context 内の番号 num のプレディケートレジスタの値を value (_UNW_TRUE または _UNW_FALSE) で初期化します。 _UNW_setPreds() は、パラメータ p が指す _Unwind_Context 内のすべてのプレディケートレジスタの値を value で渡される内容で初期化します。 value は、プレディケートレジスタの番号に対応するビット位置に各プ レディケートレジスタの値を持っています。たとえば、ビット 63 にはプレディケートレジスタ 63 用の値 (1 または0) が入っています。 HP-UX 11i Version 2: August 2003 −2− Hewlett-Packard Company Section 3-759 _UNW_currentContext(3X) _UNW_currentContext(3X) _UNW_setIP() は、パラメータ p が指す _Unwind_Context 内の命令ポインターの値を value で初期化します。 value は、完全な 64 ビットアドレスである必要があります。つまり、32 ビットアドレス空間の 32 ビットポイ ンター値は _UNW_setIP() に渡す前に 64 ビットポインターに拡張 (swizzle) しておく必要があります。 『Itanium Processor Family Runtime Architecture Supplement: 32-Bit Runtime Architecture for HP-UX』 の Section 1: Memory Model を参照してください。 _UNW_setCFM() は、パラメータ p が指す _Unwind_Context 内の カレントフレームマーカー (CFM) の値を value で初期化します。 『Intel IA-64 アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル , 第1巻: IA-64 アプリケーション・アーキテクチャ』 の 第 3.1.7 項「現在のフレーム・マーカ」を参照してください。 カレントフレームマーカーはスタックフレームの各部分のサイズを保持しています。これはまた、3つのレジ スタリネームベース値 (レジスタローテーションに使用) を指定します。カレントフレームマーカーは、アーキ テクチャ上で目に見える値ではありません。これは、アンワインドライブラリが、アンワインドのために _Unwind_Context を初期化する際に使用するもので、初期化後の _Unwind_Context での RSE (Register Stack Engine) の状態 (具体的には現在のフレームで GR32 〜 GR127 の範囲からいくつの汎用レジスタがスタック用 に使用されるか) およびレジスタベースローテーションが有効状態かどうかを示します。クライアントプログ ラムは、以下に示すようないくつかの手段によりカレントフレームマーカーの値を設定できます。 • 自分自身をアンワインドしようとしているプロシージャは、「現在の状態」収集プロシージャを呼 び出すことがあります。これは、自身の状態を _Unwind_Context 構造体に記録するためです。この プロシージャは、(アセンブラで記述している場合) カレントフレームマーカーの値を作成するため に、自身のレジスタの使用方法についての知識を使用できます。 • 自分自身以外のプロセスに (たとえばブレークポイントを設定して) 割り込み、アンワインドしよう とするツール (たとえばデバッガ) は、割り込みイベントによって生成される割り込みコンテキスト から、カレントフレームマーカーの値を作成することができます。 『Intel IA-64 アーキテクチャ・ ソフトウェア・デベロッパーズ・マニュアル , 第2巻: IA-64 システム・アーキテクチャ』 の 第5 章「IA-64 の割り込み」を参照してください。 _UNW_GR_PhysicalNumber()、 _UNW_FR_PhysicalNumber()、 _UNW_PR_PhysicalNumber() は、パラメータ p が指す _Unwind_Context について、論理レジスタ番号 logical_num に対応する物理レジスタ番号を返しま す。論理レジスタ番号と物理レジスタ番号の違いについては、下記の 「初期化関数間の相互作用」の項で説明 します。 初期化関数間の相互作用 スタックアンワインドライブラリでは、上記の設定関数 (setter function) は、 Init 状態のとき (ANSI C++ 標準に 準拠した例外割り込みを処理する場合は Pre-install 状態のとき) のみ呼び出すことができます。状態の制約に ついては unwind(5) で説明しています。 Init 状態への遷移は、 _UNW_clear()、 _UNW_createContextForSelf()、または _UNW_createContext() が呼び 出された時に発生します。 Init 状態では、 _Unwind_Context 内の汎用レジスタ 1−31、スクラッチおよび保存 用の浮動小数点レジスタ、スクラッチおよび保存用のプレディケートレジスタ、分岐レジスタ 0−7、 IP 、 CFM 、およびアプリケーションレジスタのセット (RSC, BSP, BSPSTORE, RNAT , CCV , UNAT , FPSR, ITC, PFS, LC) の値を初期化するために _UNW_set... を呼び出すことができます。 _Unwind_Context 内の特定のレジス Section 3-760 Hewlett-Packard Company −3− HP-UX 11i Version 2: August 2003 _UNW_currentContext(3X) _UNW_currentContext(3X) タに書き込むことにより、その値が有効になります。 _UNW_setCFM を呼び出すと、 _Unwind_Context の GR32 〜 GR127 の汎用レジスタの値が無効になり、 _Unwind_Context のカレントフレームマーカー (CFM) の 値が有効になります。一旦 CFM の値が有効になると、( 現在のプロシージャの RSE フレーム内で RSE がス タックした汎用レジスタを初期化するために) 汎用レジスタ GR32 から GR32 + CFM.sof までの書き込みができ るようになります。 _UNW_step() の呼び出しを成功させるためには、 unwind(5) の 「初期化」の項にリストされているレジスタの セットを有効にしておく必要があります。 上記のパラグラフで述べた特定のレジスタ以外のレジスタを初期化してはいけません。たとえば、定数レジス タ (GR0, FR0, FR1, PR0) は初期化してはいけません。この規則に違反すると、 _Unwind_Context のアラート コードに _UNW_INITIALIZATION_RANGE_ERROR が設定され、 _UNW_set... 関数は _UNW_INITIALIZATION_RANGE_ERROR を返します。 値の初期化が許されない状態にある _Unwind_Context オブジェクトを初期化しようとしても、 _Unwind_Context 内 の 値 は 変 化 し ま せ ん。 ア ラー ト コー ド _UNW_SET_NOT_ALLOWED_IN_STATE が 返 さ れ ま す。 unwind(5) も参照してください。 アンワインドライブラリのレジスタ値初期化関数は、レジスタの指定に物理番号を使用します。 CFM.sor 、 CFM.rrb.gr 、 CFM.rrb.pr 、 CFM.rrb.fr で示されるローテーションによってマップされた ( 論理) 番号は使用し ません。スタックアンワインドライブラリは、レジスタの種類に対応する CFM.rrb フィールドの値が0のとき のレジスタ番号を、物理番号として定義します。 マップ関数 _UNW_GR_PhysicalNumber 、 _UNW_FR_PhysicalNumber 、および _UNW_PR_PhysicalNumber は、特定の論理レジスタにアクセスするために _UNW_get... 初期化関数に渡す情報として、レジスタの物理番 号 を 返 し ま す。 マッ プ 関 数 に、 マッ プ さ れ た 論 理 番 号 の 範 囲 外 の 論 理 番 号 を 与 え る と、 マッ プ 関 数 は _UNW_QUERY_RANGE_ERROR アラート状態をセットし、戻り値0を返します。たとえば、 CFM.sor が 0 の と き に _UNW_GR_PhysicalNumber(uc,42) を 呼 び 出 す と、 こ の 関 数 は ア ラー ト 状 態 を セッ ト し ま す。 _Unwind_Context オブジェクトの CFM の内容は、マップ関数を使用する前に初期化しておく必要がありま す。 _UNW_step は、パラメータ p が指す _Unwind_Context を修正して、 先行の (predecessor’s) プロセッサ状態を 表すようにします。 戻り値 _UNW_set... は、 _Unwind_Context が 値 の 初 期 化 を 許 さ な い 状 態 に あ る と き、 _UNW_SET_NOT_ALLOWED_IN_STATE を返します。値の初期化を許す状態とは Init と Pre_Install です。マ ンページ unwind(5) の 「エラー状態と復旧」の項を参照してください。 _UNW_set... は、初期化が許されていないレジスタに対する初期化要求があった場合 _UNW_INITIALIZATION_RANGE_ERROR を返します。前述の 「初期化関数間の相互作用」の項を参照してください。それ以外 の場合は、 _UNW_set... は、正常終了時に _UNW_OK を返します。 _UNW_clear は、正常終了時に _UNW_OK を返します。それ以外の場合で、 _Unwind_Context の状態が HP-UX 11i Version 2: August 2003 −4− Hewlett-Packard Company Section 3-761 _UNW_currentContext(3X) _UNW_currentContext(3X) Init 、 User_Interrupted_Frame、 User_Sendsig_Frame、 Kernel_Bottom_Frame、 Frame のいずれでもないときに は、 _UNW_clear は _UNW_CLEAR_NOT_ALLOWED_IN_STATE を返します。 unwind(5) を参照してくださ い。 _UNW_GR_PhysicalNumber、 _UNW_FR_PhysicalNumber、および _UNW_PR_PhysicalNumber は、それぞれ レジスタ番号を返します。各レジスタクラス用のマップされた論理番号の範囲にない論理番号を渡すと、これ らの関数は、 _Unwind_Context のアラートコードに _UNW_QUERY_RANGE_ERROR をセットし、0を返し ます。 _UNW_step は、以下の戻り値を返します。 _UNW_STEP_KERNEL_SAVE_STATE _Unwind_Context が示すフレームが、それを越えてスタックアンワインドライブラリがス テップ動作できない内容になっていることを示します。 HP-UX カーネル割り込みフレーム に、ユーザーシグナル処理 (signal(5) を参照) をサポートする _user_sendsig() に関連するも の以外があると、この戻り値を返します。 _UNW_STEP_BOTTOM _Unwind_Context が示すフレームが、それを越えてスタックアンワインドライブラリがス テップ動作できない内容になっていることを示します。この戻り値は、プロシージャのフ レームが、スタックの底を示す規約 (保存された戻りリンクの値が0) でマークされたプロ シージャを示す _Unwind_Context に対して _UNW_step を呼び出したときに返されます (『 Itanium Processor Family Software Conventions and Runtime Architecture 』 の Chapter 11.1 Unwinding the stack を参照)。 _UNW_OK すべて正常。 _UNW_STEP_ERROR ステップ動作中に一般的な問題が発生しました。この戻り値は _Unwind_Context が Bad 状 態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_INTERNAL_ERROR ステップ動作中にロジック上の問題が発生しました。当社のサポート部門にお問い合わせ ください。 _UNW_STEP_INVALID_IP _Unwind_Context 内の命令ポインター値が不正と判断されました。初期化の失敗が原因と して考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_SP _Unwind_Context 内のスタックポインター値が不正と判断されました。初期化の失敗が原 因として考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示しま Section 3-762 Hewlett-Packard Company −5− HP-UX 11i Version 2: August 2003 _UNW_currentContext(3X) _UNW_currentContext(3X) す。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_GR ステップ処理中に _Unwind_Context 内の汎用レジスタの値で不正と判断されるものがあり ました。初期化の失敗が原因として考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_PFS _Unwind_Context 内の AR.PFS の値が不正と判断されました。初期化の失敗が原因として 考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_RSC _Unwind_Context 内の AR.RSC の値が不正と判断されました。初期化の失敗が原因として 考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_BSP _Unwind_Context 内の AR.BSP の値が不正と判断されました。初期化の失敗が原因として 考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_BSPSTORE _Unwind_Context 内の AR.BSPSTORE の値が不正と判断されました。初期化の失敗が原因 として考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_CFM _Unwind_Context 内の AR.CFM の値が不正と判断されました。初期化の失敗が原因として 考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_BR ステップ処理中に _Unwind_Context 内の分岐レジスタの値で不正と判断されるものがあり ました。初期化の失敗が原因として考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_BAD_BSP_ALIGNMENT _UNW_currentContext の値 ar.BSP が整列されていません。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_INVALID_RNAT _Unwind_Context 内の AR.RNAT の値が不正と判断されました。初期化の失敗が原因として 考えられます。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 HP-UX 11i Version 2: August 2003 −6− Hewlett-Packard Company Section 3-763 _UNW_currentContext(3X) _UNW_currentContext(3X) unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_NO_DESCRIPTOR_FOR_NON_LEAF スタックアンワインドライブラリが、リーフでないプロシージャで、アンワインド記述子 を見つけられませんでした。リーフプロシージャであれば、アンワインド記述子がなくて も、スタックアンワインドライブラリは、処理できます。すべての、リーフでないプロ シージャは、アンワインド記述子を持っている必要があります。この原因の一部として考 えられるのは以下のようなものです。 • 『Itanium Processor Family Software Conventions and Runtime Architecture』 の Chapter 11.3 Coding conventions for reliable unwinding で規定しているコーディング規約に準 拠していないプログラムコード。 • _UNW_LoadMapFromIP コールバック関数 (unwind(5) 参照) で、アンワインドヘッ ダーまたはテキストセグメントベースのロケーションを識別できなかった。 • システムメモリーが壊れている。 • _Unwind_Context が不正な値で初期化された。 _UNW_STEP_CORRUPT_DESCRIPTOR フレームのアンワインド記述子の形式が不正です。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_STEP_RSE_NOT_FLUSHED レジスタスタックエンジンが起動されていない。 unwind(5) を参照してください。この戻り 値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参 照してください。 _UNW_currentContext は、以下の戻り値を返します。 _UNW_OK すべて正常。 _UNW_CURRENT_CONTEXT_FAILED _UNW_currentContext の呼び出し中に、一般的な問題が発生しました。 _UNW_STEP_CORRUPT_DESCRIPTOR フレームのアンワインド記述子の形式が不正です。この戻り値は _Unwind_Context が Bad 状態にあることを示します。 unwind(5) の 「状態」の項を参照してください。 _UNW_MEMORY_ALLOCATION_ERROR スタックアンワインドライブラリが、要求された機能を実行するのに必要なメモリーを割 り当てることができません。 _Unwind_Context は Bad 状態にあります。 unwind(5) を参照 してください。 Section 3-764 Hewlett-Packard Company −7− HP-UX 11i Version 2: August 2003 _UNW_currentContext(3X) _UNW_currentContext(3X) _UNW_INTERNAL_ERROR ステップ動作中にロジック上の問題が発生しました。当社のサポート部門にお問い合わせ ください。 エラー _UNW_currentContext は、初期化を実行するためのメモリーが充分にない場合、またはライブラリの対話上の 問題 (たとえば、サービスマネージャや dlmodinfo の呼び出し) により unwindlib が初期化を実行できない場合 は、対応するエラーを返します。 例 汎用レジスタ5 〜 400 を初期化します。 #include <
© Copyright 2024 Paperzz