有关execv()的奇怪问题

shinerise 2016-01-05 04:59:34
各位大侠,我在我的程序中,如果这样调用外部程序:
char * const argv[] = {"./"};
execv("./app", argv);
那么app进程一定执行失败。但是我如果这样执行:
int32_t dwRet = execv("./app", argv);
if(dwRet < 0)
{
printf("exec app failed.Ret:%d,Errno:%d",dwRet,errno);
}

就是正确的。也就是我在execv()函数后面,必须打印一下这个函数的返回值,app程序才能执行。各位有了解为啥的吗?给点意见吧。多谢!
...全文
258 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinerise 2016-01-05
  • 打赏
  • 举报
回复
引用 1 楼 nswcfd 的回复:
#include <unistd.h> int main() { char *const argv[] = { "./" }; execv("/bin/date", argv); } 64位平台可以正常调用date。 楼主的环境?32bit?64bit?or 64bit OS下的32bit程序?
32位的嵌入式arm linux 3.2系统。 说一下我的环境,那个app就是一个简单system("rename xxx bbb")。当socket收到Server的一个命令来执行这个代码,app进程是可以正确调用的。但是当我程序启动就直接执行这段代码时,app进程调用就是失败的。非常奇怪。 另外再问一个问题,嵌入式linux上,如果一个可执行程序app正在运行,那么我rename这个app名字为其它的名字,为什么可以成功呢?在WIN系统上,一个文件正在运行时,不是禁止对这个文件做删除、重命名操作的吗。是不是linux系统上,删除、重命名文件时,不限制文件是否正在执行?
nswcfd 2016-01-05
  • 打赏
  • 举报
回复
#include <unistd.h> int main() { char *const argv[] = { "./" }; execv("/bin/date", argv); } 64位平台可以正常调用date。 楼主的环境?32bit?64bit?or 64bit OS下的32bit程序?

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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