- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
/sys/kernel/debugfs/mydir/myfile 将字符串写入文件。并使用 echo "worl-6ren">
我尝试对 debugfs 文件执行写入功能。我希望我可以使用 echo "hello">/sys/kernel/debugfs/mydir/myfile
将字符串写入文件。并使用 echo "world">>/sys/kernel/debugfs/mydir/myfile
在 hello
之后附加 world
。我在实现中发现了两个问题。一个是如果输入字符串的长度超过缓冲区大小,echo
命令将卡住。另一个是 echo "world">>/sys/kernel/debugfs/mydir/myfile
从不附加字符串。相反,它会新建一个字符串。下面是我的实现。
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/init.h> /* Needed for the macros */
#include <linux/miscdevice.h>
#include <linux/uaccess.h>
#include <linux/debugfs.h>
#include <linux/fs.h>
#include <linux/sched.h>
MODULE_LICENSE("GPL");
#define BUF_SIZE 10
static char foo_buf[BUF_SIZE];
static struct dentry *debug_dir;
static struct dentry *debug_foo;
static ssize_t foo_read(struct file *file, char __user *buf, size_t count,
loff_t *f_pos)
{
return simple_read_from_buffer(buf, count, f_pos, foo_buf, sizeof(foo_buf));
}
static ssize_t foo_write(struct file *file, const char __user *buf, size_t count,
loff_t *f_pos)
{
size_t ret;
if (*f_pos > BUF_SIZE)
return -EINVAL;
ret = simple_write_to_buffer(foo_buf, sizeof(foo_buf), f_pos, buf, count);
if (ret < 0)
return ret;
foo_buf[ret] = '\0';
return ret;
}
static const struct file_operations foo_fops = {
.owner = THIS_MODULE,
.read = foo_read,
.write = foo_write,
};
static int __init debugfs_start(void)
{
pr_err("init debugfs");
debug_dir = debugfs_create_dir("mydir", NULL);
if (debug_dir == NULL) {
pr_err("debugfs create my dir failed");
return -ENOMEM;
}
debug_foo = debugfs_create_file("foo", 0744, debug_dir,
NULL, &foo_fops);
if (!debug_foo) {
debugfs_remove(debug_dir);
return -ENOMEM;
}
return 0;
}
static void __exit debugfs_end(void)
{
pr_err("exit debugfs");
debugfs_remove_recursive(debug_dir);
}
module_init(debugfs_start);
module_exit(debugfs_end);
最佳答案
One is the echo command would stuck if the length of input string is over the buffer size.
这是因为它不断重试写入文件,而每次尝试都会失败。
The other is the echo "world" >> /sys/kernel/debugfs/mydir/myfile never append the string. Instead, it new a string.
这在您的实现中是预期的。如果要附加它,则需要将新字符串添加到现有字符串中。也就是说,您需要保留字符串长度的记录。但这是不同于特定于进程的打开文件的 f_pos。
How do I identify what commands(echo > or echo >>) users will use?
所以你的意思是用户在打开文件后是否“截断”了文件? debugfs 似乎不支持搜索,但我想您可以提供您的 .open 函数以及 .llseek 函数来实现它。如果是APPEND,打开文件时需要看到文件末尾。
抱歉,我无法提供完整的代码,只能提供一些提示。
关于linux - 对 debugfs 文件执行写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26272068/
我正在尝试在 ath9k 内核驱动程序模块中启用调试。 由于调试使用debugfs,我需要挂载debugfs。但是人们和互联网建议安装命令有点不同: # (Note) mount usage: mou
所以我正在创建一个网络命名空间: % uname -r 4.15.0-rc8+ % ip netns add ns1 % ip netns exec ns1 mount 在这一点上,我希望看到所有与我
当我尝试在 Macbook pro(10.6.8) 上使用 debugfs 时,我得到 -bash: debugfs: command not found 然后我试着看看我的路径 echo $PATH
我正在实现一个内核模块。使用几种技术。其中之一是对不同的模块变量进行读/写。除了模块中的列表之外,我能够读取/写入所有变量。链表: static struct node { s
我尝试对 debugfs 文件执行写入功能。我希望我可以使用 echo "hello">/sys/kernel/debugfs/mydir/myfile 将字符串写入文件。并使用 echo "worl
我有写入 trace_pipe 文件的 BPF 程序,即使程序正确执行,我也无法从该文件中读取数据。 每当我尝试 cat /sys/kernel/debug/tracing/trace_pipe ,进
我已经成功地在匹配路径中创建了一个 dentry,但现在我该如何在那里写呢? struct dentry* log_dir = debugfs_create_dir ("my_module", NUL
我需要使用没有任何 sysfs/debugfs 的系统(这是一个强烈的要求,无法更改)。 我需要了解如何在没有此文件系统的情况下设置 Linux。 例如,在配置各种 omap PM(电源管理功能)时,
我正在查看 SystemC 的源代码,看到有这样的东西: #define DEBUGF \ if (0) std::cout << "sc_cor_pthread.cpp(" << __LIN
我正在查看一个 Linux 内核配置文件,其中启用了 function_trace 但禁用了 debugfs。如果我将这个内核加载到目标上有什么办法,我可以使用 function_tracer 吗?如
我正在尝试使 Spring + Spring Data + Log4J2 堆栈工作。不幸的是,在 My Glassfish 4.1 Server 上部署该工件时,出现以下错误: org.springf
我正在尝试使 Spring + Spring Data + Log4J2 堆栈工作。不幸的是,在 My Glassfish 4.1 Server 上部署该工件时,出现以下错误: org.springf
debugfs api 例如debugfs_create_dir说 If debugfs is not enabled in the kernel, the value -ENODEV will be
今天我尝试使用 Junit 来尝试与 hibernate 的集成测试。我对集成测试很陌生,所以我希望我做错了什么。我在 githhub 上找到了这个例子: example hibernate juni
来自 debugfs.txt , mount debugfs 命令是这样的: mount -t debugfs none /sys/kernel/debug 这个语句中none的作用是什么? 最佳答案
我在使用 hibernate 5 部署 web 应用时遇到问题 Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.deb
我有一个简单的@Singleton whitin Java EE项目,该项目解析来自Internet的数据并将其与Hibernate一起保存到PostgreSQL。 @Startup @Singlet
当我尝试将应用程序部署到 WebLogic 服务器时(首先我使用 Maven 构建 war 存档,然后使用 IntelliJ Idea WebLogic 插件进行部署),我收到此错误:我做错了什么?
我正在部署一个使用 Maven 构建的 EAR 应用程序,该应用程序在其中一个模块中具有以下依赖项: org.hibernate hibernate-entitymanager
我正在尝试创建一个简单的 hello world java Web 应用程序,该应用程序通过 hibernate 使用 JPA 并使用 JBoss 6.4.0 作为应用程序服务器。该应用程序已通过 M
我是一名优秀的程序员,十分优秀!