Xalanz's 网络日志(Ethan's blog)

阳光风雨中的泥土Mud under the sunlight and rain

Linux pipe 管道到底是什么? 跟踪mkfifo到内核

,

[By Xalanz]技术问题往往都是这样,当它不出问题的时候,你并不会有特别的兴趣去究根问底,所以,出了问题,往往就是好事.Linux 的Pipe 出了一个问题,我不得不问自己,Pipe 到底是什么,在Linux kernel 里面是怎么实现的.

(1)第一步,你调用了mkfifo()或者使用mkfifo命令,在磁盘文件系统中建立了一个有名字的fifo 文件,但是mkfifo并不是一个系统调用,mkfifo()最终调用了mknod()系统调用来执行实际的功能。
(2)mknod()系统调用的内核部分是在linux\fs\namei.c 文件中sys_mknod()实现对系统调用的接口。

(2)对于fifo,sys_mknod()进一步调用虚拟文件系统的统一接口vfs_mknod()。

(3)而vfs_mknod()将调用相应目录的inode节点的mknod()方法来执行真正的mknod()操作。





1、Pipe 在那个子系统实现的? 在网络子系统、还是进程间通讯部分,还是什么?
Pipe 是在文件系统部分实现的。
2、Pipe 文件还是什么?
Pipe 是一种特殊的文件系统。

责任是否应该独立存在Linux Kernel 的kmalloc()

Write a comment

New comments have been disabled for this post.