免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1464 | 回复: 4
打印 上一主题 下一主题

关于uClinux下使用 system()调用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-16 17:02 |只看该作者 |倒序浏览
本帖最后由 wz1988001 于 2010-05-16 17:20 编辑

您好!
我写了这么一个程序:
#include<stdio.h>
int main()
{
        system("/iptables -P FORWARD DROP");
        printf("internet off.\n");
        return 0;
}
用gcc编译后,在我的RADHAT 9.0 上顺利跑起来了。即防火墙配置了, internet off也输出了。
然而
我用arm-elf-gcc编译后,在我的uClinux下跑的时候,只有防火墙配置了,internet off却没有被输出来!!!
这我就奇怪了。程序好像跑到system后就直接退出了,忽略了后面的语句。 有大侠知道解决办法吗?谢谢。
我在网上搜了一下,在uClinux下会找不到命令这一说法,要加上完整路径,我加了的。下面是我在uClinux下跑的程序。
#include<stdio.h>
int main()
{
        system("/bin/iptables -P FORWARD DROP");
        printf("internet off.\n");
        return 0;
}


下面是我在系统上电后的一些操作信息:
/> cd home

/home> ls                                                                    /*程序放在 /home/目录下*/
internet_off.flt web             internet_on.flt httpd        
      
/home> iptables -L                                                    /*原始的iptables 表*/      
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

/home> ./internet_off.flt                                         /*运行程序*/

/home> iptables -L                                                  /*再看iptables 表*/
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)                             /* 变成了DROP 说明system是正确运行了。*/
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
/home>

论坛徽章:
0
2 [报告]
发表于 2010-05-16 18:16 |只看该作者
没人遇到过这样的问题吗????

论坛徽章:
0
3 [报告]
发表于 2010-05-16 20:31 |只看该作者
没有人在uClinux下用system()函数么???

论坛徽章:
0
4 [报告]
发表于 2010-06-25 09:39 |只看该作者
uclinux和system和Linux下实现有所不同,uclinux下不支持fork函数,system里面调用的是vfork,你程序执行结束了用ps命令看下,如果命令行还没执行完,就不会调用printf的
不过你的代码看着没什么问题,我也在uclinux下用过system也没问题~~都可以正常运行~真的不行你自己写一个system函数~~

论坛徽章:
0
5 [报告]
发表于 2010-06-25 09:51 |只看该作者
不知道你那个内核裁剪了哪些模块,在linux下面printf有行缓冲机制,必须缓冲结束才会输出,你那个裁剪好的系统具体怎么处理输出语句就不知道了,所以有时候用print来DEBUG是不明智的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP