有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特定的。