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


前へ 次へ 目次 索引


アクセス・コールバック・ルーチンが確立された後,このルーチンは, RMS 関数 sys$create または sys$open を呼び出す直前に,オープン・タイプのルーチンで呼び出されます。エラー・コールバック・ルーチンが確立され, sys$create または sys$open 関数からエラー状態が返された場合は,状態が確認され,エラー値が検出された直後に,コールバック・ルーチンが呼び出されます。

注意

コールバック関数で RAB または FAB を操作すると,その後の HP C RTL I/O 関数の呼び出しで重大な問題が発生する可能性があります。

表 REF-3 は RMS キーワードと値を示しています。

表 REF-3 RMS の有効なキーワードと値
キーワード 説明
"acc" コールバック アクセス・コールバック・ルーチン。
"alq = n" 10 進数 割り当て数量。
"bls = n" 10 進数 ブロック・サイズ。
"ctx = bin" 文字列 '\n' を変換せずに端末に出力する。バイナリ・データをファイルに書き込むときはこのキーワードを使用する。
"ctx=cvt" 文字列 "ctx=nocvt" の前の設定を否定する。これはデフォルトである。
"ctx = nocvt" 文字列 Fortran のキャリッジ制御バイトを変換しない。
"ctx = rec" 文字列 レコード・モード・アクセスを強制する。
"ctx = stm" 文字列 ストリーム・モード・アクセスを強制する。
"ctx=xplct" 文字列 fflush close fclose の呼び出しによって明示的に指定された場合にだけ,レコードを書き込む。
"deq = n" 10 進数 デフォルトの拡張数量。
"dna = filespec" 文字列 デフォルトのファイル名文字列。
"err" コールバック エラー・コールバック・ルーチン。
"fop = val, val ,..."   ファイル処理オプション:
  ctg
cbt
dfw

dlt
tef
cif
sup
scf
spl
tmd
tmp
nef
rck
wck
mxv
rwo
pos
rwc
sqo
連続。
連続最適トライ。
遅延書き込み。共用アクセスのためにオープンされたファイルにだけ適用される。
クローズ時にファイルを削除する。
EOF で切り捨てる。
存在しない場合は作成する。
現在は使用されていない。
クローズ時にコマンド・ファイルとしてサブミットする。
クローズ時にシステム・プリンタにスプールする。
一時的に削除する。
一時的 (ファイル・ディレクトリでない)。
EOF でない。
読み込みチェック比較操作。
書き込みチェック比較操作。
バージョン番号を最大にする。
オープン時にファイルを巻き戻す。
現在の位置。
クローズ時にファイルを巻き戻す。
ファイルは順次処理だけが可能である。
"fsz = n" 10 進数 固定ヘッダ・サイズ。
"gbc = n" 10 進数 ファイルに対して要求されたグローバル・バッファの数。
"mbc = n" 10 進数 マルチブロック・カウント。
"mbf = n" 10 進数 マルチバッファ・カウント。
"mrs = n" 10 進数 最大レコード・サイズ。
"pmt=usr-prmpt" 文字列 端末入力を促すプロンプト。このオプションと "rop=pmt" が指定されている場合は,端末デバイスからの RMS 入力の前に "usr-prmpt" が付加される。
"rat = val, val..."   レコード属性:
  cr
blk
ftn
none
prn
キャリッジ・リターン制御。
レコードがブロック境界にまたがることを禁止する。
Fortran プリント制御。
明示的にキャリッジ制御なしを強制する。
ファイル・フォーマットをプリントする。
"rfm = val"   レコード・フォーマット:
  fix
stm
stmlf
stmcr

var
vfc
udf
固定長レコード・フォーマット。
RMS ストリーム・レコード・フォーマット。
改行区切り文字付きストリーム・フォーマット。
キャリッジ・リターン区切り文字付きストリーム・フォーマット。
可変長レコード・フォーマット。
固定長制御部付き可変長レコード。
未定義。
"rop = val, val..."   レコード処理操作:
  asy 非同期 I/O。
  cco Ctrl/O をキャンセルする (端末 I/O で使用)。
  cvt 端末からの読み込み時に文字を大文字に変換する。
  eof 接続操作の場合のみ,レコード・ストリームを EOF に設定する。
  nlk レコードをロックしない。
  pmt 端末からの入力時に "pmt=usr-prmpt" によって指定されるプロンプトの使用を有効にする。
  pta 端末からの読み込み時に先読みバッファの情報を消去する。
  rea このプロセスに対して読み込み操作のためにレコードをロックするが,他のプロセスがレコードを読み込むことは許可する。
  rlk 書き込みのためにレコードをロックする。
  rne キーボードからの入力時に,入力データの画面表示を行わない。
  rnf 端末入力で Ctrl/U,Ctrl/R,DELETE が制御コマンドとして解釈されないが,アプリケーション・プログラムに渡されることを示す。
  rrl ロックとは無関係に読み込む。
  syncsts 要求されたサービスがタスクをただちに完了したときに,RMS$_SYNCH という正常終了状態を返す。
  tmo I/O 時間切れ。
  tpt 順次レコード・アクセス・モードを使用する put/write サービスがファイルの任意のポイントで発生することを許可し,そのポイントでファイルを切り捨てる。
  ulk RMS が自動的にレコードのロックを解除することを禁止する。
  wat レコードが現在別のストリームによってロックされている場合,そのレコードが使用可能になるまで待つ。
  rah 先読みする。
  wbh 後書きする。
