日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V7.3-2
ライブラリ

タイトル
目次
まえがき
第 1 章:リファレンス・セクション
索引
PDF
OpenVMS ホーム
OpenVMS | HPE 日本

OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




バイナリ検索を実行します。ソートされたオブジェクトの配列から指定のオブジェクトを検索します。

形式

#include <stdlib.h>

void *bsearch (const void *key, const void *base, size_t nmemb, size_t size, int (*compar)
(const void *, const void *));

関数バリアント bsearch関数には, _bsearch32および _bsearch64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



key

配列内で検索するオブジェクトを指すポインタ。このポインタは,pointer-to-object 型で,pointer-to-void 型にキャストされなければなりません。

base

配列の最初のメンバを指すポインタ。このポインタは pointer-to-object 型で,pointer-to-void 型にキャストされなければなりません。

nmemb

配列内のオブジェクトの数。

size

オブジェクトのサイズ (バイト数)。

compar

比較関数を指すポインタ。

説明

配列はまず,compar によって示される比較関数に従って,昇順にソートする必要があります。

compar によって示される比較関数に 2 つの引数が渡されます。 2 つの引数は比較するオブジェクトを示します。最初の引数が 2 番目の引数より小さいか,等しいか,大きいかに応じて,比較関数は 0 より小さい整数,0,0 より大きい引数を返さなければなりません。

比較関数 (compar) が配列内のすべてのバイトを比較する必要はありません。したがって,配列内のオブジェクトには,比較するデータの他に任意のデータを格納することができます。

返される値は pointer-to-void 型として宣言されるため, pointer-to-object 型にキャストされるかまたは割り当てられなければなりません。




戻り値

x 配列内で一致するメンバを指すポインタ。一致するメンバが見つからない場合はヌル・ポインタ。
NULL キーが配列から見つからなかったことを示します。



 
#include <stdio.h> 
#include <stdlib.h> 
 
#define SSIZE 30 
 
extern int compare();  /* prototype for comparison function */ 
 
int array[SSIZE] = {30, 1, 29, 2, 28, 3, 27, 4, 26, 5, 
                    24, 6, 23, 7, 22, 8, 21, 9, 20, 10, 
                    19, 11, 18, 12, 17, 13, 16, 14, 15, 25}; 
 
/*  This program takes an unsorted array, sorts it using qsort, */ 
/*  and then calls bsearch for each element in the array,       */ 
/*  making sure that bsearch returns the correct element.       */ 
 
main() 
{ 
    int i; 
    int failure = FALSE; 
    int *rkey; 
 
    qsort(array, SSIZE, sizeof (array[0]), &compare); 
 
    /* search for each element */ 
    for (i = 0; i < SSIZE - 1; i++) { 
        /* search array element i */ 
        rkey = bsearch((array + i), array, SSIZE, 
                        sizeof(array[0]), &compare); 
        /* check for successful search */ 
        if (&array[i] != rkey) { 
            printf("Not in array, array element %d\n", i); 
            failure = TRUE; 
            break; 
        } 
    } 
    if (!failure) 
        printf("All elements successfully found!\n"); 
} 
 
/*  Simple comparison routine.  */ 
/*                              */ 
/*  Returns:  = 0 if a == b     */ 
/*            < 0 if a < b      */ 
/*            > 0 if a > b      */ 
 
int compare(int *a, int *b) 
{ 
    return (*a - *b); 
} 

このサンプル・プログラムでは,次の出力が生成されます。


All elements successfully found! 




初期シフト状態で 1 バイトのマルチバイト文字をワイド文字に変換します。

形式

#include <wchar.h>

wint_t btowc (int c);




引数



c

ワイド文字表現に変換する文字。

説明

btowc関数は, ( unsigned char)c が初期シフト状態で有効な 1 バイトのマルチバイト文字であるかどうかを確認し,有効である場合は,その文字のワイド文字表現を返します。



戻り値

x unsigned char c のワイド文字表現。
WEOF エラーを示します。 c 引数の値が EOF であるか,または初期シフト状態で有効な 1 バイトのマルチバイト文字でありません。




ヌル文字をバイト列にコピーします。

形式

#include <strings.h>

void bzero (void *string, size_t length);




引数



string

ヌル文字のコピー先のバイト列を指定します。

length

文字列の長さ (バイト数) を指定します。

説明

bzero関数は,ヌル文字 ('\0') を length バイトだけ, string によって示されるバイト列にコピーします。 length が 0 の場合は,バイトはコピーされません。



複素数の絶対値を返します。

形式

#include <math.h>

double cabs (cabs_t z);

float cabsf (cabsf_t z); (Alpha only)

long double cabsl (cabsl_t z); (Alpha only)




引数



z

cabs_t型, cabsf_t型,または cabsl_t型の構造体。これらの型は次に示すように, <math.h>ヘッダ・ファイルに定義されています。


typedef struct {double x,y;} cabs_t; 
typedef struct { float x, y; } cabsf_t;  (Alpha only) 
typedef struct { long double x, y; } cabsl_t;  (Alpha only) 


説明

