日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


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


前へ 次へ 目次 索引




1.5.6 Curses およびソケット互換性マクロ

次の機能テスト・マクロは, HP C RTL ライブラリの Curses およびソケット・サブセットを制御するために使用します。

  • _BSD44_CURSES
    このマクロは,4.4BSD Berkeley Software Distribution から Curses パッケージを選択します。

  • _VMS_CURSES
    このマクロは, VAX C コンパイラをベースにした Curses パッケージを選択します。これはデフォルトの Curses パッケージです。

  • _SOCKADDR_LEN
    このマクロは, 4.4BSD および XPG4 V2 準拠のソケット・インタフェースを選択するために使用します。これらのインタフェースでは,基礎になる TCP/IP ソフトウェアでのサポートが必要です。稼動する TCP/IP ソフトウェアのバージョンで 4.4BSD ソケットがサポートされるかどうかについては, TCP/IP のベンダにお問い合わせください。

XPG4 V2 に厳密に準拠するには, 4.4BSD と互換性のあるソケット・インタフェースが必要です。したがって,OpenVMS Version 7.0 以降で _XOPEN_SOURCE_EXTENDED が定義されている場合, _SOCKADDR_LEN は 1 に定義されます。

次の例はこれらのマクロの使い方を理解するのに役立ちます。

  • AE,AL,AS,AM,BC など, BSD Curses パッケージで使用される termcap フィールドを指すポインタを表すシンボル定数は,_BSD44_CURSES が定義されている場合, <curses.h>でのみ有効になります。

  • <socket.h>ヘッダ・ファイルは, _SOCKADDR_LEN または _XOPEN_SOURCE_EXTENDED が定義されている場合だけ, 4.4BSD sockaddr構造体を定義します。これらが定義されていない場合は, <socket.h>は 4.4BSD より前の sockaddr構造体を定義します。 _SOCKADDR_LEN が定義され, _XOPEN_SOURCE_EXTENDED が定義されていない場合は, <socket.h>ヘッダ・ファイルは osockaddr構造体も定義します。この構造体は互換性を維持するために使用される 4.3BSD の sockaddr構造体です。 XPG4 V2 では osockaddr構造体を定義していないため, _XOPEN_SOURCE_EXTENDED モードでは有効になりません。



1.5.7 2G バイトのファイル・サイズ・マクロ

C RTL では,2G バイト (GB) 以上のファイル・サイズおよびオフセットを使用するアプリケーションをコンパイルする機能がサポートされるようになりました。この機能は, 64 ビット整数のファイル・オフセットを可能にすることで実現されています。

fseeko関数と ftello関数は, fseek関数および ftell関数と同じ動作を実行し, off_t型の値を受け付けるか,または返します。これにより, off_tの 64 ビット・バージョンを使用することができます。

C RTL 関数 lseekmmapftuncatetruncatestatfstatftwも 64 ビット・ファイル・オフセットに対応できます。

新しい 64 ビット・インタフェースをコンパイル時に選択するには, _LARGEFILE 機能マクロを定義します。

1.5.8 32 ビット UID および GID マクロ (Alpha, I64)

C RTL では, 32 ビットのユーザ識別 (UID) とグループ識別 (GID) がサポートされます。 32 ビットの UID/GID を使用するように設定してアプリケーションをコンパイルすると,UID と GID はオペレーティング・システムの以前のバージョンと同様に UIC から生成されます。

デフォルトで 32 ビットの UID/GID を使用するシステムで, 16 ビットの UID/GID をサポートするようにアプリケーションをコンパイルするには,_DECC_SHORT_GID_T マクロに 1 を定義します。

1.5.9 標準準拠の stat 構造体 (Alpha, I64)

C RTL は,X/Open 標準に準拠した stat構造体の定義および関連する定義をサポートしています。これらの新しい定義を使用するには,機能テスト・マクロ _USE_STD_STAT を使用してアプリケーションをコンパイルする必要があります。

_USE_STD_STAT を使用してコンパイルすると, stat構造体が以下のように変更されます。

  • ino_tunsigned quadword intとして定義されます。 _USE_STD_STAT を使用しない場合は, unsigned shortとして定義されます。

  • dev_tが 64 ビット整数として定義されます。 _USE_STD_STAT を使用しない場合は,32 ビット文字ポインタとして定義されます。

  • off_tが, _LARGEFILE マクロが定義されているかのように, 64 ビット整数として定義されます。 _USE_STD_STAT を使用しない場合は, 32 ビット整数として定義されます。

  • フィールド st_devおよび st_rdevが,デバイスごとに違った値となります。 _USE_STD_STAT を使用しない場合は,一意性は保証されません。

  • フィールド st_blksizeおよび st_blocksが追加されます。 _USE_STD_STAT を使用しない場合は,これらのフィールドは存在しません。



