Subroutine, programmi di esempio e librerie
Questo argomento fornisce informazioni su quali sono le subroutine, come utilizzarle e dove vengono memorizzate.
Le subroutine sono memorizzate nelle librerie per conservare lo spazio di archiviazione e rendere più efficiente il processo di linkage del programma. Una libreria è un file di dati che contiene copie di un certo numero di singoli file e informazioni di controllo che consentono di accedere singolarmente. Le librerie si trovano nelle directory /usr/ccs/lib e /usr/lib . Per convenzione, la maggior parte di essi ha nomi del modulo libname.a dove name identifica la libreria specifica.
Tutte le istruzioni di inclusione dovrebbero essere vicine all'inizio del primo file compilato, di solito nella sezione delle dichiarazioni prima di main ()e devono verificarsi prima di utilizzare qualsiasi funzioni di libreria. Ad esempio, utilizzare la seguente dichiarazione per includere il file stdio.h :
#include <stdio.h>Non è necessario eseguire alcuna operazione speciale per utilizzare le sottoroutine dalla libreria C standard (libc.a). Il comando cc ricerca automaticamente questa libreria per le subroutine di cui un programma ha bisogno. Tuttavia, se si utilizzano le subroutine da un'altra libreria, è necessario indicare al compilatore la ricerca di quella libreria. Se il tuo programma utilizza le subroutine dalla libreria libname.a, compila il tuo programma con il flag -lnome (lowercase L). Il seguente esempio compila il programmamyprog.c, che utilizza sottoroutine dalla libreria libdbm.a :
cc myprog.c -ldbmÈ possibile specificare più di un indicatore -l (lowercase L). Ogni flag viene elaborato nell'ordine specificato.
Se si sta utilizzando una sottoroutine memorizzata in Berkeley Compatibility Library, collegarsi alla libreria libbsd.a prima del collegamento alla libreria libc.a , come mostrato nel seguente esempio:
cc myprog.c -lbsdQuando si verifica un errore, molte subroutine restituiscono il valore -1 e impostano una variabile esterna denominata errno per identificare l'errore. Il file sys/errno.h dichiara la variabile errno e definisce una costante per ciascuna delle possibili condizioni di errore.
In questa documentazione, tutte le chiamate di sistema sono descritte come sottoroutine e vengono risolte dalla libreria libc.a . L'interfaccia di programmazione alle chiamate di sistema è identica a quella delle subroutine. Per quanto riguarda un programma C Language, una chiamata di sistema è semplicemente una chiamata subroutine. La vera differenza tra una chiamata di sistema e una subroutine è il tipo di operazione che esegue. Quando un programma richiama una chiamata di sistema, un interruttore del dominio di protezione avviene in modo che la routine chiamata abbia accesso alle informazioni privilegiate del kernel del sistema operativo. La routine quindi opera in modalità kernel per eseguire un'attività per conto del programma. In questo modo l'accesso alle informazioni privilegiate del sistema è limitato ad una serie predefinita di routine le cui azioni possono essere controllate.
- Il seguente elenco rappresenta le routine wString che sono obsolete per libc.aa 64 bit. Sono inclusi gli equivalenti libc.a a 64 bit corrispondenti. Le routine per libc.a a 32 bit si trovano nella sottoroutine wstring .
32 Bit only 64 Bit Equivalent wstrcat wcscat wstrchr wcschr wstrcmp wcscoll wstrcpy wcscpy wstrcspn wcscspn wstrdup Not available and has no equivalents in the 64 bit libc.a wstrlen wcslen wstrncat wcsncat wstrncpy wcsncpy wstrpbrk wcspbrk wstrrchr wcsrchr wstrspn wcsspn wstrtok wcstok - Tutti i programmi che gestiscono caratteri multibyte, caratteri estesi o informazioni specifiche del locale devono richiamare la sottoroutine setlocale all'inizio del programma.
- La programmazione in un ambiente multithread richiede subroutine rientranti per garantire l'integrità dei dati.