C'è syscall che consente chiamate di sistema indirette in Linux. Quali sono le ragioni per usarlo - e perché è meglio della chiamata diretta alla funzione?Quali sono i motivi per utilizzare "syscall" invece di chiamare direttamente la funzione?
8
A
risposta
11
A volte il kernel aggiunge chiamate di sistema e ci vuole un po 'prima che la libreria C le supporti.
O forse si sta compilando su una vecchia distribuzione Linux, ma si vuole eseguire su una più recente.
codice Esempio:
// syscall 277 is sync_file_range() on x86_64 Linux. The header
// files lack it on scc-suse10 where we compile, but the
// performance benefits are substantial, so we just call it
// directly. FIXME someday.
#define SYNC_FILE_RANGE_WRITE 2
syscall(277, fd, done, n, SYNC_FILE_RANGE_WRITE);
Ma, in generale, non v'è alcun vantaggio di utilizzare syscall
se la libreria C nel proprio ambiente di compilazione è quello che vi serve. (Per prima cosa, è ancora meno portabile rispetto all'utilizzo di un'interfaccia specifica per Linux, dal momento che i numeri di chiamata del sistema variano a seconda della CPU.)
Non devono variare dalla CPU, ma solo dall'implementazione del sistema operativo. – Wug
@Wug: i numeri effettivi di syscall variano su x86, x86_64, ARM, PPC, ecc. – Nemo
Questa sarebbe l'implementazione del sistema operativo. Non dipendono dalla CPU in alcun modo, sono definiti in un'intestazione da qualche parte e compilati nel kernel. – Wug