[英]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.