Salta l'introduzione Italia - Italiano
HP.com Italia Prodotti e Servizi Supporto e Drivers Soluzioni Come Acquistare
» Contatta HP
Altre opzioni
HP.com Italia
Libro bianco sulle caratteristiche di internazionalizzazione di HP-UX 11.0 - 11i > Capitolo 7 Modifiche varie

Estensioni per il supporto multibyte e supporto Unix98 [11i v1]

» 

Documentazione tecnica

Libro completo in PDF
» Feedback
Inizio contenuto

 » Sommario

 » Glossario

 » Indice

È stato aggiunto a libc un gruppo di API multibyte, seguendo le specifiche C99 (ISO/IEC 9899:1999) e quelle Unix98.

Queste API estendono quelle multibyte e dei caratteri estesi già esistenti, in modo da poter:

  • Eseguire l’immissione e l’ottenimento dei caratteri estesi, di quelli multibyte o di entrambi.

  • Eseguire l’elaborazione generica delle stringhe estese.

  • Fornire funzionalità estese per la conversione tra sequenze di caratteri multibyte ed estesi.

Sono stati introdotti i seguenti nuovi concetti di progettazione:

  • Orientamento del flusso

  • API riavviabili e stato di conversione

Orientamento del flusso

Un flusso può essere orientato ai caratteri estesi oppure ai byte. L’orientamento del flusso è un concetto basato sul modello input/output, che presume che i caratteri siano gestiti come caratteri estesi all’interno dell’applicazione e memorizzati come caratteri multibyte nei file, e che tutte le funzioni di input/output dei caratteri estesi inizino la loro esecuzione con il flusso situato al confine tra due caratteri multibyte.

Dopo che il flusso è stato associato ad un file, ma prima che su di esso sia eseguita qualsiasi operazione, il flusso sarà senza orientamento. Se ad un flusso privo di orientamento si applica una funzione di input o output per caratteri estesi, questo diventerà orientato ai caratteri estesi in modo implicito. Similmente, se ad un flusso privo di orientamento si applica un’operazione di input o output per byte, diventerà orientato ai byte in modo implicito. Dopo che il flusso è stato orientato, l’orientamento è fisso e non potrà essere modificato fino alla chiusura del flusso.

API riavviabili e stato di conversione

È stato introdotto un nuovo gruppo di API, per semplificare la conversione tra rappresentazioni di caratteri multibyte e rappresentazioni di caratteri estesi. Queste API utilizzano un nuovo tipo di oggetto, mbstate_t, che è in grado di conservare le informazioni dello stato di conversione, necessarie per la conversione tra sequenze di caratteri multibyte e caratteri estesi. Lo stato di conversione determina il comportamento dell’operazione tra codifiche multibyte e di caratteri estesi. Per la conversione da caratteri multibyte a caratteri estesi, lo stato della conversione memorizza delle informazioni, come la posizione, all’interno del carattere multibyte corrente (come sequenza di caratteri oppure wide character accumulator). Per la conversione in entrambe le direzioni, lo stato di conversione memorizza lo stato di spostamento corrente, se presente, e, possibilmente, la regola di codifica.

Poiché queste API memorizzano dati parziali dei caratteri, è possibile elaborare sequenze multibyte un byte alla volta, e l’elaborazione può essere interrotta e ripresa (riavviata) in un altro momento; in questo modo le utility di conversione multibyte/esteso diventano riavviabili grazie all’utilizzo dei dati dell’oggetto mbstate_t.

Come ottenere il comportamento MSE/Unix98

Per ottenere il comportamento MSE/Unix98, i programmi devo essere compilati assieme alla definizione della macro -D_XOPEN_SOURCE=500 e nell’ambiente deve essere stata definita la variabile UNIX_STD.

Con le shell Korn, Bourne e POSIX lo si ottiene con:

UNIX_STD=98
export UNIX_STD

Con la shell C lo si ottiene usando

setenv UNIX_STD 98

Per ottenere questa funzionalità, è necessario un compilatore cc uguale a quello HP92453-01 A.11.01.20 HP C Compiler o più recente.

L’elenco seguente è il riepilogo delle API nuove o modificate. Per maggiori dettagli, consultare le manpage corrispondenti.

Nuove interfacce

