鱼C论坛

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

chdir无效果

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

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

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

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

使用道具 举报

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

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

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

以下是一个示例代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
    char command[] = "cd /mnt";
    
    pid_t pid = fork();
    
    if (pid == 0) {
        // 子进程
        system(command);
        exit(0);
    } else if (pid > 0) {
        // 父进程
        wait(NULL);
        chdir("/mnt");
        printf("当前工作目录:%s\n", getcwd(NULL, 0));
    } else {
        // fork() 失败
        perror("fork");
        return 1;
    }
    
    return 0;
}

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

希望这个解答能够帮到你!如果你有任何疑问,请随时追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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