我目前正在研究Linux中的fork函数,并被要求做一个看似简单的程序。该程序必须在当前目录中创建3个目录./D1/D2/D3,然后将其当前目录更改为D3,最后打印绝对路径,我一开始就遇到麻烦。
“程序 dir123(进程 A)必须首先创建本地结构目录,创建一个新进程(进程 B),用其镜像替换 mkdir 命令镜像,然后使用选项“-p”创建位于以下位置的所有树目录:一次”
有人可以告诉我我需要做什么吗?看来进程 A 是创建如下目录: 系统(“mkdir./D1/D2/D3”);
我不知道的是,我必须使用子进程来创建 3 个目录中的每一个,或者使用一个子进程同时创建所有三个目录。
葡萄牙语:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid, pidw;
int status;
printf("\nExemplo de aplicacao 05 da funcao fork()\n");
pid= fork();
if ( pid==-1 ) {
perror("Erro na funcao fork()");
exit(1);
}
if ( pid ) {
/* pid>0, codigo para o processo pai */
printf("Codigo do Pai : PID=%5d PPID=%5d\n", \
(int) getpid(), (int) getppid());
printf("Codigo do Pai : Iniciado wait()\n");
pidw= wait(&status);
printf("Codigo do Pai : Processo filho PID=%5d" \
" terminou!\n", (int) pidw);
}
else {
/* pid=0, codigo para o processo filho */
printf("Codigo do Filho: PID=%5d PPID=%5d\n", \
(int) getpid(), (int) getppid());
//DIRECTORY CREATION
system("mkdir -p D1/D2/D3");
printf("Codigo do Filho: PID=%5d PPID=%5d\n", \
(int) getpid(), (int) getppid());
}
return 0;
}
最佳答案
“我不知道的是,我必须使用子进程来创建 3 个目录中的每一个,或者使用一个子进程同时创建所有三个目录。”
从问题陈述中可以明显看出,您应该使用 exec*()
系列函数通过 mkdir -p
立即创建目录。您在 system()
调用中拥有正确的命令。
由于这是家庭作业,我不会给你答案。您想要的调用声明为 int execvp(const char *file, char *const argv[]);
新程序员遇到的一个问题是第一个参数是程序名称的重复,因此它看起来更像 execvp(args[0], args)
,其中 args 是一个数组字符*
。
关于c - 使用fork()创建文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49881924/