“使用”的原因是什么;syscall";而不是直接调用函数?

“使用”的原因是什么;syscall";而不是直接调用函数?,c,linux,operating-system,C,Linux,Operating System,Linux中有一个允许间接系统调用的函数。使用它的原因是什么?为什么它比直接调用函数更好?有时内核会添加系统调用,而C库需要一段时间才能支持它们 或者您正在旧的Linux发行版上编译,但希望在新的发行版上运行 示例代码: // syscall 277 is sync_file_range() on x86_64 Linux. The header // files lack it on scc-suse10 where we compile, but the // performance be

Linux中有一个允许间接系统调用的函数。使用它的原因是什么?为什么它比直接调用函数更好?

有时内核会添加系统调用,而C库需要一段时间才能支持它们

或者您正在旧的Linux发行版上编译,但希望在新的发行版上运行

示例代码:

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

但是一般来说,如果编译环境中的C库具备您所需要的功能,那么使用
syscall
没有任何好处。(首先,它的可移植性甚至不如使用Linux特定的接口,因为系统调用号随CPU的不同而变化。)

它们不应该随CPU的不同而变化,只应随操作系统实现的不同而变化。@Wug:实际的系统调用号随x86、x86_64、ARM、PPC等操作系统实现的不同而变化。它们在任何方面都不依赖于CPU,它们是在某个标题中定义的,并编译到内核中。@Wug:问题是关于Linux“syscall”函数的,它的“操作系统实现”因CPU而异。因此,“系统调用号因CPU而异”是一个非常准确的说法。