Come regola generale, è consigliabile utilizzare sempre la versione della libreria C. Spesso hanno wrapper che gestiscono cose esoteriche come riavvii su un segnale (se richiesto). Questo è particolarmente vero se sei già collegato alla libreria. Tutte le regole hanno dei motivi per essere infrante. Motivi per utilizzare le chiamate dirette,
- Si desidera essere
libc
agnostico; Forse con un programma di installazione. Tale codice potrebbe essere eseguito su Android (bionic), uClibc e più tradizionali sistemi glibc/eglibc, indipendentemente dalla libreria utilizzata. Inoltre, caricamento dinamico con wrapper per creare uno strato glibc/bionico run-time che consente un doppio binario Android/Linux.
- Hai bisogno di prestazioni estreme. Anche se questo è probabilmente raro e probabilmente errato.Probabilmente il ripensamento del problema offrirà migliori prestazioni e non chiamando il sistema è spesso una prestazione vincente, che il
libc
può occasionalmente fare.
- Si sta scrivendo del codice
initramfs
o init
senza una libreria; per creare un'immagine più piccola o avviare più velocemente.
- Si sta testando un nuovo kernel/piattaforma e non si vuole complicare la vita con un file system completo; molto simile allo
initramfs
.
- Si desidera eseguire un'operazione molto rapidamente all'avvio del programma, ma alla fine si desidera utilizzare le routine
libc
.
- Per evitare un errore noto nello
libc
.
- La funzionalità non è disponibile tramite
libc
.
Siamo spiacenti, la maggior parte degli esempi sono specifici per Linux, ma i razionali dovrebbero essere applicati ad altre varianti di Unix. L'ultimo elemento è abbastanza comune quando vengono introdotte nuove funzionalità in un kernel. Ad esempio, quando kqueue
o epoll
in cui è stato introdotto per la prima volta, non era disponibile il libc
per supportarli. Questo può accadere anche se il sistema ha una vecchia libreria, ma un kernel più recente e si desidera utilizzare questa funzionalità.
Se il processo non ha utilizzato il libc
, molto probabilmente avrà qualcosa nel sistema. Codificando le proprie varianti, è possibile annullare la cache fornendo due percorsi per lo stesso obiettivo finale. Inoltre, Unix condividerà le tabelle codici tra i processi. Generalmente non vi è alcun motivo per non utilizzare la versione libc
.
Altre risposte hanno già svolto un lavoro stellare sulla differenza tra libc
e le chiamate di sistema.
fonte
2013-03-24 04:45:43
foto fantastica. molto chiaro – henryyao