在给定文件名(路径)作为唯一输入参数的情况下,如何在 linux 内核 3.5 中将文件的内容完全擦除为 0 或 1?
经过大量检查调用后,我研究了 unlink 系统调用的结构int vfs_unlink(struct inode *dir, struct dentry *dentry)
那么如何从 *dentry 中删除文件的内容?还是我应该使用*dentry
?
编辑
回应答案:我只想覆盖数据。而且我不是在寻找完美的结果。到目前为止,我已经取得了进展:
一方面:使用 vfs_unlink
我对以下代码感到困惑:
error = security_inode_unlink(dir, dentry);
if (!error) {
error = dir->i_op->unlink(dir, dentry);
if (!error)
dont_mount(dentry)
}
这里实际的取消链接在哪里?
另一种方法:我只是继续使用write系统调用写入数据:
我无法理解尤其是这些行:
143 int size = file->f_path.dentry->d_inode->i_size;
144 loff_t offs = *off;
145 int count = min_t(size_t, bytes, PAGE_SIZE);
151 if (size) {
152 if (offs > size)
153 return 0;
154 if (offs + count > size)
155 count = size - offs;
156 }
157
158 temp = memdup_user(userbuf, count);
162 mutex_lock(&bb->mutex);
163
164 memcpy(bb->buffer, temp, count);
165
166 count = flush_write(file, bb->buffer, offs, count);
167 mutex_unlock(&bb->mutex);
168
169 if (count > 0)
170 *off = offs + count;
171
172 kfree(temp);
173 return count;
谁可以给我解释一下这个?这样我就可以将 null 写入文件。我的功能可能看起来像这样。
static void write(struct file *file)
我需要这方面的帮助。我不是要代码,但我现在迷路了。
谢谢
PS:我非常清楚如何在用户级程序中做这个非常简单的事情。但这不是我的任务。我必须在内核空间中进行。我需要这方面的帮助(尤其是在我刚接触内核编程时理解代码)。