util/include/console-util.h

1 ファイル

1.1 util/include/console-util.h

コンソール UTF-8 ヘルパー API。

Windows 環境で stdout / stderr を内部パイプに差し替え、 コンソール (TTY) 出力は WriteConsoleW 経由で UTF-16 として 送出し、パイプやファイルへは UTF-8 バイト列をそのまま書き戻します。
Linux 環境では console_init は何もせず 0 を返します。
呼び出し側は #ifdef``_WIN32 ガード不要でクロスプラットフォームに 使用できます。

1.1.1 使用例

#include <console-util.h>
#include <stdio.h>

int main(void) {
    console_init();              // stdout / stderr を差し替え
    printf("こんにちは\n");       // コンソールでは WriteConsoleW、パイプでは UTF-8
    fprintf(stderr, "警告\n");
    console_dispose();
    return 0;
}

2 関数

2.1 console_init

CONSOLE_UTIL_EXPORT void CONSOLE_UTIL_API console_init ( void )

コンソールヘルパーを初期化する。

Windows 環境では stdout と stderr を内部パイプに差し替え、 バックグラウンドスレッドを起動します。
スレッドはパイプから UTF-8 バイト列を受け取り、出力先がコンソール (TTY) の場合は WriteConsoleW で UTF-16 として書き出します。 パイプやファイルへは UTF-8 バイト列をそのまま転送します。
Linux 環境では何もしません。
stdin には触れません。
本関数はプログラム開始時に一度だけ呼び出すことを想定しています。
初期化に失敗した場合は stderr に警告を出力し、何もせずに返ります。

2.1.1 補足

本関数を呼び出した後は console_dispose を呼び出して リソースを解放してください。

2.2 console_dispose

CONSOLE_UTIL_EXPORT void CONSOLE_UTIL_API console_dispose ( void )

コンソールヘルパーを終了し、リソースを解放する。

Windows 環境ではバックグラウンドスレッドを停止し、 stdout / stderr を元のハンドルに戻します。
Linux 環境では何もしません。
console_init を呼び出していない場合も安全に呼び出せます。

3 定数、マクロ

3.1 CONSOLE_UTIL_EXPORT

#define CONSOLE_UTIL_EXPORT

DLL エクスポート/インポート制御マクロ。

ビルド条件に応じて以下の値を取ります。

条件
Linux (非 Windows) (空)
Windows / __INTELLISENSE__ 定義時 (空)
Windows / CONSOLE_UTIL_STATIC 定義時 (静的リンク) (空)
Windows / CONSOLE_UTIL_EXPORTS 定義時 (DLL ビルド) __declspec(dllexport)
Windows / CONSOLE_UTIL_EXPORTS 未定義時 (DLL 利用側) __declspec(dllimport)

3.2 CONSOLE_UTIL_API

#define CONSOLE_UTIL_API

呼び出し規約マクロ。

Windows 環境では __stdcall 呼び出し規約を指定します。
Linux (非 Windows) 環境では空に展開されます。
既に定義済みの場合は再定義されません。