从proc文件中删除

时间:2012-09-29 17:57:43

标签: linux kernel proc

我的一个朋友遇到同样问题的堆栈溢出:

我复制了本教程中的代码:http://www.thegeekstuff.com/2012/04/create-proc-files/

制作了创建proc文件的模块。

我很高兴地发现我获得了一个procfile我可以回复“text”> PROC / name_of_procfile

我也可以用猫阅读!!

我一直在愚弄它,现在我的procfile中有相当数量的值 - 每当我按顺序遍历这些值时:

问:我想知道 - 如何从proc文件中删除值?

另外,稍后,我将尝试获取每当文件读取我的proc文件时,它会更改proc_file中刚读取的值的行为。

Q2。我知道这将在我的“int read_info”方法中实现,但有关如何执行此操作的任何指示?

1 个答案:

答案 0 :(得分:0)

<强> Q1。

您无法在文件系统上删除操作的正常意义上删除这些值。如果它是可写的,你可以将echo内容写入procfile。然后,它取决于模块的行为如何处理这些“传入”数据。是存储,丢弃还是以某种方式在内部以某种方式计算 - 模块决定。更准确地说,您放入模块的逻辑定义了处理。此示例中的模块具有非常简单的逻辑:当内核调用其write_info函数时,它会在其内部缓冲区中记忆字符串 - 实际上它会将新数据与当前内容连接起来。然后,当内核调用其read_info函数时,它可以返回此缓冲区的内容。所以如果你这样做:

echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile

然后cat /proc/yourprocfile会打印

some text
another text
屏幕上的

。 总结一下:这些文件的完整行为是module-defined

<强> Q2。

你可以在通常的C程序中像这样做。有两个主要区别:

  • 在内核模式下可访问的API是不同的。某些函数具有与标准C库中的类似物相同或非常相似的名称和功能。其他函数具有不同的名称,但仍然类似于某些用户空间函数。然后,一些仅在内核空间中可用的特定函数。

  • 您在内核空间中所做的一切应由您多次检查并调试on the sheet of paper,因为模块中的任何错误都可能导致内核核心转储最少(内核只是停止然后您必须按reset按钮重启系统)可能会导致文件系统数据损坏。

所以,我建议你设置VirtualBox包;用这个漂亮的工具创建一个虚拟机;在那里安装最小的linux版本,并在安装后制作虚拟磁盘的快照。因此,如果出现问题,您可以随时恢复任何损害。您无需在那里安装所有构建工具和内核源代码 - 您只需在此虚拟机上加载和测试/调试模块/应用程序。

但无论如何,你要触摸的区域,或者更正确的区域,已经触及,非常有趣。

祝你好运