strverscmp - Comparer deux chaînes versionnées
Bibliothèque C standard (
libc,
-lc)
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <string.h>
int strverscmp(const char *s1, const char *s2);
On a souvent des fichiers
jan1,
jan2, ...,
jan9,
jan10, ... et il est malvenu que
ls(1) les classe dans l'ordre
jan1,
jan10, ...,
jan2, ...,
jan9. Afin de
remédier à cela, GNU a introduit l'option
-v à
ls(1), option implémenté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(3)
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 suit : 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 elle renvoie ce que
strcmp(3) 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éros
sont interprétées comme si elles avaient un séparateur
décimal en en-tête (de telle sorte que notamment les
chaînes de chiffres commençant par davantage de zéros
viennent avant les chaînes de chiffres avec moins de zéros en
en-tête). Ainsi, le classement est
000,
00,
01,
010,
09,
0,
1,
9,
10.
La fonction
strverscmp() renvoie un entier inférieur, égal
ou supérieur à zéro si
s1 est
déterminée comme étant respectivement plus
récente, égale à ou postérieure à
s2.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
strverscmp() |
Sécurité des threads |
MT-Safe |
Cette fonction est une extension GNU.
Le programme suivant présente le fonctionnement de
strverscmp().
Il utilise
strverscmp() pour comparer deux chaînes de
caractères fournies sur la ligne de commande. Voici un exemple de son
utilisation :
$ ./a.out jan1 jan10
jan1 < jan10
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
int res;
if (argc != 3) {
fprintf(stderr, "Usage : %s <string1> <string2>\n", argv[0]);
exit(EXIT_FAILURE);
}
res = strverscmp(argv[1], argv[2]);
printf("%s %s %s\n", argv[1],
(res < 0) ? "<" : (res == 0) ? "==" : ">", argv[2]);
exit(EXIT_SUCCESS);
}
rename(1),
strcasecmp(3),
strcmp(3),
strcoll(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Frédéric Hantrais <
[email protected]>, Grégoire
Scano <
[email protected]> et Lucien Gentis
<
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]