fopen open sys_open 内核函数 系统调用区别?
在C语言里,fopen是打开文件的函数,属于C的标准库程序,这个好理解。
但是C语言里有个open函数,这个函数是C标准库函数,还是发布者自己添加进标准库的非标准函数,还是系统调用?
又有一说每一个系统调用对应一个sys_前缀,那么按道理打开文件的系统调用函数应该是:sys_open(...),是不是?
请帮忙说买这三个函数的关系,谢谢!
另外,系统调用是操作系统的提供的,那么它的形式应该和具体的编程语言无关,那么系统调用到底声明它的原型呢?如果我在Java要用系统调用怎么办?是不是系统调用的原型和操作系统本身的实现语言有关,譬如Windows是用C、C++,那么系统调用就是以C++形式声明?
本人小白,谢谢帮助。
[解决办法]
参考http://hi.baidu.com/assslove/item/3f0caa0efc3d8793a2df436e
[解决办法]
系统调用是有一个 CPU 运行等级的提升问题. 用户代码在 3 级, 操作系统代码在 0 级.
open 是对在 Ring 3 级对系统调用的一个包装.
所有的系统函数只有一个系统调用入口, int $0x80, 在这条指令之前把调用的函数对应的功能号放到 %eax 寄存器.
这条指令产生一个中断, CPU 切换到中断处理程序, 运行等级从 Ring 3 级切换到 Ring 0 级. 开始在内核中运行. 内核再根据 %eax 中的功能号来调用不同的函数. sys_open 就是内核中处理 open 对应的功能号的函数.
操作系统提供的原型都是 C 接口的, 其它语言要用再进行包装就是.
fopen open sys_open 内核函数 系统调用差异
fopen open sys_open 内核函数 系统调用区别?在C语言里,fopen是打开文件的函数,属于C的标准库程序,这个好
