Linux

mknod中的u和c有區別嗎

  • October 21, 2016

man mknodLinux 上:

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

命令中的Au給出與 相同的開發節點c。結案。

至於為什麼允許這兩個字元,我最好的猜測是,它只是那些認為b意思是“緩衝”而不是“阻塞”的人的別名,所以你需要u相反,意思是“無緩衝”而不是c“特點。”

我最初認為 GNU 的這個特性mknod可能是為了與一些 Linux 之前的 Unix 風格兼容,因為mknodGNU Fileutils中早於 Linux 本身¹,而 GNU 的這個特性mknod可以追溯到第一個版本控制的簽入mknod.c,但是我還沒有找到任何可以接受u作為參數的Unix 的文件mknod(1),所以這個假設不成立。²


旁白:

  1. mknod1991 年 7 月,GNU Fileutils 添加了一個實用程序。Linux 核心的第一個版本直到 1991 年 9 月才發佈到 Usenet。這告訴我們,GNU 的第一個版本mknod必須從一開始就支持非 Linux 作業系統。
  2. 我查看了SolarisHP-UXAIXFreeBSDSCO OpenServerSCO UnixWareMinix 2Ultrix2.11BSDOS X的線上手冊頁。

您會發現mknod u其他作業系統(例如Minix 3 )的文件,但這僅僅是因為它們也使用mknod(1). 另一個奇怪的是現代 Solaris,它同時提供 AT&Tmknod和 GNU mknod,分別記錄在手冊的 1m 部分(上面連結)和 1g 部分中。

引用自:https://unix.stackexchange.com/questions/317579