什么原因使用“系统调用”,而不是直接调用该函数?

系统调用允许在Linux中进行间接的系统调用。 使用它的原因是什么 – 为什么它比直接调用函数更好?

Solutions Collecting From Web of "什么原因使用“系统调用”,而不是直接调用该函数?"

有时内核添加系统调用,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而异。)