.\" Copyright (C) 2001 Andries Brouwer .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" Traducido por Miguel Pérez Ibars el 13-agosto-2004 .\" .TH STRVERSCMP 3 "19 diciembre 2001" "GNU" "Manual del Programador de Linux" .SH NOMBRE strverscmp \- compara dos cadenas de versión .SH SINOPSIS .nf .B #define _GNU_SOURCE .br .B #include .sp .BI "int strverscmp(const char *" s1 ", const char *" s2 ); .fi .SH DESCRIPCIÓN A menudo se dispone de los ficheros .IR jan1 ", " jan2 ", ..., " jan9 ", " jan10 ", ..." y parece incorrecto cuando .B ls los ordena como .IR jan1 ", " jan10 ", ..., " jan2 ", ..., " jan9 ". .\" classical solution: "rename jan jan0 jan?" Para solucionar esto, GNU introdujo la opción .B \-v a .BR ls (1), que es implementada usando .BR versionsort (3), que a su vez utiliza .BR strverscmp . De esta manera, la tarea de .B strverscmp es comparar dos cadenas y encontrar el orden "correcto", mientras que .B strcmp solamente encuentra el orden lexicográfico. Esta función no usa la categoría de localización LC_COLLATE, por lo que se utiliza sobre todo en situaciones donde se espera que las cadenas esten en formato ASCII. Lo que hace esta función es lo siguiente. Si ambas cadenas son iguales, devuelve 0. En otro caso encuentra la posición entre dos bytes con la propiedad de que antes de esta posición ambas cadenas son iguales, mientras que justamente después hay una diferencia. Encuentra las cadenas de dígitos consecutivos más largas que contienen (o comienzan o terminan en) esta posición. Si una o ambas están vacías, devuelve lo que .B strcmp hubiera devuelto (ordenamiento numérico de los valores de byte). En otro caso, compara ambas cadenas de dígitos numéricamente, donde las cadenas de dígitos con uno o más ceros al principio son interpretadas como si tuvieran un punto decimal delante (así que las cadenas de dígitos con más ceros al principio aparecen antes que aquellas cadenas de dígitos con menos ceros al principio). Así, el ordenamiento es .IR 000 ", " 00 ", " 01 ", " 010 ", " 09 ", " 0 ", " 1 ", " 9 ", " 10 . .SH "VALOR DEVUELTO" La función \fBstrverscmp()\fP devuelve un entero menor que, igual a, o mayor que cero si \fIs1\fP es, respectivamente, anterior, igual, o posterior a \fIs2\fP. .SH "CONFORME A" Esta función es una extensión de GNU. .SH "VÉASE TAMBIÉN" .BR rename (1), .BR strcasecmp (3), .BR strcmp (3), .BR strcoll (3)