我目前正在努力解决这个错误。我正在编写一个shell模拟器,使用fork()来执行使用execvp();的命令。 几乎每个我试图解析到shell的命令都能正常工作,除了ls没有参数。 如果我尝试执行LS -lah,一切正常,但一个简单的LS不会,收到以下错误:execvp - ls:fts_open:没有这样的文件或目录
ls: fts_open: No such file or directory
这里是我的代码片段:(只是必需的)
pid = fork();
if (pid==0)
{
puts("CHILD");
puts(args[0]);
puts(args[1]);
printf("%d\n", strlen(args[1]));
args[2] = NULL;
execvp(args[0], args);
}
else wait(NULL);
puts("BACK TO PARENT");
}
和这里为LS的输出:
ls
CHILD
ls
0
ls: fts_open: No such file or directory
BACK TO PARENT
,你可以看到,ARGS [0]包含LS,ARGS [1]是空的,因为没有参数,args来长度[1]是0,但我不断收到错误。
想法是什么?
编辑:
荣誉乔纳森莱弗勒寻找出来:(也,现在看来似乎只是在Mac上的问题)
的一点是ARGS [1]是不是真的空,因此,操作系统会尝试打开''文件,显然,该文件不存在,并且根据外观,无法创建,因为它不是真正的名称。
所以,这是我做的:检查args的len [1]。如果它是0,则将其设置为NULL。 (只是释放内存并没有真正帮助)
pid = fork();
if (pid==0)
{
puts("CHILD");
puts(args[0]);
puts(args[1]);
if (strlen(args[1]) == 0)
args[1] = 0;
args[2] = NULL;
execvp(args[0], args);
}
else wait(NULL);
puts("BACK TO PARENT");
}
可以显示'args'的完整定义(什么'args [1]'设置为,什么是“空”?)以及更多的代码? – 2013-04-09 03:39:50