请教unix下execvp和system函数的问题

火猴 2008-07-02 10:57:01
今天在AIX下写程序,发现如下问题:
我在配置文件里面存储一个命令,例如cp /home/*.txt ./
我还程序里面读出这个命令,然后用execvp或system去调用。

发现用execvp调用的时候,不支持通配符,也就是说cp /home/a.txt ./ 就可以执行成功,如果是 cp /home/*.txt ./ 就不行,提示/home/*.txt不存在。
而用system 不会出现这个问题。 两种都支持, 但是system调用有个问题, 因为他是先fork一个子进程,起一个shell, 然后再去调用命令。 所以如果命令失败他得到的返回值还是0, 因为shell没有出错。

请教大侠,如何用execvp调用的时候也能支持通配符, 或者用system可以得到程序返回值?
...全文
244 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
火猴 2008-07-03
  • 打赏
  • 举报
回复
多谢楼上解答. WEXITSTATUS(status) 或者status/256 都是可以的
gettext 2008-07-02
  • 打赏
  • 举报
回复
system 调用的是 sh -c cp /home/*.txt ./
pathname expansion 是由sh来做的。 返回值是最后一个命令的返回值左移8位, 要用WEXITSTATUS(status)来看。

要用execvp的话就要自己做expansion的match.

23,217

社区成员

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

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