システムコール内から、私は/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