Sometimes the kernel adds system calls and it takes a while for the C library to support them.
Or maybe you are compiling on an old Linux distribution, but want to run on a newer one.
Example code:
// 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);
But in general, there is no advantage to using syscall
if the C library in your compilation environment has what you need. (For one thing, it is even less portable than using a Linux-specific interface, since the system call numbers vary by CPU.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…