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


前へ 次へ 目次 索引


モード引数と, umaskによって設定されたファイル保護マスクの組み合わせから得られるファイル保護は,(0444) & ~(0000),すなわち 0444 です。この保護に親ディレクトリのデフォルト値が適用されると,新しいディレクトリの保護は次のようになります。


File protection:    System:RW, Owner:RW, Group:RW, World:RW 

削除アクセスは継承されないことに注意してください。


mkstemp

一意のファイル名を作成します。

形式

#include <stdlib.h>

int mkstemp (char *template);


引数

template

一意のファイル名に置き換えられる文字列へのポインタ。 template 引数の中の文字列は,末尾に 6 つの X を含んだファイル名でなくてはなりません。

説明

mkstemp関数は,template がポイントする文字列の末尾の 6 つの X を一意の文字のセットに置き換え,読み書き用にオープンされたファイルのファイル記述子を返します。

template がポイントする文字列は,末尾に 6 つの X を含んだファイル名の形になっていなくてはなりません。 mkstemp関数は,既存のファイル名との重複が起こらないように,個々の X を移植性のあるファイル名文字セットの文字に置き換えます。

template がポイントする文字列が,末尾に 6 つの X を含んでいない場合には, - 1 が返されます。


戻り値

x オープンされたファイル記述子。
- 1 エラーを示します ( template がポイントする文字列は,末尾に 6 つの X を含んでいません)。


mktemp

テンプレートから一意のファイル名を作成します。

形式

#include <stdlib.h>

char *mktemp (char *template);

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

引数

template

ユーザ定義のテンプレートを含んでいるバッファへのポインタ。テンプレートは namXXXXXX の形式で指定します。末尾の 6 つの X は,一意の文字の並びに置き換えられます。ユーザは最初の 3 つの文字を指定することができます。 template 引数は上書きされるので,文字列リテラル ( constオブジェクト) は指定しないようにしてください。

説明

新規のアプリケーションでは, mktempを使用することは勧められません。推奨される方法については, tmpnamおよび mkstemp関数を参照してください。

戻り値

x テンプレートへのポインタ。このテンプレートの内容は,作成されたファイル名に変更されます。この値が null 文字列へのポインタだった場合には,一意のファイル名が作成できなかったことを示します。


mktime

ローカル時刻構造体を,Epoch 後の経過時間に変換します。

形式

#include <time.h>

time_t mktime (struct tm *timeptr);

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

引数

timeptr

ローカル時刻構造体へのポインタ。

説明

mktime関数は, timeptr がポイントするローカル時刻構造体を, time関数が返す値と同じように,Epoch 後の経過秒数に変換します。ローカル時刻をエンコードできない場合, mktimeは値 ( time_t) ( - 1) を返します。

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


typedef unsigned long int time_t; 

ローカル・タイム・ゾーン情報は, mktimetzsetを呼び出したかのように設定されます。

timeptr がポイントするローカル時刻構造体の中の tm_isdstフィールドが正の値の場合, mktimeは,初期状態では指定された時刻でサマータイム (DST) が有効になっていると仮定します。

tm_isdstが 0 ならば, mktimeは初期状態では DST が有効でないと仮定します。

tm_isdstが負の値ならば, mktimeは指定された時刻で DST が有効になっているかどうかを判定しようと試みます。


戻り値

x 指定されたカレンダ時刻を, time_t 型の値としてエンコードしたもの。
( time_t )( - 1) ローカル時刻をエンコードできませんでした。

戻り値 ( time_t )( - 1) は, Sun Feb 7 06:28:15 2106 という有効な日付も表現できることに注意してください。


mmap

ファイル・システム・オブジェクトを仮想メモリにマップします。

形式

#include <types.h>

#include <mman.h>

void mmap (void *addr, size_t len, int prot, int flags, int filedes, off_t off); (X/Open, POSIX-1)

