当前位置: 技术问答>我是一名新手,请问如何学java
iis7站长之家
新手提问:关于<unistd.h>中fork()的声明
来源: 互联网 发布时间:2016-11-18
本文导语: 看linux源码的时候,想看一下fork()函数的声明与实现,查了好久,只找到下面的东西 #define __NR_fork 2 这句话能明白,声明了_NR_fork为2号系统调用 #define _syscall0(type,name) type name(void) { long __res; __asm__ volatile...
看linux源码的时候,想看一下fork()函数的声明与实现,查了好久,只找到下面的东西
这句话能明白,声明了_NR_fork为2号系统调用
这几句也能勉强明白
但是凭这句就能看出是声明了pid_t fork(void)函数吗?
例如我们在写程序的时候
系统是如何查找fork()函数的,另外fork函数的实现又在哪里呢。疑惑
请高手帮忙解答下
#define __NR_fork 2
这句话能明白,声明了_NR_fork为2号系统调用
#define _syscall0(type,name)
type name(void)
{
long __res;
__asm__ volatile ("int $0x80"
: "=a" (__res)
: "0" (__NR_##name));
__syscall_return(type,__res);
}
这几句也能勉强明白
但是凭这句就能看出是声明了pid_t fork(void)函数吗?
例如我们在写程序的时候
#include
#include
pid_t new_pid;
new_pid=fork();
系统是如何查找fork()函数的,另外fork函数的实现又在哪里呢。疑惑
请高手帮忙解答下
|
这个你可以看看 linux 内核设计于实现 第5章, 系统调用。
asmlinkage int sys_fork(struct pt_regs *regs)
{
return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
}
fork 函数在内核态对应的就是 sys_fork
asmlinkage int sys_fork(struct pt_regs *regs)
{
return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
}
fork 函数在内核态对应的就是 sys_fork
|
在我的unistd.h中,extern __pid_t fork (void) __THROW;
fork()函数的实现应该是在系统提供的库文件中
fork()函数的实现应该是在系统提供的库文件中