2012-09-05 41 views

Respuesta

11

A veces, el kernel agrega llamadas al sistema y la biblioteca C tarda un tiempo en admitirlas.

O tal vez está compilando en una distribución anterior de Linux, pero quiere ejecutar en uno más nuevo.

código Ejemplo:

// 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); 

Pero, en general, no hay ninguna ventaja de utilizar syscall si la biblioteca de C en su entorno de compilación tiene lo que necesita. (Por un lado, es incluso menos portátil que usar una interfaz específica de Linux, ya que los números de llamadas del sistema varían según la CPU.)

+0

No deben variar según la CPU, solo mediante la implementación del sistema operativo. – Wug

+1

@Wug: los números de syscall reales varían en x86, x86_64, ARM, PPC, etc. – Nemo

+0

Eso sería la implementación del sistema operativo. No dependen de la CPU de ninguna manera, están definidos en un encabezado en algún lugar y compilados en el kernel. – Wug

Cuestiones relacionadas