strverscmp - compara dos cadenas de versión
Biblioteca Estándar C (
libc,
-lc)
#define _GNU_SOURCE /* Vea feature_test_macros(7) */
#include <string.h>
int strverscmp(const char *s1, const char *s2);
A menudo se dispone de los ficheros
jan1,
jan2, ...,
jan9,
jan10, ... y parece incorrecto cuando
ls(1) 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(3)
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.
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.
Para obtener una explicación de los términos usados en esta
sección, véase
attributes(7).
Interfaz |
Atributo |
Valor |
strverscmp() |
Seguridad del hilo |
Multi-hilo seguro |
Esta función es una extensión GNU.
The program below can be used to demonstrate the behavior of
strverscmp(). It uses
strverscmp() to compare the two strings
given as its command-line arguments. An example of its use is the following:
$ ./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 traducción al español de esta página del manual fue
creada por Miguel Pérez Ibars <
[email protected]>
Esta traducción es documentación libre; lea la
GNU
General Public License Version 3 o posterior con respecto a las
condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página
del manual, envíe un correo electrónico a
[email protected]