cabs関数は, 2 点間のユークリッド距離をそれぞれの 2 乗の平方根として計算することにより,複素数の絶対値を返します。


sqrt(x2 + y2) 

オーバフローが発生した場合,戻り値は未定義です。

cabs関数, cabsf関数, cabsl関数はそれぞれ, hypot関数, hypotf関数, hypotl関数と同じです。




0 に初期化されたメモリ領域を割り当てます。この関数は AST リエントラントです。

形式

#include <stdlib.h>

void *calloc (size_t number, size_t size);

関数バリアント calloc関数には, _calloc32および _calloc64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



number

割り当てる項目の数。

size

各項目のサイズ。

説明

calloc関数は項目を 0 に初期化します。

mallocreallocも参照してください。




戻り値

n クォドワード境界にそろえられた最初のバイトのアドレス。
NULL 領域を割り当てることができないことを示します。




メッセージ・カタログをクローズします。

形式

#include <nl_types.h>

int catclose (nl_catd catd);




引数



catd

メッセージ・カタログ記述子。この記述子は, catopen の呼び出しが正常終了したときに返されます。

説明

catclose関数は,catd によって参照されるメッセージ・カタログをクローズし,カタログ・ファイル記述子の割り当てを解除します。



戻り値

0 カタログが正しくクローズされたことを示します。
- 1 エラーが発生したことを示します。 errno は次の値に設定されます。

  • EBADF---カタログ記述子が不正です。




メッセージ・カタログからメッセージを取得します。

形式

#include <nl_types.h>

char *catgets (nl_catd catd, int set_id, int msg_id, const char *s);

関数バリアント catgets関数には, _catgets32および _catgets64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。


引数



catd

メッセージ・カタログ記述子。この記述子は, catopen の呼び出しが正常終了したときに返されます。

set_id

整数のセット識別子。

msg_id

整数のメッセージ識別子。

s

メッセージを取得できないときに関数から返されるデフォルトのメッセージ文字列を指すポインタ。

説明

catgets関数は,メッセージ・カタログ catd から, set_idmsg_id によって示されるメッセージを取得します。メッセージは nl_catd構造体のメッセージ・バッファに格納されます。 catgets を再び呼び出すと,格納されているメッセージは上書きされます。メッセージ文字列を保存する必要がある場合は,プログラムで別の場所にコピーしてください。



戻り値

x 取得したメッセージを指すポインタ。
s デフォルト・メッセージ文字列を指すポインタ。関数が要求されたメッセージをカタログから取得できなかったことを示します。指定された引数の組み合わせ ( set_d, msg_id) がオープンされているカタログで既存のメッセージを表さない場合は,この条件が発生することがあります。また,エラーが発生したことを示す場合もあります。エラーが発生した場合は,この関数は errno を次のいずれかの値に設定します。

  • EBADF---カタログ記述子が不正です。

  • EVMSRR---OpenVMS I/O 読み込みエラー。 OpenVMS エラー・コードは vaxc$errno に格納されています。



#include <nl_types.h> 
#include <locale.h> 
#include <stdarg.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unixio.h> 
 
 /* This test makes use of all the message catalog routines. catopen() */ 
 /* opens the catalog ready for reading, then each of the three        */ 
 /* messages in the catalog are extracted in turn using catgets() and  */ 
 /* printed out. catclose() closes the catalog after use.              */ 
 /* The catalog source file used to create the catalog is as follows:  */ 
 /* $ this is a message file 
  * $ 
  * $quote " 
  * $ another comment line 
  * $set 1 
  * 1 "First set, first message" 
  * 2 "second message - This long message uses a backslash \
  * for continuation." 
  * $set 2 
  * 1 "Second set, first message"                                      */ 
 
char *default_msg = "this is the first message."; 
 
main() 
{ 
  nl_catd catalog; 
  int msg1, 
      msg2, 
      retval; 
 
  char *cat = "sys$disk:[]catgets_example.cat"; /*Force local catalog*/ 
 
  char *msgtxt; 
 
  char string[128]; 
 
  /* Create the message test catalog */ 
 
  system("gencat catgets_example.msgx catgets_example.cat") ; 
 
  if ((catalog = catopen(cat, 0)) == (nl_catd) - 1) { 
      perror("catopen"); 
      exit(EXIT_FAILURE); 
  } 
 
  msgtxt = catgets(catalog, 1, 1, default_msg); 
  printf("%s\n", msgtxt); 
 
  msgtxt = catgets(catalog, 1, 2, default_msg); 
  printf("%s\n", msgtxt); 
 
  msgtxt = catgets(catalog, 2, 1, default_msg); 
  printf("%s\n", msgtxt); 
 
  if ((retval = catclose(catalog)) == -1) { 
      perror("catclose"); 
      exit(EXIT_FAILURE); 
  } 
 
  delete("catgets_example.cat;") ;  /* Remove the test catalog */ 
} 

このサンプル・プログラムを実行すると,次の結果が生成されます。


First set, first message 
second message - This long message uses a backslash for continuation. 
Second set, first message 




メッセージ・カタログをオープンします。

形式

#include <nl_types.h>

