「The Linux Kernel Module Programming Guide」の第 5.1 章の例をいじっていました。ソース コードをコンパイルし、モジュールをロードし、 を実行したときに、cat /proc/helloworld
に次のことがわかりました/var/log/messages
。ret
offset
Oct 31 23:46:00 vm-ubuntu1010 kernel: [221941.287939] procfile_read (/proc/helloworld) called, ret=12, offset=0
Oct 31 23:46:00 vm-ubuntu1010 kernel: [221941.287955] procfile_read (/proc/helloworld) called, ret=0, offset=12
Oct 31 23:46:00 vm-ubuntu1010 kernel: [221941.287987] procfile_read (/proc/helloworld) called, ret=0, offset=12
ログ メッセージに基づいて、コールバック関数procfile_read
が 3 回呼び出されました。私が理解していないのは、なぜ2回ではなく3回なのかということです。最初procfile_read
に呼び出されると が返される12
ため、コールバック関数は 2 回目に呼び出され、その間に0
が返されます。しかし、なぜ 3 回目が呼び出されるのでしょうか。(2 回目の呼び出しの)の戻り値は0
、システム コールread
(したがってprocfile_read
) が再び呼び出されないことを示していると思いました。
この問題を理解するのを手伝ってください。どうもありがとう!