|
On a souvent des fichiers jan1, jan2, ...,
jan9, jan10, ... et il est malvenu que
ls les classe dans l’ordre jan1,
jan10, ..., jan2, ..., jan9. Afin de
remédier à ceci, GNU a introduit
l’option −v à ls(1), option
implantée en utilisant versionsort(3),
qui utilise lui même strverscmp.
Ainsi, la tâche de strverscmp
consiste à comparer deux chaînes et
à déterminer le "bon" ordre,
alors que strcmp détermine seulement
l’ordre lexicographique. Cette fonction
n’utilise pas la catégorie de
localisation LC_COLLATE, elle vise donc principalement les
situations dans lesquelles les chaînes sont
supposées être en ASCII.
Cette fonction travaille comme
détaillé ci dessous. Si les deux
chaînes sont égales, elle renvoie
0. Sinon, elle recherche une position entre deux octets
ayant la propriété suivante :
avant cette position, les deux chaînes sont
égales, alors
qu’immédiatement après, elles
diffèrent. Elle détermine alors les
plus longues chaînes de chiffres
consécutifs contenant (ou
commençant à , ou se finissant Ã
) cette position. Si l’une des chaînes ou
bien les deux chaînes sont vides, alors elles
renvoie ce que strcmp aurait renvoyé
(Classement numérique des valeurs
d’octets). Sinon, elle compare
numériquement les deux chaînes de
chiffres, où les chaînes de
chiffres commençant par un ou plusieurs
zéro sont
interprétées comme si elles
avaient une virgule en entête. ( de telle sorte
que les chaînes de chiffres
particulières commençant par
davantage de zéro viennent avant les
chaînes de chiffres avec moins de
zéro en entête). Ainsi, le
classement est 000, 00, 01, 010,
09, 0, 1, 9, 10.
|