1.5.10 _toupper と _tolower の従来の動作での使用 (Alpha, I64)

OpenVMS Version 8.3 の _tolowerマクロと _toupperマクロでは,特に指定しない限りパラメータを 2 回以上評価しないようにして, C99 ANSI 標準と X/Open 仕様に準拠させるようになっています。つまり,これらのマクロでは,対応する tolowerまたは toupper関数を単に呼び出すだけです。そのため,式を評価する回数をユーザが指定できる場合の副作用 (i++ や関数呼び出しなど) が回避できるようになっています。

_tolowerマクロと _toupperマクロを以前の仕様の最適化された動作のままで使用する場合は, /DEFINE=_FAST_TOUPPER を指定してコンパイルしてください。そうすれば,これらのマクロは,以前のリリースと同じように,実行時の呼び出しオーバヘッドを避けるように最適化されます。ただし,その場合はマクロのパラメータが 2 回以上評価されて計算方法が決定されるので,望ましくない副作用が発生することもあります。

1.5.11 高速なインライン put 関数および get 関数の使用 (Alpha, I64)

__UNIX_PUTC マクロを定義してコンパイルすれば,次の I/O 関数で高速なインライン関数を使用するように最適化できます。


fgetc 
fputc 
putc 
putchar 
fgetc_unlocked 
fputc_unlocked 
putc_unlocked 
putchar_unlocked 



1.6 機能論理名の使用による C RTL 機能の有効化

C RTL では,多くの機能スイッチが提供されます。これらの機能スイッチは,DECC$ 論理名を使用して設定でき,実行時に C アプリケーションの動作に影響を与えます。

機能スイッチにより,新しい動作を導入したり,以前の動作をそのまま保持することもできます。

大部分の機能は,論理名を ENABLE に設定することで有効にし,論理名を DISABLE に設定することで無効にすることができます。


$ DEFINE DECC$feature ENABLE 
 
$ DEFINE DECC$feature DISABLE 

一部の機能論理名は数値に設定することができます。次の例を参照してください。


$ DEFINE DECC$PIPE_BUFFER_SIZE 32768 

注意

  • システム用の C RTL 機能論理名は設定しないでください。 OpenVMS コンポーネントなどの他のアプリケーションが,これらの論理名のデフォルト動作に依存しているため,機能論理名の設定を必要としているアプリケーション用の機能論理名だけを設定してください。

  • C ランタイム・ライブラリの以前のリリースで提供されていた古い機能論理名では,任意の等価文字列を設定することで機能が有効になると説明されていました。この説明は以前は間違いではなかったのですが,今後は,有効にするには機能論理名に "ENABLE" を設定し,無効にするには "DISABLE" を設定することを強くお勧めします。このようにしないと,予期しない結果になることがあります。
    予期しない結果になる理由は次のとおりです。

    • 以前のバージョンの C RTL では, 任意の等価文字列 (DISABLE であっても) により,機能論理名が有効になっていました。

    • 以降のバージョンおよび現在のバージョンの C RTL では,以下の等価文字列で機能論理名が無効になります。機能論理名を有効にするために,以下の文字列を使用することは避けてください。
      DISABLE
      0 (ゼロ)
      F
      FALSE
      N
      NO

      ここにリストされていない文字列では,機能論理名が有効になります。たとえば,誤って綴り間違いの "DSABLE" という文字列を設定しても,機能論理名が有効になります。

表 1-5 は,C RTL 機能論理名を,制御する機能の種類別に示しています。

