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


前へ 次へ 目次 索引


nl_langinfoの呼び出しの後に setlocale関数が呼び出された場合,以前の nl_langinfoの呼び出しから返されたポインタは無効になります。この場合には, nl_langinfo関数を再度呼び出すようにしてください。


戻り値

x 要求された情報を含んでいる文字列へのポインタ。 item が無効な場合,関数は空の文字列を返します。



#include <stdio.h> 
#include <locale.h> 
#include <langinfo.h> 
 
/* This test sets up the British English locale, and then       */ 
/* inquires on the data and time format, first day of the week, */ 
/* and abbreviated first day of the week.                       */ 
 
#include <stdlib.h> 
#include <string.h> 
 
int main() 
{ 
    char *return_val; 
    char *nl_ptr; 
 
    /* set the locale, with user supplied locale name  */ 
 
    return_val = setlocale(LC_ALL, "en_gb.iso8859-1"); 
    if (return_val == NULL) { 
        printf("ERROR : The locale is unknown"); 
        exit(1); 
    } 
    printf("+----------------------------------------+\n"); 
 
    /* Get the date and time format from the locale.  */ 
 
    printf("D_T_FMT = "); 
 
    /*  Compare the returned string from nl_langinfo with */ 
    /*  an empty string.                                  */ 
 
    if (!strcmp((nl_ptr = (char *) nl_langinfo(D_T_FMT)), "")) { 
 
  /* The string returned was empty this could mean that either */ 
  /* 1) The locale does not contain a value for this item      */ 
  /* 2) The value for this item is an empty string             */ 
 
        printf("nl_langinfo returned an empty string\n"); 
    } 
    else { 
        /* Display the date and time format  */ 
 
        printf("%s\n", nl_ptr); 
    } 
 
/* Get the full name for the first day of the week from locale */ 
   printf("DAY_1 = "); 
 
  /*  Compare the returned string from nl_langinfo with */ 
  /*  an empty string.                                  */ 
 
    if (!strcmp((nl_ptr = (char *) nl_langinfo(DAY_1)), "")) { 
 
  /* The string returned was empty this could mean that either */ 
  /*    1) The locale does not contain a value for the first   */ 
  /*       day of the week                                     */ 
  /*    2) The value for the first day of the week is          */ 
  /*       an empty string                                     */ 
 
        printf("nl_langinfo returned an empty string\n"); 
    } 
 
    else { 
     /* Display the full name of the first day of the week     */ 
 
        printf("%s\n", nl_ptr); 
    } 
/* Get the abbreviated name for the first day of the week 
                                                  from locale  */ 
 
    printf("ABDAY_1 = "); 
 
 /* Compare the returned string from nl_langinfo with an empty */ 
 /* string.                                                    */ 
 
    if (!strcmp((nl_ptr = (char *) nl_langinfo(ABDAY_1)), "")) { 
 
 /* The string returned was empty this could mean that either  */ 
 /*    1) The locale does not contain a value for the first    */ 
 /*       day of the week                                      */ 
 /*    2) The value for the first day of the week is an        */   
 /*       empty string                                         */ 
 
        printf("nl_langinfo returned an empty string\n"); 
    } 
 
    else { 
 
 /* Display the abbreviated name of the first day of the week  */ 
 
        printf("%s\n", nl_ptr); 
   } 
} 

上の例のプログラムを実行すると,次の結果が出力されます。


+----------------------------------------+ 
D_T_FMT = %a %e %b %H:%M:%S %Y 
DAY_1 = Sunday 
ABDAY_1 = Sun 


nrand48

一様分布の擬似乱数列を生成します。48 ビットの符号付き long 整数を返します。

形式

#include <stdlib.h>

long int nrand48 (unsigned short int xsubi[3]);


引数

xsubi

連結されたときに 48 ビット整数となる,3 つの short intの配列。

説明

nrand48関数は,線形合同法アルゴリズムと 48 ビット整数算術演算を使用して,擬似乱数を生成します。

nrand48関数は, 0 <= y < 231 の範囲内で一様に分布する,負でない long 整数を返します。

