1

我正在玩“The Linux Kernel Module Programming Guide”第 5.1 章中的示例。我编译了源代码,加载了模块,然后当我做 a 时cat /proc/helloworld,我注意到以下内容/var/log/messages:(我修改了原始源代码以打印retand的值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)不会再次被调用。

请帮助我理解这个问题。非常感谢!

4

0 回答 0