procfs1.c的;《Linux内核模块编程指南》;

procfs1.c的;《Linux内核模块编程指南》;,linux,module,kernel,Linux,Module,Kernel,我在玩第5.1章的例子。我编译了源代码,加载了模块,然后当我执行cat/proc/helloworld时,我注意到/var/log/messages中有以下内容:(我修改了原始源代码以打印ret和offset的值) 10月31日23:46:00 vm-ubuntu1010内核:[221941.287939]调用了procfile_read(/proc/helloworld),ret=12,offset=0 10月31日23:46:00 vm-ubuntu1010内核:[221941.28795

我在玩第5.1章的例子。我编译了源代码,加载了模块,然后当我执行
cat/proc/helloworld
时,我注意到
/var/log/messages
中有以下内容:(我修改了原始源代码以打印
ret
offset
的值)


10月31日23:46:00 vm-ubuntu1010内核:[221941.287939]调用了procfile_read(/proc/helloworld),ret=12,offset=0

10月31日23:46:00 vm-ubuntu1010内核:[221941.287955]procfile\u已调用(/proc/helloworld),ret=0,offset=12

10月31日23:46:00 vm-ubuntu1010内核:[221941.287987]procfile\u已调用(/proc/helloworld),ret=0,offset=12

根据日志消息,回调函数
procfile\u read
被调用了3次。我不明白的是为什么是3次而不是2次。第一次调用
procfile\u read
时,它返回
12
,因此第二次调用回调函数,在此期间返回
0
。但是为什么叫第三次呢?我认为返回值
0
(第二次调用)表示将不再调用系统调用
read
(因此
procfile\u read

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