HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
プロセスの現在の優先度を基準とし,引数で指定されたレベルだけ優先度を増減します。この関数は非リエントラントです。
#include <unistd.h>int nice (int increment);
increment
正の引数は,優先度を下げます。負の引数は,優先度を上げます。 nice(0)を発行すると,基本の優先度に戻されます。結果として得られる優先度は,1 よりも小さくてはならず,プロセスの基本優先度よりも高くてはなりません。この条件が満たされなければ, nice関数は何の処理も行いません。
プロセスが vfork関数を呼び出した場合,結果として作成される子プロセスは親の優先度を継承します。DECC$ALLOW_UNPRIVILEGED_NICE 機能論理名が有効になっている場合, nice関数は従来の動作を行い,呼び出し元プロセスの権限をチェックしません (つまり,任意のユーザが, nice値を小さくして,プロセスの優先度を高くすることができます)。また,呼び出し元が MAX_PRIORITY を超える優先度を設定した場合, nice値には,基本の優先度が設定されます。
DECC$ALLOW_UNPRIVILEGED_NICE が無効になっている場合, nice関数は X/Open 標準に従い,呼び出し元プロセスの権限をチェックします (ALTPRI 特権を持つユーザだけが nice値を小さくし,プロセスの優先度を高くすることができます)。また,呼び出し元が MAX_PRIORITY を超える優先度を設定した場合, nice値には MAX_PRIORITY が設定されます。
vforkも参照してください。
0 成功を示します。 - 1 失敗を示します。
引数に最も近い整数値を返します。
#include <math.h>double nint (double x);
float nintf (float x,);
long double nintl (long double x);
x
実数。
nint関数は,x に最も近い整数値を返します。中間の値は,x よりも絶対値が大きい整数値に丸められます。この関数は Fortran の汎用組み込み関数 nintに対応します。
n x に最も近い整数値。 NaN x は NaN です。 errno は EDOM に設定されます。
nlおよび nonl関数は, UNIX ソフトウェアとの互換性のためにのみ用意されており, OpenVMS 環境では機能を持ちません。
#include <curses.h>void nl (void);
void nonl (void);
プログラムのカレント・ロケールから取得された情報を含んでいる文字列へのポインタを返します。
#include <langinfo.h>char *nl_langinfo (nl_item item);
item
必要な情報を指定する定数の名前。これらの定数は <langinfo.h>に定義されています。以下の定数が有効です。
定数 カテゴリ 説明 D_T_FMT LC_TIME 日付と時刻をフォーマットするための文字列 D_FMT LC_TIME 日付をフォーマットするための文字列 T_FMT LC_TIME 時刻をフォーマットするための文字列 T_FMT_AMPM LC_TIME AM/PM 文字列を含む時刻フォーマット AM_STR LC_TIME AM を 12 時間制で表現する文字列 PM_STR LC_TIME PM を 12 時間制で表現する文字列 DAY_1 LC_TIME 週の最初の曜日の名前 ... DAY_7 LC_TIME 週の 7 番目の曜日の名前 ABDAY_1 LC_TIME 週の最初の曜日の短縮名 ... ABDAY_7 LC_TIME 週の 7 番目の曜日の短縮名 MON_1 LC_TIME 年の最初の月の名前 ... MON_12 LC_TIME 年の 12 番目の月の名前 ABMON_1 LC_TIME 年の最初の月の短縮名 ... ABMON_12 LC_TIME 年の 12 番目の月の短縮名 ERA LC_TIME Epoch の記述文字列 ERA_D_FMT LC_TIME Epoch の日付フォーマット文字列 ERA_T_FMT LC_TIME Epoch の時刻フォーマット ERA_D_T_FMT LC_TIME Epoch の日付と時刻のフォーマット ALT_DIGITS LC_TIME 数字の代替シンボル RADIXCHAR LC_NUMERIC 基数文字 THOUSEP LC_NUMERIC 非金額値で桁のグループを区切るために使われる文字 YESEXP LC_MESSAGES yes/no の質問に対する肯定的な応答の表現 NOEXP LC_MESSAGES yes/no の質問に対する否定的な応答の表現 CRNCYSTR LC_MONETARY 通貨シンボル。次のいずれかが前に置かれる:
- シンボルを値の前に置く場合にはマイナス ( - )
- シンボルを値の後に置く場合にはプラス (+)
- シンボルが基数文字を置き換える場合にはピリオド (.)
CODESET LC_CTYPE コードセット名
現在のロケールに言語情報が定義されていない場合,関数は C ロケールから情報を返します。プログラムは,この関数から返された文字列を変更するべきではありません。この文字列は,後の nl_langinfoの呼び出しによって上書きされることがあります。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
一様分布の擬似乱数列を生成します。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 整数を返します。
読み込み,書き込み,または編集のためにファイルをオープンします。ファイルの位置は先頭 (バイト 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 はそれをファイル・オープン・エラーとして解釈します。file_spec パラメータの指しているファイルがシンボリック・リンクである場合は,そのシンボリック・リンクで参照されているファイルをオープンします。
flags
<fcntl.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_EXCLが O_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_RDWRの flags 値を指定することで,更新用にオープンしなくてはならない。
- 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 <fcntl.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); }
| 前へ | 次へ | 目次 | 索引 |