C通过popen模拟shell命令遇到的有关问题
C通过popen模拟shell命令遇到的问题
在bak1中有文件如下:
ll ../bak1
总用量 0
lrwxrwxrwx 1 root root 8 10月 21 12:48 111111111111 -> ../a.out
lrwxrwxrwx 1 root root 8 10月 21 12:48 222222222222 -> ../a.out
lrwxrwxrwx 1 root root 8 10月 21 12:48 333333333333333 -> ../a.out
lrwxrwxrwx 1 root root 8 10月 21 12:48 55555555555 -> ../debug
pwd路径如下:
/root/Project/programing/bak1
现在想通过popen模拟shell,将a.out的连接文件删除
int run_cmd(char *cmd, char *result)
{
FILE *pp;
if( (pp = popen(cmd, "r")) == NULL )
{
printf("popen() error!\n");
exit(1);
}
//while(fgets(result, 1000, pp))
fgets(result, 1000, pp);
//{
printf("%s", result);
//}
pclose(pp);
return 0;
}
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 -f ");
if(iRet == -1)
return iRet;
return run_cmd(cmd, result);
}
int main()
{
char result[1000];
xargs_test(result);
return 0;
}
执行命令
ls -lh /root/Project/programing/bak/ |grep a.out | awk -F'->' '{print $1}' | awk -F' ' '{print $9}'
现示结果如下:
111111111111
222222222222
333333333333333
为什么执行C程序删除不掉那三个文件??单独执行shell命令是可以的...
------解决思路----------------------
看下pclose函数有没有报错?
------解决思路----------------------
在bak1中有文件如下:
ll ../bak1
总用量 0
lrwxrwxrwx 1 root root 8 10月 21 12:48 111111111111 -> ../a.out
lrwxrwxrwx 1 root root 8 10月 21 12:48 222222222222 -> ../a.out
lrwxrwxrwx 1 root root 8 10月 21 12:48 333333333333333 -> ../a.out
lrwxrwxrwx 1 root root 8 10月 21 12:48 55555555555 -> ../debug
pwd路径如下:
/root/Project/programing/bak1
现在想通过popen模拟shell,将a.out的连接文件删除
int run_cmd(char *cmd, char *result)
{
FILE *pp;
if( (pp = popen(cmd, "r")) == NULL )
{
printf("popen() error!\n");
exit(1);
}
//while(fgets(result, 1000, pp))
fgets(result, 1000, pp);
//{
printf("%s", result);
//}
pclose(pp);
return 0;
}
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 -f ");
if(iRet == -1)
return iRet;
return run_cmd(cmd, result);
}
int main()
{
char result[1000];
xargs_test(result);
return 0;
}
执行命令
ls -lh /root/Project/programing/bak/ |grep a.out | awk -F'->' '{print $1}' | awk -F' ' '{print $9}'
现示结果如下:
111111111111
222222222222
333333333333333
为什么执行C程序删除不掉那三个文件??单独执行shell命令是可以的...
------解决思路----------------------
看下pclose函数有没有报错?
------解决思路----------------------
int iRet = asprintf(&cmd, "ls -lh /root/Project/programing/bak/
------解决思路----------------------
grep a.out
------解决思路----------------------
awk -F'->' '{print $1}'
------解决思路----------------------
awk -F' ' '{print $9}'
------解决思路----------------------
xargs rm -f ");
/* 改为 */
int iRet = asprintf(&cmd, “%s", "ls -lh /root/Project/programing/bak/
------解决思路----------------------
grep a.out
------解决思路----------------------
awk -F'->' '{print $1}'
------解决思路----------------------
awk -F' ' '{print $9}'
------解决思路----------------------
xargs rm -f ");