- 论坛徽章:
- 0
|
下面是我的代码
#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就无法通呢?
期待大家帮忙看一下
十分感谢! |
|