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_forwardecho 0 >>ip_forward値はmtimeに変更されますが、1mtimeは変更され0ません。echo 1 >ip_forward時間が変わりますね。

おすすめ記事