NOMBRE¶
strverscmp - compara dos cadenas de versión
SINOPSIS¶
#define _GNU_SOURCE
#include <string.h>
int strverscmp(const char *s1, const char *s2);
DESCRIPCIÓN¶
A menudo se dispone de los ficheros
jan1,
jan2, ...,
jan9,
jan10, ... y parece incorrecto cuando
ls los ordena como
jan1,
jan10, ...,
jan2, ...,
jan9. Para solucionar
esto, GNU introdujo la opción
-v a
ls(1), que es
implementada usando
versionsort(3), que a su vez utiliza
strverscmp.
De esta manera, la tarea de
strverscmp es comparar dos cadenas y
encontrar el orden "correcto", mientras que
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
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
000,
00,
01,
010,
09,
0,
1,
9,
10.
VALOR DEVUELTO¶
La función
strverscmp() devuelve un entero menor que, igual a, o
mayor que cero si
s1 es, respectivamente, anterior, igual, o posterior
a
s2.
Esta función es una extensión de GNU.
VÉASE TAMBIÉN¶
rename(1),
strcasecmp(3),
strcmp(3),
strcoll(3)