util/libsrc/util/fmtio-util.c

1 ファイル

1.1 util/libsrc/util/fmtio-util.c

1.1.1 インクルード元

fmtio-util.c のインクルード元

2 関数

2.1 vfopenf

FILE *FMTIO_UTIL_API vfopenf ( const char *modes, int *errno_out, const char *format, va_list args )

printf 形式でファイル名を指定してファイルを開きます (va_list 版)。

fopenf() と同等ですが、可変引数リストの代わりに va_list を受け取ります。 上位のラッパー関数やマクロから va_list を転送する場合に使用します。

2.1.1 引数

  • modes [in] ファイルのオープン モード (“r”, “w”, “a”, “rb”, “wb” など)。
  • errno_out [out] エラー コードの格納先。NULL を指定した場合、エラー コードの取得は行いません。
  • format [in] ファイル名の書式文字列 (printf 形式)。
  • args [in] 書式文字列に対応する可変引数リスト。

2.1.2 戻り値

成功した場合は FILE* を返します。失敗した場合は NULL を返します。

2.1.3 呼び出し元

vfopenf の呼び出し元

2.1.4 参照

fopenf

2.2 fopenf

FILE *FMTIO_UTIL_API fopenf ( const char *modes, int *errno_out, const char *format, ... )

printf 形式でファイル名を指定してファイルを開きます。

本関数は、呼び出し元が printf と同様の書式指定を用いてファイル名を組み立てられるようにするための fopen ラッパー関数です。

指定された書式文字列 (format) と可変引数 (…) からファイル名を生成し、その結果を用いてファイルをオープンします。

書式展開には vsnprintf を使用し、生成されたファイル名が OS の制限や内部バッファ長に収まらない場合、またはファイルのオープンに失敗した場合は NULL を返します。

失敗理由の取得が必要な場合は errno_out を指定してください。 指定された場合、環境に応じたエラーコードを格納します。

2.2.1 引数

  • modes [in] ファイルのオープン モード (“r”, “w”, “a”, “rb”, “wb” など)。
  • errno_out [out] エラー コードの格納先。 Linux では errno の値、Windows では fopen_s の戻り値を格納します。 NULL を指定した場合、エラー コードの取得は行いません。
  • format [in] ファイル名の書式文字列 (printf 形式)。
  • … [in] 書式文字列に対応する可変引数。

2.2.2 戻り値

成功した場合は FILE* を返します。失敗した場合は NULL を返します。

2.2.3 補足

ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。

2.2.4 使用例 (エラー コードの取得なし)

FILE *fp = fopenf("r", NULL, "data_%d.txt", 123);

2.2.5 使用例 (エラー コードの取得あり)

int err;
FILE *fp = fopenf("r", &err, "data_%d.txt", 123);

2.2.6 呼び出し先

fopenf の呼び出し先

2.3 vstatf

int FMTIO_UTIL_API vstatf ( file_stat_t *buf, const char *format, va_list args )

printf 形式でファイル名を指定する stat ラッパー関数 (va_list 版)。

statf() と同等ですが、可変引数リストの代わりに va_list を受け取ります。

2.3.1 引数

  • buf [out] ファイル情報を格納する構造体へのポインタ (file_stat_t 型)
  • format [in] ファイル名のフォーマット文字列 (printf 形式)
  • args [in] フォーマット文字列に対応する可変引数リスト

2.3.2 戻り値

成功時は 0、失敗時は -1

2.3.3 呼び出し元

vstatf の呼び出し元

2.3.4 参照

statf

2.4 statf

int FMTIO_UTIL_API statf ( file_stat_t *buf, const char *format, ... )

printf 形式でファイル名を指定する stat ラッパー関数

この関数は、printf と同じ形式でファイル名を指定してファイル情報を取得します。 内部で vsnprintf を使用してファイル名をフォーマットし、stat を呼び出します。

2.4.1 引数

  • buf [out] ファイル情報を格納する構造体へのポインタ (file_stat_t 型)
  • format [in] ファイル名のフォーマット文字列 (printf 形式)
  • … [in] フォーマット文字列の可変引数

2.4.2 戻り値

成功時は 0、失敗時は -1

2.4.3 補足

2.4.3.1 ファイル名の最大長は OS の規定値です (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)

2.4.3.2 file_stat_t は、Linux では struct stat、Windows では struct _stat64 の typedef です

