Linux在内核中创建文件
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/file.h>
static int __init my_module_init(void) {
struct file *file;
mm_segment_t old_fs;
const char *path = "/tmp/testfile";
const char *data = "Hello,kernel world";
loff_t pos = 0;
ssize_t writtern;
old_fs = get_fs();
set_fs(KERNEL_DS);
file = filp_open(path, O_CREAT | O_RDWR, 0644);
if (IS_ERR(file)) {
printk(KERN_ERR "Error opening file\n");
set_fs(old_fs);
return PTR_ERR(file);
}
file_start_write(file);
written = vfs_write(file,data,strlen(data),&pos);
if(written < 0)
{
printk(KER_ERR "Fail to write to file %ld\n",written);
file_end_write(file);
filp_close(file,NULL);
set_fs(old_fs);
return written;
}
file_end_write(file);
filp_close(file, NULL);
set_fs(old_fs);
printk(KERN_INFO "File written successfully\r\n");
return 0;
}
static void __exit my_module_exit(void) {
printk(KERN_INFO "Module exited\n");
}
module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("A simple example of creating a file in kernel space");