HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
これらのオプションの他に,キー値を受け付けるオプション ("fop" や "rat" など) は,値の前に "no" を付けることにより否定することができます。たとえば, "fop=notmp" と指定すると, "fop" フィールドの "tmp" ビットがクリアされます。
|
これらのオプションの詳細については,『『OpenVMS Record Management Services Reference Manual』』を参照してください。
HP C RTL は読み込みと書き込みのために新しいファイルをオープンし,対応するファイル記述子を返します。ファイルが存在する場合:
- 既存のバージョンより 1 だけ大きいバージョン番号が新規作成されたファイルに割り当てられます。
- デフォルト設定により,新しいファイルは既存のファイル・バージョンから特定の属性を継承します。ただし, creat呼び出しに指定された属性は継承しません。次の属性が継承されます。
- レコード・フォーマット (FAB$B_RFM)
- 最大レコード・サイズ (FAB$W_MRS)
- キャリッジ制御 (FAB$B_RAT)
- ファイル保護
- 新しいバージョンのファイルを作成するときに,そのファイルと同じ名前のシンボリック・リンクがすでに存在していると,そのシンボリック・リンクが参照しているファイルが作成されます。
ファイルが存在しない場合:
- mode 引数および現在の保護マスクの補数に対してビット単位の AND を実行することにより作成されるファイル保護が与えられます。
- デフォルト設定により,ライン・フィード・レコード・セパレータと暗黙のキャリッジ・リターン属性が割り当てられたストリーム・フォーマットが設定されます。
このセクションの open, close, read, write, lseekも参照してください。
n ファイル記述子。 - 1 保護違反,未定義ディレクトリ,ファイル属性の競合などのエラーを示します。
UNIX システム環境では, crmode関数と nocrmode関数は端末を cbreak モードに設定するか,または設定を解除します。cbreak モードでは, Return を処理せずに 1 文字の入力文字を処理することができます。このシングル文字入力モードは Curses 入力ルーチン getchでのみサポートされます。
#include <curses.h>crmode()
nocrmode()
/* Program to demonstrate the use of crmod() and curses */ #include <curses.h> main() { WINDOW *win1; char vert = '.', hor = '.', str[80]; /* Initialize standard screen, turn echo off. */ initscr(); noecho(); /* Define a user window. */ win1 = newwin(22, 78, 1, 1); /* Turn on reverse video and draw a box on border. */ setattr(_REVERSE); box(stdscr, vert, hor); mvwaddstr(win1, 2, 2, "Test cbreak input"); refresh(); wrefresh(win1); /* Set cbreak, do some input, and output it. */ crmode(); getch(); nocrmode(); /* Turn off cbreak. */ mvwaddstr(win1, 5, 5, str); mvwaddstr(win1, 7, 7, "Type something to clear the screen"); wrefresh(win1); /* Get another character, then delete the window. */ getch(); wclear(win1); touchwin(stdscr); endwin(); }
この例では, getchの最初の呼び出しは, 1 文字が入力されるとただちに戻ります。これは, getchが呼び出される前に, crmodeが呼び出されているからです。 getchの 2 回目の呼び出しでは,入力された文字を処理する前に,Return キーが押されるのを待ちます。これは, getchの 2 回目の呼び出しの前に, nocrmodeが呼び出されているからです。
パスワードを暗号化します。
#include <unistd.h>関数バリアント crypt関数には,2 つのバリアントがあります。 1 つは,ポインタのサイズが 32 ビットの _crypt32で,もう 1 つは,ポインタのサイズが 64 ビットの _crypt64です。ポインタのサイズに合わせた専用関数の詳細な使用方法については,第 1.10 節を参照してください。#include <stdlib.h>
char *crypt (const char *key, const char *salt;)
key
ユーザの入力したパスワード。salt
2 文字からなる文字列。
crypt関数は,エンコード (つまり暗号化) されたパスワードを生成します。暗号化の方法は NBS Data Encryption Standard をベースにしていますが, DES をハードウェア化してもキーを見つけるのが困難になるように強化されています。特別なことがない限り, cryptの第 1 引数はユーザが入力したパスワードです。第 2 引数 (salt) は,[a-zA-Z0-9./] から選択された 2 文字の文字列です。最初に,salt の文字列を使用して DES のアルゴリズムが攪乱されます (攪乱には 4096 通りの方法があって,その中の 1 つを選択するために salt が使用されます)。次に,パスワードをキーにして定数文字列が繰り返し暗号化されます。戻り値はポインタになっていて,暗号化されたパスワードを指しています。暗号化されたパスワードは salt と同じようにアルファベットで表されており,最初の 2 文字が salt と同じ文字列になっています。
cryptから返される値は静的なデータ領域を指していますが,その内容は,この関数を呼び出すたびに上書きされます。
encryptと setkeyも参照してください。
pointer 暗号化されたパスワードを指すポインタ。
引数 (複素数) の正弦を返します。
#include <complex.h>double complex csin (double complex z);
float complex csinf (float complex z);
long double complex csinl (long double complex z);
z
複素数値。
csin関数は,複素数 z の正弦値を計算します。
x 複素数の正弦値。
引数 (複素数) の双曲線正弦を返します。
#include <complex.h>double complex csinh (double complex z);
float complex csinhf (float complex z);
long double complex csinhl (long double complex z);
z
複素数値。
csinh関数は,複素数 z の双曲線正弦を計算します。
x 複素数の双曲線正弦値。
引数 (複素数) の平方根を返します。
#include <complex.h>double complex csqrt (double complex z);
float complex csqrtf (float complex z);
long double complex csqrtl (long double complex z);
z
複素数値。
csqrt関数は,実軸上の負の領域に分岐線法を適用して,複素数 z の平方根を計算します。
x 複素数の平方根値。この値は,右側の半平面 (虚軸を含む範囲) にあります。
引数 (複素数) の正接を返します。
#include <complex.h>double complex ctan (double complex z);
float complex ctanf (float complex z);
long double complex ctanl (long double complex z);
z
複素数値。
ctan関数は,複素数 z の正接値を計算します。
x 複素数の正接値。
引数 (複素数) の双曲線正接を返します。
#include <complex.h>double complex ctanh (double complex z);
float complex ctanhf (float complex z);
long double complex ctanhl (long double complex z);
z
複素数値。
ctanh関数は,複素数 z の双曲線正接値を返します。
x 複素数の双曲線正接値。
SYS$COMMAND の等価文字列を与える文字列を返します。これは制御端末の名前です。
#include <stdio.h>関数バリアント ctermid関数には, _ctermid32および _ctermid64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *ctermid (char *str);
str
文字配列を指すポインタ。この引数が NULL の場合は,ファイル名は内部的に格納され,次に ctermidを呼び出したときに上書きされます。NULL 以外の場合は,ファイル名は引数によって示される位置から始まる場所に格納されます。引数は L_ctermid( <stdio.h>ヘッダ・ファイルで定義) の長さの記憶域を示さなければなりません。
ポインタ 文字列を指すポインタ。
1970 年 1 月 1 日 00:00:00 からの経過時間 (秒数) を, asctime関数で生成される形式の ASCII 文字列に変換します。
#include <time.h>関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS Version 7.0 より前の動作に相当するこの関数のローカル・タイム・ベースのエントリ・ポイントが有効になります。char *ctime (const time_t *bintim);
char *ctime_r (const time_t *bintim, char *buffer); (ISO POSIX-1)
bintim
変換する時間値 (秒数) を指定する変数を指すポインタ。buffer
長さが 26 バイト以上の文字列の配列を指すポインタ。この配列は,生成された日付/時刻文字列を格納するために使用されます。
ctime関数と ctime_r関数は, bintimによって示される時刻を 26 文字の文字列に変換し,この文字列を指すポインタを返します。ctime_r関数と ctime関数の相違点は, ctime_r関数が結果をユーザ指定バッファに格納するのに対し, ctime関数は HP C RTL によって割り当てられたスレッド固有の静的メモリに結果を格納する点です。 ctimeまたは asctimeを再び呼び出すと,スレッド固有の静的メモリに格納されている結果は上書きされる可能性があります。結果を保存する必要がある場合は,コピーを作成しなければなりません。
正常終了すると, ctimeは文字列を指すポインタを返します。 ctime_rは 2 番目の引数を返します。異常終了すると,これらの関数は NULL ポインタを返します。
time_t型は,次に示すように <time.h>ヘッダ・ファイルに定義されています。
typedef long int time_t
ctime関数は, tzsetを呼び出したかのように動作します。
注意
一般に,UTC ベースの時刻関数は,プロセス単位のデータであるメモリ内のタイム・ゾーン情報に影響を与える可能性があります。しかし,アプリケーションの実行中,システム・タイム・ゾーンが変化せず (これは一般的なケースです),タイム・ゾーン・ファイルのキャッシュが有効に設定されている場合 (これはデフォルトです),時刻関数 asctime_r, ctime_r, gmtime_r, localtime_rの _rバリアントはスレッド・セーフで,かつ AST リエントラントです。しかし,アプリケーションの実行中にシステム・タイム・ゾーンが変化する可能性がある場合や,タイム・ゾーン・ファイルのキャッシュが有効に設定されていない場合は, UTC ベースの時刻関数のバリアントはいずれも第 3 の関数クラスに属し,これはスレッド・セーフでも AST リエントラントでもありません。
x 正常終了した場合は, 26 文字の ASCII 文字列を指すポインタ。 NULL 異常終了を示します。
現在のプロセスを開始したユーザの名前を格納した文字列を指すポインタを返します。
#include <unistd.h> (X/Open, POSIX-1)関数バリアント cuserid関数には, _cuserid32および _cuserid64という名前のバリアントがあり,それぞれ 32 ビット・ポインタ・サイズおよび 64 ビット・ポインタ・サイズで使用されます。ポインタ・サイズ固有の関数の使い方の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。#include <stdio.h> (X/Open)
char *cuserid (char *str);
str
この引数が NULL の場合は,ユーザ名は内部的に格納されます。引数が NULL でない場合は,長さが L_cuserid( <stdio.h>ヘッダ・ファイルで定義) の記憶域を指すポインタであり,名前はその記憶域に格納されます。ユーザ名がヌル文字列の場合は,NULL を返します。
ポインタ 文字列を指すポインタ。 NULL ユーザ名がヌル文字列の場合。
この関数を使用すると,他の言語から HP C RTL を呼び出したり,メイン関数が C で作成されていないときに HP C RTL を使用することができます。この関数は実行時環境を初期化し,終了ハンドラと条件ハンドラの両方を設定します。 VAXC$CRTL_INITは DECC$CRTL_INITの同意語です。どちらの名前も同じルーチンを起動します。
#include <signal.h>void DECC$CRTL_INIT(void);
次の例は, DECC$CRTL_INIT関数を使用して HP C RTL を呼び出す Pascal プログラムを示しています。
$ PASCAL EXAMPLE1 $ LINK EXAMPLE1 $ TY EXAMPLE1.PAS PROGRAM TESTC(input, output); PROCEDURE DECC$CRTL_INIT; extern; BEGIN DECC$CRTL_INIT; END
共用可能イメージでこの関数を呼び出す必要があるのは,そのイメージにシグナル処理,環境変数,I/O,終了処理,デフォルト・ファイル保護マスクのための HP C 関数が含まれている場合や,コンテキストを継承する子プロセスである場合だけです。
初期化処理の多くは 1 回だけ実行されますが, DECC$CRTL_INITは複数回呼び出しても安全です。OpenVMS VAX システムでは, DECC$CRTL_INITは, DECC$CRTL_INITが呼び出されるたびに DECC$CRTL_INITを呼び出すルーチンのフレーム内で, HP C RTL の内部 OpenVMS 例外ハンドラを設定します。
現在の呼び出しスタック内の少なくとも 1 つのフレームで, UNIX シグナルにマッピングされる OpenVMS 例外に対してハンドラが設定されている必要があります。
| 前へ | 次へ | 目次 | 索引 |