r+로 열린 procfs 파일에 쓰면 수정 타임스탬프가 변경되지 않습니다(w로 여는 것과 반대). 특별한 이유가 있습니까?

r+로 열린 procfs 파일에 쓰면 수정 타임스탬프가 변경되지 않습니다(w로 여는 것과 반대). 특별한 이유가 있습니까?

/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검사 쓰기가 기록되는 경우를 대비해ext4r+

의견을 바탕으로 추가되었습니다.

$ 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으로 변경되지만 1mtime 은 변경 0되지 않습니다. echo 1 >ip_forward시간이 바뀌는군요.

관련 정보