我正在尝试编写一个内核模块,它将一些数据写入proc文件.我正在尝试编写类似于5000个字符的内容,但当我说$> cat/proc/myentry时,我只能读取1000个字符.
int procfile_read(char *buffer, char **buffer_location, off_t offset, int buffer_length, int *eof, void *data){
int ret;
static char my_buffer[4096];
if (offset > 0) {
ret = 0;
} else {
ret = sprintf(my_buffer, LARGE STRING HERE);
}
*buffer_location=my_buffer;
return ret;
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码.提前致谢.
小智 3
我正是遇到这个问题。
原始帖子中的一个问题,if (offset>0)
在小 proc 文件的示例中多次使用。多次调用 read 直到我们返回 0 表示没有更多数据。所以if (offset>0)
我们返回的意思是(缓冲区的长度)为 0。
此函数有 3 种返回数据的方法。看一下源代码注释,第75行开始:
对于大文件(评论中的方法 2),我执行了以下操作:-
最后,所有数据将被写入并返回 0。
这对我来说适用于几兆数据。