mknod命令详解

来源:互联网 发布:获取访客qq js代码 编辑:程序博客网 时间:2024/05/17 06:15

mknod [options] name {bc} major minor
mknod [options] name p
GNU 选项(缩写):
[-m mode] [--help] [--version] [--]
描述
mknod 用指定名称产生一个FIFO(命名管道),字符专用或块专用文件。
文件系统中的一个专用文件存贮着三种信息(布尔型、整型、整型)。布尔型在字符文件和块文件之间作出选择,两个整型是主、次设备号。

通常,一个专用文件并不在磁盘上占用空间,仅仅是为操作系统提供交流,而不是为数据存贮服务。一般地,专用文件会指向一个硬件设备(如:磁盘、磁带、打印机、虚拟控制台)或操作系统提供的服务(如:/dev/null, /dev/random)。

块文件通常类似于磁盘设备(在数据能够被访问的地方赋予一个块号,意味着同时设定了一个块缓存)。任何其他设备都是字符文件。(以前,两种文档类型间是有差别的。比如:字符文档I/O没有缓存,而块文档则有。)

mknod命令就是用来产生这种类型文件的。

以下参数指定了所产生文件的类型:

b create a block (buffered) special file
c, u create a character (unbuffered) special file
p create a FIFO

GNU版本还允许使用u('unbufferd'非缓冲化),以保持和C语言的一致。

当创建一个块文件或字符文件时,主、次设备号必须在文件类型参数后给出。但当指定一个p(FIFO)类型时,主次设备号必须省略。(设备号默认是以十进制表示;八进制以0开头;GNU 版本还允许使用以0x开头的十六进制)

选项
-m mode, --mode=mode
为新建立的文档设定模式,就象应用命令chmod相同,以后仍然使用缺省模式建立新目录。 缺省地,所产生的文档模式为0666('a+rw')

GNU 标准选项
--help
在标准输出上显示使用信息并顺利退出。
--version
在标准输出上显示版本信息并顺利退出

主、次设备号可在内核源代码的./Documentation/devices.txt里查到,mknod 可为这些指定的设备创建节点,当然节点的位置不是一定要在/dev下,但是为了便于管理一般都是指定/dev。驱动程序是根据主、次设备号定位的,但是你的应用程序open一个设备时,一定要是你指定的节点位置。例如:

mknod /dev/input/mouse0 c 13 32
也可以
mknod /tmp/mymouse c 13 32


/**********************************************************************************************************************/

下面是某个网友利用mknod成功解决找不到swap分区的问题。

开了一个大程序,用free看看内存是用,却显示如下
linuxman:~ # free
total used free shared buffers cached
Mem: 248380 243800 4580 0 2928 53344
-/+ buffers/cache: 187528 60852
Swap: 0 0 0
怪了,swap怎么是零? 用#swapon -a,却说是没有这个文件/dev/hda7!
关于swap,我的fatab文件中有一行是这样的:
/dev/hda7 swap swap pri=42 0 0
于是:#ls /dev/hda*,果然没有hda7这个block设备!那就创建一个!
我就用#mknod /dev/hda7 b 3 7,再chmod 和 chgrp 一下就可以了!
这样#ls /dev/hda7就显示这样了:
brw-rw---- 1 root disk 3, 7 2005-04-12 07:00 /dev/hda7
然后再#swapon -a就可以了;#free显示
total used free shared buffers cached
Mem: 248380 242368 6012 0 5596 55304
-/+ buffers/cache: 181468 66912
Swap: 334616 0 334616