簡體   English   中英

為什么這個內核函數會陷入無限循環?

[英]Why is this kernel function going to infinite loop?

我試圖覆蓋在內核系統調用文件中的所有數據(是的,我知道我不應該做的讀/寫在內核中,但我只是想它了!一個文件)的基礎上的答案這里如何讀/寫文件在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;

}

如果我在用戶空間程序中指定了正確的文件名,它將繼續寫入而不會停止。 為什么?

看來您正在不斷地寫入文件,因此文件長度正在增加。 沒有理由讓vfs_write失敗。 如果我理解正確,那么您想要做的就是覆蓋整個文件。 因此,您必須首先找到文件的大小,然后將那么多字節寫入文件,然后關閉文件。 從目前的情況來看,您只是使用'space'字符來擴展文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM