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

时间:2012-09-05 16:35:49

标签: c linux operating-system

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

1 个答案:

答案 0 :(得分:11)

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