STRVERSCMP
Section: Linux Programmer's Manual (3)
Updated: 2001-12-19
Index
JM Home Page
roff page
名前
strverscmp - 2つのバージョン文字列を比較する
書式
#define _GNU_SOURCE
#include <string.h>
int strverscmp(const char *s1, const char *s2);
説明
jan1, jan2, ..., jan9, jan10, ...
といった名前のファイルがある状況はよくあるが、
ls(1)
を実行したときに
jan1, jan10, ..., jan2, ..., jan9
の順番で表示されるのには違和感がある。
これを修正するために、GNU は
ls(1)
に
-v
オプションを導入した。
この機能は
versionsort(3)
を使って実装されているが、この中で
strverscmp()
が使用されている。
このように
strverscmp()
の役目は2つの文字列を比較して「正しい」順序を探すことである。
これに対して
strcmp(3)
は辞書順で比較した結果を返すだけである。
関数
strverscmp()
はロケールのカテゴリである
LC_COLLATE
を使用しない。
このことから、この関数が主にアスキー文字から成る文字列を
想定していることが分かる。
この関数の動作は以下の通りである。
両方の文字列が等しい場合、0 を返す。
それ以外の場合、その直前までは両方の文字列が等しく、
その直後のバイトで両者に違いがあるような、バイトの境界を探す。
見つかったバイト境界を含む数字列(数字だけの文字列)の最長一致検索を行う。
(数字列は境界から始まっていても、境界で終わっていてもよい)。
2つの文字列から得られた数字列の一方または両方が空であれば、
strcmp(3)
が返した結果を関数の返り値として返す。
すなわち、バイト値を比較した結果を返す。
それ以外の(数字列が両方とも空でない)場合、両方の数字列を数字順で比較する。
このとき、1つ以上の 0 が先頭にある数字列は、前に小数点がついているものと
解釈される。(先頭に 0 が多くある数字列ほど前に来ることになる)
この結果、順序は次のようになる:
000, 00, 01, 010, 09, 0, 1, 9, 10
返り値
関数
strverscmp()
は、ゼロよりも
1)小さい、2)等しい、3)大きいのいずれかの整数を返す。
それぞれは、s1 が s2 よりも、
1)小さい、2)等しい、3)大きい ことを示す。
準拠
この関数は GNU による拡張である。
関連項目
rename(1),
strcasecmp(3),
strcmp(3),
strcoll(3),
feature_test_macros(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:32:06 GMT, November 19, 2007