c - 远程执行shell命令

标签 c linux sockets

我简直是在扯头发。我正在尝试为我的 IRC 机器人创建远程 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" );

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

最佳答案

我会从您的错误消息中猜测您在传递给 popen 的字符串中有一个虚假的回车符。因此,您实际上是在调用,例如 popen("ls\r", "r"); 失败并显示错误消息 ls\r: not found。当您打印该错误消息时,回车会导致它跳回到该行的开头,看起来像 : not found

回车是像这样的奇怪错误的臭名昭著的来源,因为它们不是 shell 的空白,但是当你打印它们时你无法真正看到它们。

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

相关文章:

c - C 中的求值顺序(对于带 * 和++ 的表达式)

c - 宏值在分配时发生变化

Python 脚本在打印前打印 os.system 的输出

sockets - 在 OpenSSL 上使用带有 UDP 套接字的 DTLS 时,如何正确处理连接和 SSL session ?

比较数字排序然后得到中值

linux - Shell脚本进程被自动杀死

c++ - 如何从 ltrace 获取 C++ 堆分配的虚拟方法名称?

Python Socket - 网络

java - SocketOutputStream的线程安全

c - 如何使用atoi保持原始int值