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 -lbsd

Quando 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.

Nota:
  1. 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
  2. Tutti i programmi che gestiscono caratteri multibyte, caratteri estesi o informazioni specifiche del locale devono richiamare la sottoroutine setlocale all'inizio del programma.
  3. La programmazione in un ambiente multithread richiede subroutine rientranti per garantire l'integrità dei dati.