我正在讨论"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次。我不明白为什么它是3次而不是2次。第一次调用procfile_read
时,它返回12
,因此第二次调用回调函数,在此期间返回0
。但为什么第三次被召唤?我认为0
(第二次调用)的返回值表示系统调用read
(以及procfile_read
)将不再被调用。
请帮我理解这个问题。非常感谢!