名 前
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)大 き い の い ず れ か の 整 数 を 返 す 。 そ れ ぞ れ は 、 s1 が s2 よ り も 、 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/ に 書 か れ て い る 。