この関数は,次の線形合同式に従って,48 ビットの整数値 Xi のシーケンスを生成します。


       Xn+1 = (aXn+c)mod m        n >= 0 

引数 m は 248 に等しいので, 48 ビット整数算術演算が実行されます。 lcong48関数を呼び出さなかった場合,乗数値 a と加算される値 c は次のようになります。


      a = 5DEECE66D16 = 2736731631558
      c = B16 = 138

nrand48関数では,呼び出し元プログラムが, xsubi 引数として,最初の呼び出しの時点で擬似乱数列の初期値に初期化された配列を渡す必要があります。 drand48関数とは異なり,最初の呼び出しの前に初期化関数を呼び出す必要はありません。

nrand48では,異なる引数を使用することで,大きなプログラムの個々のモジュールが,複数の互いに独立した擬似乱数列を生成することができます。たとえば,1 つのモジュールが生成する乱数列は,関数が他のモジュールから呼び出された回数には依存しません。


戻り値

n 0 <= y < 2 31 の範囲で一様分布する,負でない long 整数を返します。


open

読み込み,書き込み,または編集のためにファイルをオープンします。ファイルの位置は先頭 (バイト 0) に設定されます。

形式

#include <fcntl.h>

int open (const char *file_spec, int flags, mode_t mode); (ANSI C)

int open (const char *file_spec, int flags, ...); (HP C Extension)


引数

file_spec

有効なファイル指定を含んでいる,null で終わる文字列。 file_spec でディレクトリを指定し,それがエラーを含んだ検索リストだった場合, HP C はそれをファイル・オープン・エラーとして解釈します。

flags

<file.h>ヘッダ・ファイルには以下の値が定義されています。

O_RDONLY 読み込み専用でオープンする
O_WRONLY 書き込み専用でオープンする
O_RDWR 読み書き用にオープンする
O_NDELAY 非同期入力用にオープンする
O_APPEND 各書き込みで追加する
O_CREAT 存在しない場合にはファイルを作成する
O_TRUNC このファイルの新しいバージョンを作成する
O_EXCL 既存のファイルの作成を試みた場合にはエラーとする

これらのフラグは,ビット論理和演算子 (|) で指定されたフラグを区切ることによって設定します。

O_APPENDを指定してファイルをオープンすると,ファイルに対する個々の書き込みはファイルの終端に付加されます ( 一方,VAX C RTL では,付加モードでファイルをオープンすると, EOF で書き込みが開始され,その後は現在のファイル位置に書き込みが行われていました )。

O_TRUNCが指定され,ファイルが存在していた場合, openはバージョン番号を 1 だけ増やして新しいファイルを作成し,古いバージョンはそのまま残します。

O_CREATが設定されており,指定されたファイルが存在しなかった場合, HP C RTL は 4 番目とそれ以降の引数 (...) で指定されたすべての属性を持つファイルを作成します。 O_EXCLO_CREATとともに設定されており,指定されたファイルが存在していた場合,オープンの試みはエラーを返します。

mode

ファイル保護モードを指定する符号なしの値。コンパイラは,モードと,現在の保護モードの補数に対してビット論理積演算を実行します。

モードは,ビット論理和演算子 (|) で指定されたモードを区切ることによって作成します。以下のモードがあります。

0400 OWNER:READ
0200 OWNER:WRITE
0100 OWNER:EXECUTE
0040 GROUP:READ
0020 GROUP:WRITE
0010 GROUP:EXECUTE
0004 WORLD:READ
0002 WORLD:WRITE
0001 WORLD:EXECUTE

システムには,オーナと同じアクセス特権が与えられます。 WRITE 特権は DELETE 特権も暗黙のうちに含んでいます。

...

オプションのファイル属性引数。ファイル属性引数は, creat関数で使用されるものと同じです。詳細については, creat関数を参照してください。

説明

ファイルの何らかのバージョンが存在する場合, openで作成された新しいファイルは, open呼び出しで指定されていない限り,特定の属性を既存のファイルから継承します。継承される属性は,レコード形式,最大レコード・サイズ,キャリッジ・コントロール,およびファイル保護です。

