web-dev-qa-db-ja.com

どうしてこのファイルに正の整数しかパイプできないのですか?

正の整数のみで構成される文字列を/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
UTF-8

このファイルは特殊なファイルであり、カーネルが他の入力を拒否するため、このファイルに書き込むことができるのは負でない整数のみです。特別なファイルタイプを持っているという意味では特別なファイルではありませんが、特別なファイルシステム上にあるため、特別なファイルです。 「通常の」ファイルシステムにアクセスすると、カーネルはファイルの内容を解釈せずにディスクに保存します。ただし、/procprocfs )または/syssysfs )の下のファイルにアクセスすると、データはディスクに保存されません。カスタムカーネルコードを呼び出します。 /sys/class/backlight/intel_backlight/brightnessのようなファイルの場合、このカスタムコードは、0からハードウェアに依存する最大値までの整数を必要とします。それ以外のものを書き込もうとすると、write呼び出しはエラーステータスEINVALで失敗します。