附加到/ proc文件系统中的文件

史蒂夫·萨米特(Steve Summit)

我正在实现一个文件,在/proc其中我希望比平时更像文件。特别是,我想检测出有人将文件追加到文件中并正确地进行处理-也就是说,我想区分某人正在执行该操作

echo value > /proc/my_proc_file

echo value >> /proc/my_proc_file

像所有写函数一样,我的第四个参数被赋予一个偏移量:

ssize_t my_proc_write(struct file *file, const char __user *buf,
                                      size_t count, loff_t *offs)

*offs始终为0。

设置proc文件时,我将其指定seq_lseek为lseek函数:

struct file_operations my_proc_fops = {
    .open     = my_proc_open,
    .read     = seq_read,
    .write    = my_proc_write,
    .llseek   = seq_lseek,
};

检查源(在中fs/seq_file.c),它看起来像要进行适当的seq_lseek维护file->f_pos,但是当我file->f_pos在写函数中查看时,它也始终为0。(这可能不足为奇,因为附加通常意味着打开O_APPEND它不会导致对lseek的任何显式调用。)

无论如何,有没有办法做到这一点?如果这些写函数不会不时传递有用的非零值,则可能不会使用偏移指针参数设置这些写函数。

TingQian LI

首先,从用户角度来看,无论f_pos由llseek()设置在何处,使用O_APPEND打开的文件始终会在您调用write()时追加数据。但是f_pos对read()仍然有效。

第二,内核框架不知道文件长度,除非它调用您的llseek找出来,但这不会发生,因为它将弄乱f_pos,因此内核期望您的驱动程序,这是唯一知道真正的驱动程序在哪里的驱动程序。文件末尾”,则在(file-> f_flags&O_APPEND)为true时采取相应措施。基本上,驱动程序需要在调用write()时检查该标志,并忽略offs参数并执行附加操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章