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


前へ 次へ 目次 索引


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


International Currency Symbol = GBP 
International Fractional Digits = 2 


localtime, localtime_r

時刻値を,分割されたローカル時刻に変換します。

形式

#include <time.h>

struct tm *localtime (const time_t *timer);

struct tm *localtime_r (const time_t *timer, struct tm *result); (ISO POSIX-1)

関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS バージョン 7.0 より前の動作と等価な, localtime_r関数へのローカル時刻ベースのエントリ・ポイントが使用可能となります。

引数

timer

Epoch 後の経過秒数へのポインタ。この時刻は, time関数を使って生成することも,独自に指定することもできます。

result

結果が格納される tm構造体へのポインタ。 tm構造体は <time.h>ヘッダ・ファイルに定義されており, 表 REF-4 にも示しています。

説明

localtimeおよび localtime_r関数は, timer によって指定された時刻 (Epoch 後の経過秒数) を,ローカル時刻で表現される分割された時刻に変換し, tm構造体に格納します。

localtime_r関数と localtime関数の違いは,前者が結果をユーザ指定の tm構造体に格納することです。後者は結果を HP C RTL によって割り当てられたスレッド固有の静的メモリに格納します。これは,後の localtimeの呼び出しによって上書きされるので,保存しておきたい場合にはコピーを作成する必要があります。

実行に成功すると, localtimetm構造体へのポインタを返し, localtime_rはその第 2 引数を返します。実行に失敗すると,これらの関数は NULL ポインタを返します。

tm構造体は <time.h>ヘッダ・ファイルに定義されており, 表 REF-4 にも示しています。

表 REF-4 tm 構造体
int tm_sec ; 秒 (0-60)
int tm_min ; 分 (0-59)
int tm_hour ; 時 (0-23)
int tm_mday ; 日 (1-31)
int tm_mon ; 月 (1-11)
int tm_year ; 1900 年を基準とした年
int tm_wday ; 日曜日を基準とした曜日 (0-6)
int tm_yday ; 1 月 1 日からの日数 (0-365)
int tm_isdst ; サマータイム・フラグ

  • tm_isdst = 0 標準

  • tm_isdst = 1 サマータイム

long tm_gmtoff ;1 グリニッチ標準時からの東へのずれの秒数 ( 負の値はグリニッチ標準時からの西へのずれの秒数を示す )
char * tm_zone ;1 タイム・ゾーン文字列。例: "GMT"


1このフィールドは ANSI C 構造体の拡張です。このフィールドは,プログラムのコンパイルの際に /STANDARD=ANSI89 を指定するか, _DECC_V4_SOURCE を定義した場合には存在しません。

time_t型は, <time.h>ヘッダ・ファイルに,次のように定義されています。


typedef long int time_t 

注意

一般に,UTC ベースの時刻関数は,全プロセス的なデータであるメモリ内のタイム・ゾーン情報に影響を与えることがあります。ただし,アプリケーションの実行中にシステム・タイム・ゾーンが変化せず ( 通常は変化しません ),タイム・ゾーン・ファイルのキャッシュが有効になっていれば (デフォルトの設定),時刻関数の _rバリアント, asctime_rctime_rgmtime_r,および localtime_rは,スレッドセーフかつ AST リエントラントとなります。

ただし,アプリケーションの実行中にシステム・タイム・ゾーンが変化する可能性がある場合,またはタイム・ゾーン・ファイルのキャッシュが有効になっていない場合には, UTC ベースの時刻関数の両方のバリアントは,スレッドセーフでも AST リエントラントでもない第 3 クラスの関数に属します。


戻り値

x tm 構造体へのポインタ。
NULL 失敗を示します。


log, log2, log10

引数の対数を返します。

形式

#include <math.h>

double log (double x);

float logf (float x); (Alpha only)

long double logl (long double x); (Alpha only)

double log2 (double x); (Alpha only)

float log2f (float x); (Alpha only)

long double log2l (long double x); (Alpha only)

double log10 (double x);

float log10f (float x); (Alpha only)

long double log10l (long double x); (Alpha only)


引数

x

実数。

説明

log関数は,x の自然対数 (底 e) を計算します。

log2関数は,x の底 2 の対数を計算します。

log10関数は,x の常用対数 (底 10) を計算します。


戻り値

x 引数の (それぞれの底の) 対数。
- HUGE_VAL x は 0 ( errno は ERANGE に設定されます),または負の値 ( errno は EDOM に設定されます) です。
NaN x は NaN です。 errno は EDOM に設定されます。


log1p (Alpha only)

ln(1+y) を正確に計算します。

形式

#include <math.h>

double log1p (double y);

float log1pf (float y);

long double log1pl (long double y);


引数

y

- 1 よりも大きい実数。

説明

log1p関数は,y が小さい値である場合でも, ln(1+y) を正確に計算します。

戻り値

x (1+ y) の自然対数。
- HUGE_VAL y は - 1 よりも小さい ( errno は EDOM に設定されます),または y = - 1 ( errno は ERANGE に設定されます) です。
NaN y は NaN です。 errno は EDOM に設定されます。


logb (Alpha only)

引数の基底に依存しない指数を返します。

形式

#include <math.h>

double logb (double x);

float logbf (float x);

long double logbl (long double x);


引数

x

ゼロでない実数。

説明

