【发布时间】:2012-10-26 00:51:43
【问题描述】:
我正在尝试在内核系统调用中覆盖文件中的所有数据(是的,我知道我不应该在内核中读取/写入文件,但我只是在尝试!)基于此处的答案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;
}
如果我在用户空间程序中给了一个正确的文件名,它就会不停地写下去。为什么?
【问题讨论】:
-
仅供参考:
sizeof(" ")是 2,而不是 1(它计算空终止符)。 -
你怎么知道什么时候停止?
count是你写出的字节数,大于 0,直到你用完磁盘空间。你需要一个更好的终止条件。