表 1-5 C RTL 機能論理名
機能論理名 デフォルト
性能の最適化
DECC$ENABLE_GETENV_CACHE DISABLE
DECC$LOCALE_CACHE_SIZE 0
DECC$TZ_CACHE_SIZE 2
従来の動作
DECC$ALLOW_UNPRIVILEGED_NICE DISABLE
DECC$NO_ROOTED_SEARCH_LISTS DISABLE
DECC$THREAD_DATA_AST_SAFE DISABLE
DECC$V62_RECORD_GENERATION DISABLE
DECC$WRITE_SHORT_RECORDS DISABLE
DECC$XPG4_STRPTIME DISABLE
ファイル属性
DECC$DEFAULT_LRL 32767
DECC$DEFAULT_UDF_RECORD DISABLE
DECC$FIXED_LENGTH_SEEK_TO_EOF DISABLE
DECC$ACL_ACCESS_CHECK DISABLE
メールボックス
DECC$MAILBOX_CTX_STM DISABLE
UNIX 準拠のための変更
DECC$SELECT_IGNORES_INVALID_FD DISABLE
DECC$STRTOL_ERANGE DISABLE
DECC$VALIDATE_SIGNAL_IN_KILL DISABLE
一般的な UNIX 拡張機能
DECC$UNIX_LEVEL DISABLE
DECC$ARGV_PARSE_STYLE DISABLE
DECC$PIPE_BUFFER_SIZE 512
DECC$PIPE_BUFFER_QUOTA 512
DECC$STREAM_PIPE DISABLE
DECC$POPEN_NO_CRLF_REC_ATTR DISABLE
DECC$STDIO_CTX_EOL DISABLE
DECC$USE_RAB64 DISABLE
DECC$GLOB_UNIX_STYLE DISABLE
UNIX 形式のファイル名をサポートするための拡張
DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION DISABLE
DECC$EFS_CHARSET DISABLE
DECC$ENABLE_TO_VMS_LOGNAME_CACHE ENABLE
DECC$FILENAME_UNIX_NO_VERSION DISABLE
DECC$FILENAME_UNIX_REPORT DISABLE
DECC$READDIR_DROPDOTNOTYPE DISABLE
DECC$RENAME_NO_INHERIT DISABLE
DECC$RENAME_ALLOW_DIR DISABLE
UNIX 形式のファイル属性をサポートするための拡張
DECC$EFS_FILE_TIMESTAMPS DISABLE
DECC$EXEC_FILEATTR_INHERITANCE DISABLE
DECC$FILE_OWNER_UNIX DISABLE
DECC$FILE_PERMISSION_UNIX DISABLE
DECC$FILE_SHARING DISABLE
UNIX 準拠モード
DECC$DETACHED_CHILD_PROCESS DISABLE
DECC$FILENAME_UNIX_ONLY DISABLE
DECC$POSIX_STYLE_UID DISABLE
DECC$USE_JPI$_CREATOR DISABLE
POSIX 準拠のための新しい動作
DECC$ALLOW_REMOVE_OPEN_FILES DISABLE
DECC$POSIX_SEEK_STREAM_FILE DISABLE
DECC$UMASK RMS のデフォルト
ファイル名の処理
DECC$POSIX_COMPLIANT_PATHNAMES DISABLE
DECC$DISABLE_POSIX_ROOT ENABLE
DECC$EFS_CASE_PRESERVE DISABLE
DECC$EFS_CASE_SPECIAL DISABLE
DECC$EFS_NO_DOTS_IN_DIRNAME DISABLE
DECC$READDIR_KEEPDOTDIR DISABLE
DECC$UNIX_PATH_BEFORE_LOGNAME DISABLE

この後,C RTL 機能論理名をアルファベット順に示し,その説明も示します。特に示した場合を除き,機能論理名は ENABLE で有効になり, DISABLE で無効になります。



DECC$ACL_ACCESS_CHECK

DECC$ACL_ACCESS_CHECK 機能論理名は access関数の動作を制御します。

DECC$ACL_ACCESS_CHECK が有効な場合, access関数は UIC 保護と OpenVMS アクセス制御リスト(ACL) の両方を確認します。

DECC$ACL_ACCESS_CHECK が無効な場合, access関数は UIC 保護のみを確認します。

DECC$ALLOW_REMOVE_OPEN_FILES

DECC$ALLOW_REMOVE_OPEN_FILES 機能論理名は,オープン・ファイルに対する remove関数の動作を制御します。一般的に,この操作は失敗します。ただし,POSIX の準拠条件では,この操作は成功することになっています。

DECC$ALLOW_REMOVE_OPEN_FILES が有効の場合,この POSIX 準拠の動作が行われます。

DECC$ALLOW_UNPRIVILEGED_NICE

DECC$ALLOW_UNPRIVILEGED_NICE が有効の場合, nice関数は,呼び出し元プロセスの特権をチェックしないという従来の動作を行います (つまり,任意のユーザが, nice値を小さくして,プロセスの優先順位を高くすることができます)。また,MAX_PRIORITY を超える優先順位を,呼び出し元が設定した場合, nice値にはベースの優先順位が設定されます。

DECC$ALLOW_UNPRIVILEGED_NICE が無効の場合, nice関数は X/Open 標準に準拠し,呼び出し元プロセスの特権をチェックします (つまり,ALTPRI 特権を持つユーザだけが nice値を小さくして,プロセスの優先順位を高くすることができます)。また,MAX_PRIORITY を超える優先順位を呼び出し元が設定した場合, nice値には MAX_PRIORITY が設定されます。

DECC$ARGV_PARSE_STYLE

DECC$ARGV_PARSE_STYLE を有効に設定すると,プロセスが SET PROCESS/PARSE_STYLE=EXTENDED を使用して拡張 DCL 解析用に設定されている場合,コマンド・ライン引数で大文字と小文字の区別が保持されます。

DECC$ARGV_PARSE_STYLE は論理名として外部で定義するか,または LIB$INITIALIZE 機能を使用して呼び出した関数の内部で設定する必要があります。これは, main関数が呼び出される前に,この論理名が評価されるからです。

DECC$DEFAULT_LRL

DECC$DEFAULT_LRL は,最長のレコード長に関する RMS 属性のデフォルト値を指定します。デフォルト値 32767 は RMSでサポートされる最大レコード・サイズです。

デフォルト値: 32767

最大値: 32767

DECC$DEFAULT_UDF_RECORD

DECC$DEFAULT_UDF_RECORD を有効に設定すると,STREAMLF を除き,他のすべてのファイルに対して,ファイル・アクセス・モードのデフォルトが STREAM モードではなく, RECORD モードになります。

DECC$DETACHED_CHILD_PROCESS

DECC$DETACHED_CHILD_PROCESS を有効に設定すると, vforkおよび execを使用して生成される子プロセスは,サブプロセスではなく,独立プロセスとして生成されます。

この機能のサポートは限定されています。場合によっては,コンソールを親プロセスと独立プロセスの間で共用することができないため, execが異常終了することがあります。

DECC$DISABLE_POSIX_ROOT

DECC$DISABLE_POSIX_ROOT を有効に設定すると, SYS$POSIX_ROOT によって定義される POSIX ルート・ディレクトリのサポートが無効になります。

DECC$DISABLE_POSIX_ROOT を無効に設定すると, SYS$POSIX_ROOT 論理名はファイル・パス "/" と同じであると解釈されます。スラッシュ (/) で始まる UNIX パスが指定され,先頭のスラッシュの後の値を論理名として変換できない場合は,指定された UNIX のファイル・パスの親ディレクトリとして SYS$POSIX_ROOT が使用されます。

C RTL では,実際のディレクトリのように動作する UNIX 形式のルートがサポートされます。このため,次のような動作が可能です。


% cd / 
% mkdir /dirname 
% tar -xvf tarfile.tar /dirname 
% ls / 

以前は,C RTL は "/" をディレクトリ名として認識しませんでした。 "/" から始まるファイル・パスの通常の処理では,最初の要素は論理名またはデバイス名として解釈されていました。このような解釈ができないときは, /dev/nullという名前,および /binおよび /tmpから始まる名前に対して特殊な処理が行われていました。


/dev/null       NLA0: 
/bin            SYS$SYSTEM: 
/tmp            SYS$SCRATCH: 

これらの動作は,互換性を維持するために保持されています。さらに,SYS$POSIX_ROOT という論理名を "/" に対応するものとして解釈するサポートが C RTL に追加されました。

C RTL で使用するためにこの機能を有効にするには, SYS$POSIX_ROOT を隠し論理名として定義します。次の例を参照してください。


$ DEFINE/TRANSLATION=(CONCEALED,TERMINAL) SYS$POSIX_ROOT "$1$DKA0:[SYS0.abc.]" 

この機能を無効にするには,次のように指定します。


$ DEFINE DECC$DISABLE_POSIX_ROOT DISABLE 

SYS$POSIX_ROOT を有効にすると,次の動作が実行されます。

  • "/" から始まる UNIX パスの既存の変換が失敗し, SYS$POSIX_ROOT が定義されている場合は,名前は /sys$posix_rootから始まるかのように解釈されます。

  • OpenVMS から UNIX 形式のファイル名に変換するときに, OpenVMS の名前が "SYS$POSIX_ROOT:" から始まる場合, "SYS$POSIX_ROOT:" は削除されます。たとえば,SYS$POSIX_ROOT:[dirname] は /dirnameになります。このようにして作成された名前が論理名または上記の特殊なケースのいずれかとして解釈可能な場合は,結果は /dirnameではなく, /./dirnameになります。



DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION

DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION を有効に設定すると,変換ルーチン decc$to_vmsは,UNIX形式の名前の先頭にスラッシュ (/) がある場合,最初の要素だけを論理名として取り扱います。

DECC$EFS_CASE_PRESERVE

DECC$EFS_CASE_PRESERVE を有効に設定すると, ODS-5 ディスクのファイル名で大文字と小文字の区別が保持されます。


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項