免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: huzhangyou2002
打印 上一主题 下一主题

[网络管理] 请教 platinum 以及别的大大 关于如何自动切换网络的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-01-31 12:02 |只看该作者
原帖由 HonestQiao 于 2007-1-31 11:41 发表于 10楼  


我不是说了断线自救对他有帮助啊。

肯定是参考不是照搬啦。

完全不同的两个东西,没有任何参考价值

论坛徽章:
0
12 [报告]
发表于 2007-01-31 12:35 |只看该作者
十分感谢两位兄弟
我看可以加分吗?

我自己编程实现了
参考了platinum (何时才能飞) 的提示

我一会把代码贴上

论坛徽章:
0
13 [报告]
发表于 2007-01-31 19:34 |只看该作者

出现了新的问题了

郁闷
http://community.csdn.net/Expert ... 9.xml?temp=.5704004

这是说明

问题:很奇怪

为什么ping不通的话 程序会假死呢

论坛徽章:
0
14 [报告]
发表于 2007-01-31 19:38 |只看该作者
下面是我的代码

#include <iostream>
#include <string>
#include <sys/time.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
using namespace std;

void do_event(int sig){

FILE *f_read;
f_read = popen("ping -c 2 221.8.9.2","r");
if(f_read == NULL){
exit(0);
}
char buf[1024];
while(fgets(buf,sizeof(buf),f_read)){
cout << string(buf) << endl;
}
pclose(f_read);

//cout << "Recv \n" << endl;
}
int main(int argc,char* argv[]){
struct itimerval value;
if(signal(SIGALRM,do_event) == SIG_ERR)
perror("signal");
while(1){
value.it_value.tv_sec = 10;
value.it_value.tv_usec = 0;
if(setitimer(ITIMER_REAL,&value,NULL)< 0){
perror("setitimer!");
}
sleep(10);
}
return 0;
}


我的想法是 每隔 10S执行一次 do_event

当ping -c 2 127.0.0.1的时候
程序没有任何问题

当ping -c 2 221.8.9.2的时候
因为这个IP是一个假的,ping肯定不通

这个时候 程序根本就不输出任何东西
正常应该会输出 没有ping通的信息的

如下面的代码:

#include <iostream>

using namespace std;
#include <stdio.h>

int main(int argc,char *argv[]){
FILE *f_read;
char buf[1024];
f_read = popen("ping -c 3 221.8.9.2","r");
if(f_read == NULL){
return 1;
}
while(fgets(buf,sizeof(buf),f_read)){
cout << string(buf) << endl;
}
pclose(f_read);
return 0;
}

会输出一些ping不通的信息

但是为什么 我使用signal就无法通呢?

期待大家帮忙看一下
十分感谢!

论坛徽章:
0
15 [报告]
发表于 2007-01-31 22:08 |只看该作者
不输出东西,可能是因为错误信息在 err 管道里的缘故吧?
比如,在 linux 下 ping -c1 不存在的IP > /tmp/test.txt,是没有你要的内容的
若 ping -c1 不存在的IP &>/tmp/test.txt 则会出现
这里涉及到一个 stderr 的东西

论坛徽章:
0
16 [报告]
发表于 2007-01-31 22:19 |只看该作者
使用
system(''ping -c 221.8.9.2 > ./log");

也能输出!
很奇怪!!
对于CSDN的两个程序
第二个就好使 很奇怪啊!!

对了 想看一下你的shell的代码
谢谢

论坛徽章:
0
17 [报告]
发表于 2007-01-31 22:20 |只看该作者
你说的问题 别人也提起过
但是很奇怪第二个程序好事!

论坛徽章:
0
18 [报告]
发表于 2007-01-31 22:21 |只看该作者
好的,不过改路由表那块我就不写了,因为不知道你要如何改
我睡觉前写一下然后贴出来,现在去看会《LOST》

论坛徽章:
0
19 [报告]
发表于 2007-01-31 22:25 |只看该作者
好的 实在非常感谢了
路由表哪里你随便演示写一句就可以了

我对shell实在很菜

谢过

论坛徽章:
0
20 [报告]
发表于 2007-01-31 22:59 |只看该作者
这是一个功能说明性的代码,需要的人可以继续自行修改

  1. #! /bin/bash
  2. echo "2" > /tmp/route_flag
  3. while :; do
  4.         if ping -c1 -w1 platinum 的 laptop &>/dev/null; then
  5.                 if [ "`cat /tmp/route_flag`" = "1" ]; then
  6.                         echo "`date` 修改路由表,使数据走双线"
  7.                         echo "2" > /tmp/route_flag
  8.                 fi
  9.         else
  10.                 if [ "`cat /tmp/route_flag`" = "2" ]; then
  11.                         echo "`date` 修改路由,使数据全部走电信"
  12.                         echo "1" > /tmp/route_flag
  13.                 fi
  14.         fi
  15.         sleep 10
  16. done
复制代码

测试结果如下图

changeroute.png (14 KB, 下载次数: 57)

changeroute.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP