免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: rockcanon
打印 上一主题 下一主题

[内核入门] read()的源代码在哪里? [复制链接]

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
11 [报告]
发表于 2012-07-17 00:25 |只看该作者
如果你要得是应用层的 read 库函数的源码的话,貌似不在内核源代码中,你可以参考 gnu lib

论坛徽章:
0
12 [报告]
发表于 2012-07-17 09:32 |只看该作者
本帖最后由 wswfc 于 2012-07-17 09:35 编辑

回复 9# rockcanon


那我明白了,确实是内核没有实现,为什么没有实现呢?因为内核代码(包括负责初始化的3个进程(参考《linux内核设计的艺术》))不需要调用read()。

而open和write在内核代码的开机初始化阶段,都要用到(主要对应于串口的初始化),所以就给简单实现出来啦!

那么执行int 0x80的read()到底在哪里呢?

我觉得应该在glibc之类的基础库里面吧?在glibc的源码的unix目录下有一个类似叫system_call.list的文件,里面就说了包括read在内的大部分系统调用。

   

论坛徽章:
0
13 [报告]
发表于 2012-07-17 09:34 |只看该作者
cdtits 发表于 2012-07-17 00:25
如果你要得是应用层的 read 库函数的源码的话,貌似不在内核源代码中,你可以参考 gnu lib


正解!

论坛徽章:
0
14 [报告]
发表于 2012-07-17 10:09 |只看该作者
int 0x80的处理程序通过call _sys_call_table(,%eax,4)来调用sys_XXXX,这个我知道,
sys_xxx是进入屋里的事情,read()是扇门,门还没找到,你们老是说屋里的事,
我就是想知道linux 0.01里read()到底有没有实现。

论坛徽章:
0
15 [报告]
发表于 2012-07-17 10:13 |只看该作者
前端时间我也有这个疑问?还有许多函数,例如mkdir,chmod等等函数,在内核代码中也是没有找到,后来以前看过,是在glib库中实现的

论坛徽章:
0
16 [报告]
发表于 2012-07-17 13:13 |只看该作者
en,总算是有个让我觉得说得过去的说法了。

论坛徽章:
0
17 [报告]
发表于 2012-07-18 00:07 来自手机 |只看该作者
本帖最后由 wswfc 于 2012-07-18 00:28 编辑

lss和我说的一个意思的哇~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP