Document of c-modernization-kit (util) 1.0.0
Loading...
Searching...
No Matches
fmtio-util.c File Reference
#include <fmtio-util.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
Include dependency graph for fmtio-util.c:

Go to the source code of this file.

Macros

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

Functions

FILE *FMTIO_UTIL_API vfopenf (const char *modes, int *errno_out, const char *format, va_list args)
 printf 形式でファイル名を指定してファイルを開きます (va_list 版)。
FILE *FMTIO_UTIL_API fopenf (const char *modes, int *errno_out, const char *format,...)
 printf 形式でファイル名を指定してファイルを開きます。
int FMTIO_UTIL_API vstatf (file_stat_t *buf, const char *format, va_list args)
 printf 形式でファイル名を指定する stat ラッパー関数 (va_list 版)。
int FMTIO_UTIL_API statf (file_stat_t *buf, const char *format,...)
 printf 形式でファイル名を指定する stat ラッパー関数
int FMTIO_UTIL_API vremovef (const char *format, va_list args)
 printf 形式でファイル名を指定してファイルを削除します (va_list 版)。
int FMTIO_UTIL_API removef (const char *format,...)
 printf 形式でファイル名を指定してファイルを削除します。
int FMTIO_UTIL_API vopenf (int flags, int mode, const char *format, va_list args)
 printf 形式でファイル名を指定してファイルを開きます (低レベル、va_list 版)。
int FMTIO_UTIL_API openf (int flags, int mode, const char *format,...)
 printf 形式でファイル名を指定してファイルを開きます (低レベル)。
int FMTIO_UTIL_API vaccessf (int mode, const char *format, va_list args)
 printf 形式でファイル名を指定してアクセス可否を確認します (va_list 版)。
int FMTIO_UTIL_API accessf (int mode, const char *format,...)
 printf 形式でファイル名を指定してアクセス可否を確認します。
int FMTIO_UTIL_API vmkdirf (const char *format, va_list args)
 printf 形式でディレクトリ名を指定してディレクトリを作成します (va_list 版)。
int FMTIO_UTIL_API mkdirf (const char *format,...)
 printf 形式でディレクトリ名を指定してディレクトリを作成します。

Macro Definition Documentation

◆ FMTIO_FORMAT_FILENAME

#define FMTIO_FORMAT_FILENAME ( format,
args,
fail_return )
Value:
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[] に結果が格納される。

Definition at line 14 of file fmtio-util.c.

Referenced by vaccessf(), vmkdirf(), vopenf(), vremovef(), and vstatf().

Function Documentation

◆ 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 を転送する場合に使用します。

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

Definition at line 34 of file fmtio-util.c.

References FMTIO_UTIL_API.

Referenced by fopenf().

Here is the caller graph for this function:

◆ fopenf()

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

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

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

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

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

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

Parameters
[in]modesファイルのオープン モード ("r", "w", "a", "rb", "wb" など)。
[out]errno_outエラー コードの格納先。 Linux では errno の値、Windows では fopen_s の戻り値を格納します。 NULL を指定した場合、エラー コードの取得は行いません。
[in]formatファイル名の書式文字列 (printf 形式)。
[in]...書式文字列に対応する可変引数。
Returns
成功した場合は FILE* を返します。失敗した場合は NULL を返します。
Note
ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。
使用例 (エラー コードの取得なし)
FILE *fp = fopenf("r", NULL, "data_%d.txt", 123);
FMTIO_UTIL_EXPORT FILE *FMTIO_UTIL_API fopenf(const char *modes, int *errno_out, const char *format,...)
printf 形式でファイル名を指定してファイルを開きます。
Definition fmtio-util.c:97
使用例 (エラー コードの取得あり)
int err;
FILE *fp = fopenf("r", &err, "data_%d.txt", 123);

Definition at line 97 of file fmtio-util.c.

References FMTIO_UTIL_API, and vfopenf().

Here is the call graph for this function:

◆ vstatf()

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

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

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

