c - 使用fork()创建文件夹

标签 c fork

我目前正在研究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/

相关文章:

php - 在 Windows 上使用 PHP fork /线程的最佳方法是什么?

c - 当从 fork() 创建的两个进程调用 wait(0) 时,wait(0) 会做任何事情吗?

perl - bash 管道中的第一个程序正在阻塞

c - 如何将pid_t添加到c中的字符串

c - 迭代 i 打印文件名

c - 使用递增的变量在 c 中粘贴 token

c++ - 在删除文件之前检查文件是否仍在被另一个进程使用(c、c++、linux)

c - gtk+ 文本编辑器,打开 python 脚本中止,提示无效的 utf-8 文本

Python multiprocessing.Manager 和 os.fork 产生奇怪的行为

c - 如何获取双指针指向的二维数组的大小?