注意

  • ファイルに対するランダム書き込みを行う場合,ファイルは O_RDWRflags 値を指定することで,更新用にオープンしなくてはならない。

  • UNIX システム・コール関数 umask, mkdir, creat,および openを使って, OpenVMS RMS デフォルト保護を指定してファイルを作成するには, umaskを直接呼び出さないプログラムから, 0777 のファイル保護モード引数を使用して mkdir, creat, および openを呼び出す。これらのデフォルト保護では,ACL やファイルの前のバージョンなどに基づいて,保護が正しく設定される。
    vfork/ exec呼び出しを行うプログラムでは,新しいプロセス・イメージは, umaskが呼び出されたかどうかの状態を,呼び出し元のプロセス・イメージから継承します。 umask設定と, umask関数が呼び出されたかどうかの状態は,どちらも属性として継承されます。

creat, read, write, close, dup, dup2, および lseekも参照してください。


戻り値

x 負でないファイル記述子番号。
- 1 ファイルが存在しない,読み込みまたは書き込みから保護されている,またはその他の理由からオープンできないことを示します。



#include <unixio.h> 
#include <file.h> 
#include <stdlib.h> 
 
main() 
{ 
    int file, 
        stat; 
    int flags; 
 
    flags = O_RDWR;  /*  Open for read and write,            */ 
                     /*  with user default file protection,  */ 
                     /*  with max fixed record size of 2048, */ 
                     /*  and a block size of 2048 bytes.     */ 
 
file = open("file.dat", flags, 0, "rfm=fix", "mrs=2048", "bls=2048"); 
    if (file == -1) 
        perror("OPEN error"), exit(1); 
 
    close(file); 
} 


opendir

指定されたディレクトリをオープンします。

形式

#include <dirent.h>

DIR *opendir (const char *dir_name);


引数

dir_name

オープンするディレクトリの名前。

説明

opendir関数は, dir_name で指定されたディレクトリをオープンし,それにディレクトリ・ストリームを関連付けます。ディレクトリ・ストリームの位置は最初のエントリに設定されます。 <dirent.h>ヘッダ・ファイルに定義されている DIR型は,ディレクトリ・ストリームを表します。ディレクトリ・ストリームとは,特定のディレクトリの中のすべてのディレクトリ・エントリの順序付きのシーケンスです。

また, opendir関数は,それ以降の操作でディレクトリ・ストリームを識別するためのポインタも返します。 dir_name で指定されたディレクトリにアクセスできない場合,またはストリーム全体を保持するのに十分なメモリがない場合には, NULL ポインタが返されます。

注意

オープンされたディレクトリは,その次にディレクトリをオープンする試みが成功するように,必ず closedir関数でクローズされなくてはなりません。 opendir関数は, readdir, closedir, および rewinddir関数と組み合わせて,ディレクトリの内容を確認するために使用します。


closedirの項のプログラム例を参照してください。


戻り値

x DIR 型のオブジェクトへのポインタ。
NULL エラーを示します。 errno は以下のいずれかの値に設定されます。

  • EACCES--- dir_name のいずれかのコンポーネントに対する検索許可が拒否されたか, dir_name に対する読み込み許可が拒否された。

  • ENAMETOOLONG--- dir_name 文字列の長さが PATH_MAX を超えたか,パス名コンポーネントが NAME_MAX よりも長かった。

  • ENOENT--- dir_name 引数が,存在しないファイルの名前をポイントしているか,空の文字列である。


overlay

win1win2 に対して非破壊的にスーパインポーズします。この関数は,両方のウィンドウの開始座標を起点として, win1 の内容を win2 に書き込みます。 win1 上の空白は, win2 上の対応するスペースの内容を変更せずに残します。 overlay関数は,ウィンドウのボックスを可能な限りコピーします。

形式

#include <curses.h>

int overlay (WINDOW *win1, WINDOW *win2);


引数

win1

ウィンドウへのポインタ。

win2

ウィンドウへのポインタ。

戻り値

