| Italia - Italiano |
|
|
|
![]() |
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] |
|
È 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:
Sono stati introdotti i seguenti nuovi concetti di progettazione:
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. È 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. 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:
Con la shell C lo si ottiene usando
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. Le API seguenti sono state aggiunte a libc, e non hanno effetto sul codice esistente: 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() 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() determina se l’oggetto indicato dal primo argomento, che contiene le informazioni sullo stato dello spostamento, descrive uno stato iniziale di conversione. 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() è fornito per la traslitterazione dei caratteri. L’impostazione corrente della categoria LC_CTYPE dovrebbe essere la medesima della chiamata a wctrans(). 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() 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() 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() trova una sottostringa in un stringa di caratteri estesi. Il comportamento di questa funzione è influenzato dalla categoria LC_CTYPE della versione locale corrente. 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. Queste API operano con in caratteri estesi nelle aree di memoria:
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. 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||