Man page - strverscmp(3)

Packages contains this manual

Available languages:

en fr es ja ru ro

Manual

strverscmp

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
АТРИБУТЫ
СТАНДАРТЫ
ПРИМЕРЫ
Исходный код программы
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

strverscmp - сравнение двух строк версий

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#define _GNU_SOURCE /* см. feature_test_macros(7) */
#include <string.h>

int strverscmp(const char * s1 , const char * s2 );

ОПИСАНИЕ

Часто имеются файлы jan1 , jan2 , ..., jan9 , jan10 , … и при выводе списка командой ls (1) они выводятся как jan1 , jan10 , ..., jan2 , …, jan9 , что несколько не то, что хотелось бы. Чтобы исправить это, в GNU добавлен аргумент командной строки -v команды ls (1), который реализован через функцию versionsort (3), которая, в свою очередь, использует функцию strverscmp ().

Таким образом, задача функции strverscmp () в том, чтобы сравнить две строки и найти «правильную» очередность, в то время как strcmp (3) обнаруживает только лексикографический порядок. Эта функция не использует категорию локали LC_COLLATE , что, в общем случае, означает, что строки должны быть в кодировке ASCII.

Функция делает следующее. Если обе строки равны, то возвращается 0. Иначе находится позиция между двумя байтами в обеих строках, до которой строки равны, а после которой не равны. Далее находятся наибольшие последовательные строки цифр, содержащие (или начинающиеся, или заканчивающиеся) эту позицию. Если такие последовательности не найдены в обеих строках, то возвращается такой же результат, какой вернула бы функция strcmp (3) (численная сортировка по значениям байтов). В противном случае обе строки цифр сравниваются численно. При этом строки, начинающиеся с одного или более нулей рассматриваются таким образом, как если бы перед ними стояла десятичная запятая (то есть строки цифр начинающиеся с большего количества нулей, будут идти перед строками с меньшим количеством). Пример: 000 , 00 , 01 , 010 , 09 , 0 , 1 , 9 , 10 .

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Функция strverscmp () возвращает целое число меньшее, равное или большее нуля, если, соответственно, s1 должно идти раньше, на том же месте, или позже s2 .

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes (7).

Image grohtml-613101-1.png

СТАНДАРТЫ

GNU.

ПРИМЕРЫ

Показанная далее программа демонстрирует поведение strverscmp (). Функция strverscmp () используется для сравнения двух строк, заданных в аргументах командной строки. Пример работы:

$ ./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)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .