There's syscall which allows indirect system calls in Linux. What are the reasons to use it - and why is it better than direct call to the function?
Asked
Active
Viewed 1,563 times
1 Answers
12
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.)

Nemo
- 70,042
- 10
- 116
- 153
-
They shouldn't vary by CPU, only by operating system implementation. – Wug Sep 05 '12 at 16:54
-
1@Wug: The actual syscall numbers vary on x86, x86_64, ARM, PPC, etc. – Nemo Sep 05 '12 at 17:47
-
That would be operating system implementation. They're not dependent on the CPU in any way, they're defined in a header somewhere and compiled into the kernel. – Wug Sep 05 '12 at 20:48
-
1@Wug: The question is about the Linux "syscall" function, whose "operating system implementation" varies by CPU. Thus "the system call numbers vary by CPU" is a perfectly accurate statement. – Nemo Sep 05 '12 at 21:29