Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 如何在驱动模块中使用seq_文件实现可写程序文件_Linux Kernel_Linux Device Driver - Fatal编程技术网

Linux kernel 如何在驱动模块中使用seq_文件实现可写程序文件

Linux kernel 如何在驱动模块中使用seq_文件实现可写程序文件,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,在Linux设备驱动程序第三版的书中,/proc文件系统被用作输出方法,以导出特定设备驱动程序的运行状态 但是,在某些情况下,/proc文件系统用作一个接口,用于更改驱动程序模块的内部参数 我在谷歌上搜索了很多,发现互联网上的一些实现太旧了,以至于他们使用create\u proc\u entry()而不是proc\u create() 更重要的是,我更喜欢通过seq_file实现这一点(实际上,我不确定这是否可能)。我检查了seq_write()函数,但没有得到任何结果 谁能给我举个例子来完成

在Linux设备驱动程序第三版的书中,
/proc
文件系统被用作输出方法,以导出特定设备驱动程序的运行状态

但是,在某些情况下,
/proc
文件系统用作一个接口,用于更改驱动程序模块的内部参数

我在谷歌上搜索了很多,发现互联网上的一些实现太旧了,以至于他们使用
create\u proc\u entry()
而不是
proc\u create()

更重要的是,我更喜欢通过
seq_file
实现这一点(实际上,我不确定这是否可能)。我检查了
seq_write()
函数,但没有得到任何结果


谁能给我举个例子来完成这个任务
seq_文件
实现更为可取。

seq_文件
仅为读取文件提供帮助。没有类似的写入帮助程序,但实现
并不困难。手动写入可读取数据的
回调:

与读取不同,您可以在.write回调中删除文件的位置处理,假设用户总是写入到开头,或者(可选)写入到结尾(使用O_APPEND文件的控制标志)。 其次,与读取不同,您可以假设用户一次写入1、2个或更多元素的内容,而不是半个元素

最简单的方法是允许通过单个元素进行写入:

size_t write(struct file* file, const char __user* buf, size_t size, loff_t* pos)
{
    copy_from_user(str, buf, size); // Copy string from user space
    my_elem = my_parse(str, size); // Parse string
    if(file->f_flags & O_APPEND) {
         list_add_tail(my_elem, &my_list);//Append element to the end of list
    }
    else {
         clear_my_list(); // Clear old content of the list
         list_add_tail(my_elem, &my_list);// Add single element to it.
    }

    (void)pos; //Do not use file position at all
    return count; // Return number of bytes passed by the user
}

如果用户想写入多个元素,例如从硬盘上的文件中写入,任何shell都可以将该文件拆分,例如新行,并将行逐个馈送到您的proc文件。

在我绑定了很多之后。我发现实际上没有
seq
version写入函数。但是,您可以将
/proc
文件视为普通设备文件,该文件可以通过
文件操作
中定义的方法进行操作