Linux
mknod中的u和c有區別嗎
在
man mknod
Linux 上:c, u create a character (unbuffered) special file
為什麼同一個函式有兩個字母?有什麼細微的區別,還是完全一樣?
它們是相同的,至少在 Linux 上是相同的。
我通過首先查看GNU coreutils中的原始碼
mknod(1)
得出了這個結論,在目前版本的第 217 行,我們發現和case 的處理方式相同,獲得了相同的設備類型。該值在 Linux 核心標頭檔中定義,但該值並不重要。重要的是相同的值被儲存在文件系統的開發節點中。'c'``'u'``S_IFCHR
我通過一個簡單的測試解決了這個問題:
$ 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
命令中的A
u
給出與 相同的開發節點c
。結案。至於為什麼允許這兩個字元,我最好的猜測是,它只是那些認為
b
意思是“緩衝”而不是“阻塞”的人的別名,所以你需要u
相反,意思是“無緩衝”而不是c
“特點。”我最初認為 GNU 的這個特性
mknod
可能是為了與一些 Linux 之前的 Unix 風格兼容,因為mknod
在GNU Fileutils中早於 Linux 本身¹,而 GNU 的這個特性mknod
可以追溯到第一個版本控制的簽入mknod.c
,但是我還沒有找到任何可以接受u
作為參數的Unix 的文件mknod(1)
,所以這個假設不成立。²旁白:
mknod
1991 年 7 月,GNU Fileutils 添加了一個實用程序。Linux 核心的第一個版本直到 1991 年 9 月才發佈到 Usenet。這告訴我們,GNU 的第一個版本mknod
必須從一開始就支持非 Linux 作業系統。- 我查看了Solaris、HP-UX、AIX、FreeBSD、SCO OpenServer、SCO UnixWare、Minix 2、Ultrix、2.11BSD和OS X的線上手冊頁。
您會發現
mknod u
其他作業系統(例如Minix 3 )的文件,但這僅僅是因為它們也使用mknod(1)
. 另一個奇怪的是現代 Solaris,它同時提供 AT&Tmknod
和 GNUmknod
,分別記錄在手冊的 1m 部分(上面連結)和 1g 部分中。