procfs1.c的;《Linux内核模块编程指南》;
我在玩第5.1章的例子。我编译了源代码,加载了模块,然后当我执行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
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
)
请帮我理解这个问题。非常感谢