免费注册 查看新帖 |

Chinaunix

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

求救!关于system和popen的问题!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-18 11:20 |只看该作者 |倒序浏览
现在linux下编的这个程序,用system函数来调用另一个exe文件,以下是部分的代码:

     sprintf(szEXEPath, "%s/%s", GBINPATH, MAINNAME);
        sprintf(szCmdString, "%s %s", szEXEPath, szInputFilePath);
        status = system(szCmdString);                           /*调用计算程序*/

        if(WIFEXITED(status) == 0)                                      /*调用非正常结束*/
        {
                printf("Error in running the program!\n");
                return 0;
        }

目前的问题是程序运行总是发生WIFEXITED(status) == 0的情况,但是调用的exe文件运行有结果文件产生,并且计算结果正常,不明白为什么会进入那个出错的判断体里,去网上查,说是子进程非正常退出会出现WIFEXITED(status) == 0,大家帮我想想可能是什么原因造成的呢?

还有用popen替换掉system能解决这个问题么?我想取得调用函数的返回值,popen能实现么?

谢谢啦!

论坛徽章:
0
2 [报告]
发表于 2007-09-18 13:27 |只看该作者
回答过你了吧,为什么你就认为WIFEXITED是非正常退出呢。

论坛徽章:
0
3 [报告]
发表于 2007-09-18 20:44 |只看该作者
因为WIFEXITED这个宏定义就是用于判断是否非正常退出的啊,难道还有什么其他情况会造成WIFEXITED(status) == 0吗?

论坛徽章:
0
4 [报告]
发表于 2007-09-19 11:31 |只看该作者
不好意思,我弄错了,没有仔细看你的帖子。

应该是你调用的程序执行有些问题,用下面的代码看看。
if (WIFEXITED(status))
    printf("normal termination, exit status %d\n", WEXITSTATUS(status));
else if (WIFSIGNALED(status))
    printf("abnormal termination, signal number %d\n", WTERMSIG(status));
else if (WIFSTOPPED(status))
    printf("stopped, signal number %d\n", WSTOPSIG(status));


另外,为什么要用system这种东西呢,个人觉得用这个函数的话还不如用其它简单方面的语言呢,例如shell、perl、php。

[ 本帖最后由 Sorehead 于 2007-9-19 11:33 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-09-19 14:42 |只看该作者
谢谢楼上的!!!我先试一试^^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP