C++中system函数返回-1的问题

hupo1982 2009-04-14 03:51:25
我们的工程中在Linux64位平台上有一个地方调用外部的一个名为step的程序,该程序为32位,在C++语言中用system函数来调用:
error_flag = system(my_command);
结果运行的时候外面的那个程序也启动起来了,在命令行窗口中看到运算过程,写出的文件也没有问题,结果也是正确的,但是最后error_flag返回值就是为-1,
我想查看一下errno,就加了这么两句:
printf("errno = %d\n", errno);
结果打印出来的errno居然是0!没有错误,可system的返回值就是-1。

我于是另外写了一个小程序;
------------------------------------------
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
char com[1024];
int ret;

sprintf( com, "/home/eta/step/step32 uppad_step 2000000 0" );
ret = system( com );
printf( " ret = %d\n", ret );
}
--------------------------------------------------
还是编译出64位程序去调用那个32位的程序step,一切都很正常,ret也等于0.

我就是很奇怪为什么在我们的工程中调用step就是返回-1,返回-1也就算了,为什么errno居然还是0?
太奇怪了

...全文
497 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我也奇怪~~帮顶吧
osala 2009-04-17
  • 打赏
  • 举报
回复
看看这个帖子吧
http://topic.csdn.net/u/20080126/09/b449d0cb-d93f-43ec-a28f-0d1fdf762e76.html


jiangfeng999 2009-04-17
  • 打赏
  • 举报
回复
抱歉我上面的写错了
jiangfeng999 2009-04-17
  • 打赏
  • 举报
回复
不对errno是你这个进程中的全局变量,system会fork另外一个子进程,system出来的子进程不能写本进程内的errno变量.
所以父进程中的errno会是0.
morris88 2009-04-16
  • 打赏
  • 举报
回复
貌似 errno 只记录最后一个调用的哦,中间如果有其他函数调用(不是自己实现的),那就是打印的位置选择的不当哦...
mosaic 2009-04-16
  • 打赏
  • 举报
回复
关于errno的问题,有点象我前阵子碰到过的一个问题。
看看这篇文章,看有没有帮助。
http://blog.csdn.net/mosaic/archive/2009/02/03/3860576.aspx
hupo1982 2009-04-14
  • 打赏
  • 举报
回复
我们工程中的代码实际上也就是一句sprintf把命令写入一个字符串,然后system调用,当然前面还有一些其他函数,都是实现其他功能的。
我最奇怪的就是那个errno
代码里面三句printf:
printf("%d\n", error_flag);
printf("%d\n", errno);
printf("%s\n", strerrno);

结果打印出来一个:
-1
0
Success
要多气人有多气人
  • 打赏
  • 举报
回复
这么诡异,那你试下用fork+execl来运行一下,容易跟踪代码.
morris88 2009-04-14
  • 打赏
  • 举报
回复
貌似真的很奇怪...
你的那个代码如何写的...

23,117

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