Le API seguenti sono state aggiunte a libc, e non hanno effetto sul codice esistente:

btowc

btowc() restituisce la rappresentazione del carattere esteso di un dato carattere a singolo byte.

fwide

fwide() imposta l’orientamento del flusso.

fwprintf, swprintf, wprintf

Queste API stampano l’output formattato di caratteri estesi.

fwscanf, swscanf, wscanf

Queste API elaborano l’input formattato di caratteri estesi.

mbrlen

mbrlen() restituisce il numero di byte in un carattere esteso. Il comportamento di questa funzione è influenzato dalla categoria LC_CTYPE della versione locale corrente.

mbrtowc

mbrtowc() converte il flusso di byte in codice di caratteri estesi. Il comportamento di questa funzione è influenzato dalla categoria LC_CTYPE della versione locale corrente.

mbsinit

mbsinit() determina se l’oggetto indicato dal primo argomento, che contiene le informazioni sullo stato dello spostamento, descrive uno stato iniziale di conversione.

mbsrtowcs

mbsrtowcs() converte una stringa di caratteri in un stringa di caratteri estesi. Il comportamento di questa funzione è influenzato dalla categoria LC_CTYPE della versione locale corrente.

towctrans

towctrans() è fornito per la traslitterazione dei caratteri. L’impostazione corrente della categoria LC_CTYPE dovrebbe essere la medesima della chiamata a wctrans().

vfwprintf, vswprintf, vwprintf

Queste API sono fornite per la stampa dell’output formattato in caratteri estesi dell’argomento stdarg. Sono simili a fwprintf(3C), tranne che invece di di essere chiamate con un numero variabile di argomenti, lo sono da un elenco di argomenti definito da stdarg.h.

wcrtomb

wcrtomb() converte un carattere esteso in un carattere multibyte. Determina il numero di byte necessari per rappresentare il carattere corrispondente al codice del carattere esteso, il cui valore è specificato dal secondo argomento.

wcsrtombs

wcsrtombs() converte una stringa di caratteri estesi in un stringa di caratteri. Il comportamento di questa funzione è influenzato dalla categoria LC_CTYPE della versione locale corrente.

wcsstr

wcsstr() trova una sottostringa in un stringa di caratteri estesi. Il comportamento di questa funzione è influenzato dalla categoria LC_CTYPE della versione locale corrente.

wctob

wctob() converte un carattere esteso in uno a singolo byte.

wctrans

wctrans() definisce la mappatura dei caratteri nella versione locale corrente. I valori restituiti da wctrans() saranno validi fino ad una chiamata a setlocale() che modifichi la categoria LC_CTYPE.

wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset

Queste API operano con in caratteri estesi nelle aree di memoria:

  • wmemchr() trova un carattere esteso in un’area di memoria.

  • wmemcmp() confronta i caratteri estesi in memoria.

  • wmemcpy() copia i caratteri estesi in memoria.

  • wmemmove() copia i caratteri estesi in memoria in aree sovrapposte.

  • wmemset() imposta i caratteri estesi in memoria.

Interfacce modificate

Le API seguenti possono avere un comportamento diverso o delle modifiche ai tipi di parametro che possono influire sul codice HP-UX esistente quando si sceglie il supporto per Unix98.

fprintf, printf, snprintf, sprintf, fscanf, scanf, sscanf

printf(3C), scanf(3C) e le funzioni relative supportano il nuovo qualificatore l (lettera elle) per la selezione della conversione dei caratteri estesi di una stringa di un dato formato e, se i dati ottenuti dal flusso in ingresso non forma un carattere esteso valido, impostano errno al valore EILSEQ.

fputwc, putwc, putwchar

Il tipo del primo argomento è cambiato da wint_t a wchar_t.

freopen

Indipendentemente dalla modalità del flusso sottostante, dopo una chiamata riuscita alla funzione freopen(), l’orientamento del flusso sarà azzerato e l’oggetto associato mbstate_t sarà impostato per descrivere uno stato iniziale di conversione.

wcschr, wcsrchr

Il tipo del secondo argomento è cambiato da wint_t a wchar_t.

Versione stampabile
Informativa sulla privacy Usando questo sito si accettano le sue condizioni
© 2001-2003, 2005 Hewlett-Packard Development Company, L.P.