如何从proc文件中读取大数据?

6 linux kernel module procfs

我正在尝试编写一个内核模块,它将一些数据写入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),我执行了以下操作:-

  • 对于每个大数据块,将数据的“buffer_length”复制到“buffer”。
  • 将“*start”(或在您的情况下为*buffer_location)设置为“buffer”。
  • 返回您写入的数据量(通常为“buffer_length”)

最后,所有数据将被写入并返回 0。

这对我来说适用于几兆数据。