2012-09-05 10 views

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

+0

Non devono variare dalla CPU, ma solo dall'implementazione del sistema operativo. – Wug

+1

@Wug: i numeri effettivi di syscall variano su x86, x86_64, ARM, PPC, ecc. – Nemo

+0

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

Problemi correlati