logb関数は,ゼロでない x に対し, x の指数部,すなわち log2|x| の整数部を符号付き浮動小数点値として返します。

戻り値

x x の指数。
- HUGE_VAL x = 0.0; errno は EDOM に設定されます。
+Infinity x は +Infinity または - Infinity です。
NaN y は NaN です。 errno は EDOM に設定されます。


longjmp

ネストした一連の関数呼び出しから,通常の方法を使わずに,つまり一連の return文を使用せずに,定義済みのポイントに制御を戻すための手段を提供します。 longjmp関数は,環境バッファのコンテキストを復元します。

形式

#include <setjmp.h>

void longjmp (jmp_buf env, int value);


引数

env

環境バッファ。呼び出し元の関数のレジスタ・コンテキストを保持するのに十分な長さを持つ整数の配列でなくてはなりません。 jmp_buf型は <setjmp.h>ヘッダ・ファイルに定義されています。バッファには,プログラム・カウンタ (PC) を含む汎用レジスタの内容が格納されます。

value

longjmpから setjmpに渡され,後の setjmp呼び出しの戻り値になります。渡された value が 0 だった場合には,1 に変換されます。

説明

setjmpは,初めて呼び出されたときには値 0 を返します。その後, setjmpの呼び出しと同じ環境を指定して longjmpを呼び出すと,制御は通常どおりに返ったかのように再び setjmp呼び出しに戻されます。この 2 回目のリターンにおける setjmpの戻り値は, longjmp呼び出しで指定された value です。 setjmpの真の値を保存するためには,対応する longjmpが呼び出されるまで, setjmpを呼び出す関数を再び呼び出さないようにする必要があります。

setjmp関数はハードウェア汎用レジスタを保存し, longjmp関数はそれらを復元します。 longjmpの後には, volatileとしてマークされていないローカル自動変数を除くすべての変数が, longjmpの時点の値を持つようになります。 volatileとしてマークされていないローカル自動変数の値は不定です。

setjmpおよび longjmp関数は, OpenVMS 条件処理機能を使用して,シグナル・ハンドラによる非ローカル goto を実現します。 longjmp関数は, HP C RTL 指定のシグナルを生成し, OpenVMS 条件処理機能がデスティネーションに戻れるようにすることでインプリメントされています。 HP C RTL は,任意の HP C イメージのシグナル処理を制御できなくてはなりません。

HP C がシグナル処理を制御できるようにするためには,すべての例外処理を ( LIB$ESTABLISHではなく) VAXC$ESTABLISH関数の呼び出しを通して設定しなくてはなりません。詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2.5 項と, VAXC$ESTABLISH関数を参照してください。

注意

Alpha 固有の非標準的な decc$setjmpおよび decc$fast_longjmp関数が用意されています。標準関数の代わりにこれらの非標準関数を使用するためには,プログラムを __FAST_SETJMPまたは __UNIX_SETJMPマクロを定義してコンパイルする必要があります。

標準の longjmp関数とは異なり, decc$fast_longjmp関数は第 2 引数を 0 から 1 に変換しません。 decc$fast_longjmpの呼び出しの後,対応する setjmp関数は, decc$fast_longjmp呼び出しで指定された第 2 引数とまったく同じ値で返ります。


制限事項

OpenVMS 条件ハンドラから longjmp関数を呼び出すことはできません。ただし,以下のネスト制約の範囲内で, HP C RTL がサポートしている任意のシグナルに対して確立されたシグナル・ハンドラから longjmpを呼び出すことができます。


longname

ターミナルのフル・ネームを返します。

形式

#include <curses.h>

void longname (char *termbuf, char *name);

関数バリアント longname関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _longname32_longname64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。

引数

termbuf

ターミナルの名前を含んでいる文字列。

name

64 文字以上の長さを持つ文字列バッファ。

説明

ターミナル名は可読形式なので,Curses がターミナルを正しく識別したかどうかをダブル・チェックすることができます。仮引数の termbuf は UNIX ソフトウェアとの互換性のために必要なもので,OpenVMS 環境では何の機能も持っていません。移植性が重要な場合は, UNIX システム環境でデータベース termcapが提供している機能を実行するダミー・ルーチンのセットを作成する必要があります。

lrand48

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

形式

#include <stdlib.h>

long int lrand48 (void);


説明

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

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

lrand48関数を呼び出す前に, srand48seed48,または lcong48を使用して乱数ジェネレータを初期化してください。初期化は lrand48関数を呼び出す前に行わなくてはなりません。 lrand48は,生成された最後の 48 ビットの Xi を内部バッファに格納するからです ( これは推奨はされませんが, drand48lrand48,または mrand48関数が,初期化関数を呼び出すことなく呼び出された場合には,定数のデフォルト・イニシアライザ値が自動的に提供されます )。

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


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

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


      a = 5DEECE66D16 = 2736731631558
      c = B16 = 138

lrand48関数から返される値は,まずシーケンス内の次の 48 ビット Xi を生成することによって計算されます。その後,返されるデータ項目の型に応じて,適切なビットが Xi の最上位ビットからコピーされ,戻り値に変換されます。

drand48lcong48mrand48seed48,および srand48も参照してください。


戻り値

n 0 <=y < 2 31 の範囲で一様分布する,符号付きの負でない long 整数。


前へ 次へ 目次 索引