void mmap (void *addr, size_t len, int prot, int flags, int filedes, off_t off ...); (HP C Extension)

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

引数

addr

新しいリージョンの開始アドレス (切り捨てによってページ境界に設定されます)。

len

新しいリージョンのバイト長 (ページ境界に丸められます)。

prot

<mman.h>ヘッダ・ファイルに定義されているアクセス許可。 PROT_NONE,PROT_READ,または PROT_WRITE を指定します。

flags

以下の任意の組み合わせに対するビット論理和演算の結果として得られる,マップされたリージョンの属性。

filedes

open関数から返された,新しいマップされたファイル・リージョンにマップしたいファイル。

off

バイト数で指定されるオフセット。 off_tデータ型は,64 ビット整数または 32 ビット整数です。 64 ビット・インタフェースでは, 2 GB よりも大きなファイル・サイズを扱うことができます。これは,コンパイル時に _LARGEFILE 機能テスト・マクロを次のように定義することで選択できます。


CC/DEFINE=_LARGEFILE 

...

MAP_SHARED の SYS$CRMPSC システム・サービスのための追加のフラグを指定するオプションの整数。 mmap関数のこのオプションの引数 ( HP C 拡張) は, OpenVMS バージョン 7.2 で導入されました。

説明

mmap関数は,新しいマップされたファイル・リージョン,新しいプライベート・リージョン,または新しい共用メモリ・リージョンを作成します。

アプリケーションは, mmapを, readwrite,標準入出力などの他のファイル・アクセス方式と組み合わせて使用するときには,同期が正しく行われるように注意する必要があります。

また,呼び出し元のアプリケーションは, mmapを呼び出す前に,範囲 [off, off+len] の中のすべてのバイトがファイルに書き込まれていることを確認しなくてはなりません ( たとえば fsync関数を使用します)。この条件が満たされていないと, mmapは実行に失敗し, errnoを ENXIO (そのようなデバイスまたはアドレスは存在しない) に設定します。

addr および len 引数は,要求された開始アドレスと長さを,新しいリージョンのバイト数として指定します。アドレスは, sysconf(_SC_PAGE_SIZE)から返されるページ・サイズの倍数です。

len 引数が sysconf(_SC_PAGE_SIZE)から返されるページ・サイズの倍数でなかった場合,リージョンの終端と,リージョンの終端を含んでいるページの終端の間のアドレスに対するすべての参照の結果は未定義となります。

flags 引数は,マップされたリージョンの属性を指定します。 flags の値は, <mman.h>ヘッダ・ファイルに定義されている次のシンボリック名のリストのフラグのビット論理和演算によって作成されます。

MAP_FILE マップされたファイル・リージョンを作成する。
MAP_ANONYMOUS 名前なしのメモリ・リージョンを作成する。
MAP_VARIABLE リージョンを計算されたアドレスに配置する。
MAP_FIXED リージョンを固定されたアドレスに配置する。
MAP_SHARED 変更点を共用する。
MAP_PRIVATE 変更点はプライベートである。

MAP_FILE および MAP_ANONYMOUS フラグは,マップしようとしているリージョンがマップされたファイル・リージョンなのか,匿名の共用メモリ・リージョンなのかを制御します。いずれかのフラグが選択されている必要があります。

flags 引数の中で MAP_FILE が設定されている場合:

flags 引数の中で MAP_ANONYMOUS が設定されている場合:

要求されたアドレスが null でなく,リージョンをこのアドレスに置くことが可能であれば,新しいリージョンは要求されたアドレスに配置されます。要求されたアドレスが null であるか,要求されたアドレスにリージョンを置くことができない場合には, MAP_VARIABLE および MAP_FIXED フラグがリージョンの配置を制御します。いずれかのフラグが選択されている必要があります。

flags 引数の中で MAP_VARIABLE が設定されている場合:

flags 引数の中で MAP_FIXED が設定されている場合:

