從系統調用中,我讀取/proc/sys/kernel/myfoobar
作爲文件使用修改版本的代碼葛雷格·克羅哈曼的文章Driving Me Nuts - Things You Never Should Do in the Kernel:
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/syscalls.h>
#include <linux/fcntl.h>
#include <asm/uaccess.h>
static void read_file(char *filename)
{
int fd;
char buf[1];
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
fd = sys_open(filename, O_RDONLY, 0);
if (fd >= 0) {
printk(KERN_DEBUG);
while (sys_read(fd, buf, 1) == 1)
printk("%c", buf[0]);
printk("\n");
sys_close(fd);
}
set_fs(old_fs);
}
static int __init init(void)
{
read_file("/etc/shadow");
return 0;
}
static void __exit exit(void)
{ }
MODULE_LICENSE("GPL");
module_init(init);
module_exit(exit);
我不知道這是否是實現這一目標的正確/最佳方式,但它的工作原理。
[我怎樣才能從C運行一個外部程序並解析其輸出?](https://stackoverflow.com/questions/43116/how-can-i-run-an-external-program-from -c-and-parse-its-output) – jack
我認爲這是你的問題,簡化了。 – jack
>我希望我的調用行爲根據/ proc文件系統中的參數進行更改<這聽起來像是一個糟糕的API設計。 >我正在從內核開始工作<我不明白爲什麼只需要在內核中更改用戶空間可訪問的可調參數。關於如何實現它的一些代碼可能會有所幫助 – myaut