如何区分调用c库函数和进行系统调用?



有C库函数管道(3)和内核(系统调用)管道(2)。它们都有相同的签名,应该像这样使用(相同的include头):

#include <unistd.h>
int fds[2];
pipe(fds);

这段代码是调用管道(3)还是管道(2)?如何决定是使用libc还是系统调用?如果pipe(3)和pipe(2)是相同的,我怎么知道呢?

这段代码是调用管道(3)还是管道(2)?

它将调用pipe(3)

没有办法直接从C调用系统调用,你要么

  • 必须为这样的系统调用调用libc包装器(如果提供的话),或者
  • 使用syscall(2)来"填充";在执行适合体系结构的系统调用指令之前,将正确的参数放入正确的寄存器,或者
  • 提供您自己的程序集包装器,它将做同样的事情,或者
  • 使用内联__asm__做同样的事情。

我认为你在做一个没有区别的事情。您的代码将调用pipe库函数,它只是pipe系统调用的包装。这不是非此即彼的问题。第3节手册页来自POSIX程序员手册,第2节手册页是linux特定的。

相关内容

  • 没有找到相关文章