MAP_PRIVATE および MAP_SHARED フラグは,マップされたファイルまたは共用メモリ・リージョンに対する変更の可視性を制御します。いずれかのフラグが選択されている必要があります。

flags 引数の中で MAP_SHARED が設定されている場合:

flags 引数の中で MAP_PRIVATE が設定されている場合:

リージョンを MAP_SHARED を使ってマップしたプロセスによって加えられた変更が,同じリージョンを MAP_PRIVATE を使ってマップしている他のプロセスから見えるかどうかは定められていません。

prot 引数は,マップされたリージョンに対するアクセス許可を指定します。以下のいずれかを指定します。

PROT_NONE アクセスなし
PROT_READ 読み込み専用
PROT_WRITE 読み書きアクセス

mmap関数が実行に成功したら,filedes 引数は,マップされたリージョンやマップされたファイルの内容に影響を与えずにクローズすることができます。個々のマップされたリージョンは,オープン・ファイル記述子に似たファイル参照を作成し,ファイル・データが割り当て解除されるのを防ぎます。

注意

OpenVMS 固有のファイル参照には,以下の規則が適用されます。

  • 追加のファイル参照のために, filedes がファイルの共用を指定してオープンされていなかった場合, mmapはファイル共用を有効にしてファイルを再オープンする。

  • マップされたリージョンに対してファイル参照が追加されている場合,マップされているファイルに対するそれ以降の open, fopen,または create呼び出しは,ファイル共用を指定しなくてはならない。

write関数を使って行われるファイルの変更は,マップされたリージョンから見ることができ,マップされたリージョンに対する変更は, read関数で見ることができます。

注意

OpenVMS バージョン 7.2 およびそれ以降の mmap関数は, MAP_SHARED 要求を処理する際に,SYS$CRMPSC サービスの flags 引数を, MAP_SHARED 要求を処理するために自分で設定したビットと,呼び出し元がオプションの引数で指定したビットのビット論理和として作成します。

デフォルトでは, mmap関数は MAP_SHARED のために一時的なグループ・グローバル・セクションを作成します。オプションの mmap引数は,呼び出し元に対し, SYS$CRMPSC システム・サービスの機能への直接のアクセスを提供します。

呼び出し元は,オプションの引数を使用することで,システム・グローバル・セクション (SEC$M_SYSGBL ビット) や永久的グローバル・セクション (SEC$M_PERM ビット) などを作成することができます。たとえば,システム永久的グローバル・セクションを作成するには,呼び出し元はオプションの引数で (SEC$M_SYSGBL | SEC$M_PERM) を指定します。

mmap関数は,特権のチェックや設定は行いません。呼び出し元は, mmapをオプションの引数を付けて呼び出す前に, SEC$M_SYSGBL には SYSGBL,SEC$M_PERM には PRMGBL などの適切な特権を設定する責任を負います。

read, write, open, fopen, creat, および sysconfも参照してください。


戻り値

x マッピングが配置されるアドレス。
MAP_FAILED エラーを示します。 errno は以下のいずれかの値に設定されます。

  • EACCES--- filedes が参照するファイルが読み込みアクセス用にオープンされていないか,ファイルが書き込みアクセス用にオープンされておらず, MAP_SHARED マッピング操作で PROT_WRITE が設定されていた。

  • EBADF--- filedes 引数は有効なファイル記述子でない。

  • EINVAL--- flags あるいは prot 引数が無効である,または, addr あるいは off 引数が sysconf(_SC_PAGE_SIZE) から返されるページ・サイズの倍数でない。または, flags で MAP_ANONYMOUS が指定されており, filedes が - 1 でない。

  • ENODEV---ファイル記述子 filedes は,ターミナルなどのマップ不可能なオブジェクトを参照している。

  • ENOMEM--- len バイトをマップするのに十分なアドレス空間がない。

  • ENXIO---範囲 [ off, off + len] で指定されたアドレスは, filedes では無効である。

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


前へ 次へ 目次 索引