OK 成功を示します。
ERR 失敗を示します。


overwrite

win1 の内容を破壊的に win2 に書き込みます。

形式

#include <curses.h>

int overwrite (WINDOW *win1, WINDOW *win2);


引数

win1

ウィンドウへのポインタ。

win2

ウィンドウへのポインタ。

説明

overwrite関数は,両方のウィンドウの開始座標を起点として, win1 の内容を win2 に書き込みます。 win1 上の空白は,win2 上では空白として書き込まれます。この関数は,ウィンドウのボックスを可能な限りコピーします。

戻り値

OK 成功を示します。
ERR エラーを示します。


pathconf

ファイル・インプリメンテーション特性を取得します。

形式

#include <unistd.h>

long int pathconf (const char *path, int name);


引数

path

ファイルまたはディレクトリのパス名。

name

問い合わせる構成属性。この属性が,path 引数で指定されたファイルに適用不可能な場合, pathconf関数はエラーを返します。

説明

pathconf関数により,アプリケーションは, path で指定されたファイルの下にあるファイル・システムがサポートしている操作の特性を判定することができます。指定されたファイルの読み込み,書き込み,または実行許可は不要ですが,パス内の,そのファイルに至るまでのすべてのディレクトリを検索できる必要があります。

name 引数のためのシンボリック値は, <unistd.h>ヘッダ・ファイルに次のように定義されています。

_PC_LINK_MAX ファイルへのリンク数の最大値。 path 引数がディレクトリを参照している場合,返される値はディレクトリそのものに適用される。
_PC_MAX_CANON 正規入力行に含まれるバイト数の最大値。これはターミナル・デバイスにのみ適用される。
_PC_MAX_INPUT 入力キューに入れることができる型の数。これはターミナル・デバイスにのみ適用される。
_PC_NAME_MAX ファイル名に含まれるバイト数の最大値 (末尾の null を含まない)。バイト範囲の値は 13〜255 である。これはディレクトリ・ファイルにのみ適用される。返される値は,ディレクトリ内のファイル名に適用される。
_PC_PATH_MAX パス名に含まれるバイト数の最大値 (末尾の null を含まない)。この値はつねに 65,535 以下である。これはディレクトリ・ファイルにのみ適用される。返される値は,指定されたディレクトリがワーキング・ディレクトリである場合の相対パス名の長さの最大値である。
_PC_PIPE_BUF アトミックに書き込まれることが保証されるバイト数の最大値。これは FIFO にのみ適用される。返される値は参照先オブジェクトに適用される。 path 引数がディレクトリを参照している場合,返される値は,ディレクトリ内に存在する,または作成することができるすべての FIFO に適用される。
_PC_CHOWN_RESTRICTED これはディレクトリ・ファイルにのみ適用される。返される値は,ディレクトリ内に存在する,または作成することができるすべての (ディレクトリ以外の) ファイルに適用される。
_PC_NO_TRUNC NAME_MAX で許されるよりも長いコンポーネント名がエラーを引き起こす場合に, 1 を返す。長いコンポーネント名が切り捨てられる場合には,0 (ゼロ) を返す。これはディレクトリ・ファイルにのみ適用される。
_PC_VDISABLE これはつねに 0 (ゼロ) である。無効化文字は定義されない。これはターミナル・デバイスにのみ適用される。


戻り値

x name で指定された構成属性の,結果として得られた値。
- 1 エラーを示します。 errno は,以下のいずれかの値に設定されます。

  • EACCES--- パス接頭辞のコンポーネントに対して,検索許可が拒否された。

  • EINVAL--- name 引数は,未知の,または適用不可能な特性を指定している。

  • EFAULT--- path 引数は無効なアドレスである。

  • ENAMETOOLONG--- path 文字列の長さが PATH_MAX を超えている,またはパス名コンポーネントが NAME_MAX よりも長い。

  • ENOENT---指定されたファイルが存在しない,または path 引数が空の文字列をポイントしている。

  • ENOTDI--- path 接頭辞のコンポーネントはディレクトリではない。


前へ 次へ 目次 索引