STRVERSCMP(3)

NOMBRE
strverscmp - compara dos cadenas de versión

SINOPSIS
#define _GNU_SOURCE         /* Vea feature_test_macros(7) */
#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(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.

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.

ATRIBUTOS
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

CONFORME A
Esta función es una extensión GNU.

EJEMPLOS
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

  Program source
    #define _GNU_SOURCE
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.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);
    }

VÉASE TAMBIÉN
rename(1), strcasecmp(3), strcmp(3), strcoll(3)

COLOFÓN
Esta página es parte de la versión 5.11 del proyecto Linux man-pages. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Miguel Pérez Ibars <mpi79470@alu.um.es> Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 debian-l10n-spanish@lists.debian.org>..