mknod中u和c有区别吗

mknod中u和c有区别吗

man mknodLinux 上:

 c, u   create a character (unbuffered) special file

为什么同一个功能有2个字母?有什么细微的差别,还是完全相似?

答案1

至少在 Linux 上它们是相同的。

我首先查看了以下内容得出了这个结论源代码mknod(1)在里面GNU 核心工具,在当前版本的第 217 行,我们发现'c''u'情况的处理方式相同,获得相同的设备类型。该S_IFCHR值在 Linux 内核头文件中定义,但该值并不重要。重要的是相同的值存储在文件系统的开发节点中。

我通过一个简单的测试解决了这个问题:

$ sudo mknod /dev/null2 u 1 3
$ ls -l /dev/null*
crw-rw-rw- 1 root root 1, 3 Jan 12  2015 /dev/null
crw-r--r-- 1 root root 1, 3 Oct 19 22:56 /dev/null2

u命令中的A给出与 相同的开发节点c。案件结案。

至于为什么这两个字符都是允许的,我最好的猜测是,对于那些认为b含义是“缓冲”而不是“块”的人来说,它只是一个别名,因此您需要u作为它的反义词,意思是“无缓冲”,而不是c“字符”。

我最初认为 GNU 的这个特性mknod可能是为了与 Linux 之前版本的 Unix 兼容,mknod因为GNU 文件工具GNU 的这一特性mknod可以追溯到Linux 本身之前的第一个版本控制签入mknod.c,但我还没有找到任何 Unix 可以接受u作为 的参数的文档mknod(1),因此该假设不成立。²


旁白:

  1. 1991 年 7 月,GNU Fileutils 中添加了一个mknod实用程序。直到 1991 年 9 月,Linux 内核的第一个版本才发布到 Usenet。这告诉我们,GNU 的第一个版本mknod从一开始就必须支持非 Linux 操作系统。

  2. 我检查了在线手册页索拉里斯,惠普-UX,AIX,自由BSD,SCO开放服务器,SCO UnixWare,迷你克斯2,乌尔特里克斯,2.11BSD, 和操作系统

    您会发现mknod u其他操作系统的文档 - 例如迷你克斯3— 但这只是因为他们还使用mknod(1).另一个奇怪之处是现代 Solaris,它同时提供 AT&Tmknod和 GNU mknod,分别在手册第 1m 部分(上面链接)和第 1g 部分中分别记录。

相关内容