当前位置: 技术问答>linux和unix
关于system调用的问题
来源: 互联网 发布时间:2016-11-11
本文导语: 我在做项目的时候system调用存在的问题: 举调用tftp的shell命令为例,现在存在这样的问题 1.下载:tftp –v 10.51.2.55 –c get 1234.conf 假设1234.conf在服务器端不存在,直接下shell命令会返回错误码1,提示文件不存在 但...
我在做项目的时候system调用存在的问题:
举调用tftp的shell命令为例,现在存在这样的问题
1.下载:tftp –v 10.51.2.55 –c get 1234.conf
假设1234.conf在服务器端不存在,直接下shell命令会返回错误码1,提示文件不存在
但在代码中system调用捕获不到子进程的退出码,只能返回shell命令的执行是否成功。
2.tftp客户端没安装,下载:tftp –v 10.51.2.55 –c get dc.conf
dc.conf文件在服务端是存在的,但客户端tftp没有安装,直接下shell命令会给出“bash: tftp: command not found”这样的提示。
System调用同样也不能捕获到这个错误。
不知道大家system调用是不是存在同样的问题,找了好久没找到解决方案,请大家给出一个解决方法
system调用tftpget的源码,tftpPut()的源码也差不多:
举调用tftp的shell命令为例,现在存在这样的问题
1.下载:tftp –v 10.51.2.55 –c get 1234.conf
假设1234.conf在服务器端不存在,直接下shell命令会返回错误码1,提示文件不存在
但在代码中system调用捕获不到子进程的退出码,只能返回shell命令的执行是否成功。
2.tftp客户端没安装,下载:tftp –v 10.51.2.55 –c get dc.conf
dc.conf文件在服务端是存在的,但客户端tftp没有安装,直接下shell命令会给出“bash: tftp: command not found”这样的提示。
System调用同样也不能捕获到这个错误。
不知道大家system调用是不是存在同样的问题,找了好久没找到解决方案,请大家给出一个解决方法
system调用tftpget的源码,tftpPut()的源码也差不多:
bool TftpOperation::tftpGet()
{
try
{
string strCmd="tftp -v 192.168.1.101 -c get 1234.conf"
char chCmd[200] = {'0'};
strcpy(chCmd,strCmd.c_str());
int status=std::system(chCmd);
if (status == -1)
{
return false;
}
if (WIFEXITED(status))
{
if (!WEXITSTATUS(status))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
catch(exception &ex)
{
return false;
}
}
|
std::system()
system()是一个系统调用,不需要前面的std::限定吧?
在你的第1种情况,system()的返回值是什么?
如果想捕获命令的输出信息,可以考虑使用popen()调用
system()是一个系统调用,不需要前面的std::限定吧?
在你的第1种情况,system()的返回值是什么?
如果想捕获命令的输出信息,可以考虑使用popen()调用
|
有三个函数,可以好好地控制程序调用。
fork
exec
wait
fork
exec
wait
|
是呀,用popen()吧