You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下fork()函数创建多级目录及路径打印技术咨询

解决用fork+exec实现多级目录创建并打印路径的问题

嘿,我懂你现在的需求——要写一个叫dir123的程序(也就是进程A),通过创建子进程B,把B的镜像换成mkdir -p来创建./D1/D2/D3,然后切换到D3目录打印它的绝对路径对吧?下面直接给你能跑的代码,再一步步拆解每个部分的作用:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <limits.h>

int main() {
    // 创建子进程B
    pid_t pid = fork();

    if (pid == -1) {
        perror("fork failed");
        exit(EXIT_FAILURE);
    } else if (pid == 0) {
        // 子进程B:替换镜像为mkdir -p ./D1/D2/D3
        // 用execlp会自动在PATH里找mkdir,也可以用execl指定绝对路径/bin/mkdir
        execlp("mkdir", "mkdir", "-p", "./D1/D2/D3", (char*)NULL);
        // 只有execlp执行失败才会走到这里
        perror("execlp failed");
        exit(EXIT_FAILURE);
    } else {
        // 父进程A:必须等待子进程B完成目录创建,否则会提前执行chdir报错
        wait(NULL);
        
        // 切换到D3目录
        if (chdir("./D1/D2/D3") == -1) {
            perror("chdir failed");
            exit(EXIT_FAILURE);
        }
        
        // 获取并打印当前目录的绝对路径
        char cwd[PATH_MAX];
        if (getcwd(cwd, sizeof(cwd)) != NULL) {
            printf("D3目录的绝对路径:%s\n", cwd);
        } else {
            perror("getcwd failed");
            exit(EXIT_FAILURE);
        }
    }

    return EXIT_SUCCESS;
}

关键部分说明

  • fork() 生成子进程:父进程执行fork后,会得到子进程的PID,子进程则返回0。我们通过这个返回值区分父子进程的任务——子进程负责调用mkdir创建目录,父进程负责后续的切换目录和打印路径。
  • execlp 替换进程镜像:子进程里用execlp调用系统的mkdir命令,-p参数是核心,它会自动创建所有不存在的父目录,不用手动逐层创建。注意参数列表必须以(char*)NULL结尾,这是exec系列函数的硬性要求。如果担心PATH环境变量的问题,也可以换成绝对路径写法:execl("/bin/mkdir", "mkdir", "-p", "./D1/D2/D3", (char*)NULL)。
  • wait(NULL) 等待子进程完成:父进程必须等子进程把目录建好再执行chdir,不然子进程还没完成创建,父进程就去切换目录,会报"没有那个文件或目录"的错误。wait函数会让父进程阻塞,直到子进程结束。
  • chdir 切换工作目录:这里用相对路径./D1/D2/D3没问题,前提是你从当前目录启动程序。如果需要更严谨,也可以使用绝对路径。
  • getcwd 获取绝对路径:PATH_MAX是系统定义的最大路径长度,用getcwd把当前工作目录的绝对路径读到数组里,打印出来就完成需求了。

编译运行

用gcc编译:

gcc dir123.c -o dir123

运行程序:

./dir123

你就能看到D3目录的绝对路径被打印出来,同时当前目录下也会生成D1/D2/D3的多级目录。

如果遇到权限问题,确保你对当前目录有写入权限;如果execlp报错,检查系统里是否存在mkdir(一般都有),或者换成绝对路径的写法。


内容的提问来源于stack exchange,提问作者Pedro Quintans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:22:56