|
发表于 2008-8-14 14:07:24
|
显示全部楼层
Post by sybaselu;774669
1:
编译应用程序的头文件中的open(0, ioctl(), read()的系统调用是用/usr/include/linux/下面的xxx.h文件,这里的linux/xxx.h同内核源码中linux-2.6.6/include/linux/xxx.h 有何区别,我看过, 他们的源码大通小异,他们是如何联系的?
2:
应用中的open()---------->与虚拟文件系统的vfs_open()---------->以及内核源码中经过glibc封装的_syscall()中的open()--------->及具体文件如;ext2_open()的关系?
3:
linux中的文件有:----->普通文件
------>设备文件(快和字符)
------>fifo管道
------->等其他文件
他们的打开应该是用不同的open()吧?
glicbc的open只有一个,对应的实现就是系统调用sys_open。文件系统mount的过程比较复杂,但是一旦mount上,open等操作就和文件系统没有关系了。
Linux内核能看到只是inode,事实上通过filp_open调用将得到内核的数据结构struct file,然后再在struct file找到ops为以后的读写操作实现 |
|