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

后端 未结 1 1055
野趣味
野趣味 2021-01-12 07:21

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?

相关标签:
1条回答
  • 2021-01-12 07:58

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

    0 讨论(0)
提交回复
热议问题