mknod
来源:互联网 发布:sql 几种树形结构 编辑:程序博客网 时间:2024/05/29 12:42
一、设备文件和普通文件的区别
设备文件是文件系统中代表设备的特殊文件。与普通的文件相比,设备文件在磁盘(或宿主文件系统所的在其它设备)上只占用一个索引节点,而没有任何用于存放数据的记录块与之相联系。当然,这是因为设备文件的目的并不在于存储和读取数据,而只在于为应用程序提供一条通向具体设备的途径,使应用程序可以跟具体设备建立起连接。
普通文件(以及某些特殊文件)可以通过系统调用open来创建,只要在调用参数中或上O_CREAT标志,就可以让open函数在目标文件不存在时先创建这个文件。当然也可通过调用creat()来直接创建文件,事实上sys_creat()就是通过sys_open()实现的。可是这两个系统调用都不能用来创建设备文件,因为设备文件的创建需要有一个参数来传递设备号,而open和creat函数都不包括这个参数。此时就是mknod函数存在的意义了。
二、mknod()函数介绍
mknod()函数可以用来创建各种类型的文件(目录除外),包括普通文件、特殊文件以及设备文件,不过,这些类型的文件习惯用各自专用的系统调用,如普通文件可
以open()和creat()创建,FIFO文件可以用pipe()创建,所以mknod()主要用于设备文件的创建。不像open()函数集创建与打开于一身,mknod()只是纯粹的创建。
在Linux内核源码fs/xxx/namei.c(其中xxx表示各种文件系统格式,比如ext2、ext4、ntfs)中有一个结构:inode_operations,此结构体中含有mknod函数,以
fs/ext2/namei.c为例:
const struct inode_operations ext2_dir_inode_operations = { .create = ext2_create, .lookup = ext2_lookup, .link = ext2_link, .unlink = ext2_unlink, .symlink = ext2_symlink, .mkdir = ext2_mkdir, .rmdir = ext2_rmdir, <strong>.mknod = ext2_mknod,</strong> ……}而ext2_mknod函数如下:
static int ext2_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_t rdev){struct inode * inode;int err;if (!new_valid_dev(rdev))return -EINVAL;dquot_initialize(dir);inode = ext2_new_inode (dir, mode, &dentry->d_name);err = PTR_ERR(inode);if (!IS_ERR(inode)) {init_special_inode(inode, inode->i_mode, rdev);#ifdef CONFIG_EXT2_FS_XATTRinode->i_op = &ext2_special_inode_operations;#endifmark_inode_dirty(inode);err = ext2_add_nondir(dentry, inode);}return err;}其中参数rdev为设备号,其类型为dev_t,它是一个32位的无符号整型。
0 0
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod
- mknod命令
- mknod命令
- mknod command
- mknod详解
- 一个简单RPC框架是如何炼成的(IV)——实现RPC消息的编解码
- do... while,while and for 循环
- UDP 发送和接收
- [codeigniter 二]、分析CI结构和CI是如何工作的
- android:Tabhost使用方法
- mknod
- 实习11天
- IOS学习—@property的解析
- 黑马程序员_java反射机制的概述
- leetcode:Factorial Trailing Zeroes
- 用R解析Mahout用户推荐协同过滤算法(UserCF)
- 瀑布流接口的设计以及应用(一)
- 如何将一块移动硬盘分区成mac专区和windows专区
- 炙热的7月