我目前正在研究Linux中的fork函数,并被要求做一个看似简单的程序。程序必须在当前目录中创建 3 个目录 ./D1/D2/D3,然后将其当前目录更改为 D3 并最终打印绝对路径,我一开始就遇到了麻烦。
"程序 dir123(进程 A(必须首先创建一个本地结构目录,创建一个新的进程(进程 B(,将其图像替换为 mkdir 命令图像,并使用选项 "-p" 一次创建所有树目录">
有人可以启发我需要做什么吗?似乎过程 A 是创建如下目录:system("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=%5dn",
(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=%5dn",
(int) getpid(), (int) getppid());
//DIRECTORY CREATION
system("mkdir -p D1/D2/D3");
printf("Codigo do Filho: PID=%5d PPID=%5dn",
(int) getpid(), (int) getppid());
}
return 0;
}
"我不知道的是,我必须使用子进程来创建 3 个目录中的每一个,或者使用一个子进程一次创建所有三个目录。
从问题陈述中可以明显看出,您应该使用 exec*()
系列函数通过 mkdir -p
立即创建目录。您在system()
呼叫中具有正确的命令。
由于这是家庭作业,我不会给你答案。所需的呼叫声明为int execvp(const char *file, char *const argv[]);
新程序员努力解决的一件事是第一个参数是程序名称的副本,所以它看起来更像execvp(args[0], args)
其中 args 是一个char *
数组。