Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       strverscmp - 2つのバージョン文字列を比較する

書式

       #define _GNU_SOURCE         /* feature_test_macros(7) 参照 */
       #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)大きいのいずれかの整数を返す。 そ
       れぞれは、s1s2 よりも、 1)小さい、2)等しい、3)大きい ことを示す。

準拠

       この関数は GNU による拡張である。

関連項目

       rename(1), strcasecmp(3), strcmp(3), strcoll(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。