对proc文件的写入操作

dingzhengshengbobo 2014-07-21 05:52:22
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


void main()
{
FILE *file;
char tmp[2048];
int i=0;


file = fopen("/proc/proc_to_firewall/ip_filter", "w");
if(!file)
{
for(i=0; i<10; i++)
{
fprintf(file, "1:192.168.1.%d", i);
}
fclose(file);
i=0;
}
else
printf("XXXXXXXXXXXXXXXXXX\n");


if((file = popen("cat /proc/proc_to_firewall/ip_filter", "r")) != NULL)
{
i++;
while(fgets(tmp, sizeof(tmp), file) != NULL)
{
printf("line_%d:%s",i,tmp);
}

pclose(file);
}
}

proc文件内核态的读写代码已经写完了,现在写用户态的,读取proc文件ip_filter已经实现了,但是写入数据难道只能用系统调用system(“echo 123 > /proc/proc_to_firewall/ip_filter")这种方法吗,上面像普通文件那样打开并写入,直接就失败了,打印XXXXXXX,文件等于是打开失败了,有啥方法吗?
...全文
393 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingzhengshengbobo 2014-07-30
  • 打赏
  • 举报
回复
引用 4 楼 aria 的回复:
贴一下内核态的proc写的代码吧,毕竟echo命令这种后面会写入\n的,和你代码里还是有点区别。 另外echo你说成功的意思是说: echo 123 > /proc/proc_to_firewall/ip_filter 然后 cat /proc/proc_to_firewall/ip_filter 显示123的意思吗? 试过echo -n 123 > /proc/proc_to_firewall/ip_filter 吗?
就是这个意思,后台的ip_filter的读写函数就是实现这个功能,但是总是写不进去,但是现在已经 找到问题的原因了,用的的fprintf是带缓存的,所以加上fflush就可以解决了,太忙,现在才来回复, 仍然很谢谢你
aria 2014-07-24
  • 打赏
  • 举报
回复
贴一下内核态的proc写的代码吧,毕竟echo命令这种后面会写入\n的,和你代码里还是有点区别。 另外echo你说成功的意思是说: echo 123 > /proc/proc_to_firewall/ip_filter 然后 cat /proc/proc_to_firewall/ip_filter 显示123的意思吗? 试过echo -n 123 > /proc/proc_to_firewall/ip_filter 吗?
dingzhengshengbobo 2014-07-22
  • 打赏
  • 举报
回复
引用 1 楼 aria 的回复:
确定代码没贴错? if(!file) --> 按下面的逻辑这里看上去应该是 if (file) ? { /* 这个是失败的分支,不应该出现fclose(file),因为file == NULL */ } else printf("XXXXXXXXXXXXXXXXXX\n"); --> 如果按if (!file) 这个是成功的分支 而且后面从ip_filter读取的代码也没考虑前面失败的情况
我是希望通过C语言读取/写入文件的形式操作proc文件,而不是调用system/popen这种使用shell命令来完成
dingzhengshengbobo 2014-07-22
  • 打赏
  • 举报
回复
引用 1 楼 aria 的回复:
确定代码没贴错? if(!file) --> 按下面的逻辑这里看上去应该是 if (file) ? { /* 这个是失败的分支,不应该出现fclose(file),因为file == NULL */ } else printf("XXXXXXXXXXXXXXXXXX\n"); --> 如果按if (!file) 这个是成功的分支 而且后面从ip_filter读取的代码也没考虑前面失败的情况
那个地方的确有问题,但是改过来也不行啊,执行完了,但是没有写入,也没有报错, 后面那一段之所以说是正确的,因为我将写入的那段注释掉,手动echo 几条数据到ip_filter里面 它都能正确的读出来,然后将popen的形式改成fopen,也能正确读取,就是写入有问题
aria 2014-07-21
  • 打赏
  • 举报
回复
确定代码没贴错? if(!file) --> 按下面的逻辑这里看上去应该是 if (file) ? { /* 这个是失败的分支,不应该出现fclose(file),因为file == NULL */ } else printf("XXXXXXXXXXXXXXXXXX\n"); --> 如果按if (!file) 这个是成功的分支 而且后面从ip_filter读取的代码也没考虑前面失败的情况

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