Parameters
[out]bufファイル情報を格納する構造体へのポインタ (file_stat_t 型)
[in]formatファイル名のフォーマット文字列 (printf 形式)
[in]argsフォーマット文字列に対応する可変引数リスト
Returns
成功時は 0、失敗時は -1
See also
statf

Definition at line 112 of file fmtio-util.c.

References FMTIO_FORMAT_FILENAME, and FMTIO_UTIL_API.

Referenced by statf().

Here is the caller graph for this function:

◆ statf()

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

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

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

Parameters
[out]bufファイル情報を格納する構造体へのポインタ (file_stat_t 型)
[in]formatファイル名のフォーマット文字列 (printf 形式)
[in]...フォーマット文字列の可変引数
Returns
成功時は 0、失敗時は -1
Note
ファイル名の最大長は OS の規定値です (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)
file_stat_t は、Linux では struct stat、Windows では struct _stat64 の typedef です
使用例
file_stat_t st; int ret = statf(&st, "data_%d.txt", 123);
struct stat file_stat_t
Definition fmtio-util.h:12
FMTIO_UTIL_EXPORT int FMTIO_UTIL_API statf(file_stat_t *buf, const char *format,...)
printf 形式でファイル名を指定する stat ラッパー関数
Definition fmtio-util.c:132
Note
Linux では stat()、Windows では _stat64() を使用します
Warning
Linux と Windows では構造体のフィールドが異なるため、プラットフォーム固有のコードが必要です
  • Windows には st_blksize, st_blocks フィールドがありません
  • st_ctime は Linux ではメタデータ変更時刻、Windows では作成時刻を表します

Definition at line 132 of file fmtio-util.c.

References FMTIO_UTIL_API, and vstatf().

Here is the call graph for this function:

◆ vremovef()

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

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

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

Parameters
[in]formatファイル名の書式文字列 (printf 形式)。
[in]args書式文字列に対応する可変引数リスト。
Returns
成功時は 0、失敗時は非ゼロ値を返します。
See also
removef

Definition at line 147 of file fmtio-util.c.

References FMTIO_FORMAT_FILENAME, and FMTIO_UTIL_API.

Referenced by removef().

Here is the caller graph for this function:

◆ removef()

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

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

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

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

Parameters
[in]formatファイル名の書式文字列 (printf 形式)。
[in]...書式文字列に対応する可変引数。
Returns
成功時は 0、失敗時は非ゼロ値を返します。
Note
ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。
使用例
int ret = removef("data_%d.txt", 123);
FMTIO_UTIL_EXPORT int FMTIO_UTIL_API removef(const char *format,...)
printf 形式でファイル名を指定してファイルを削除します。
Definition fmtio-util.c:155
See also
vremovef

Definition at line 155 of file fmtio-util.c.

References FMTIO_UTIL_API, and vremovef().

Here is the call graph for this function:

◆ vopenf()

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

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

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

Parameters
[in]flagsファイルオープンフラグ。
[in]modeファイル作成時のパーミッション。
[in]formatファイル名の書式文字列 (printf 形式)。
[in]args書式文字列に対応する可変引数リスト。
Returns
成功時はファイルディスクリプタ、失敗時は -1 を返します。
See also
openf

Definition at line 170 of file fmtio-util.c.

References FMTIO_FORMAT_FILENAME, and FMTIO_UTIL_API.

Referenced by openf().

Here is the caller graph for this function:

◆ openf()

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

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

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

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

