gpt4 book ai didi

c - 数据未写入/proc 文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:41 25 4
gpt4 key购买 nike

我写了一个内核模块来创建一个/proc 文件。我还编写了一个写入文件的用户空间代码,我使用“copy_from_user”方法将写入的数据提取到我的模块并在内核日志中打印。

数据已成功写入日志,但当我在编辑器中打开 proc 文件时,它是空白的。

谁能解释一下为什么会这样?

用户空间代码为

#include<fcntl.h>

main()
{
int fd=open("/proc/MY_PROC_FILE", O_RDWR);
write(fd, "linux is awesome", 16);
return 0;
}

模块是

int open_callback(struct inode *p, struct file *q)
{
printk(KERN_ALERT "open callback\n");
return 0;
}

ssize_t write_callback(struct file *p, const char __user *buffer, size_t len, loff_t *s)
{
printk(KERN_ALERT "write callback\n");
char msg[256];
copy_from_user(msg, buffer, len);
printk("%s\n", msg);
return 0;
}

static struct proc_dir_entry *my_proc_entry;

static struct file_operations fs={
.open=open_callback,
.read=read_callback,
.write=write_callback,
.release=release_callback
};

static int start(void)
{
printk(KERN_ALERT "proc module registered\n");
my_proc_entry=proc_create(file_name, 0, NULL, &fs);
if(my_proc_entry==NULL)
{
printk(KERN_ALERT "os error\n");
return -ENOMEM;
}
return 0;
}

static void stop(void)
{
remove_proc_entry(file_name, NULL);
printk(KERN_ALERT "proc module unregistered\n");
}

module_init(start);
module_exit(stop);
MODULE_LICENSE("GPL");

在此先感谢您的帮助

最佳答案

你没有实现read_callback()

当您读取该 proc 文件时,将调用 read_callback()。在这里你需要编写代码来写回(使用copy_to_user())之前在write_callback()回调中写的内容。

首先,您需要将用户在 write_callback() 中写入的内容存储在内核空间的一些全局内存中,然后您才能将其写回 read_callback()

这是您要执行的操作的最佳示例。 http://www.makelinux.net/books/lkmpg/x810

关于c - 数据未写入/proc 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34058361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com