我试图在内核系统调用中覆盖一个文件中的所有数据(是的,我知道我不应该在内核中读/写文件,但我只是在尝试!)根据这里的答案How to read/write files within a Linux kernel module?
代码如下:

int sys_mycompleteerase(const char __user * inputFileUser)  {

    struct file* filp = NULL;
    int err = 0,count = 0;
    unsigned long long offset =0;

    mm_segment_t old_fs;
    old_fs = get_fs();
    set_fs(KERNEL_DS);

    filp = filp_open(inputFileUser, O_WRONLY, 0644);
    if(IS_ERR(filp)) {
        err = PTR_ERR(filp);
        return NULL;
    }
    do {
        count = vfs_write(filp," ",sizeof(" "), &offset);
        offset+=sizeof(" ");
    }while(count > 0);
    filp_close(filp, NULL);

    set_fs(old_fs);

    return 0;

}

如果我在用户空间程序中给出了一个正确的文件名,它就会不停地继续写。为什么?

最佳答案

看起来你一直在写一个文件,所以文件长度在增长。vfs_写入没有失败的原因。如果我理解正确,您要做的是覆盖整个文件。因此,您必须首先找到文件的大小,然后将多个字节写入该文件,然后关闭该文件。就目前的情况来看,你只是在用“space”字符扩展文件。

09-27 17:46