Parameters
[in]flagsファイルオープンフラグ (O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC, O_APPEND など)。
[in]modeファイル作成時のパーミッション (O_CREAT 指定時に使用)。 Linux では 0644 など、Windows では _S_IREAD | _S_IWRITE など。 O_CREAT を指定しない場合は 0 を渡してください。
[in]formatファイル名の書式文字列 (printf 形式)。
[in]...書式文字列に対応する可変引数。
Returns
成功時はファイルディスクリプタ (0 以上の整数)、失敗時は -1 を返します。
Note
ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。
Windows の CreateFileA が提供する FILE_SHARE_DELETE や FILE_FLAG_WRITE_THROUGH 等の 高度な機能は本関数ではサポートしません。
使用例
int fd = openf(O_WRONLY | O_CREAT | O_TRUNC, 0644, "log_%d.txt", pid);
FMTIO_UTIL_EXPORT int FMTIO_UTIL_API openf(int flags, int mode, const char *format,...)
printf 形式でファイル名を指定してファイルを開きます (低レベル)。
Definition fmtio-util.c:182
See also
vopenf

Definition at line 182 of file fmtio-util.c.

References FMTIO_UTIL_API, and vopenf().

Here is the call graph for this function:

◆ vaccessf()

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

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

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

Parameters
[in]mode確認するアクセスモード (FMTIO_F_OK, FMTIO_R_OK, FMTIO_W_OK)。
[in]formatファイル名の書式文字列 (printf 形式)。
[in]args書式文字列に対応する可変引数リスト。
Returns
アクセス可能な場合は 0、不可の場合は -1 を返します。
See also
accessf

Definition at line 197 of file fmtio-util.c.

References FMTIO_FORMAT_FILENAME, and FMTIO_UTIL_API.

Referenced by accessf().

Here is the caller graph for this function:

◆ accessf()

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

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

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

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

Parameters
[in]mode確認するアクセスモード。以下の定数を使用してください。
  • FMTIO_F_OK: ファイルの存在を確認
  • FMTIO_R_OK: 読み取り権限を確認
  • FMTIO_W_OK: 書き込み権限を確認
[in]formatファイル名の書式文字列 (printf 形式)。
[in]...書式文字列に対応する可変引数。
Returns
アクセス可能な場合は 0、不可の場合は -1 を返します。
Note
ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。
Windows の _access() は実行権限チェック (X_OK) をサポートしないため、 FMTIO_X_OK は提供しません。
使用例
if (accessf(FMTIO_F_OK, "config_%d.txt", instance_id) == 0)
{
// ファイルが存在する
}
#define FMTIO_F_OK
ファイルの存在を確認するモード定数。
Definition fmtio-util.h:51
FMTIO_UTIL_EXPORT int FMTIO_UTIL_API accessf(int mode, const char *format,...)
printf 形式でファイル名を指定してアクセス可否を確認します。
Definition fmtio-util.c:209
See also
vaccessf

Definition at line 209 of file fmtio-util.c.

References FMTIO_UTIL_API, and vaccessf().

Here is the call graph for this function:

◆ vmkdirf()

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

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

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

Parameters
[in]formatディレクトリ名の書式文字列 (printf 形式)。
[in]args書式文字列に対応する可変引数リスト。
Returns
成功時は 0、失敗時は -1 を返します。
See also
mkdirf

Definition at line 224 of file fmtio-util.c.

References FMTIO_FORMAT_FILENAME, and FMTIO_UTIL_API.

Referenced by mkdirf().

Here is the caller graph for this function:

◆ mkdirf()

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

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

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

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

Parameters
[in]formatディレクトリ名の書式文字列 (printf 形式)。
[in]...書式文字列に対応する可変引数。
Returns
成功時は 0、失敗時は -1 を返します。
Note
ファイル名の最大長は OS の制限に従います (Windows: MAX_PATH=260, Linux: PATH_MAX=通常4096)。
親ディレクトリが存在しない場合は失敗します (再帰的なディレクトリ作成は行いません)。
使用例
int ret = mkdirf("logs_%04d", year);
FMTIO_UTIL_EXPORT int FMTIO_UTIL_API mkdirf(const char *format,...)
printf 形式でディレクトリ名を指定してディレクトリを作成します。
Definition fmtio-util.c:236
See also
vmkdirf

Definition at line 236 of file fmtio-util.c.

References FMTIO_UTIL_API, and vmkdirf().

Here is the call graph for this function: