我简直是在扯我的头发。我正在尝试为我的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" );出于道德原因删除了一些代码。
发布于 2013-01-30 01:05:17
在上面的代码中,ptr1没有初始化。假设ptr1是您的命令,并在其他地方填充,您是否检查了字符串是否在正确的位置以零结尾?即使使用printf,一些不可打印的字符也可能在字符串的末尾和零终止之间,因此您会有"ls___“。只需对ptr1长度进行快速的健全性检查:
printf("%s : %lu", ptr1, strlen(ptr1));
发布于 2013-01-30 01:11:27
我可以从您的错误消息中猜测,您传递给popen的字符串中有一个虚假的回车。所以你实际上是在调用,例如popen("ls\r", "r");,它失败了,错误消息是ls\r: not found。当您打印该错误消息时,回车符将使它跳回到行首,看起来像: not found
回车是这类奇怪错误的一个臭名昭著的来源,因为它们对于shell来说不是空格,但是当您打印它们时,您并不能真正看到它们。
https://stackoverflow.com/questions/14587340
复制相似问题