Files

為什麼我只能將正整數通過管道傳輸到這個文件中?

  • March 6, 2017

如果我將僅由正整數組成的字元串通過管道傳輸到/sys/class/backlight/intel_backlight/brightness中,則它可以工作。但是,如果我通過管道傳輸包含我嘗試過的任何其他內容的字元串,我會收到一條錯誤消息:

$ sudo su -c "echo 10 >/sys/class/backlight/intel_backlight/brightness"
$ sudo su -c "echo -- -1 >/sys/class/backlight/intel_backlight/brightness"
bash: line 0: echo: write error: Invalid argument
$ sudo su -c "echo aa >/sys/class/backlight/intel_backlight/brightness"
bash: line 0: echo: write error: Invalid argument
$ sudo su -c "echo 10.2 >/sys/class/backlight/intel_backlight/brightness"
bash: line 0: echo: write error: Invalid argument

我首先認為這是一種特殊的文件,但它似乎是一個正常文件:

$ file /sys/class/backlight/intel_backlight/brightness
/sys/class/backlight/intel_backlight/brightness: ASCII text

這是怎麼回事?

您只能將非負整數寫入此文件,因為它是一個特殊文件並且核心拒絕任何其他輸入。從具有特殊文件類型的意義上說,它不是特殊文件,但它是特殊文件,因為它位於特殊文件系統上。當您訪問“普通”文件系統時,核心將文件內容儲存在磁碟上而不解釋它們。但是當您訪問/proc( procfs ) 或/sys( sysfs ) 下的文件時,數據不會儲存在磁碟上,訪問會呼叫自定義核心程式碼。對於類似 的文件/sys/class/backlight/intel_backlight/brightness,此自定義程式碼需要一個介於 0 和某個硬體相關最大值之間的整數,如果您嘗試編寫其他任何內容,則write呼叫將失敗並顯示錯誤狀態 EINVAL。

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