当前位置:  技术问答>linux和unix

高手指教:正在学习-linux内核完全注释(0.11),对于linux/init/main.c有个问题,请帮忙

    来源: 互联网  发布时间:2015-11-14

    本文导语:  在138行 if (!fork()) { /* we count on this going ok */  init(); } 对于函数fork(),我搜索了整个文件夹都没有发现它的实现,它是属于C标准库的,是不是因为在 做成内核image时候,gcc已经把它编译为二进制文件??? 我...

在138行
if (!fork()) { /* we count on this going ok */
 init();
}

对于函数fork(),我搜索了整个文件夹都没有发现它的实现,它是属于C标准库的,是不是因为在
做成内核image时候,gcc已经把它编译为二进制文件???
我想知道fork()函数的实现,哪个地方有标准库函数的实现?我安装了rh4(企业版),里面有所有的源代码吗?

还有一个不明白的是:在内核中,在任何一个文件(.c, .h)中是不是不可以有标准库函数的头文件?如等?

|
在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的实现

记得在另一个贴子上已回答你这个问题了!!!!!顺便问答一下你那个贴子上问的:

最终经过编译以后,(即变成image文件后)对于机器来说,就是二进制组成的文件,也就是所说的bin文件,而ELF文件还会有文件头的概念。

内核代码里面,如time.h中声明了很多方法的原型,
char * ctime(const time_t * tp);
struct tm * gmtime(const time_t *tp);
这些函数就如同你所遇到的fork一样,它也是通过宏扩展之后,在调用之处才是其实现之处,你仔细看一下那几个宏声明。这里只所以声明函数原型,就是为了让其它地方好调用而已,至于在其它地方有没有被实现,主要是看有没有像在main函数内的fork那样相似的方法处理过的。
内核是自成一体的代码,它不能动态连接任何动态库,而内核又需要做到精减,所以它也不能去连接C库。所以不能使用任何第三方库的函数,只能是自成一体的,内核所用到的函数必须都要自己去实现,用到的结构都是自己去声明,最初的堆栈指针都是在汇编代码阶段时去设置的

|
哈哈,正碰上我。我看这本书已经看了两遍了。
看这个文件的第23行 static inline _syscall0(int, fork)
然后再去看看_syscall0是什么,它原来是个宏,在文件unistd.h中第133行:
#define _syscall0(type,name) 
type name(void) 

long __res; 
__asm__volatile("int $0x80" 
       : "=a" (__res) 
       : " "  (__NR_##name)); 
if (__res >= 0) 
   return (type) __res; 
errno = -__res; 
return -1; 
}
,直接替换下就看出来了,呵呵



|
fork是一个系统调用函数。

    
 
 

您可能感兴趣的文章:

  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 关于我对linux高手用yum,非高手用源码的理由
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • Linux安装问题 (不是Linux的高手,很难回答的 @_@ )
  • red hat linux与windows 2000 server相连,2000 关机后linux自动启动!问高手怎么回事?
  • 请教linux高手,在Linux
  • Linux下自动执行命令的问题,哪位Linux高手帮帮我.
  • 我一直用WINDOWS,想转到Linux/Unix,各位Linux/Unix高手可以介绍点吗?
  • 求高手指点,arm-linux
  • 请linux高手指教
  • 各位高手:光盘安装Linux9出现问题,请指教!
  • 初学LINUX!请高手指条明路!
  • 找linux高手帮个忙~回报为你几个G的空间免费长期使用...
  • Linux 高手请进!!!!
  • 装linux遇到问题,有高手在线帮忙吗?请发信息给我
  • 大家是怎么成为linux高手的?
  • 请高手推荐Linux入门方面的资源(网站或电子书)
  • 我刚开始学linux,现在想装一个lumaQQ,请高手说一下详细过程!
  • 关于在VMware下安装linux,请高手指点,先谢过!
  • 怎样让linux从硬盘启动?求高手帮忙
  • linux 下,doxygen生成的html文件中文注释为乱码,请高手指教!
  • 我的shell不支持中文注释,请高手帮忙
  • 论坛 iis7站长之家
  • 请高手详细注释文件/etc/inittab?
  • 高手:看看下面这段资料的格式,用什么工具能去掉里面的注释,格式控制符等
  • linux 写脚本发布web应用?现有一个.sh文件高手帮我注释一下谢谢了!尤其是???的地方
  • 麻烦高手帮忙看看这个shell 第 44行,问题我用注释了
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ubuntu升级内核时无法解压内核,求高手解答
  • Android 内核移植问题 要求识别SATA硬盘 请问内核的make menuconfig 要如何配置?求高手
  • 高手请进,内核构造UDP包的问题
  • 请教高手:如何学习内核编程?
  • 请问高手,内核升级到2.6以后,rpm的问题解决了吗?
  • 高手来谈谈:C++写内核的可行性
  • linux内核里面的所有头文件,有没有整理过的,请高手指点!谢谢!!!
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 万能的CSDN啊,100分请教高手一个编译内核传参的问题!
  • iptables已打入string match补丁,编译内核无法找到该项,求助高手!
  • 求高手提供编译linux内核的经验
  • 如何配置linux内核!! 请高手多多指点!!! 多谢多谢!!!
  • 内核版本兼容性问题,高手请进!
  • 内核启动错误,高分请高手指点。。。
  • 关于linux内核的ioctl函数,请高手指点一下
  • 有那些高手将linux内核源代码完整的看过一遍啊
  • LINUX内核高手帮帮忙
  • 请教内核高手,抽空解释一下系统中断调用处理流程
  • 各位高手:red hat linux 7.2 中如何配置、重新生成内核啊?
  • 哪位高手能详细的讲讲内核中slab allocator到底是什么?
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 高手救命,很急——ORACLE817安装在UNIXWARE711上,手工启动数据库后在netasst中连接错误,高手帮我看看?
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • 各个高手看看这个问题!本人第一次学习java所以要各位高手的帮助。。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3