建立命名管道,mknod mypipe p。命名管道存在硬盘上,而管道不是。
通过open打开这个命名管道,在内核中通过sys_open()实现,filename是"***/mypipe "。
相关部分,请参考Linux内核源代码情景分析-文件的打开。
sys_open进入filp_open,然后在open_namei中调用一个函数path_walk(),根据文件的路径名在文件系统中找到代表这个文件的inode。在将磁盘上的inode读入内存时,要根据文件的类型(FIFO文件的S_IFIFO标志位为1),将inode中的i_op指针和i_fop指针设置成指向相应的inode_operations数据结构和file_operations数据结构,但是对于像FIFO这样的特殊文件则调用init_special_inode()来加以初始化。这段代码在ext2_read_inode()中,如下:
if (inode->i_ino == EXT2_ACL_IDX_INO ||
inode->i_ino == EXT2_ACL_DATA_INO)
/* Nothing to do */ ;
else if (S_ISREG(inode->i_mode)) {
inode->i_op = &ext2_file_inode_operations;
inode->i_fop = &ext2_file_operations;
inode->i_mapping->a_ops = &ext2_aops;
} else if (S_ISDIR(inode->i_mode)) {
inode->i_op = &ext2_dir_inode_operations;
inode->i_fop = &ext2_dir_operations;
} else if (S_ISLNK(inode->i_mode)) {
if (!inode->i_blocks)
inode->i_op = &ext2_fast_symlink_inode_operations;
else {
inod