如何修改proc文件?

时间:2012-07-18 06:05:33

标签: c linux network-programming linux-kernel proc

我想在正在运行的内核中编辑proc文件/ proc / sys / net / ipv6 / route / gc_interval的值。我想编辑此proc文件值相对于另一个值的值。

根据文件net / ipv6 / ndisc.c中函数ndisc_router_discovery的生命周期值,我想在1到30之间切换gc_intervel的值。我在谷歌搜索但我发现只能创建一个新的proc条目。但是这个文件已经存在。请告诉我如何在飞行中更改此文件的值。

编辑: 我想通过编辑内核代码来做到这一点。我想在ndisc.c中添加一些额外的代码,根据生命周期更改gc_interval值

3 个答案:

答案 0 :(得分:2)

proc条目sys/net/ipv6/route/gc_intervalnet/ipv6/route.c中定义:

{
    .procname   =   "gc_interval",
    .data       =   &init_net.ipv6.sysctl.ip6_rt_gc_interval,
    .maxlen     =   sizeof(int),
    .mode       =   0644,
    .proc_handler   =   proc_dointvec_jiffies,
}

因此gc_interval文件是整数变量init_net.ipv6.sysctl.ip6_rt_gc_interval的用户域表示,具有jiffies-to-seconds转换(变量存储在jiffies中,而proc条目以秒为单位处理值) )

如果需要以编程方式更改内核中的值,则只需更改该变量:

...
init_net.ipv6.sysctl.ip6_rt_gc_interval = new_gc_interval_sec * HZ;
...

注意:

  • 内核引用基于Linux 3.4.5源
  • 应包含
  • <net/net_namespace.h> 以访问 init_net 结构

答案 1 :(得分:0)

使用sysctl命令sudo sysctl -w net.ipv6.route.gc_interval=20

如果您想将此值永久追加net.ipv6.route.gc_interval=20/etc/sysctl.conf

答案 2 :(得分:0)

或者只是:

echo 20 > /proc/sys/net/ipv6/route/gc_interval

/etc/sysctl.conf允许在系统启动时执行此操作。