File: strverscmp.3

package info (click to toggle)
manpages-es 1.55-9
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 7,468 kB
  • ctags: 6
  • sloc: sh: 1,629; makefile: 64
file content (86 lines) | stat: -rw-r--r-- 3,459 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>
.\"
.\" 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 <mpi79470@alu.um.es> 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 <string.h>
.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)