プログラミングの一般概念 - ibm...本書について 強調表示 aix

846
AIX バージョン 7.2 プログラミングの一般概念 IBM

Upload: others

Post on 20-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • AIX バージョン 7.2

    プログラミングの一般概念

    IBM

  • 注記本書および本書で紹介する製品をご使用になる前に、831 ページの『特記事項』に記載されている情報をお読みください。

    本書は AIX バージョン 7.2 および新しい版で明記されていない限り、以降のすべてのリリースおよびモディフィケーションに適用されます。お客様の環境によっては、資料中の円記号がバックスラッシュと表示されたり、バックスラッシュが円記号と表示されたりする場合があります。 原典:

    AIX Version 7.2General programming concepts

    発行:日本アイ・ビー・エム株式会社

    担当:トランスレーション・サービス・センター

    © Copyright International Business Machines Corporation 2015, 2019.

  • 目次

    本書について......................................................................................................... ix強調表示.......................................................................................................................................................ixAIX での大/小文字の区別............................................................................................................................ ixISO 9000......................................................................................................................................................ix

    プログラミングの一般概念...................................................................................... 1新着情報....................................................................................................................................................... 1ツールとユーティリティー ..........................................................................................................................1Curses ライブラリー....................................................................................................................................3

    curses の初期化...................................................................................................................................... 5curses 環境内のウィンドウ....................................................................................................................6curses によるウィンドウ・データの操作..............................................................................................7curses によるカーソルの制御..............................................................................................................10curses による文字の操作..................................................................................................................... 10curses を使用する端末について.......................................................................................................... 18カラーの処理........................................................................................................................................ 23ビデオ属性の操作.................................................................................................................................24ソフト・ラベルの操作..........................................................................................................................27curses の互換性....................................................................................................................................27その他の curses サブルーチンのリスト.............................................................................................. 28

    プログラムのデバッグ............................................................................................................................... 29adb デバッグ・プログラムの概要....................................................................................................... 30adb デバッグ・プログラムの開始....................................................................................................... 30プログラム実行の制御..........................................................................................................................31adb 式の使用.........................................................................................................................................35adb デバッグ・プログラムのカスタマイズ.........................................................................................37数値の計算とテキストの表示...............................................................................................................40adb プログラムによるソース・ファイルの表示と操作...................................................................... 41adb デバッグ・プログラムの参照情報................................................................................................ 48サンプル adb プログラム: adbsamp.................................................................................................... 54サンプル adb プログラム: adbsamp2..................................................................................................54サンプル adb プログラム: adbsamp3..................................................................................................55adb デバッグでのディレクトリー・ダンプおよび i ノード・ダンプの例.......................................... 56adb デバッグでのデータ・フォーマット設定の例..............................................................................57adb デバッグでの複数の関数のトレース例.........................................................................................60dbx シンボリック・デバッグ・プログラムの概要..............................................................................62dbx デバッグ・プログラムの使用........................................................................................................62dbx デバッグ・プログラムによるソース・ファイルの表示と操作.................................................... 65プログラム・データの調査.................................................................................................................. 68dbx によるマシン・レベルのデバッグ................................................................................................ 74dbx デバッグ環境のカスタマイズ........................................................................................................77dbx プラグイン・フレームワーク用の開発.........................................................................................80dbx サブコマンドのリスト...................................................................................................................96

    エラー・ログの概要...................................................................................................................................99エラー・ログ機能...............................................................................................................................100エラー・ロギングの管理....................................................................................................................101エラー通知..........................................................................................................................................104エラー・ログ作業...............................................................................................................................107エラー・ログおよびアラート............................................................................................................ 115エラー・ログの制御........................................................................................................................... 116

    iii

  • ファイルシステムと論理ボリューム.......................................................................................................117ファイル・タイプ...............................................................................................................................118JFS ディレクトリーの処理................................................................................................................ 120JFS2 ディレクトリーの処理.............................................................................................................. 122JFS i ノードの処理............................................................................................................................. 124JFS2 i ノードの処理 .......................................................................................................................... 125JFS ファイル・スペースの割り当て..................................................................................................127JFS2 ファイル・スペースの割り当て................................................................................................130JFS ファイルシステムのレイアウト..................................................................................................132JFS2 ファイルシステムのレイアウト................................................................................................134ラージ・ファイルにアクセスするプログラムの作成........................................................................135プログラマーのためのリンク............................................................................................................ 139ファイル・ディスクリプターの使用................................................................................................. 141ファイルの作成と除去....................................................................................................................... 144ファイル入出力の処理....................................................................................................................... 146ファイル状況...................................................................................................................................... 153ファイルのアクセス可能性................................................................................................................ 153新しいファイルシステム・タイプの作成.......................................................................................... 154論理ボリュームのプログラミング..................................................................................................... 158J2_CFG_ASSIST ioctl 操作.................................................................................................................159

    浮動小数点例外........................................................................................................................................160入出力処理............................................................................................................................................... 169ストレージ・プロテクト・キー.............................................................................................................. 173大きなプログラムのサポート..................................................................................................................179マルチプロセッサー・システムでのプログラミング............................................................................. 183プロセッサーの識別........................................................................................................................... 183プロセッサー使用の制御....................................................................................................................184動的プロセッサー割り当て解除 の使用.............................................................................................184動的メモリー保護...............................................................................................................................188ロック・サービスの作成....................................................................................................................189

    probeVue 動的トレース機能................................................................................................................... 191ProbeVue の概念................................................................................................................................ 191ProveVue 変数.................................................................................................................................... 198ProbeVue の実行................................................................................................................................ 273

    Vue 関数................................................................................................................................................... 382プロセス属性............................................................................................................................................412マルチスレッド・プログラミング.......................................................................................................... 415スレッドとプロセスの概要................................................................................................................ 415AIX におけるスレッド・セーフおよびスレッド化ライブラリー......................................................421スレッドの作成.................................................................................................................................. 421スレッドの終了.................................................................................................................................. 424同期の概要..........................................................................................................................................432mutex の使用......................................................................................................................................432条件変数の使用.................................................................................................................................. 438読み取り/書き込みロックの使用....................................................................................................... 443スレッドの結合.................................................................................................................................. 450スレッドのスケジューリング............................................................................................................ 453コンテンション有効範囲と並行性レベル.......................................................................................... 457同期スケジューリング....................................................................................................................... 458ワンタイム初期化...............................................................................................................................461スレッド固有データ........................................................................................................................... 462複雑な同期オブジェクトの作成.........................................................................................................466シグナル管理...................................................................................................................................... 469プロセスの複製と終了....................................................................................................................... 473スレッド・ライブラリー・オプション..............................................................................................474再入可能コードおよびスレッド・セーフ・コードの作成................................................................ 484マルチスレッド・プログラムの開発................................................................................................. 489pthread ライブラリー・オブジェクトを検査および変更するマルチスレッド・プログラムの開発493

    iv

  • マルチスレッド・プログラム・デバッガーの開発........................................................................... 496スレッドの利点.................................................................................................................................. 500

    lex および yacc プログラム情報..............................................................................................................501lex コマンドによる字句解析プログラムの生成.................................................................................502lex プログラムでの yacc プログラムの使用...................................................................................... 503lex コマンドにおける拡張正規表現...................................................................................................504生成された lex プログラムへのコードの引き渡し............................................................................ 507lex 置換文字列の定義......................................................................................................................... 507lex ライブラリー................................................................................................................................ 508字句解析プログラムによって実行されるアクション........................................................................508lex プログラムの開始条件..................................................................................................................512yacc プログラムによるパーサーの作成.............................................................................................513yacc 文法ファイル..............................................................................................................................513yacc 文法ファイルの使用...................................................................................................................515yacc 文法ファイルの宣言...................................................................................................................516yacc の規則.........................................................................................................................................518yacc のアクション..............................................................................................................................520yacc プログラムのエラー処理........................................................................................................... 521yacc コマンドで生成されるパーサー操作.........................................................................................523yacc プログラムにおける未確定規則の使用..................................................................................... 524yacc コマンドによって生成されるパーサーのデバッグ・モードをオンにする.............................. 526lex プログラムおよび yacc プログラムの例...................................................................................... 526

    make コマンド.........................................................................................................................................530記述ファイルの作成........................................................................................................................... 531make プログラムの内部規則............................................................................................................. 534記述ファイル内のマクロの定義と使用..............................................................................................536make コマンドによるターゲット・ファイルの作成.........................................................................541ソース・コード制御システム・ファイルでの make コマンドの使用..............................................541非ソース・コード制御システム (SCCS) ファイルでの make コマンドの使用................................. 543make コマンドによる環境変数の使用法について............................................................................ 543並列実行モードでの make コマンドの使用...................................................................................... 544

    m4 マクロ・プロセッサーの概要............................................................................................................544オブジェクト・データ・マネージャー................................................................................................... 553

    ODM コマンドとサブルーチン...........................................................................................................564ODM コードおよび出力の例.............................................................................................................. 565

    同時マルチスレッド化.............................................................................................................................568動的ロジカル・パーティショニング.......................................................................................................570

    DLPAR セーフ・プログラムと DLPAR 認識プログラム.....................................................................571プロセッサーのバインディング.........................................................................................................574アプリケーションへの DLPAR 操作の統合........................................................................................ 575DLPAR スクリプトによって実行されるアクション.......................................................................... 576DLPAR 認識へのカーネル・エクステンションの変更.......................................................................583

    sed プログラム情報................................................................................................................................. 587sed による文字列の操作.................................................................................................................... 587コマンド内でのテキストの使用.........................................................................................................592文字列置換の使用...............................................................................................................................592

    共用ライブラリーと共用メモリー.......................................................................................................... 593共用オブジェクトと実行時リンク..................................................................................................... 594共用ライブラリーと遅延ロード.........................................................................................................596名前付き共用ライブラリー領域.........................................................................................................597共用ライブラリーの作成....................................................................................................................599プログラム・アドレス・スペースの概要.......................................................................................... 601メモリー・マッピングについて.........................................................................................................603プロセス間通信の制限....................................................................................................................... 608shmat サブルーチンによるマップされたデータ・ファイルの作成................................................. 611shmat サブルーチンによるコピー・オン・ライトのマップされたデータ・ファイルの作成.........612shmat サブルーチンによる共用メモリー・セグメントの作成.........................................................613ページング・スペースのプログラミング要件...................................................................................614

    v

  • メモリー操作サービスのリスト.........................................................................................................614メモリー・マッピング・サービスのリスト...................................................................................... 616

    AIX ベクトル・プログラミング...............................................................................................................616malloc サブシステムを使用したシステム・メモリーの割り当て..........................................................623ユーザー定義の malloc 置換.............................................................................................................. 634malloc デバッグ・ツール...................................................................................................................638Malloc マルチヒープ.......................................................................................................................... 644Malloc バケット..................................................................................................................................645Malloc trace........................................................................................................................................649Malloc log........................................................................................................................................... 650Malloc 特記......................................................................................................................................... 651Malloc detect......................................................................................................................................651malloc thread cache の構成と使用....................................................................................................652

    再入可能コードおよびスレッド・セーフ・コードの作成......................................................................653インストール用ソフトウェアのパッケージ化........................................................................................ 658ソース・コード制御システム..................................................................................................................700

    SCCS フラグおよびパラメーターの規則........................................................................................... 701SCCS ファイルの作成、編集、および更新........................................................................................701SCCS ファイル変更の制御とトラッキング........................................................................................703損傷した SCCS ファイルの検出と修理.............................................................................................. 704その他の SCCS コマンドのリスト..................................................................................................... 705

    サブルーチン、プログラム例、およびライブラリー............................................................................. 706128 ビットの長倍精度浮動小数点データ型...................................................................................... 707文字操作サブルーチンのリスト.........................................................................................................709実行可能プログラム作成サブルーチンのリスト...............................................................................710ファイルおよびディレクトリーのサブルーチンのリスト................................................................ 711数値操作サブルーチンのリスト.........................................................................................................714長長整数数値操作サブルーチンのリスト.......................................................................................... 715128 ビット長倍精度数値操作サブルーチンのリスト....................................................................... 715プロセス・サブルーチンのリスト..................................................................................................... 716マルチスレッド・プログラミング・サブルーチンのリスト.............................................................719プログラマーのワークベンチ・ライブラリー・サブルーチンのリスト.......................................... 720セキュリティー・サブルーチンおよび監査サブルーチンのリスト................................................. 722文字列操作サブルーチンのリスト..................................................................................................... 724例: 文字操作のためのプログラム.......................................................................................................725例: 検索およびソートのプログラム................................................................................................... 729オペレーティング・システム・ライブラリーのリスト....................................................................733

    システム管理インターフェース・ツール (SMIT)................................................................................... 735SMIT 画面のタイプ............................................................................................................................ 735SMIT オブジェクト・クラス..............................................................................................................738SMIT 別名と高速パス.........................................................................................................................741SMIT 情報コマンド・ディスクリプター........................................................................................... 742SMIT コマンドの生成と実行..............................................................................................................744SMIT データベースへのタスクの追加............................................................................................... 746SMIT データベース拡張機能のデバッグ........................................................................................... 747新規タスク用の SMIT ヘルプ情報の作成...........................................................................................748sm_menu_opt (SMIT メニュー) オブジェクト・クラス................................................................... 749sm_name_hdr (SMIT セレクター・ヘッダー) オブジェクト・クラス.............................................751sm_cmd_opt (SMIT ダイアログ/セレクター・コマンド・オプション) オブジェクト・クラス......754sm_cmd_hdr (SMIT ダイアログ・ヘッダー) オブジェクト・クラス............................................... 759SMIT プログラムの例.........................................................................................................................762

    システム・リソース・コントローラー................................................................................................... 772SRC オブジェクト.............................................................................................................................. 774SRC 通信タイプ.................................................................................................................................. 778SRC とのサブシステム通信のプログラミング.................................................................................. 781SRC へのサブシステムの定義............................................................................................................ 787その他の SRC サブルーチンのリスト................................................................................................ 788

    トレース機能............................................................................................................................................788

    vi

  • トレース機能の開始........................................................................................................................... 794ユーザー・アプリケーションのトレース............................................................................................... 797データ構造体のトレース....................................................................................................................798トレース・ストリーム属性................................................................................................................ 801トレース・イベント・タイプの定義................................................................................................. 801トレース・サブルーチン....................................................................................................................803

    tty サブシステム...................................................................................................................................... 805伝送制御手順モジュール....................................................................................................................810コンバーター・モジュール................................................................................................................ 813TTY ドライバー.................................................................................................................................. 814

    ローダー・ドメイン.................................................................................................................................815データ管理アプリケーション・プログラミング・インターフェース ................................................... 818AIX トランザクション・メモリー・ プログラミング.............................................................................822

    特記事項............................................................................................................ 831プライバシー・ポリシーに関する考慮事項............................................................................................832商標.......................................................................................................................................................... 833

    vii

  • viii

  • 本書についてこのトピック集では、アプリケーション開発者に AIX® オペレーティング・システム用のアプリケーションの作成に関する詳細な情報を提供します。 プログラマーは、このトピック集を使用して、プログラミングのガイドラインやりソースについての知識を得ることができます。トピックとしては、入出力の処理、curses、ファイルシステムとディレクトリー、lex および yacc、論理ボリュームのプログラミング、共用ライブラリー、 大きなプログラムのサポート、パッケージ化、トレース機能、および システム管理インターフェース・ツール (SMIT) を含んでいます。本書に含まれるパネル名には英語と日本語が併記されています。ご使用中のシステムの設定により、実際には英語のみ、または日本語のみが表示されます。また、本書中のメッセージは英語をサンプルにしていますが、対応する日本語が表示されることがあります。

    強調表示本書では以下の強調表示規則を使用します。太字 名前がシステムによって事前定義されているコマンド、サブルーチン、キーワード、

    ファイル、構造体、ディレクトリー、および他の項目を示します。 さらに、ユーザーが選択するボタン、ラベル、 およびアイコンなどのグラフィカル・オブジェクトも示します。

    イタリック 実際の名前または値をユーザーが提供する必要があるパラメーターを示します。Monospace 具体的なデータ値の例、表示される可能性があるテキストの例、 プログラマーとして作成する可能性があるプログラム・コードの一部の例、 システムからのメッセージ、

    またはユーザーが実際に入力する必要がある情報を示します。

    AIX での大/小文字の区別AIX® オペレーティング・システムでは、すべてケース・センシティブとなっています。これは、英大文字と小文字を区別するということです。 例えば、ls コマンドを使用するとファイルをリストすることができます。 LS と入力すると、システムはそのコマンドが見つからない (is not found) と応答します。同様に、FILEA、FiLea、および filea は、 同じディレクトリーにある場合でも、3 つの異なるファイル名です。 想定外の処理が実行されないように、常に正しい大/小文字を使用するようにしてください。

    ISO 9000当製品の開発および製造には、ISO 9000 登録品質システムが使用されました。

    © Copyright IBM Corp. 2015, 2019 ix

  • x AIX バージョン 7.2: プログラミングの一般概念

  • プログラミングの一般概念このトピック集では、アプリケーション開発者に AIX® オペレーティング・システム用のアプリケーションの作成に関する詳細な情報を提供します。 プログラマーは、このトピックを使用して、プログラミングのガイドラインやりソースについての知識を得ることができます。トピックとしては、入出力の処理、curses、ファイルシステムとディレクトリー、lex および yacc、論理ボリュームのプログラミング、共用ライブラリー、大きなプログラムのサポート、パッケージ化、トレース機能、およびシステム管理インターフェース・ツール (SMIT) を含んでいます。本書に含まれるパネル名には英語と日本語が併記されています。ご使用中のシステムの設定により、実際には英語のみ、または日本語のみが表示されます。また、本書中のメッセージは英語をサンプルにしていますが、対応する日本語が表示されることがあります。AIX オペレーティング・システムは、UNIX ベースのオペレーティング・システムのポータビリティーに関する The Open Group の「Single UNIX Specification Version 3 (UNIX 03)」をサポートするように設計されています。 数多くの新規インターフェースが追加され、またいくつかの現行インターフェースがこの仕様を満たすように拡張されました。 UNIX 03 ポータブル・アプリケーション開発する正しい方法を決定するには、UNIX System の Web サイト (http://www.unix.org) にある The Open Group の「UNIX 03」仕様を参照してください。

    プログラムの一般概念の新情報プログラムの一般概念トピック集での新情報および重要な変更情報は、以下のとおりです。新規情報または変更情報の参照方法技術的な変更が行われた個所を確認しやすいように、一般プログラミング概念のトピック集では以下を使用します。• は、新規情報や変更情報の先頭を示すマークです。• は、新規情報や変更情報の終了を示すマークです。2019 年 11 月以下の情報は、一般プログラミングのトピック集に対して行われた更新の要約です。• 443 ページの『読み取り/書き込みロックの使用』のトピックにおいて、pthread 読み取り/書き込みロックを取得するときに、ライター・スレッドがリーダー・スレッドより優先されることに関する情報を追加しました。

    2018 年 11 月以下の情報は、一般プログラミングのトピック集に対して行われた更新の要約です。• プロセス ID の情報が 291 ページの『UFT プローブ・マネージャー』のトピックに追加されました。• 412 ページの『プロセス属性』トピックに、get_cwd インターフェースに関する情報が追加されました。

    ツールとユーティリティーこのセクションでは、C コンパイル言語プログラムの開発に使用できるツールとユーティリティーの概要を示します。C でコンパイルするプログラムの開発に役立つ多くのツールが用意されています。 これらのツールは、以下のプログラミング作業に役立ちます。C コンパイル・プログラムで使用できるサブルーチンとシェル・コマンドが用意されています。• システムへのプログラムの入力

    © Copyright IBM Corp. 2015, 2019 1

    http://www.unix.org

  • • プログラムの検査• プログラムのコンパイルとリンク• サブルーチン• シェル・コマンドシステムへのプログラムの入力システムには、プログラムをファイルに入れるための ed と呼ばれるライン・エディターがあります。 システムには、 vi と呼ばれるフルスクリーン・エディターもあります。 このエディターは一度に 1 つのフルスクリーンでデータを表示するため、ファイルの対話式編集が可能です。プログラムの検査以下のコマンドを使って、プログラムのフォーマットの整合性と正確さを検査します。コマンド 説明cb プログラムの構造を示すために字下げレベルを使用して、C 言語ソース・プログラムを整合し

    たフォーマットに再設定します。cflow C 言語ソース・プログラムの論理のフローを示すダイアグラムを生成します。cxref C 言語ソース・プログラムの各モジュールのすべての外部参照リストを、 参照が解決された場

    所とともに (参照がプログラム内で解決された場合) 生成します。lint C 言語ソース・プログラムの構文とデータ型のエラーを検査します。 lint コマンドは、C 言語コ

    ンパイラーよりも詳細に構文とデータ型を検査し、 発生する可能性がある問題を指摘するメッセージを表示します。

    プログラムのコンパイルとリンクソース・コードをシステムが実行できるプログラムに変換するには、 コンパイラーとリンケージ・エディターを使用してソース・ファイルを処理する必要があります。コンパイラー とは、ファイルからプログラム・テキストを読み取って、 そのファイル内のテキストを、システムが理解できる形に変更するプログラムのことです。 リンケージ・エディター は各プログラム・モジュールを接続し、 完成したプログラムをメモリーに置く方法を決定します。 このような最終の形のプログラムを作成するために、システムは以下のことを行います。1.ファイルにコンパイラーのソース・コードが入っている場合、 コンパイラーがソース・コードをオブジェクト・コードに変換します。

    2.ファイルにアセンブラー言語が入っている場合、 アセンブラーがアセンブラー言語をオブジェクト・コードに変換します。

    3.リンケージ・エディターは、以前のステップで作成されたオブジェクト・ファイルを、 コンパイラー・コマンドで指定されたその他の任意のオブジェクト・ファイルとリンクします。

    オペレーティング・システムで使用できる他のプログラミング言語には、C++、FORTRAN、COBOL、アセンブラー、およびその他のコンパイラー言語があります。1 つのプログラムの各部分を別々の言語で書いて、実行する個別のルーチンを 1 つのメインルーチンから呼び出して開始することができます。 また、コンパイラー・プログラムを使って、オブジェクト・コードを作成してプログラムをリンクすることもできます。プログラムのエラーの修正基本オペレーティング・システムに備えられている以下のデバッグ・ツールを使用することができます。• dbx シンボリック・デバッグ・プログラムを使うと、 C 言語、C++、FORTRAN、 COBOL、およびアセンブラー言語で書かれたプログラムをデバッグすることができます。

    • adb デバッグ・プログラムには、 実行可能バイナリー・ファイルの検査、デバッグおよび修復と、 非ASCII データ・ファイルの検査を行うためのサブコマンドがあります。

    • KDB カーネル・デバッグ・プログラムおよび kdb コマンドは、 カーネルで実行中のコード内のエラーを判別するために使用することができます。 このデバッグ・プログラムを使って、 デバイス・ドライバーとカーネル・エクステンションをデバッグすることができます。

    2 AIX バージョン 7.2: プログラミングの一般概念

  • • トレース機能は、選択されたシステム・イベントをモニターすることによって、 システムの問題を見きわめるのに役立ちます。構文エラーまたはパラメーター命名の不整合をプログラム・ファイル内で検出した場合、 テキスト・エディターまたは文字列検索プログラムと文字列編集エディターを使用して、 ファイル内の文字列を検索して変更することができます。 文字列検索プログラムと文字列エディターには、 grep、sed、および awk コマンドがあります。 1 つまたは複数のプログラム・ファイルで多くの変更を行うには、 これらのコマンドをシェル・プログラムに組み込んでからシェル・プログラムを実行すれば、 ファイル内のコードを検索して、それを変更することができます。プログラムの作成と保守プログラム変更の制御と、 多くのソース・モジュールからのプログラムの作成を補助するために、以下の機能が用意されています。 これらの機能は、多くのソース・モジュールを作成するソフトウェア開発環境で特に役立ちます。• make コマンドは、 ソース・モジュールからプログラムを作成します。 make コマンドは、 最後の作成以後に変更されたモジュールのみをコンパイルするので、 このコマンドを使用すれば、 多くのソース・モジュールを処理する必要がある場合のコンパイル時間を削減することができます。

    • ソース・コード制御システム (SCCS) を使用すれば、 プログラムの各バージョンの個別の完全なコピーを保管しなくても、 プログラムの個別のバージョンを保守することができます。 SCCS を使用すれば、ストレージ要件を削減することができ、 大きなプログラムの多くのバージョンを管理する必要があるプロジェクトの開発をトラッキングすることができます。サブルーチンシステム・ライブラリーのサブルーチンは、複雑であるかまたは反復する多数のプログラミング状態を処理するので、 ユーザーは 1 つのプログラミング状態に専念することができます。シェル・コマンド多くのシェル・コマンドの機能を C 言語プログラムに組み込むことができます。 プログラムで使用するシェル・コマンドは、 そのプログラムを使用するすべてのシステムで使用可能なシェル・コマンドでなければなりません。次に、プログラム内で fork と exec サブルーチンを使用すれば、 そのプログラムとは別のプロセスとして、コマンドを実行することができます。 system サブルーチンはプログラム内でシェル・コマンドを実行し、popen サブルーチンはシェル・フィルターを使用します。関連概念sed による文字列の操作sed プログラムは、編集を要求する人との対話なしにその編集を行います。lex コマンドによる字句解析プログラムの生成lex コマンドは、 文字ストリーム入力を受け取ってそれをプログラムのアクションに変換する、C 言語のプログラムの作成を支援します。make コマンドこのトピックでは、make コマンドを使用する再コンパイルおよび再リンクのプロセスの単純化に関する情報を示します。サブルーチン、プログラム例、およびライブラリーこのトピックには、どのようなサブルーチンがあるか、それらの使用法、およびそれらの保管場所についての情報が記載されています。

    Curses ライブラリーcurses ライブラリーは、 端末タイプに関係なく端末のディスプレイを操作するための関数のセットを提供します。 curses ライブラリーは、カラーをサポートします。 しかし、マルチバイト文字はサポートされていません。 curses ドキュメンテーションでの文字の参照はすべて 1 バイト文字を参照します。本書では、curses ライブラリーを curses と呼びます。

    プログラミングの一般概念 3

  • curses プログラミングはウィンドウのデータ構造体を基礎としています。 この構造体を使用して、 端末のディスプレイ上のデータを操作することができます。 ユーザーは、端末のディスプレイ全体を 1 つの大きなウィンドウとして処理するように curses に指示することも、 ディスプレイ上に複数のウィンドウを作成することもできます。 ウィンドウのサイズは同じでなくてもよく、別のウィンドウにオーバーラップしてもかまいません。 一般的な curses アプリケーションには、 単一の大きなウィンドウと 1 つのサブウィンドウがあります。端末のディスプレイ上の各ウィンドウは固有のウィンドウ・データ構造体を持っています。 この構造体は、ウィンドウのサイズおよびディスプレイ 上の位置などの、 ウィンドウに関する状態情報を保持します。curses はウィンドウ・データ構造体を使用して、 ユーザーの命令を実行するために必要な関連情報を入手します。用語curses を使用してプログラミングを行う場合には、 以下の用語を理解している必要があります。用語 定義現在の文字 論理カーソルが現在示している文字。現在行 (current line) 論理カーソルが現在示している行。curscr curses によって提供される仮想デフォルト・ウィンドウ。 curscr (現在のスク

    リーン) は、 端末の外部ディスプレイに現在表示されているものの内部表現です。 curscr を変更してはなりません。

    ディスプレイ ワークステーションに接続されている物理的なディスプレイ。論理カーソル 各ウィンドウ内のカーソル位置。 ウィンドウ・データ構造体は、その論理カー

    ソルの位置をトラッキングします。パッド パッドは、スクリーン・サイズの制限を受けないウィンドウです。物理カーソル ディスプレイに表示されるカーソル。 ワークステーションは、このカーソルを

    使用して、 ディスプレイへの書き出しを行います。 物理カーソルはディスプレイごとに 1 つだけあります。

    スクリーン (screen) ディスプレイ全体を占めるウィンドウ。 スクリーンと stdscr は同義です。stdscr ディスプレイ全体を表す、curses によって提供される仮想デフォルト・ウィン

    ドウ (標準スクリーン)。ウィンドウ ディスプレイ上の C データ構造体およびそのデータ構造体のグラフィック表

    現を指すポインター。 ウィンドウは、 任意の時点でディスプレイのすべてまたは一部がどのように見えるかを表す 2 次元の配列として考えることができます。

    命名規則単一の curses サブルーチンは、 複数のバージョンを持つことができます。 複数のバージョンを持つcurses サブルーチンは、 個別のバージョンを識別する個別の命名規則に従います。 これらの規則は、標準curses サブルーチンにプレフィックスを追加し、 該当のサブルーチンが呼び出されたときにそのサブルーチンに必要な引数または行われるアクションを識別します。 curses サブルーチン名の様々なバージョンは、以下のプレフィックスを使用します。接頭部 説明w ウィンドウ引数が必要なサブルーチンを識別します。p パッド引数が必要なサブルーチンを識別します。mv プログラムが提供する座標への移動を最初に実行するサブルーチンを識別します。

    curses サブルーチンに複数のバージョンがあり、 なおかつそのサブルーチンの前に上記のいずれかのプレフィックスがない場合、curses デフォルト・ウィンドウ stdscr (標準スクリーン) が使用されます。 stdscrを使用する大多数のサブルーチンは、#define ステートメントを使用して /usr/include/curses.h ファイル

    4 AIX バージョン 7.2: プログラミングの一般概念

  • に作成されているマクロです。 プリプロセッサーは、コンパイル時にこれらのステートメントを置換します。 結果として、これらのマクロはコンパイル済みのアセンブラー・コード、トレース、デバッグ・プログラム、 または curses ソース・コードには現れません。curses サブルーチンが単一のバージョンしか持っていない場合には、stdscr を使用するとは限りません。例えば、printw サブルーチンは文字列を stdscr に出力します。 wprintw サブルーチンは、window 引数を提供することによって、 文字列を特定のウィンドウに出力します。 mvprintw サブルーチンは、 指定された座標を stdscr に移動してから、printw サブルーチンと同じ機能を実行します。 同様に、mvwprintw サブルーチンは、 指定された座標を指定されたウィンドウに移動してから、wprintw サブルーチンと同じ機能を実行します。curses プログラムの構造一般的に、curses プログラムは以下のように進行します。1. curses を開始します。2.カラー・サポートを検査します (オプショナル )。3.カラーを開始します (オプショナル )。4. 1 つまたは複数のウィンドウを作成します。5.ウィンドウを操作します。6. 1 つまたは複数のウィンドウを破棄します。7. curses を停止します。ステップの中には必須ではないものもあるので、 プログラムが上記の進行順序に正確に従う必要はありません。戻り値少数の例外を除いて、 すべての curses サブルーチンは整数値 ERR または整数値 OK を戻します。 この規則に従わないサブルーチンについては、 該当する場合に注を付けます。 ポインターを戻すサブルーチンは、エラーの場合、 常に null ポインターを戻します。

    curses の初期化このセクションでは curses の初期化に使用するコマンドについて説明します。curses を初期化するには、 以下のコマンドを使用します。コマンド 説明endwin curses サブルーチン・ライブラリーおよびそのデータ構造体を終了します。initscr curses サブルーチン・ライブラリーおよびそのデータ構造体を初期化します。isendwin endwin サブルーチンが呼び出された後に、wrefresh サブルーチンへの呼び出しがない

    場合に、TRUE を戻します。newterm 新規端末をセットアップします。setupterm curses が使用できるように TERMINAL 構造体をセットアップします。

    curses サブルーチンを呼び出すプログラムの先頭に curses.h ファイルを組み込む必要があります。 これを実行するには、 次のステートメントを使用してください。#include

    ウィンドウまたはスクリーンを操作するサブルーチンを呼び出す前には、 initscr または newterm サブルーチンを呼び出す必要があります。 これらのサブルーチンは、 まず端末の設定を保管してから、setupterm サブルーチンを呼び出し、curses 端末を設定します。curses を一時的に中断する必要がある場合には、 シェル・エスケープまたはサブルーチンを使用します。一時的なエスケープ後に再開するには、wrefresh または doupdate サブルーチンを呼び出します。 cursesプログラムを終了する前には、 endwin サブルーチンを呼び出す必要があります。 endwin サブルーチン

    プログラミングの一般概念 5

  • は tty モードを復元し、 カーソルをスクリーンの左下隅に移動し、 端末を適切な非ビジュアル・モードにリセットします。大部分のスクリーン指向の対話式プログラムには、 結果をスクリーンにエコーしない、 文字単位の入力が必要です。 文字単位の入力を使用するプログラムを確立するには、initscr サブルーチンを呼び出した後に、cbreak と noecho サブルーチンを呼び出します。 このタイプの入力を受け入れる場合、 プログラムは以下のサブルーチンも呼び出す必要があります。• nonl サブルーチン。• Window パラメーターを stdscr に設定し、Flag パラメーターを FALSE に設定した intrflush サブルーチン。Window パラメーターは必須ですが、無視されます。 stdscr は既に作成されているので、Window パラメーターの値として stdscr を使用することができます。

    • Window パラメーターを stdscr に設定し、Flag パラメーターを TRUE に設定した keypad サブルーチン。最適化のために、 wrefresh サブルーチンを不必要に呼び出したくない場合に、 isendwin サブルーチンは役立ちます。 endwin サブルーチンが呼び出された後に、wrefresh サブルーチンへのコールがないかどうかを調べるには、 isendwin サブルーチンを使用します。

    curses 環境内のウィンドウcurses プログラムは、 端末のディスプレイに表示されたウィンドウを操作します。 ウィンドウは、長さと高さを、ディスプレイ全体と同じ大きさ以下で、 単一の文字以上にすることができます。注 : パッドは、スクリーン・サイズの制限を受けないウィンドウです。curses プログラム内で、 ウィンドウはタイプ WINDOW として宣言される変数です。 WINDOW データ型は、C データ構造体として /usr/include/curses.h ファイルに定義されます。 ウィンドウを作成するには、マシンのメモリーの一部をウィンドウ構造体に割り当てます。 この構造体はウィンドウの特性を示します。 あるプログラムがウィンドウ・データをメモリー内部で変更する場合、 そのプログラムは wrefreshサブルーチン (または同等のサブルーチン) を使用して、 該当するウィンドウ構造体の内部の変更を反映するように、 外部の物理スクリーンを更新する必要があります。デフォルトのウィンドウ構造curses には、 stdscr と呼ばれる仮想デフォルト・ウィンドウ構造があります。 stdscr はメモリー内で端末ディスプレイ全体を表します。 stdscr ウィンドウ構造体は、curses ライブラリーを初期化すると自動的に作成され、 ディスプレイについて記述します。 ライブラリーを初期化すると、length 変数と width 変数が物理ディスプレイの長さと幅に設定されます。stdscr を使用するプログラムは、 最初に stdscr を操作します。 それから refresh サブルーチンを呼び出し、 外部ディスプレイをリフレッシュして、それが stdscr ウィンドウに一致するようにします。stdscr の他に、ユーザー独自のウィンドウを定義することができます。 これらのウィンドウは、stdscr と区別するためにユーザー定義ウィンドウ と呼ばれます。 stdscr と同様に、 ユーザー定義ウィンドウは構造体としてマシン・メモリーに存在します。 プログラムに使用可能なメモリーの量を除いて、 作成可能なウィンドウ数に制限はありません。 curses プログラムはデフォルト・ウィンドウ、 ユーザー定義ウィンドウ、またはその両方を操作することができます。現行ウィンドウ構造curses は curscr (現在のスクリーン) と呼ばれるもう 1 つの仮想ウィンドウをサポートします。 curscr ウィンドウは、 端末の外部ディスプレイに現在表示されているものの内部表現です。プログラムは、内部表現に一致する外部表現を必要とする場合、 物理的なディスプレイを更新するためにwrefresh サブルーチンなどのサブルーチン、 (あるいは、プログラムが stdscr を処理している場合にはrefresh サブルーチン) を呼び出す必要があります。curscr は curses による内部使用のために予約されています。 curscr を操作してはなりません。サブウィンドウcurses によってサブウィンドウ を作成することもできます。 サブウィンドウは他のウィンドウ内の長方形の部分です。 サブウィンドウのタイプも WINDOW です。 サブウィンドウを収容したウィンドウは、サブウィンドウの親と呼ばれ、 サブウィンドウは、サブウィンドウを収容したウィンドウの子と呼ばれます。

    6 AIX バージョン 7.2: プログラミングの一般概念

  • サブウィンドウによってオーバーラップされている領域内の親ウィンドウまたは子ウィンドウのいずれかに対する変更は、 両方のウィンドウに対して行われます。 サブウィンドウを変更した後、 親ウィンドウをリフレッシュする前に、 親ウィンドウ上で touchline または touchwin サブルーチンを呼び出してください。サブルーチン 説明touchline wrefresh サブルーチンに対する次の呼び出し時に、行の範囲のリフレッシュを強制しま

    す。touchwin wrefresh サブルーチンの次のコール時に、 ウィンドウの文字配列内のすべての文字のリ

    フレッシュを強制します。 touchwin サブルーチンは最適化情報を保管しません。 このサブルーチンはオーバーラップしているウィンドウを使用する場合に役立ちます。

    親で呼び出されたリフレッシュは、子もリフレッシュします。 サブウィンドウは親ウィンドウになることもできます。 ウィンドウ内にウィンドウの層を形成するプロセスは、 ネスティング と呼ばれます。親ウィンドウを削除する前に、 delwin サブルーチンを使用して、 そのすべての子ウィンドウを最初に削除する必要があります。 すべての子ウィンドウを削除する前に、 親ウィンドウの削除を試みると、cursesによってエラーが戻されます。パッドパッドは端末のディスプレイ・サイズによって制限されない、 あるいはディスプレイの特定の部分に関連するタイプのウィンドウです。 パッドは通常、物理的なディスプレイより大きいので、ある時点では、 パッドの一部しかユーザーに見えません。1 つのウィンドウに一緒に保持したい大量の関連データがあるが、 すべてのデータを一度に表示する必要がない場合に、 パッドを使用してください。パッド内のウィンドウは、サブパッド と呼ばれます。 サブパッドは親パッドを基準とした座標にあるパッド内に置かれます。 この配置方法は、 スクリーン座標を使用して配置されるサブウィンドウとは異なります。他のウィンドウと異なり、入力のスクロールまたはエコーによって、 パッドが自動的にリフレッシュされることはありません。 サブウィンドウと同様に、サブパッドのイメージを変更する場合には、 親パッドをリフレッシュする前に、 親上で touchline または touchwin サブルーチンを呼び出す必要があります。パッドとともにすべての curses サブルーチンを使用することができます。 ただし、 newwin、subwin、wrefresh、および wnoutrefresh サブルーチンを除きます。 これらのサブルーチンの代わりに、newpad、subpad、prefresh、および pnoutrefresh の各サブルーチンを使用します。

    curses によるウィンドウ・データの操作curses を初期化すると、stdscr が自動的に提供されます。curses サブルーチン・ライブラリーを使用して stdscr を操作することも、 ユーザー定義ウィンドウを作成することもできます。ウィンドウの作成newwin サブルーチンを使用すれば、ユーザー独自のウィンドウを作成することができます。newwin サブルーチンを呼び出すたびに、curses はメモリーに新規ウィンドウ構造体を割り当てます。 この構造体には、新規ウィンドウに関連するすべての情報が入っています。 ユーザーが作成できるウィンドウの数は、curses によって制限されません。 ネストするサブウィンドウの数は、 使用可能なメモリーの量によって制限され、/usr/include/limits.h ファイルに定義済みの SHRT_MAX の値以下でなければなりません。ウィンドウは作成した順序に関係なく、変更することができます。 端末のディスプレイを更新するには、wrefresh サブルーチンを呼び出します。サブウィンドウ端末のディスプレイを基準としたサブウィンドウの座標を提供する必要があります。 subwin サブルーチンを使用して作成したサブウィンドウは、 親ウィンドウのバウンダリー内に収まらなければなりません。そうでない場合は、null 値が戻されます。

    プログラミングの一般概念 7

  • パッドパッドを作成するには、 以下のサブルーチンを使用してください。サブルーチン

    説明

    newpad パッド・データ構造体を作成します。subpad パッド内のサブパッドを指すポインターを作成し、戻します。ウィンドウ、パッド、およびサブウィンドウの除去新規サブパッドは親パッドを基準として配置されます。ウィンドウ、パッド、またはサブウィンドウを除去するには、delwin サブルーチンを使用します。 ウィンドウまたはパッドを削除するには、その前にその子を削除しておく必要があります。 子を削除していない場合、delwin サブルーチンはエラーを戻します。スクリーンまたはウィンドウのイメージの変更curses サブルーチンがウィンドウの外観を変更すると、 ウィンドウの内部表現は更新されますが、wrefresh サブルーチンに対する次のコールまでは、 ディスプレイは変更されません。 wrefresh サブルーチンは、ウィンドウ構造体内の情報を使用してディスプレイを更新します。ウィンドウのリフレッシュウィンドウまたはパッドの構造体に出力を書き出す場合は常に、 端末のディスプレイをリフレッシュして、内部表現に一致させる必要があります。 リフレッシュでは以下のことを行います。• curscr の内容とユーザー定義スクリーンまたは stdscr の内容を比較します。• curscr 構造体を更新して、ユーザー定義スクリーンまたは stdscr に一致させます。• 変更された物理的なディスプレイの部分を再描画します。ウィンドウをリフレッシュするには、 以下のサブルーチンを使用してください。サブルーチン 説明refresh または wrefresh 端末および curscr を更新して、ウィンドウに対する変更を反映

    します。wnoutrefresh または doupdate 指定されたウィンドウを更新し、一度に端末に出力します。 こ

    れらのサブルーチンは、 複数の更新を行う場合の迅速な応答に役立ちます。

    refresh および wrefresh サブルーチンは、 最初に wnoutrefresh サブルーチンを呼び出して、 リフレッシュするウィンドウを現在のスクリーンにコピーします。 次に、これらのサブルーチンは、 doupdate サブルーチンを呼び出して、ディスプレイを更新します。同時に複数のウィンドウをリフレッシュする必要がある場合には、 以下の 2 つの方法のいずれかを使用します。 wnoutrefresh および doupdate サブルーチンに対するコールの代替となる、wrefresh サブルーチンに対する一連のコールを使用することができます。 あるいは、ウィンドウごとに wnoutrefresh サブルーチンを 1 回呼び出してから、 doupdate サブルーチンを 1 回呼び出すこともできます。 2 番目の方法を使用した場合、1 回だけの大量の出力がディスプレイに送信されます。パッドのリフレッシュに使用するサブルーチンprefresh サブルーチンおよび pnoutrefresh サブルーチンは、wrefresh サブルーチンおよびwnoutrefresh サブルーチンに似ています。prefresh サブルーチンは現在のスクリーンと物理的なディスプレイの両方を更新し、 pnoutrefresh サブルーチンは curscr を更新して、ユーザー定義パッドに対する変更を反映します。 ウィンドウの代わりにパッドが関与するので、これらのサブルーチンには、 パッドとスクリーンのどの部分が関与するかを示すパラメーターが必要です。変更されなかった領域のリフレッシュ

    8 AIX バージョン 7.2: プログラミングの一般概念

  • リフレッシュ時に、変更された領域だけがディスプレイ上で再描画されます。 以下の touchwin およびtouchline サブルーチンを使用すれば、 変更されなかったディスプレイの領域をリフレッシュすることができます。サブルーチン 説明touchline wrefresh サブルーチンに対する次の呼び出し時に、行の範囲のリフレッシュを強制しま

    す。touchwin wrefresh サブルーチンの次のコール時に、 ウィンドウの文字配列内のすべての文字のリ

    フレッシュを強制します。 touchwin サブルーチンは最適化情報を保管しません。 このサブルーチンはオーバーラップしているウィンドウを使用する場合に役立ちます。

    サブウィンドウを処理する場合、またはウィンドウがオーバーラップされる場合には、 touchwin およびwrefresh サブルーチンの結合が役立ちます。 1 つのウィンドウの後方から別のウィンドウを前方に出して見えるようにするには、 touchwin サブルーチンに続いて wrefresh サブルーチンを呼び出します。正しく変更されなかったディスプレイecho または printf サブルーチンなどの非 curses サブルーチンを使用して、テキストを端末のディスプレイに送信すると、 外部ウィンドウが正しく変更されない場合があります。 この場合、ディスプレイは変更されますが、 現在のスクリーンはこれらの変更を反映するように更新されません。 正しく変更されなかったスクリーンに関して refresh を呼び出すと、 リフレッシュするウィンドウと現在のスクリーン構造体の間に差がないので、 問題が生じる可能性があります。 結果として、正しく変更されなかったテキストによって生じるディスプレイ上のスペースは、 変更されません。同様の問題が、ウィンドウの移動時に発生します。 非 curses サブルーチンを使用してディスプレイに送信した文字は、 内部でウィンドウとともに移動しません。スクリーンが正しく変更されなかった場合、curscr 上で wrefresh サブルーチンを呼び出して、 現在の物理的なディスプレイを反映するようにディスプレイを更新します。ウィンドウの内容の操作ウィンドウまたはサブウィンドウの作成後に、 以下のサブルーチンを使用して、 プログラムをなんらかの点で操作しなければならない場合が頻繁にあります。サブルーチン 説明box ウィンドウ内、またはウィンドウの回りにボックスを描画します。copywin overlay および overwrite サブルーチンをより正確に制御します。garbagedlines スクリーン行は廃棄されたので、 何かがそこに上書きされる前に破棄する必要

    があることを curses に指示します。mvwin ウィンドウまたはサブウィンドウを新しい位置に移動します。overlay またはoverwrite

    1 つのウィンドウを別のウィンドウ上にコピーします。

    ripoffline デフォルト・スクリーンから行を除去します。overlay および overwrite サブルーチンを使用するには、2 つのウィンドウをオーバーラップする必要があります。 overwrite サブルーチンは破壊的ですが、overlay サブルーチンは破壊的ではありません。overwrite サブルーチンを使用して、 テキストを 1 つのウィンドウから別のウィンドウにコピーする場合、コピー元のウィンドウからのブランク部分はコピー先のウィンドウのどの部分にも上書きされます。overlay サブルーチンは、 コピー元のウィンドウからブランク部分をコピーしないので、 破壊的ではありません。overlay および overwrite サブルーチンと同様に、 copywin サブルーチンによっても、 1 つのウィンドウの一部を別のウィンドウにコピーすることができます。 overlay および overwrite サブルーチンと異なり、 copywin サブルーチンを使用するために、 ウィンドウをオーバーラップする必要はありません。

    プログラミングの一般概念 9

  • ripoffline サブルーチンを使用すれば、 行を stdscr から除去することができます。 このサブルーチンに正の line 引数を渡すと、 指定した行数が stdscr のトップから除去されます。 負の line 引数をサブルーチンに渡すと、 指定した行数が stdscr のボトムから除去されます。garbagedlines サブルーチンを使用すれば、 新規データを書き込む前に、指定した範囲の行を破棄することができます。フィルターのサポートフィルターである curses アプリケーションのために filter サブルーチンが用意されています。 このサブルーチンによって、curses は、stdscr が単一行であるかのように操作します。 filter サブルーチンを使用して実行する場合、curses は、curses が存在している行に関する知識を必要とする端末機能を使用しません。

    curses によるカーソルの制御このセクションでは、curses ライブラリーに存在する各種のカーソルについて説明します。curses ライブラリーには、 以下のタイプのカーソルがあります。論理カーソル各ウィンドウ内のカーソル位置。 ウィンドウのデータ構造体は、その論理カーソルの位置をトラッキングします。 各ウィンドウに論理カーソルがあります。

    物理カーソルディスプレイのカーソル。 ワークステーションは、このカーソルを使用して、 ディスプレイへの書き出しを行います。 物理カーソルはディスプレイごとに 1 つだけあります。

    ウィンドウ内の論理カーソルでのみ文字の追加または消去を行うことができます。 カーソルを制御するために、 以下のサブルーチンが用意されています。getbegyxウィンドウの開始座標を整変数 y と x に位置づけます。

    getmaxyxウィンドウのサイズを整変数 y と x に位置づけます。

    getsyx仮想スクリーンのカーソルの現在の座標を戻します。

    getyx指定されたウィンドウに関連した論理カーソルの位置を戻します。

    leaveokwrefresh サブルーチンに対するコールの後の物理カーソル位置を制御します。

    movestdscr に関連する論理カーソルを移動します。

    mvcur物理カーソルを移動します。

    setsyx仮想スクリーンのカーソルを指定された座標に設定します。

    wmoveユーザー定義ウィンドウに関連する論理カーソルを移動します。

    refresh または wrefresh サブルーチンに対するコールの後に、curses はウィンドウ内の最後に更新された文字位置に物理カーソルを位置づけます。 リフレッシュ後に物理カーソルを移動せずにそこに位置づけるには、Window パラメーターを望ましいウィンドウに設定し、Flag パラメーターを TRUE に設定して、leaveok サブルーチンを呼び出します。

    curses による文字の操作curses ウィンドウに文字を追加するには、 キーボードまたは curses アプリケーションを使用します。 この項では、curses ウィンドウに現れる文字を追加、除去、 または変更する方法について説明します。文字サイズ

    10 AIX バージョン 7.2: プログラミングの一般概念

  • 文字セットによっては、スクリーンに表示される場合に複数のカラムを占有する、 複数カラム文字を定義しています。宛先ウィンドウの幅より大きい幅の文字を書き出すと、エラーが生じます。スクリーン・イメージへの文字の追加curses ライブラリーには、 ウィンドウへのテキストの変更を書き出し、wrefresh サブルーチンに対する次のコール時に更新する必要がある領域をマークする多くのサブルーチンがあります。waddch サブルーチンwaddch サブルーチンは、指定された文字を使用して、現在の論理カーソル位置にある文字を上書きします。 上書きの後に、 論理カーソルは 1 スペース右に移動します。 waddch サブルーチンを右マージンで呼び出した場合、 これらのサブルーチンは自動改行文字も追加します。 さらに、これらのサブルーチンの 1つをスクロール領域下部で呼び出したときに、 scrollok サブルーチンが使用可能になっていると、領域は1 行スクロールアップされます。 例えば、ウィンドウのボトム行で改行を追加すると、ウィンドウは 1 行スクロールアップします。追加する文字がタブ、改行、 またはバックスペース文字文字である場合、curses は追加文字を反映するために、 カーソルをウィンドウ内で適切に移動します。 タブは 8 カラムごとに設定されます。 文字が改行である場合、curses は最初に wclrtoeol サブルーチンを使用して、 現在行を論理カーソル位置から行の末尾まで消去してから、カーソルを移動します。 waddch サブルーチン・ファミリーは以下のものから構成されます。サブルーチン 説明addch マクロ 文字を stdscr に追加します。mvaddch マクロ 文字を指定された位置へ移動してから、その文字を stdscr に追加します。mvwaddch マクロ 文字を指定された位置へ移動してから、それをユーザー定義ウィンドウに

    追加します。waddch サブルーチン 文字をユーザー定義ウィンドウに追加します。

    winch および waddch サブルーチン・ファミリーを一緒に使用することによって、 テキストとビデオの属性を、ある位置から別の位置へコピーすることができます。 winch サブルーチン・ファミリーを使用すれば、 文字およびそのビデオ属性を取り出すことができます。 次に、いずれかの waddch サブルーチンを使用すれば、 文字およびその属性を別の位置に追加することができます。さらに、waddch サブルーチンを使用すれば、 制御文字をウィンドウに追加することができます。 制御文字は ^X 表記で表示されます。注 : 制御文字を備えたウィンドウの中の位置で winch サブルーチンを呼び出した場合、その文字は戻されません。 その代わりに、 制御文字を表す 1 文字が戻されます。単一の非制御文字の出力単一の非制御文字を出力する場合、 wechochar サブルーチンを使用すると、 パフォーマンスをかなり向上させることができます。 これらのサブルーチンは、対応する waddchr サブルーチンへのコールに続く、対応する wrefresh サブルーチンへのコールと機能的に等価です。 wechochar サブルーチンには、wechochar サブルーチン、echochar マクロ、および pechochar サブルーチンなどがあります。文字セットによっては、非スペーシング文字が入っている場合があります。 (非スペーシング文字は、wcwidth サブルーチンがゼロの幅を戻す、 ' ¥ 0 '文字を除く文字です。) アプリケーションは、非スペーシング文字をウィンドウに書き出す場合があります。 ウィンドウ内のすべての非スペーシング文字は、 スペーシング文字に関連していて、スペーシング文字を変更します。 ウィンドウ内の非スペーシング文字は個別に扱うことはできません。 非スペーシング文字は、 非スペーシング文字が関連しているスペーシング文字に curses 操作が影響を与える場合は常に、 暗黙的に処理されます。非スペーシング文字は属性をサポートしません。 幅の広い文字と属性を使用するインターフェースの場合、 幅の広い文字が非スペーシング文字であると、属性は無視されます。 複数カラムの文字は、すべてのカラムの属性からなる 1 つのセットを持っています。 非スペーシング文字とスペーシング文字の関連付けは、 幅の広い文字のインターフェースを使用するアプリケーションによって制御することができます。 幅の広い文字列の関数は、コード・セットに依存する関連付けを提供します。

    プログラミングの一般概念 11

  • c と呼ばれるスペーシング文字に関連する非スペーシング文字の、一般的な効果を以下に示します。• 非スペーシング文字は c の外観を変更する可能性があります。 (例えば、発音区別符号を文字に追加する非スペーシング文字がある可能性があります。) ただし、発音区別符号が組み込まれたスペーシング文字がある場合もあります。

    • 非スペーシング文字は c を c に続く文字にブリッジする可能性があります。 この使用法の例は、合字の形成、および複合した表示形式、ワード、 または表意文字への文字の変換です。スペーシング文字に関連付けられる非スペーシング文字の数が制限されている場合には、 すべての制限は少なくとも 5 以上に制限されます。複合文字複合文字は関連する文字のセットであり、 スペーシング文字およびスペーシング文字に関連する非スペーシング文字が入っている可能性があります。 スペーシング複合文字は