duplocale(3)

NUME
duplocale - duplică un obiect de configurație regională

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <locale.h>

locale_t duplocale(locale_t locobj);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

duplocale():
    Începând cu glibc 2.10
        _XOPEN_SOURCE >= 700
    Înainte de glibc 2.10:
        _GNU_SOURCE

DESCRIERE
Funcția duplocale() creează un duplicat al obiectului parametrului regional la care se face referire prin locobj.

Dacă locobj este LC_GLOBAL_LOCALE, duplocale() creează un obiect de configurație regională care conține o copie a parametrului regional global determinat de setlocale(3).

VALOAREA RETURNATĂ
În caz de succes, duplocale() returnează un gestionar pentru noul obiect de configurație regională. În caz de eroare, returnează (locale_t) 0 și configurează errno pentru a indica eroarea.

ERORI-IEȘIRE

ENOMEM
    Memorie insuficientă pentru a crea obiectul de configurație regională duplicat.

STANDARDE
POSIX.1-2008.

ISTORIC
glibc 2.3.

NOTE
Duplicarea unei configurații regionale poate servi următoarelor scopuri:

•   Pentru a crea o copie a unui obiect configurație regională în care una sau mai multe categorii urmează să fie modificate (utilizând newlocale(3)).

•   Pentru a obține un gestionar pentru configurația regională curentă, care poate fi utilizat în alte funcții care utilizează un gestionar de configurație regională, cum ar fi toupper_l(3). Acest lucru se face prin aplicarea duplocale() la valoarea returnată de următorul apel:

        loc = uselocale((locale_t) 0);

    Această tehnică este necesară, deoarece apelul uselocale(3) de mai sus poate returna valoarea LC_GLOBAL_LOCALE, ceea ce duce la un comportament nedefinit dacă este transmis unor funcții precum toupper_l(3). Apelul duplocale() poate fi utilizat pentru a se asigura că valoarea LC_GLOBAL_LOCALE este convertită într-un obiect de configurație regională utilizabil. A se vedea secțiunea EXEMPLE, de mai jos.

Fiecare obiect de configurație regională creat de duplocale() trebuie să fie eliberat cu ajutorul freelocale(3).

EXEMPLE
Programul de mai jos utilizează uselocale(3) și duplocale() pentru a obține un gestionar pentru parametrul regional curent, care este apoi transmis la toupper_l(3). Programul primește un argument de linie de comandă, un șir de caractere care este convertit în majuscule și afișat la ieșirea standard. Un exemplu de utilizare a acestui program este următorul:

    $ ./a.out abc;
    ABC

  Sursa programului
    #define _XOPEN_SOURCE 700
    #include <ctype.h>
    #include <locale.h>
    #include <stdio.h>
    #include <stdlib.h>

    #define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                            } while (0)

    int
    main(int argc, char *argv[])
    {
        locale_t loc, nloc;

        if (argc != 2) {
            fprintf(stderr, "Utilizare: %s șir\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        /* Această secvență este necesară, deoarece uselocale() ar putea
           returna valoarea LC_GLOBAL_LOCALE, care nu poate fi transmisă
           ca argument pentru toupper_l(). */*/

        loc = uselocale((locale_t) 0);
        if (loc == (locale_t) 0)
            errExit("uselocale");

        nloc = duplocale(loc);
        if (nloc == (locale_t) 0)
            errExit("duplocale");

        for (char *p = argv[1]; *p; p++)
            putchar(toupper_l(*p, nloc));

        printf("\n");

        freelocale(nloc);

        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
freelocale(3), newlocale(3), setlocale(3), uselocale(3), locale(5), locale(7)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.