为什么我只能将正整数通过管道传输到该文件中?

为什么我只能将正整数通过管道传输到该文件中?

如果我将一个仅包含正整数的字符串通过管道传输到 中/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

这是怎么回事?

答案1

您只能向此文件写入非负整数,因为它是一个特殊文件,并且内核拒绝任何其他输入。从具有特殊文件类型的意义上来说,它不是一个特殊文件,但它是一个特殊文件,因为它位于一个特殊的文件系统上。当您访问“普通”文件系统时,内核将文件内容存储在磁盘上而不解释它们。但是当您访问/proc(进程文件系统) 或者/sys系统文件系统),数据不存储在磁盘上,访问会调用自定义内核代码。对于像 之类的文件/sys/class/backlight/intel_backlight/brightness,此自定义代码需要一个介于 0 和某个与硬件相关的最大值之间的整数,如果您尝试写入其他任何内容,则调用write将失败并显示错误状态 EINVAL。

相关内容