2.4.3.3 Linux では stat()、Windows では _stat64() を使用します

2.4.4 警告

Linux と Windows では構造体のフィールドが異なるため、プラットフォーム固有のコードが必要です

  • Windows には st_blksize, st_blocks フィールドがありません
  • st_ctime は Linux ではメタデータ変更時刻、Windows では作成時刻を表します

2.4.5 使用例

file_stat_t st; int ret = statf(&st, "data_%d.txt", 123);

2.4.6 呼び出し先

statf の呼び出し先

2.5 vremovef

int FMTIO_UTIL_API vremovef ( const char *format, va_list args )

printf 形式でファイル名を指定してファイルを削除します (va_list 版)。

removef() と同等ですが、可変引数リストの代わりに va_list を受け取ります。

2.5.1 引数

  • format [in] ファイル名の書式文字列 (printf 形式)。
  • args [in] 書式文字列に対応する可変引数リスト。

2.5.2 戻り値

成功時は 0、失敗時は非ゼロ値を返します。

2.5.3 呼び出し元

vremovef の呼び出し元

2.5.4 参照

removef

2.6 removef

int FMTIO_UTIL_API removef ( const char *format, ... )

printf 形式でファイル名を指定してファイルを削除します。

本関数は、printf と同じ形式でファイル名を指定してファイルを削除するための remove ラッパー関数です。

指定された書式文字列 (format) と可変引数 (…) からファイル名を生成し、その結果を用いてファイルを削除します。

2.6.1 引数

  • format [in] ファイル名の書式文字列 (printf 形式)。
  • … [in] 書式文字列に対応する可変引数。

2.6.2 戻り値

成功時は 0、失敗時は非ゼロ値を返します。

2.6.3 補足

ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。

2.6.4 使用例

int ret = removef("data_%d.txt", 123);

2.6.5 呼び出し先

removef の呼び出し先

2.6.6 参照

vremovef

2.7 vopenf

int FMTIO_UTIL_API vopenf ( int flags, int mode, const char *format, va_list args )

printf 形式でファイル名を指定してファイルを開きます (低レベル、va_list 版)。

openf() と同等ですが、可変引数リストの代わりに va_list を受け取ります。

2.7.1 引数

  • flags [in] ファイルオープンフラグ。
  • mode [in] ファイル作成時のパーミッション。
  • format [in] ファイル名の書式文字列 (printf 形式)。
  • args [in] 書式文字列に対応する可変引数リスト。

2.7.2 戻り値

成功時はファイルディスクリプタ、失敗時は -1 を返します。

2.7.3 呼び出し元

vopenf の呼び出し元

2.7.4 参照

openf

2.8 openf

int FMTIO_UTIL_API openf ( int flags, int mode, const char *format, ... )

printf 形式でファイル名を指定してファイルを開きます (低レベル)。

本関数は、printf と同じ形式でファイル名を指定して低レベルファイルオープンを行うための open ラッパー関数です。

Linux では open()、Windows では _open() を使用します。

2.8.1 引数

  • flags [in] ファイルオープンフラグ (O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC, O_APPEND など)。
  • mode [in] ファイル作成時のパーミッション (O_CREAT 指定時に使用)。 Linux では 0644 など、Windows では _S_IREAD | _S_IWRITE など。 O_CREAT を指定しない場合は 0 を渡してください。
  • format [in] ファイル名の書式文字列 (printf 形式)。
  • … [in] 書式文字列に対応する可変引数。

2.8.2 戻り値

成功時はファイルディスクリプタ (0 以上の整数)、失敗時は -1 を返します。

2.8.3 補足

2.8.3.1 ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。

2.8.3.2 Windows の CreateFileA が提供する FILE_SHARE_DELETE や FILE_FLAG_WRITE_THROUGH 等の 高度な機能は本関数ではサポートしません。

2.8.4 使用例

int fd = openf(O_WRONLY | O_CREAT | O_TRUNC, 0644, "log_%d.txt", pid);

2.8.5 呼び出し先

openf の呼び出し先

2.8.6 参照

vopenf

2.9 vaccessf

int FMTIO_UTIL_API vaccessf ( int mode, const char *format, va_list args )

printf 形式でファイル名を指定してアクセス可否を確認します (va_list 版)。

