c 中 chdir 的奇怪错误
Strange bug with chdir in c
构建一个像 prog
一样的小 shell
我尝试制作 cd 命令,所以我使用:
if (!strcmp(cmd, "cd") )
{
if(chdir("args[1]")!=0){
printf(" %s - path not found\n",args[1]);
perror("Error:");
}
}
输出是这样的:
smash > cd /home/johnny/workspace/
/home/johnny/workspace/ - path not found
Error:: No such file or directory
smash > cd test
test - path not found
Error:: No such file or directory
ps工作目录中有一个"test"文件夹
pps
也许你们可以帮助我如何制作 "cd .." 命令
您正在将实际字符串 "args[1]"
传递到 chdir
。这可能不是你想要的,而是你想要的 chdir(args[1])
所以你的代码看起来像这样:
if (!strcmp(cmd, "cd") )
{
if(chdir(args[1])!=0){
fprintf(stderr, "chdir %s failed: %s\n", args[1], strerror(errno));
}
}
从 printf
的输出来看,您的路径似乎没问题,请注意在 printf
中您没有 "args[1]"
而是 args[1]
.
@BasileStarynkevitch 在下面的评论中也指出:
perror
after a printf
is wrong (since a failed printf
would
change errno
).
因此您应该使用上面的 fprintf
。
构建一个像 prog
一样的小 shell我尝试制作 cd 命令,所以我使用:
if (!strcmp(cmd, "cd") )
{
if(chdir("args[1]")!=0){
printf(" %s - path not found\n",args[1]);
perror("Error:");
}
}
输出是这样的:
smash > cd /home/johnny/workspace/
/home/johnny/workspace/ - path not found
Error:: No such file or directory
smash > cd test
test - path not found
Error:: No such file or directory
ps工作目录中有一个"test"文件夹
pps 也许你们可以帮助我如何制作 "cd .." 命令
您正在将实际字符串 "args[1]"
传递到 chdir
。这可能不是你想要的,而是你想要的 chdir(args[1])
所以你的代码看起来像这样:
if (!strcmp(cmd, "cd") )
{
if(chdir(args[1])!=0){
fprintf(stderr, "chdir %s failed: %s\n", args[1], strerror(errno));
}
}
从 printf
的输出来看,您的路径似乎没问题,请注意在 printf
中您没有 "args[1]"
而是 args[1]
.
@BasileStarynkevitch 在下面的评论中也指出:
perror
after aprintf
is wrong (since a failedprintf
would changeerrno
).
因此您应该使用上面的 fprintf
。