我正在玩“The Linux Kernel Module Programming Guide”第 5.1 章中的示例。我编译了源代码,加载了模块,然后当我做 a 时cat /proc/helloworld
,我注意到以下内容/var/log/messages
:(我修改了原始源代码以打印ret
and的值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 次。我不明白为什么它是 3 次而不是 2 次。第一次procfile_read
调用,它返回12
,所以回调函数将被调用第二次,期间0
返回。但是为什么要调用第三次呢?我认为(第二次调用)的返回值0
表明系统调用read
(因此procfile_read
)不会再次被调用。
请帮助我理解这个问题。非常感谢!