/proc
수정 타임스탬프 는 파일을 모드에서 연 후 파일에 쓸 때 변경되지 않습니다 r+
(그러나 w
모드에서 열면 변경됨). 이런 식으로 작동하는 특별한 이유가 있나요?
긴 이야기 짧게
문제를 해결하기 위해 ThinkFan을 사용할 때(thinkfan이 한 번 시작하고 종료된 후 팬이 반복적으로 시작되는 이유는 무엇입니까?), 조작으로 인해 /proc/acpi/ibm/fan
수정 시간이 변경되지 않은 점을 지적하면 프로그램이 이를 사용하는 것으로 의심됩니다. thinkfan
그러나 수정된 코드를 직접 빌드하면 해당 코드가 열릴 것임을 확인했습니다 ((fan = fopen(IBM_FAN, "r+")) == NULL)
. c
응용 프로그램에서 파일을 열고 수정 타임스탬프를 사용하여 열도록 w
코드를 변경했을 때 해당 파일도 변경되지 않았습니다.r+
echo level 1 | sudo tee /proc/acpi/ibm/fan
파일 수정 타임스탬프도 업데이트 하세요 . 나는 읽었다https://stackoverflow.com/questions/21113919/difference- Between-r-and-w-in-fopenr+
와 의 차이점은 파일을 자르는 것 w
입니다 . 업데이트된 수정 타임스탬프를 사용하여 열린 파일 에 w
검사 쓰기가 기록되는 경우를 대비해ext4
r+
의견을 바탕으로 추가되었습니다.
$ sudo cat /proc/acpi/ibm/fan
status: disabled
speed: 0
level: 0
commands: level <level> (<level> is 0-7, auto, disengaged, full-speed)
commands: enable, disable
commands: watchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))
$ sudo strace stopfan // r+
execve("/usr/local/bin/stopfan", ["stopfan"], 0x7ffdf26fdc50 /* 25 vars */) = 0
openat(AT_FDCWD, "/proc/acpi/ibm/fan", O_RDWR) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
write(3, "level 0\n", 8) = 8
close(3) = 0
exit_group(0) = ?
+++ exited with 0 +++
$ sudo strace ./stopfan // w+
execve("./stopfan", ["./stopfan"], 0x7ffca68b2d40 /* 25 vars */) = 0
openat(AT_FDCWD, "/proc/acpi/ibm/fan", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
write(3, "level 0\n", 8) = 8
close(3) = 0
exit_group(0) = ?
+++ exited with 0 +++
답변1
이것이 의도적인 것인지 아니면 버그인지는 모르겠습니다(여기서 설명할 수 있는 사람이 없다면 커널 메일링 리스트에 문의하는 것이 유용할 수 있습니다).
/proc
하지만 제가 시도해 본 결과 이 사실인 것 같습니다 /proc/sys/net/ipv4/ip_forward
. echo 0 >>ip_forward
값은 mtime으로 변경되지만 1
mtime 은 변경 0
되지 않습니다. echo 1 >ip_forward
시간이 바뀌는군요.