我真的把头发拉出来了。我试图为我的IRC bot创建远程shell执行,但是,当我使用诸如“ls”或“cd”之类的命令时,我得到了一个返回值:not found”,然而,其他命令,如mkdir或echo似乎工作正常。同样,当我硬编码命令时,我得到的输出与应该得到的完全一样。
有人知道为什么吗?这是我的代码:

            FILE *fp;
            int status;
            char path[1035];
            /* Open the command for reading. */
            fp = popen(ptr1, "r"); // hard code command and it works ????fp = popen("/bin/ls /etc/", "r");
            printf("%s", ptr1);//check received command (debugging)
            if (fp == NULL) {
                printf("Failed to run command\n" );

出于道德原因删除了一些代码。

最佳答案

在您的代码中,上面的ptr1未初始化。假设ptr1是您的命令,并且是在其他地方填充的,那么您是否检查了字符串是否在正确的位置以零结尾?即使使用printf,一些不可打印的字符也可能在字符串的结尾和零终止之间,这样就有了“ls”。快速检查ptr1的长度可能是:
printf("%s : %lu", ptr1, strlen(ptr1));

关于c - 远程执行Shell命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14587340/

10-11 09:12