- 论坛徽章:
- 5
|
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- int run_cmd(char *cmd, char *result)
- {
- FILE *pp;
- int iRet = 0;
- if( (pp = popen(cmd, "r")) == NULL )
- {
- printf("popen() error!\n");
- exit(1);
- }
- fgets(result, 1000, pp);
- printf("%s", result);
- iRet = pclose(pp);
- return iRet;
- }
- int xargs_test(char *result)
- {
- char *cmd;
- int iRet = asprintf(&cmd, "ls -lh /root/Project/programing/bak/ |grep a.out | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm ");
- if(iRet == -1)
- return iRet;
- return run_cmd(cmd, result);
- }
- int main()
- {
- int iRet = xargs_test(result);
- printf("ret = %d", iRet);
- return 0;
- }
复制代码 有两个疑问:
疑问一:为什么单独执行命令,和pclose的返回值不相等
单独执行命令:ls -lh /root/Project/programing/bak/ |grep a.out | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm- ls -lh /root/Project/programing/bak/ |grep a.out | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm
- rm: 无法删除"111111111111": 没有那个文件或目录
- rm: 无法删除"222222222222": 没有那个文件或目录
- rm: 无法删除"333333333333333": 没有那个文件或目录
- [ L:programing$ ]echo $?
- 123
复制代码 通过编译文件执行,结果如下- ./a.out
- rm: 无法删除"111111111111": 没有那个文件或目录
- rm: 无法删除"222222222222": 没有那个文件或目录
- rm: 无法删除"333333333333333": 没有那个文件或目录
- ret = 31488
复制代码
疑问二:为什么删除命令变为ls -lh /root/Project/programing/bak/ |grep a.out | awk -F'->' '{print $1}' | awk -F' ' '{print $9}' | xargs rm -f后,返回结果就是0
man 了一下
-f, --force
ignore nonexistent files and arguments, never prompt
看来-f参数编程时还得慎用阿 |
|