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



我正在在 /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的任何明确调用。)

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

首先,从用户角度来看,使用o_append打开的文件时,无论何处f_pos由llseek()设置在何处。但是f_pos对于读取仍然有效()。

第二,内核框架dos不知道文件长度,除非它打电话给您的llseek找出答案,但这不会发生,因为它会弄乱f_pos,所以内核期望您的驾驶员,这是唯一知道在哪里的人当(file-> f_flags& append)正确时,将相应地行动的真实"文件结尾"是正确的。基本上,您的驱动程序需要在调用Write()时检查该标志并忽略fort param并进行附加。

最新更新