strfmon - ライブラリコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- 例
- 準拠
- 関連項目
名前
書式
#include <monetary.h>
ssize_t strfmon(char *s, size_t max, const char *format,"...);"
説明
strfmon
()関数は、指定された数量を
format
で指定されたフォーマットにしたがって整形し、
結果をサイズ
max
の文字配列
s
に書きこむ。
format
中の通常の文字は、変換されずにそのまま
s
にコピーされる。変換指定は `%' 文字で始まる。
この直後には、以下のフラグを 0 個以上続けることができる。
-
=
f
-
1 バイト文字
f
を数値埋め文字 (numeric fill character) にする
(左精度と共に用いる。以下を参照)。
指定されないと、スペース文字が用いられる。
-
^
-
現在のロケールで定義されているであろうグループ化文字 (grouping character)
を一切使わない。デフォルトではグループ化は有効になっている。
-
(
または
+
-
( フラグは、負の数値を括弧で括ることを意味する。
+ フラグは符号をデフォルトのように取り扱うことを意味する
(すなわち数値の前にロケールの符号マークが置かれる。
例えば正ならなにもなく、負なら "-" を置く、など)。
-
!
-
通貨シンボルを省略する。
-
-
-
すべてのフィールドを左詰めにする。デフォルトは右詰め。
次の位置には、フィールドの幅を指定できる。
10 進の数値文字列で、フィールドの最小幅をバイト単位で指定する。
デフォルトは 0。
結果がこの幅よりも狭くなった場合には、
不足分がスペースで埋められる
(左詰めフラグが指定されていなければ左側が埋められる)。
次の位置には、"#" に 10 進数値文字列を続けた形式で、
左精度 (left precision) を指定できる。
通貨の基数点 (radix) より左側の数値の桁数がこの指定より小さい場合は、
数値埋め文字で左側が埋められる。
このフィールド幅の指定では、グループ化文字はカウントされない。
次の位置には、"." に 10 進数値文字列を続けた形式で、
右精度 (right precision) を指定できる。
整形される数値は、整形前にこの桁数に丸められる。
デフォルトではカレントロケールの
frac_digits
と
int_frac_digits
の指定を用いる。
右精度が 0 の場合は、基数点文字 (radix character) は印字されない
(ここでの基数点文字は LC_MONETARY で定義されており、
LC_NUMERIC の指定とは異なっていてもよい)。
最後に、変換指定は変換文字 (conversion character)
で終了しなければならない。
変換文字には以下の 3 つがある。
-
%
-
(この場合は指定全体が "%%" でなければならない。)
結果の文字列に `%' 文字を書きこむ。
-
i
-
double 型の引き数ひとつが、
ロケールの国際通貨フォーマット (international currency format)
を用いて変換される。
-
n
-
double 型の引き数ひとつが、
ロケールの国内通貨フォーマット (national currency format)
を用いて変換される。
返り値
strfmon
()関数は、結果の文字列が終端の NULL バイトを含めて配列
s
に収まった場合には、
s
に書きこまれた文字数を返す。NULL バイトは文字数に入らない。
それ以外の場合には、
errno
に E2BIG を設定して -1 を返す。
この場合の配列の内容は未定義である。
例
strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]",
1234.567, 1234.567);
のような関数コールの出力は、オランダのロケールでは以下のような出力になる。
[ fl **1234,57] [ NLG **1 234,57]
(fl は "florijnen" の意。NLG は Netherlands Guilder。)
グループ化文字を用いると非常に醜くなる。
同時に間違いなく混乱の原因にもなってしまうだろう。
これは数値の半分以下の幅であるべきだが、
数値と同じだけの幅を取ってしまうからである。
ひどいことに、 "fl" の前後にはスペースが入ってしまい、
また "NLG" の前には 1 つ、後には 2 つのスペースが置かれている。
これはロケールファイルのバグであろう。
イタリア・オーストラリア・スイス・ポルトガルの
各ロケールでの結果は以下のようになる。
[ L. **1235] [ ITL **1.235]
[ $**1234.57] [ AUD **1,234.57]
[Fr. **1234,57] [CHF **1.234,57]
[ **1234$57Esc] [ **1.234$57PTE ]
準拠
POSIX.1-2001 にはない。
他のいくつかのシステムに存在する。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする