我的任务是cd在C 语言中对linux 命令进行编程。我认为使用该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);
Run Code Online (Sandbox Code Playgroud)
ret 返回1。
2。
int ret = chdir(dir); // Here dir equals the user's input.
printf("chdir returned %d.\n", ret);
Run Code Online (Sandbox Code Playgroud)
ret 如果目录在我的路径中,则返回1。
我使用chdir()错了吗?我似乎在任何地方都找不到答案。任何帮助将非常感激。
chdir() 仅更改调用进程的工作目录。
因此,当您有类似...的代码时
int main() {
// 1
chdir("/"); // error handling omitted for clarity
// 2
}
Run Code Online (Sandbox Code Playgroud)
...并将其编译为程序example,然后在shell中运行它:
$ pwd # 3
/home/sweet
$ ./example # 4
$ pwd # 5
/home/sweet
Run Code Online (Sandbox Code Playgroud)
然后,您有两个过程在起作用,
壳,这是在您输入pwd和./example
./example,由您的编译程序启动(由外壳程序启动)的进程。
chdir()是您已编译程序的一部分,而不是外壳程序的一部分,因此,它仅影响程序的进程,而不影响外壳程序。
所以,在// 1你的程序的工作目录(在上面的例子来看)是/home/sweet,但// 2它是/在指定的chdir()上面的调用。但这不会影响shell以及输出pwd # 5!