이 파일에 양의 정수만 파이프할 수 있는 이유는 무엇입니까?

이 파일에 양의 정수만 파이프할 수 있는 이유는 무엇입니까?

양의 정수만 포함된 문자열을 에 파이프하면 /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과 함께 호출이 실패합니다.

관련 정보