strverscmp(3) Library Functions Manual strverscmp(3) NOM strverscmp - Comparer deux chaines versionnees BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include int strverscmp(const char *s1, const char *s2); DESCRIPTION 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 remedier a cela, GNU a introduit l'option -v a ls(1), option implementee en utilisant versionsort(3), qui utilise lui-meme strverscmp(). Ainsi, la tache de strverscmp() consiste a comparer deux chaines et a determiner le << bon >> ordre, alors que strcmp(3) determine seulement l'ordre lexicographique. Cette fonction n'utilise pas la categorie de localisation LC_COLLATE, elle vise donc principalement les situations dans lesquelles les chaines sont supposees etre en ASCII. Cette fonction travaille comme suit : si les deux chaines sont egales, elle renvoie 0. Sinon, elle recherche une position entre deux octets ayant la propriete suivante : avant cette position, les deux chaines sont egales, alors qu'immediatement apres, elles different. Elle determine alors les plus longues chaines de chiffres consecutifs contenant (ou commencant ou se finissant a) cette position. Si l'une des chaines ou bien les deux chaines sont vides, alors elle renvoie ce que strcmp(3) aurait renvoye (classement numerique des valeurs d'octets). Sinon, elle compare numeriquement les deux chaines de chiffres, ou les chaines de chiffres commencant par un ou plusieurs zeros sont interpretees comme si elles avaient un separateur decimal en en-tete (de telle sorte que notamment les chaines de chiffres commencant par davantage de zeros viennent avant les chaines de chiffres avec moins de zeros en en-tete). Ainsi, le classement est 000, 00, 01, 010, 09, 0, 1, 9, 10. VALEUR RENVOYEE La fonction strverscmp() renvoie un entier inferieur, egal ou superieur a zero si s1 est determinee comme etant respectivement plus recente, egale a ou posterieure a s2. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |strverscmp() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ STANDARDS GNU. EXEMPLES Le programme suivant presente le fonctionnement de strverscmp(). Il utilise strverscmp() pour comparer deux chaines de caracteres fournies sur la ligne de commande. Voici un exemple de son utilisation : $ ./a.out jan1 jan10 jan1 < jan10 Source du programme #define _GNU_SOURCE #include #include #include int main(int argc, char *argv[]) { int res; if (argc != 3) { fprintf(stderr, "Utilisation : %s \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); } VOIR AUSSI rename(1), strcasecmp(3), strcmp(3), strcoll(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais , Gregoire Scano et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 strverscmp(3)