我的任务是在C语言中对linux cd
命令进行编程。我认为使用chdir()
方法会很琐碎,但是我的目录没有更改。有趣的是chdir()的返回状态为0,而不是-1,这意味着chdir()并未失败。这是我使用chdir()
的两种情况:
1。
char *dir = getenv("HOME"); // Here dir equals the home environment.
int ret = chdir(dir);
printf("chdir returned %d.\n", ret);
ret
返回1。
2。
int ret = chdir(dir); // Here dir equals the user's input.
printf("chdir returned %d.\n", ret);
如果目录在我的路径中,则 ret
返回1。
我使用chdir()
错了吗?我似乎在任何地方都找不到答案。任何帮助将不胜感激。
答案 0 :(得分:5)
chdir()
仅更改调用进程的工作目录。
因此,当您拥有类似...的代码
int main() {
// 1
chdir("/"); // error handling omitted for clarity
// 2
}
...并将其编译为程序example
,然后在shell中运行它:
$ pwd # 3
/home/sweet
$ ./example # 4
$ pwd # 5
/home/sweet
然后您有两个过程在进行中,
shell,您在其中输入了pwd
和./example
./example
,该过程由外壳程序通过编译程序启动。
chdir()
是已编译程序的一部分,而不是外壳程序的一部分,因此它仅影响程序的进程,不外壳程序。
因此,在// 1
,程序的工作目录(在上面的示例中是运行)是/home/sweet
,但是在// 2
,它是/
,在{{ 1}}上方。不过,这不会影响chdir()
的外壳和输出!