0

カーネルシステムコールでファイル内のすべてのデータを上書きしようとしています(はい、カーネルでファイルの読み取り/書き込みを行うべきではないことはわかっていますが、試しているだけです!)ファイルの読み取り/書き込み方法Linuxカーネルモジュール内?

コードは次のとおりです。

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;

}

ユーザースペースプログラムで適切なファイル名を指定すると、停止せずに書き込みを続けます。なんで?

4

1 に答える 1

1

継続的にファイルに書き込んでいるように見えるため、ファイルの長さが長くなっています。vfs_writeが失敗する理由はありません。私が正しく理解していれば、あなたがしたいのはファイル全体を上書きすることです。したがって、最初にファイルのサイズを見つけ、次にその数のバイトをファイルに書き込んでから、ファイルを閉じる必要があります。現状では、「スペース」文字を使用してファイルを拡張しているだけです。

于 2012-10-26T01:05:03.480 に答える