免费注册 查看新帖 |

Chinaunix

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

[C++] 求教:调用system函数,返回值正确,命令没有运行! [复制链接]

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

这是我makefile工程中调用system的一段代码
status = system(command.c_str());
if(status < 0){
                        fprintf(stderr,"%s\t error: %s", command,  strerror(errno));
                        return false;
        }
if(WIFEXITED(status)){
        if(WEXITSTATUS(status) == 0){
                fprintf(stderr, "command normal termination, exit status = %d\n",WEXITSTATUS(status));//打印此条语句
                return true;
        }else{
                fprintf(stderr, "command fail, exit status = %d\n",WEXITSTATUS(status));
                return false;
        }
}else if(WIFSIGNALED(status)){
        fprintf(stderr, "command abnormal termination, singal number = %d\n",WTERMSIG(status));
        return false;
}else if(WIFSTOPPED(status)){
        fprintf(stderr, "process stopped, singal number = %d\n",WSTOPSIG(status));
        return false;
}else{
        fprintf(stderr, "command exit error, exit status = [%d]\n",WEXITSTATUS(status));
        return false;
}
上面这段返回状态判断是借鉴网上的

其中command是一个字符串:/home/XX/softwares/solvers/bin/solver /home/XX/test/file.txt
功能是solver读入file文件,在执行中会产生输出,本来是输出到标准输出屏幕,我通过它给的参数将其重定向了到一个文件,solver不开源

问题是:
在运行程序的时候,每次返回值都显示运行成功,也就是上面代码说明的,但是却没有生成文件(也就是说没有执行command?)
我将command这句话直接在终端上执行是正确的,会生成文件

为什么这样?怎么解决啊?新手完全没有解决方向…………
求大神指教

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2014-09-10 16:16 |只看该作者
是不是权限问题?
关于system函数,在标准手册中有说明:其返回不代表已经正确执行命令。

论坛徽章:
0
3 [报告]
发表于 2014-09-10 16:22 |只看该作者
权限问题?如何确认或者修改权限呢回复 2# cobras


   

论坛徽章:
0
4 [报告]
发表于 2014-09-10 16:29 |只看该作者
回复 2# cobras
在我工程的另外一个地方也调用了system,但这里只是执行一个程序,也就是:
system(program_.c_str());
执行过程中也会读取和生成文件(这个读取和生成都是用的ifstream),这个工具不开源,我也不知道里面怎么写的
这个就是正常执行的

   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
5 [报告]
发表于 2014-09-10 16:30 |只看该作者
执行文件是否有执行权限?文件夹是否有写入权限?
上述代码执行环境的用户,及用户组是什么?

论坛徽章:
0
6 [报告]
发表于 2014-09-10 16:38 |只看该作者
回复 5# cobras

额,执行文件是否有执行权限怎么确定?
文件夹具有写权限,我将command改为ls >test.txt 等是可以生成文件的

   

论坛徽章:
0
7 [报告]
发表于 2014-09-11 10:02 |只看该作者
本帖最后由 fanxiaoqie 于 2014-09-11 16:03 编辑

回复 1# fanxiaoqie
调用程序具有执行权限
所属同一个用户和用户组
这是makefile的一个截图:
代码放在①文件里面不能运行,放在②文件里面就正常执行



另外,我在①里面调用一个自己写的可执行文件就能正常执行,它和tool的读写权限和所属用户都是一样的

………………………………求大神解答


   

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2014-09-12 14:55 |只看该作者
可不可以考虑,暂时不用system,而是直接抠出来,用execl看看执行的效果,如果这个没有问题,再来看看

论坛徽章:
0
9 [报告]
发表于 2014-09-12 21:41 |只看该作者
回复 8# lxyscls


    这些测试都做过了,谢谢大家的回答
   
    我找到了原因,是我所读的那个“file.txt”的问题,连带了这里
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP