strverscmp(3) - wariua/manpages-ko GitHub Wiki

NAME

strverscmp - 두 버전 λ¬Έμžμ—΄ λΉ„κ΅ν•˜κΈ°

SYNOPSIS

#define _GNU_SOURCE         /* feature_test_macros(7) μ°Έκ³  */
#include <string.h>

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

DESCRIPTION

jan1, jan2, ..., jan9, jan10, ... 이런 νŒŒμΌλ“€μ΄ μžˆλŠ”λ° ls(1) ν•˜λ©΄ μˆœμ„œκ°€ jan1, jan10, ..., jan2, ..., jan9 μ‹μœΌλ‘œ λ‚˜μ˜€λŠ” 게 이상해 보일 λ•Œκ°€ μ’…μ’… μžˆλ‹€. 이걸 λ°”λ‘œμž‘κΈ° μœ„ν•΄ GNUμ—μ„œ ls(1)에 -v μ˜΅μ…˜μ„ λ„μž…ν–ˆλŠ”λ°, κ·Έ κ΅¬ν˜„μ—μ„œ versionsort(3)λ₯Ό μ‚¬μš©ν•˜λ©° λ‹€μ‹œ κ±°κΈ°μ„œ strverscmp()λ₯Ό μ‚¬μš©ν•œλ‹€.

인즉 strcmp(3)κ°€ 사전적 μˆœμ„œλ§Œ μ°ΎλŠ” 반면 strverscmp()κ°€ ν•˜λŠ” 일은 두 λ¬Έμžμ—΄μ„ λΉ„κ΅ν•˜μ—¬ "μ˜¬λ°”λ₯Έ" μˆœμ„œλ₯Ό μ°ΎλŠ” 것이닀. 이 ν•¨μˆ˜λŠ” 둜캘 λ²”μ£Ό LC_COLLATEλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ 기본적으둜 λ¬Έμžμ—΄μ΄ ASCII일 κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” 상황듀을 μœ„ν•œ 것이닀.

이 ν•¨μˆ˜κ°€ ν•˜λŠ” 일은 이렇닀. 두 λ¬Έμžμ—΄μ΄ κ°™μœΌλ©΄ 0을 λ°˜ν™˜ν•œλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ•žμ—μ„œλŠ” 두 λ¬Έμžμ—΄μ΄ κ°™κ³  κ±°κΈ°λΆ€ν„°λŠ” λ‹€λ₯Έ μœ„μΉ˜λ₯Ό μ°ΎλŠ”λ‹€. 그리고 κ·Έ μœ„μΉ˜λ₯Ό ν¬ν•¨ν•˜λŠ” (κ±°κΈ°μ„œ μ‹œμž‘ν•˜κ±°λ‚˜ 끝날 μˆ˜λ„ μžˆλŠ”) κ°€μž₯ κΈ΄ μ—°μ†λœ 숫자 열을 μ°ΎλŠ”λ‹€. μ–‘μͺ½ λͺ¨λ‘λ‚˜ μ–΄λŠ ν•œμͺ½μ—μ„œ 이 열이 λΉ„μ–΄ 있으면 strcmp(3)κ°€ λ°˜ν™˜ν•  κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€ (λ°”μ΄νŠΈ κ°’μ˜ 크기에 따라 μ •λ ¬). κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ 두 숫자 열을 μˆ˜λ‘œμ„œ λΉ„κ΅ν•œλ‹€. μ΄λ•Œ 선두에 0이 ν•œ 개 이상 있으면 κ·Έ μ•žμ— μ†Œμˆ˜μ μ΄ μžˆλŠ” κ²ƒμ²˜λŸΌ ν•΄μ„ν•œλ‹€. (κ·Έλž˜μ„œ 특히 선두에 0이 더 λ§Žμ€ 숫자 열이 선두에 0이 더 적은 숫자 μ—΄ μ•žμ— μ˜€λ„λ‘ ν•œλ‹€.) κ·Έλ¦¬ν•˜μ—¬ 000, 00, 01, 010, 09, 0, 1, 9, 10 μˆœμ„œκ°€ λœλ‹€.

RETURN VALUE

strverscmp() ν•¨μˆ˜λŠ” s1이 s2보닀 μ•žμ΄κ±°λ‚˜, κ°™κ±°λ‚˜, 뒀인 κ²½μš°μ— 각각 0보닀 μž‘κ±°λ‚˜, κ°™κ±°λ‚˜, 큰 μ •μˆ˜λ₯Ό λ°˜ν™˜ν•œλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
strverscmp() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

이 ν•¨μˆ˜λŠ” GNU ν™•μž₯이닀.

EXAMPLE

μ•„λž˜ ν”„λ‘œκ·Έλž¨μ„ μ΄μš©ν•΄ strverscmp()의 λ™μž‘ 방식을 λ³Ό 수 μžˆλ‹€. strverscmp()λ₯Ό μ‚¬μš©ν•΄ λͺ…λ Ήν–‰ 인자둜 받은 두 λ¬Έμžμ—΄μ„ λΉ„κ΅ν•œλ‹€. μš©λ‘€λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

$ ./a.out jan1 jan10
jan1 < jan10

ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€

#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);
}

SEE ALSO

rename(1), strcasecmp(3), strcmp(3), strcoll(3)


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️