鱼C论坛

 找回密码
 立即注册
查看: 1719|回复: 1

chdir无效果

[复制链接]
发表于 2023-10-8 10:23:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己写的shell中包括了如下代码:
if (chdir(command_final1[1]) != 0) {
                            perror("chdir");
                        }
在命令行输入cd /mnt,运行了这段代码后,却依旧在当前目录,是为什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 10:24:48 | 显示全部楼层
chdir() 函数用于改变当前工作目录。根据你提供的代码,如果 chdir() 函数返回值不为 0,即表示切换目录失败。在这种情况下,你使用 perror("chdir") 打印了一个错误消息,但这并不会导致程序退出或终止。

根据你的描述,你输入了 "cd /mnt" 命令,但是当前工作目录并没有改变。这可能是因为你的代码是在子进程中执行的,而子进程的工作目录的改变不会影响到父进程的工作目录。

解决这个问题的方法是使用 chdir() 函数来改变父进程的工作目录。你可以在父进程中执行 chdir() 函数,然后在子进程中执行其他的命令。

以下是一个示例代码:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/wait.h>

  5. int main() {
  6.     char command[] = "cd /mnt";
  7.    
  8.     pid_t pid = fork();
  9.    
  10.     if (pid == 0) {
  11.         // 子进程
  12.         system(command);
  13.         exit(0);
  14.     } else if (pid > 0) {
  15.         // 父进程
  16.         wait(NULL);
  17.         chdir("/mnt");
  18.         printf("当前工作目录:%s\n", getcwd(NULL, 0));
  19.     } else {
  20.         // fork() 失败
  21.         perror("fork");
  22.         return 1;
  23.     }
  24.    
  25.     return 0;
  26. }
复制代码


在这个示例代码中,我们使用 fork() 函数创建了一个子进程。子进程通过 system() 函数执行了 "cd /mnt" 命令。父进程在子进程执行完毕后,使用 chdir() 函数切换到 /mnt 目录,并打印当前工作目录。

希望这个解答能够帮到你!如果你有任何疑问,请随时追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-11 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表