library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

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


前へ 次へ 目次 索引



blksize_t   st_blksize; 
blkcnt_t    st_blocks; 


X/Open 標準によれば, st_blksizeは,指定したファイルに対するファイル・システム固有の優先入出力ブロック・サイズです。 OpenVMS システムでは, st_blksizeにはデバイス・バッファ・サイズにディスク・クラスタ・サイズを掛けた値が設定されます。 st_blocksには,ファイルの割り当てサイズがブロック単位で設定されます。 st_blocksを計算するために使用するブロック・サイズは,必ずしも st_blksizeと同じである必要はなく,ほとんどの場合違った値になります。

  • struct statでは,メンバ st_inoの型は ino_tです。以前のバージョンの C RTL では,型は ino_t [3]( ino_t型の 3 つの配列) でした。 ino_tがワードからクォドワードに変更されたため,このメンバのサイズが 1 ワード拡大されました。この変更の主なポイントは,ほとんどのオープン・ソース・アプリケーションと同じく, st_inoがスカラになる点です。

  • ino_tの定義が新しくなったことで,ヘッダ・ファイル <dirent.h>をインクルードしているアプリケーションにも影響があります。 <stat.h>では, struct statst_inoメンバと同様に, struct direntd_inoも変更となります

  • ino_tを構成する値へのアクセスを容易にするために,どの標準にもないマクロが <stat.h>にいくつか追加されました。
    S_INO_NUM(ino),S_INO_SEQ(ino),S_INO_RVN(ino) は,それぞれ ino の FILES-11 ファイル番号,シーケンス番号,相対ボリューム番号を unsigned shortとして返します。

    S_INO_RVN_RVN(ino) は,相対ボリューム番号を含む RVN フィールドのバイトを返します。

    S_INO_RVN_NMX(ino) は,ファイル番号拡張を含む RVN フィールドのバイトを返します。

    このようにして各要素を切り出すことが可能ですが, X/Open 標準の一部ではないため,ポータビリティを確保したいアプリケーションでは使用しないことをお勧めします。

  • 意味の変更
    dev_t型の値は,デバイスごとにクラスタ全体で一意となりました。デバイス名と割り当てクラスまたは SCSSYSTEMID (シングル・パスのデバイスの場合) に基づくアルゴリズムにより, X/Open 標準の要件である,このような特性を持ったデバイス ID が計算されます。一般に,ファイル番号とデバイス ID の組み合わせにより,クラスタ内のファイルが一意に識別されます。
    この変更により, stat構造体のメンバ st_devst_rdevに影響があります。以前のリリースとの互換性のため, st_rdevには 0 または st_devが設定されます。

    注意 (Alpha, I64)

    OpenVMS Alpha システムと I64 システムでは, statfstatutime,および utimes関数は,新しいファイル・システムの POSIX 準拠のファイル・タイムスタンプ・サポートに対応して拡張されています。

    このサポートは,V7.3 およびそれ以降の OpenVMS Alpha システム上の ODS-5 デバイスでのみ使用できます。

    この変更が行われる以前, statおよび fstat関数は,以下のファイル属性に基づいて st_ctimest_mtime,および st_atimeフィールドの値を設定していました。

    st_ctime- ATR$C_CREDATE (ファイル作成時刻)
    st_mtime- ATR$C_REVDATE (ファイル更新時刻)
    st_atime- ファイル・アクセス時刻がサポートされていなかったため,常に st_mtime に設定されていた

    また,ファイル変更時刻については, utimeおよび utimesは ATR$C_REVDATE ファイル属性を変更し,ファイル・アクセス時刻引数は無視していました。

    変更が行われて以降,ODS-5 デバイス上のファイルに関しては, statおよび fstat関数は,以下の新しいファイル属性に基づいて st_ctimest_mtime,および st_atimeフィールドの値を設定するようになりました。

    st_ctime- ATR$C_ATTDATE (最終属性変更時刻)
    st_mtime- ATR$C_MODDATE (最終データ変更時刻)
    st_atime- ATR$C_ACCDATE (最終アクセス時刻)

    ODS-2 デバイスのように ATR$C_ACCDATE がゼロである場合, statおよび fstat関数は st_atimest_mtimeに設定します。

    ファイル変更時刻については, utimeおよび utimes関数は, ATR$C_REVDATE と ATR$C_MODDATE の両方のファイル属性を変更します。ファイル・アクセス時刻については,これらの関数は ATR$C_ACCDATE ファイル属性を変更します。 ODS-2 デバイス上で ATR$C_MODDATE および ATR$C_ACCDATE ファイル属性を設定しても効果はありません。

    互換性を保つために,デバイスの種類にかかわらず, statfstatutime,および utimesの以前の動作がデフォルトとなっています。

    新しい動作を有効にするためには,アプリケーションを呼び出す前に, DECC$EFS_FILE_TIMESTAMPS 論理名に明示的に ENABLE を定義する必要があります。この論理名を設定しても, ODS-2 デバイス上のファイルに対する statfstatutime,および utimesの動作には影響はありません。


    戻り値

    0 成功を示します。
    - 1 特権違反以外のエラーを示します。 errno はエラーを示す値に設定されます。
    - 2 特権違反を示します。


    statvfs (Alpha, I64)

    指定されたファイルが格納されているデバイスに関する情報を取得します。

    形式

    #include <statvfs.h>

    int statvfs (const char *restrict path, struct statvfs *restrict buffer);


    引数

    path

    マウントされているデバイス上の任意のファイル。

    buffer

    返される情報を保持する, statvfs構造体へのポインタ

    説明

    statvfs関数は,指定されたファイルが格納されているデバイスに関する情報を返します。指定されたファイルに対する読み込み,書き込み,実行の許可は必要ありません。情報は, statvfs構造体の形で返されます。この構造体はヘッダ・ファイル <statvfs.h>で定義されており,以下のメンバが含まれています。
    unsigned long f_bsize- 優先ブロック・サイズ。

    unsigned long f_frsize- 基本ブロック・サイズ。

    fsblkcnt_t f_blocks- ブロック・サイズの合計。単位は f_frsize

    fsblkcnt_t f_bfree- 空きブロックサイズの合計。 DFS ディスクに対する $GETDVI で,無意味な空きブロック数が誤ってレポートされる場合, f_bfreeには最大ブロック数が設定されます。

    fsblkcnt_t f_bavail- 利用可能な空きブロックの数。呼び出し元のディスク・クォータの未使用分が設定されます。

    fsfilcnt_t f_files- ファイル・シリアル番号 (たとえば inode) の合計。

    fsfilcnt_t f_ffree- 空きファイル・シリアル番号の合計。 OpenVMS システムでは,この値は「空きブロック数/クラスタサイズ」で計算されます。

    fsfilcnt_t f_favail- 非特権プロセスが利用できるファイル・シリアル番号の数 (OpenVMS システムでは 0)。

    unsigned long f_fsid- ファイル・システム ID。この ID は,割り当てクラス・デバイス名に基づきます。デバイスがローカルにマウントされている限り,デバイスに基づいた一意の値が提供されます。

    unsigned long f_flag- 以下の 1 つ以上のフラグを表すビット・マスク。
    ST_RONLY- ボリュームは読み込み専用。
    ST_NOSUID- ボリュームで保護されたサブシステムが有効。


    unsigned long f_namemax- ファイル名の最大長。
    char f_basetype[64]- デバイス・タイプ名。
    char f_fstr[64]- 論理ボリューム名。
    char __reserved[64]- メディア・タイプ名。

    正常に完了すると, statvfsは 0 (ゼロ) を返します。失敗すると - 1 を返し, errnoにエラーを示す値を設定します。

    fstatvfsも参照してください。


    戻り値

    0 正常終了。
    - 1 エラーを示します。 errno には,以下のいずれかが設定されます。

    • EACCES - パス接頭辞のコンポーネントに対する検索許可が拒否されました。

    • EIO - デバイスの読み込み中に入出力エラーが発生しました。

    • EINTR - 関数の実行中にシグナルを受信しました。

    • EOVERFLOW - 返却する値の 1 つが, buffer が示す構造体で正しく表現できません。

    • ENAMETOOLONG - パス・パラメータのコンポーネントの長さが NAME_MAX を超えたか,パス・パラメータの長さが PATH_MAX を超えました。

    • ENOENT - path のコンポーネントが,存在するファイルを示していないか, path が空文字列です。

    • ENOTDIR - path パラメータのパス接頭辞のコンポーネントが,ディレクトリではありません。


    strcasecmp

    2 つの 7 ビット ASCII 文字列の,大文字小文字を区別しない比較を行います。

    形式

    #include <strings.h>

    int strcasecmp (const char *s1, const char *s2);


    引数

    s1

    比較する 2 つの文字列のうちの第 1 のもの

    s2

    比較する 2 つの文字列のうちの第 2 のもの

    説明

    strcasecmp関数は大文字小文字を区別しません。返される字句的な違いは,小文字に変換されています。

    strcasecmp関数は 7 ビット ASCII の比較のみを行います。国際化されたアプリケーションでは,この関数は使用しないようにしてください。


    戻り値

    n s1 文字列が s2 文字列よりも大きい,等しい,または小さい場合に,それぞれ 0 よりも大きい,等しい,または小さい整数値。


    strcat

    str_1 の末尾に,終端の null 文字を含めて str_2 を連結します。

    形式

    #include <string.h>

    char *strcat (char *str_1, const char *str_2);

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

    引数

    str_1, str_2

    null で終了する文字列へのポインタ。

    説明

    strncatを参照してください。

    戻り値

    x 第 1 引数 str_1 のアドレス。これは連結された結果を保持できるだけの大きさを持つと仮定されます。



    #include <string.h> 
    #include <stdio.h> 
     
    /* This program concatenates two strings using the strcat       */ 
    /* function, and then manually compares the result of strcat    */ 
    /* to the expected result.                                      */ 
     
    #define S1LENGTH 10 
    #define S2LENGTH 8 
     
    main() 
    { 
        static char s1buf[S1LENGTH + S2LENGTH] = "abcmnexyz"; 
        static char s2buf[] = " orthis"; 
        static char test1[] = "abcmnexyz orthis"; 
     
        int i; 
        char *status; 
     
        /* Take static buffer s1buf, concatenate static buffer      */ 
        /* s2buf to it, and compare the answer in s1buf with the    */ 
        /* static answer in test1.                                  */ 
     
        status = strcat(s1buf, s2buf); 
        for (i = 0; i <= S1LENGTH + S2LENGTH - 2; i++) { 
            /* Check for correct returned string.   */ 
     
            if (test1[i] != s1buf[i]) 
                printf("error in strcat"); 
        } 
    }                                         
    


    strchr

    null で終了する文字列の中の,指定された文字の最初のオカレンスのアドレスを返します。

    形式

    #include <string.h>

    char *strchr (const char *str, int character);

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

    引数

    str

    null で終了する文字列へのポインタ。

    character

    int型のオブジェクト。

    説明

    この関数は,null で終了する文字列の中を先頭から調べて,指定した文字が最初に見つかったアドレスを返します。終端の null 文字は,文字列の一部と見なされます。

    これとは対照的に, strrchrでは, null で終了する文字列の中を先頭から調べて,指定した文字が最後に見つかったアドレスを返します。


    戻り値

    x 指定された文字の最初のオカレンスのアドレス。
    NULL 文字列の中に文字が含まれていないことを示します。



    #include <stdio.h> 
    #include <string.h> 
     
    main() 
    { 
     
        static char s1buf[] = "abcdefghijkl lkjihgfedcba"; 
     
        int i; 
     
        char *status; 
     
        /*  This program checks the strchr function by incrementally   */ 
        /*  going through a string that ascends to the middle and then */ 
        /*  descends towards the end.                                  */ 
     
        for (i = 0; s1buf[i] != '\0' && s1buf[i] != ' '; i++) { 
            status = strchr(s1buf, s1buf[i]); 
     
        /* Check for pointer to leftmost character - test 1.           */ 
                                                                       
            if (status != &s1buf[i]) 
                printf("error in strchr"); 
        } 
    } 
    


    strcmp

    2 つの ASCII 文字列を比較し,第 1 の文字列の個々の文字の ASCII 値が第 2 の文字列の値よりも小さいか,等しいか,大きいことを示す負の整数,0,または正の整数を返します。

    形式

    #include <string.h>

    int strcmp (const char *str_1, const char *str_2);


    引数

    str_1, str_2

    文字列へのポインタ。

    説明

    文字列の比較は,null 文字が検出されるか,文字列に違いが発見されるまで行われます。

    戻り値

    < 0 str_1str_2 よりも小さいことを示します。
    = 0 str_1str_2 と等しいことを示します。
    > 0 str_1str_2 よりも大きいことを示します。


    strcoll

    2 つの文字列を比較し,文字列が異なるかどうか,またどのように異なるかを示す整数を返します。この関数は,現在のロケールの LC_COLLATE カテゴリの照合情報を使用して,比較の実行方法を決定します。

    形式

    #include <string.h>

    int strcoll (const char *s1, const char *s2);


    引数

    s1, s2

    文字列へのポインタ。

    説明

    strcoll関数は, strcmpとは異なり, 2 つの文字列をロケールに依存した方法で比較します。エラー条件のための値は予約されていないので,アプリケーションは関数呼び出しの前に errnoを 0 に設定し,呼び出しの後にその値をテストすることでチェックを行う必要があります。

    strxfrmも参照してください。


    戻り値

    < 0 s1s2 よりも小さいことを示します。
    = 0 文字列が等しいことを示します。
    > 0 s1s2 よりも大きいことを示します。


    前へ 次へ 目次 索引