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函数有没有报错?
------解决思路----------------------

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 ");