免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9340 | 回复: 7
打印 上一主题 下一主题

问个popen的返回值的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-27 22:33 |只看该作者 |倒序浏览
在c中,我用popen去执行snmpset 命令,我如何才能知道snmpset命令执行的结果呢?
我不想通过分析snmpset的输出来, 因为我觉得有点麻烦。



root@cheng:~# snmpset -c private 10.255.2.1 .1.3.6.1.4.1.9.9.68.1.2.2.1.2.26 integer 2
Error in packet.
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: enterprises.9.9.68.1.2.2.1.2.26

root@cheng:~# echo $?
2
root@cheng:~# snmpset -c private 10.255.2.1 .1.3.6.1.4.1.9.9.68.1.2.2.1.2.6 integer 2
enterprises.9.9.68.1.2.2.1.2.6 = 2
root@cheng:~# echo $?0
root@cheng:~#



上。我想得到$?的值。0--表示成功,非0--表示失败。

我如何才能得到这个$?的值呢?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-07-27 22:39 |只看该作者
应该是得不到
dup+fork+exec吧,能得到

论坛徽章:
0
3 [报告]
发表于 2007-07-27 22:41 |只看该作者
这个值是shell对刚刚运行子命令进行wait得到的。
你可以自己这么做

论坛徽章:
0
4 [报告]
发表于 2007-07-28 18:36 |只看该作者
原帖由 flw2 于 2007-7-27 22:41 发表
这个值是shell对刚刚运行子命令进行wait得到的。
你可以自己这么做


不好意思.有点愚钝.

能详细点吗?

谢谢!

论坛徽章:
0
5 [报告]
发表于 2007-07-28 19:38 |只看该作者
main()
...
int pid;
if ((pid=fork()) < 0) {
    //error,unlikely. like popen return NULL

} else
if (pid == 0) {
   execl("snmpset","snmpset","-c","private","10.255.2.1",".1.3.6.1.4.1.9.9.68.1.2.2.1.2.6","integer","2",NULL;
}
else {
    int status;
    wait(&status);
    ret = WEXITSTATUS(status);
};

你要的就是ret了

论坛徽章:
0
6 [报告]
发表于 2014-04-28 14:08 |只看该作者
flw2 发表于 2007-07-28 19:38

这个不等于自己实现了一个popen了,哦,这样也可以。

论坛徽章:
0
7 [报告]
发表于 2014-04-29 15:06 |只看该作者
不过我看apue讲的是pclose可以知道cmdstring的终止状态。

论坛徽章:
5
戌狗
日期:2014-06-09 10:29:10酉鸡
日期:2014-12-01 16:05:27处女座
日期:2015-01-07 18:35:262015亚冠之水原三星
日期:2015-06-03 09:26:222015亚冠之布里斯班狮吼
日期:2015-06-15 10:53:54
8 [报告]
发表于 2014-11-20 10:46 |只看该作者
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>

  4. int run_cmd(char *cmd, char *result)
  5. {
  6.     FILE *pp;
  7.     int iRet = 0;
  8.     if( (pp = popen(cmd, "r")) == NULL )
  9.     {
  10.         printf("popen() error!\n");
  11.         exit(1);
  12.     }
  13.     fgets(result, 1000, pp);
  14.         printf("%s", result);
  15.     iRet = pclose(pp);  
  16.     return iRet;
  17. }
  18. int xargs_test(char *result)
  19. {
  20.     char *cmd;
  21.     int iRet = asprintf(&cmd, "ls -lh /root/Project/programing/bak/ |grep a.out  | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm ");
  22.     if(iRet == -1)
  23.         return iRet;
  24.     return run_cmd(cmd, result);
  25. }
  26. int main()
  27. {
  28.     int iRet = xargs_test(result);
  29.     printf("ret = %d", iRet);
  30.     return 0;
  31. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP