当前位置: 技术问答>linux和unix
问个比较弱智的问题:研究linux内核完全注释,有些疑惑——init/main.c中的fork
来源: 互联网 发布时间:2015-11-14
本文导语: 我发现在所有包内都没有fork函数的实现,我知道它是标准函数之一。 是不是在编译内核的时候,就把相应的库函数替换成了二进制代码? 因为在该内核所有源程序当中,都没有包含类似的文件。 难道编译的时候,...
我发现在所有包内都没有fork函数的实现,我知道它是标准函数之一。
是不是在编译内核的时候,就把相应的库函数替换成了二进制代码?
因为在该内核所有源程序当中,都没有包含类似的文件。
难道编译的时候,所有都已经编译成为汇编代码或者二进制代码?
另外:gcc编译器编译自己写的程序的时候,是在某个操作系统之上运行的;但假如没有操作系统,
编译内核代码时候,gcc是在那个环境上运行进行编译啊?很不明白哦
是不是在编译内核的时候,就把相应的库函数替换成了二进制代码?
因为在该内核所有源程序当中,都没有包含类似的文件。
难道编译的时候,所有都已经编译成为汇编代码或者二进制代码?
另外:gcc编译器编译自己写的程序的时候,是在某个操作系统之上运行的;但假如没有操作系统,
编译内核代码时候,gcc是在那个环境上运行进行编译啊?很不明白哦
|
在main函数的开头不是有一条语句是这样的吗:
static inline _syscall0(int,fork)
你需要结合到unistd.h文件中的宏_syscall0来看上面一句代码
等你把unistd.h文件中的宏_syscall0看懂了,再看懂static inline _syscall0(int,fork)就明白了
提示一下:
static inline _syscall0(int,fork)就是通过宏_syscall0替换后,就变成fork函数的实现了,也就是你所说的为何没有在什么地方看到fork的实现
static inline _syscall0(int,fork)
你需要结合到unistd.h文件中的宏_syscall0来看上面一句代码
等你把unistd.h文件中的宏_syscall0看懂了,再看懂static inline _syscall0(int,fork)就明白了
提示一下:
static inline _syscall0(int,fork)就是通过宏_syscall0替换后,就变成fork函数的实现了,也就是你所说的为何没有在什么地方看到fork的实现