"rtv=n" 10 進数 RMS がメモリ内で管理しなければならない検索ポインタの数 (0〜127,255)。
"shr = val, val, ..."   ファイル共用オプション:
  del
get
mse
nil
put
upd
upi
nql
ユーザによる削除を許可する。
ユーザによる読み込みを許可する。
マルチストリーム接続を許可する。
ファイルの共用を禁止する。
ユーザによる書き込みを許可する。
ユーザによる更新を許可する。
1 人以上のユーザによる書き込みを許可する。
クエリ・ロックを行わない (ファイル・レベル)。
"tmo = n" 10 進数 I/O 時間切れの値。

これらのオプションの他に,キー値を受け付けるオプション ("fop" や "rat" など) は,値の前に "no" を付けることにより否定することができます。たとえば, "fop=notmp" と指定すると, "fop" フィールドの "tmp" ビットがクリアされます。

注意

  • これらのオプションは柔軟性と機能性を向上しますが,多くのオプションは,正しく使用しないと,重大な問題を引き起こす危険性があります。

  • デフォルトの HP C for OpenVMS ストリーム・ファイル I/O を共用することはできません。ファイルを共用する場合は,"ctx=rec" を指定して,強制的にレコード・アクセス・モードに設定する必要があります。また,目的のアクセス・タイプに応じて,適切な "shr" オプションも指定しなければなりません。

  • 追加のためにオープンされているファイルを共用する場合は,適切な共用オプションとレコード・ロック・オプションを指定して,同じファイルにアクセスする他のプロセスがレコードを読み込むことができるようにしなければなりません。この処理が必要なのは, EOF に到達するまでレコードをループで読み込むことにより,ファイルが EOF の位置に設定されるからです。

これらのオプションの詳細については,『 OpenVMS Record Management Services Reference Manual 』を参照してください。


説明

HP C RTL は読み込みと書き込みのために新しいファイルをオープンし,対応するファイル記述子を返します。

ファイルが存在する場合:

ファイルが存在しない場合:

このセクションの openclosereadwritelseekも参照してください。


戻り値

n ファイル記述子。
- 1 保護違反,未定義ディレクトリ,ファイル属性の競合などのエラーを示します。


[no]crmode

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が呼び出されているからです。


ctermid

SYS$COMMAND の同値文字列を与える文字列を返します。これは制御端末の名前です。

形式

#include <stdio.h>

char *ctermid (char *str);

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

引数

str

文字配列を指すポインタ。この引数が NULL の場合は,ファイル名は内部的に格納され,次に ctermidを呼び出したときに上書きされます。NULL 以外の場合は,ファイル名は引数によって示される位置から始まる場所に格納されます。引数は L_ctermid( <stdio.h>ヘッダ・ファイルで定義) の長さの記憶域を示さなければなりません。

戻り値

ポインタ 文字列を指すポインタ。


ctime, ctime_r

1970 年 1 月 1 日 00:00:00 からの経過時間 (秒数) を, asctime関数で生成される形式の ASCII 文字列に変換します。

形式

#include <time.h>

char *ctime (const time_t *bintim);

char *ctime_r (const time_t *bintim, char *buffer); (ISO POSIX-1)

関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS バージョン 7.0 より前の動作に相当するこの関数のローカル・タイム・ベースのエントリ・ポイントが有効になります。

引数

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_rctime_rgmtime_rlocaltime_r_rバリアントはスレッド・セーフで,かつ AST リエントラントです。

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


戻り値

x 正常終了した場合は, 26 文字の ASCII 文字列を指すポインタ。
NULL 異常終了を示します。


前へ 次へ 目次 索引