当前位置: 技术问答>linux和unix
C++中system函数返回-1的问题
来源: 互联网 发布时间:2016-05-30
本文导语: 我们的工程中在Linux64位平台上有一个地方调用外部的一个名为step的程序,该程序为32位,在C++语言中用system函数来调用: error_flag = system(my_command); 结果运行的时候外面的那个程序也启动起来了,在命令行窗口中看...
我们的工程中在Linux64位平台上有一个地方调用外部的一个名为step的程序,该程序为32位,在C++语言中用system函数来调用:
error_flag = system(my_command);
结果运行的时候外面的那个程序也启动起来了,在命令行窗口中看到运算过程,写出的文件也没有问题,结果也是正确的,但是最后error_flag返回值就是为-1,
我想查看一下errno,就加了这么两句:
printf("errno = %dn", errno);
结果打印出来的errno居然是0!没有错误,可system的返回值就是-1。
我于是另外写了一个小程序;
------------------------------------------
#include
#include
#include
int main()
{
char com[1024];
int ret;
sprintf( com, "/home/eta/step/step32 uppad_step 2000000 0" );
ret = system( com );
printf( " ret = %dn", ret );
}
--------------------------------------------------
还是编译出64位程序去调用那个32位的程序step,一切都很正常,ret也等于0.
我就是很奇怪为什么在我们的工程中调用step就是返回-1,返回-1也就算了,为什么errno居然还是0?
太奇怪了
error_flag = system(my_command);
结果运行的时候外面的那个程序也启动起来了,在命令行窗口中看到运算过程,写出的文件也没有问题,结果也是正确的,但是最后error_flag返回值就是为-1,
我想查看一下errno,就加了这么两句:
printf("errno = %dn", errno);
结果打印出来的errno居然是0!没有错误,可system的返回值就是-1。
我于是另外写了一个小程序;
------------------------------------------
#include
#include
#include
int main()
{
char com[1024];
int ret;
sprintf( com, "/home/eta/step/step32 uppad_step 2000000 0" );
ret = system( com );
printf( " ret = %dn", ret );
}
--------------------------------------------------
还是编译出64位程序去调用那个32位的程序step,一切都很正常,ret也等于0.
我就是很奇怪为什么在我们的工程中调用step就是返回-1,返回-1也就算了,为什么errno居然还是0?
太奇怪了
|
貌似真的很奇怪...
你的那个代码如何写的...
你的那个代码如何写的...
|
这么诡异,那你试下用fork+execl来运行一下,容易跟踪代码.
|
关于errno的问题,有点象我前阵子碰到过的一个问题。
看看这篇文章,看有没有帮助。
http://blog.csdn.net/mosaic/archive/2009/02/03/3860576.aspx
看看这篇文章,看有没有帮助。
http://blog.csdn.net/mosaic/archive/2009/02/03/3860576.aspx
|
貌似 errno 只记录最后一个调用的哦,中间如果有其他函数调用(不是自己实现的),那就是打印的位置选择的不当哦...
|
看看这个帖子吧
http://topic.csdn.net/u/20080126/09/b449d0cb-d93f-43ec-a28f-0d1fdf762e76.html
http://topic.csdn.net/u/20080126/09/b449d0cb-d93f-43ec-a28f-0d1fdf762e76.html
|
我也奇怪~~帮顶吧
|
不对errno是你这个进程中的全局变量,system会fork另外一个子进程,system出来的子进程不能写本进程内的errno变量.
所以父进程中的errno会是0.
所以父进程中的errno会是0.