kazmax - Linux で自宅サーバー

strverscmp - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. 関連項目

名前

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

書式

#define _GNU_SOURCE

#include <string.h>
int strverscmp(const char *s1, const char *s2);

説明

jan1 , jan2 , ..., jan9 , jan10 , ...といった名前のファイルがある状況はよくあるが、 ls を実行したときに jan1 , jan10 , ..., jan2 , ..., jan9 の順番で表示されるのには違和感がある。 これを修正するために、GNU は   ls (1) に -v オプションを導入した。 この機能は versionsort (3)を使って実装されているが、この中で strverscmp ()が使用されている。
このように strverscmp ()の役目は2つの文字列を比較して「正しい」順序を探すことである。 これに対して strcmp ()は辞書順で比較した結果を返すだけである。 関数 strverscmp ()はロケールのカテゴリである LC_COLLATE を使用しない。 このことから、この関数が主にアスキー文字から成る文字列を 想定していることが分かる。
この関数の動作は以下の通りである。 両方の文字列が等しい場合、0 を返す。 それ以外の場合、その直前までは両方の文字列が等しく、 その直後のバイトで両者に違いがあるような、バイトの境界を探す。 見つかったバイト境界を含む数字列(数字だけの文字列)の最長一致検索を行う。 (数字列は境界から始まっていても、境界で終わっていてもよい)。 2つの文字列から得られた数字列の一方または両方が空であれば、 strcmp ()が返した結果を関数の返り値として返す。 すなわち、バイト値を比較した結果を返す。 それ以外の(数字列が両方とも空でない)場合、両方の数字列を数字順で比較する。 このとき、1つ以上の 0 が先頭にある数字列は、前に小数点がついているものと 解釈される。(先頭に 0 が多くある数字列ほど前に来ることになる) この結果、順序は次のようになる: 000 , 00 , 01 , 010 , 09 , 0 , 1 , 9 , 10

返り値

関数 strverscmp () は、ゼロよりも 1)小さい、2)等しい、3)大きいのいずれかの整数を返す。 それぞれは、s1s2 よりも、 1)小さい、2)等しい、3)大きい ことを示す。

準拠

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

関連項目