nl_catd catopen (const char *name, int oflag);




引数



name

オープンするメッセージ・カタログの名前。

oflag

int型のオブジェクトであり,カタログ・ファイルの検索で,現在のプログラムのローケルの LC_MESSAGES カテゴリのロケール・セットを使用するのか,論理名 LANG を使用するのかを指定します。

説明

catopen関数は,name によって示されるメッセージ・カタログをオープンします。

name にコロン (:),左角括弧 ([),左山括弧 (<) のいずれかが含まれている場合や,name が論理名として定義されている場合は,name はカタログの完全なファイル指定であると解釈されます。

これらの文字が含まれていない場合, catopenは, name が既存のカタログ・ファイルを指す論理名であると解釈します。name が論理名でない場合は,論理名 NLSPATH を使用して,メッセージ・カタログのファイル指定を定義します。NLSPATH はユーザのプロセスで定義されます。NLSPATH 論理名が定義されていない場合や, NLSPATH によって指定されるどのコンポーネントでもメッセージ・カタログをオープンできない場合は, SYS$NLSPATH 論理名を使用してメッセージ・カタログ・ファイルを検索します。

NLSPATH と SYS$NLSPATH はどちらもコンマ区切りのテンプレート・リストです。 catopen関数は各テンプレートを使用してファイル指定を作成します。たとえば,NLSPATH は次のように定義することができます。


DEFINE NLSPATH SYS$SYSROOT:[SYS$I18N.MSG]%N.CAT,SYS$COMMON:[SYSMSG]%N.CAT 

この例では, catopenはまず,ディレクトリ SYS$SYSROOT:[SYS$I18N.MSG] から指定されたカタログを検索します。指定されたカタログが見つからない場合は,ディレクトリ SYS$COMMON:[SYSMSG] を検索します。カタログ名は,%N を catopenに渡された名前に置き換え,接尾語 .cat を追加することにより作成されます。%N は置換フィールドと呼ばれます。次の置換フィールドは有効です。

フィールド 意味
%N catopen に渡された name を置き換える。
%L 1 ロケール名を置き換える。

ロケール名で使用されているピリオド (.) とアットマーク記号 (@) は,アンダスコア (_) 文字に置き換えられる。

たとえば,ロケール名が "zh_CN.dechanzi@radical" の場合は, ZH_CN_DECHANZI_RADICAL に置換される。

%l 1 ロケール名の language の部分を置き換える。たとえば, en_GB.ISO8859-1 というロケール名で language の部分は en である。
%t 1 ロケール名の territory の部分を置き換える。たとえば, en_GB.ISO8859-1 というロケール名で territory の部分は GB である。
%c 1 ロケール名の codeset 名を置き換える。たとえば, en_GB.ISO8859-1 というロケール名で codeset 名は ISO8859-1 である。


1この置換では,ロケール名が language_territory.codeset @mode という形式であるものと解釈される。

oflag 引数が NL_CAT_LOCALE に設定されている場合は, LC_MESSAGES カテゴリに対して定義されている現在のロケールを使用して, %L,%l,%t,%c 置換フィールドの置換を判断します。 oflag 引数が 0 に設定されている場合は, LANG 環境変数の値をロケール名として使用して,これらのフィールドの置換を判断します。 NL_CAT_LOCALE の使用は XPG4 仕様に準拠していますが, XPG3 との互換性を維持するために 0 という値が存在することに注意してください。また, catopenでは LANG 環境変数の値を使用しますが,この値を使用してプログラムのロケールを設定できるかどうかの確認は行いません。つまり, catopensetlocale呼び出しで,この値が有効なロケール引数として機能するかどうかを確認しません。

置換値が定義されていない場合は,空文字列に置換されます。

先頭のコンマまたは 2 つの隣接するコンマ (,,) は %N の指定に相当します。次の例を参照してください。


DEFINE NLSPATH ",%N.CAT,SYS$COMMON:[SYSMSG.%L]%N.CAT" 

この例では, catopenは次の場所をここに示した順に検索します。

  1. name (カレント・ディレクトリ)

  2. name.cat (カレント・ディレクトリ)

  3. SYS$COMMON:[SYSMSG.locale_name]name.cat




戻り値

x メッセージ・カタログ・ファイル記述子。呼び出しが正常終了したことを示します。この記述子は catgets および catclose の呼び出しで使用されます。
(nl_catd) - 1 エラーが発生したことを示します。 errno は次のいずれかの値に設定されます。

  • EACCES---特権が不十分であるか,ファイル保護違反が発生したか,ファイルが現在別のユーザによってロックされています。

  • EMFILE---プロセス・チャネル・カウントを超過しました。

  • ENAMETOOLONG---メッセージ・カタログの完全なファイル指定が長すぎます。

  • ENOENT---要求されたメッセージ・カタログを見つけることができませんでした。

  • ENOMEM---空きメモリが不足しています。

  • ENOTDIR--- name 引数の一部が有効なディレクトリでありません。

  • EVMSERR--- errno のどの値にも一致しないエラーが発生しました。 vaxc$errno の値を確認してください。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項