我的一个朋友遇到同样问题的堆栈溢出:
我复制了本教程中的代码: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”方法中实现,但有关如何执行此操作的任何指示?
答案 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版本,并在安装后制作虚拟磁盘的快照。因此,如果出现问题,您可以随时恢复任何损害。您无需在那里安装所有构建工具和内核源代码 - 您只需在此虚拟机上加载和测试/调试模块/应用程序。
但无论如何,你要触摸的区域,或者更正确的区域,已经触及,非常有趣。
祝你好运