accessf() と同等ですが、可変引数リストの代わりに va_list を受け取ります。

2.9.1 引数

  • mode [in] 確認するアクセスモード (FMTIO_F_OK, FMTIO_R_OK, FMTIO_W_OK)。
  • format [in] ファイル名の書式文字列 (printf 形式)。
  • args [in] 書式文字列に対応する可変引数リスト。

2.9.2 戻り値

アクセス可能な場合は 0、不可の場合は -1 を返します。

2.9.3 呼び出し元

vaccessf の呼び出し元

2.9.4 参照

accessf

2.10 accessf

int FMTIO_UTIL_API accessf ( int mode, const char *format, ... )

printf 形式でファイル名を指定してアクセス可否を確認します。

本関数は、printf と同じ形式でファイル名を指定してファイルの存在や アクセス権限を確認するための access ラッパー関数です。

Linux では access()、Windows では _access() を使用します。

2.10.1 引数

  • mode [in] 確認するアクセスモード。以下の定数を使用してください。
    • FMTIO_F_OK: ファイルの存在を確認
    • FMTIO_R_OK: 読み取り権限を確認
    • FMTIO_W_OK: 書き込み権限を確認
  • format [in] ファイル名の書式文字列 (printf 形式)。
  • … [in] 書式文字列に対応する可変引数。

2.10.2 戻り値

アクセス可能な場合は 0、不可の場合は -1 を返します。

2.10.3 補足

2.10.3.1 ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。

2.10.3.2 Windows の _access() は実行権限チェック (X_OK) をサポートしないため、 FMTIO_X_OK は提供しません。

2.10.4 使用例

if (accessf(FMTIO_F_OK, "config_%d.txt", instance_id) == 0)
{
    // ファイルが存在する
}

2.10.5 呼び出し先

accessf の呼び出し先

2.10.6 参照

vaccessf

2.11 vmkdirf

int FMTIO_UTIL_API vmkdirf ( const char *format, va_list args )

printf 形式でディレクトリ名を指定してディレクトリを作成します (va_list 版)。

mkdirf() と同等ですが、可変引数リストの代わりに va_list を受け取ります。

2.11.1 引数

  • format [in] ディレクトリ名の書式文字列 (printf 形式)。
  • args [in] 書式文字列に対応する可変引数リスト。

2.11.2 戻り値

成功時は 0、失敗時は -1 を返します。

2.11.3 呼び出し元

vmkdirf の呼び出し元

2.11.4 参照

mkdirf

2.12 mkdirf

int FMTIO_UTIL_API mkdirf ( const char *format, ... )

printf 形式でディレクトリ名を指定してディレクトリを作成します。

本関数は、printf と同じ形式でディレクトリ名を指定してディレクトリを作成するための mkdir ラッパー関数です。

Linux では mkdir() をパーミッション 0755 で呼び出します。 Windows では _mkdir() を呼び出します (パーミッション指定はありません)。

2.12.1 引数

  • format [in] ディレクトリ名の書式文字列 (printf 形式)。
  • … [in] 書式文字列に対応する可変引数。

2.12.2 戻り値

成功時は 0、失敗時は -1 を返します。

2.12.3 補足

2.12.3.1 ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。

2.12.3.2 親ディレクトリが存在しない場合は失敗します (再帰的なディレクトリ作成は行いません)。

2.12.4 使用例

int ret = mkdirf("logs_%04d", year);

2.12.5 呼び出し先

mkdirf の呼び出し先

2.12.6 参照

vmkdirf

3 定数、マクロ

3.1 FMTIO_FORMAT_FILENAME

#define FMTIO_FORMAT_FILENAME ( format, args, fail_return )
        char filename[FILE_PATH_MAX] = {0};                  \
    int written;                                         \
    if (format == NULL)                                  \
    {                                                    \
        return (fail_return);                            \
    }                                                    \
    written = vsnprintf(filename, sizeof(filename), format, args); \
    if (written < 0)                                     \
    {                                                    \
        return (fail_return);                            \
    }                                                    \
    if (written >= (int)sizeof(filename))                 \
    {                                                    \
        return (fail_return);                            \
    }

ファイル名フォーマットの共通処理。 va_list から FILE_PATH_MAX バッファにファイル名を展開し、 失敗時は指定された値を返す。 成功時は filename[] に結果が格納される。