免费注册 查看新帖 |

Chinaunix

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

请教如何等待程序的返回 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-31 12:09 |只看该作者 |倒序浏览
3可用积分
我在我的C程序里面使用了
system("ping -c 10 127.0.0.1");
请问如何等待他的返回啊?

论坛徽章:
0
2 [报告]
发表于 2007-01-31 12:32 |只看该作者
写程序测试了一下
好像这样直接就会等待返回

论坛徽章:
0
3 [报告]
发表于 2007-01-31 13:05 |只看该作者
等待子进程结束是在SYSTEM内部实现的,所以你不需要也无法等待。

论坛徽章:
0
4 [报告]
发表于 2007-01-31 14:43 |只看该作者
你可能需要用到popen,将system的输出返回到你的变量里面。

论坛徽章:
0
5 [报告]
发表于 2007-01-31 19:38 |只看该作者
linux 问题请教

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


下面是我的代码

#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
6 [报告]
发表于 2007-02-01 09:13 |只看该作者
我在redhat7.2下试了一下,ping假地址是可以的,最起码第一次会有ping不通的信息输出。

论坛徽章:
0
7 [报告]
发表于 2007-02-03 17:04 |只看该作者
似乎是缓冲区在等待数据,所以导致输出有问题。不过我在你的程序里面减少buf好象还是不行。实际直接用ping的效果也是刚出来一行,然后要等很久才会出来结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP