Drakosha
Drakosha

Reputation: 12165

What are the reasons to use "syscall" instead of calling the function directly?

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?

Upvotes: 8

Views: 1855

Answers (1)

Nemo
Nemo

Reputation: 71595

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

Upvotes: 13

Related Questions