使用C创建子进程和父进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C创建子进程和父进程相关的知识,希望对你有一定的参考价值。

我在C中制作以下代码。我正在编写一个程序,使用fork系统调用创建一个新进程。然后我想检查哪一个是活动的,最后是否是子进程返回该文件中所有目录的列表,或者如果它是父进程等待终止子进程。

以下是我的代码:

#include <stdio.h>
#include <string.h>
#include <dirent.h> 
#include <iostream>


int main(){
  int pid = fork();
  if(pid < 0){
    printf(stderr, "Fork call failed! 
");
  }
  else if(pid == 0){
    printf("This process is the child from fork=%d
", pid);
    printf("Thecurrent file inside the directory are:
");
    DIR *d;
    struct dirent *dir;
    d = opendir(".");
    if (d) {
      while ((dir = readdir(d)) != NULL) {
    printf("%s
", dir->d_name);
      }
      closedir(d);
    }
    exit(0);
  }
  else{
    printf("This process is the parent from fork=%d
", pid);
    int stats;    
    //parent process waits for child to terminate
    waitpid(pid, &stats, 0);

    if(stats == 0){
      printf("This process is terminated.");
    }

    if(stats == 1){
      printf("This process is terminated and an error has occured.");
    }
  }
  return 0;
}
fatal error: iostream: No such file or directory  #include <iostream>
                    ^ compilation terminated.

如果我删除#include <iostream>,我得到:

/usr/include/stdio.h:362:12: note: expected ‘const char * __restrict__’ but argument is of type ‘struct _IO_FILE *’

我该如何解决这个问题?

答案

您的错误发生在对printf()的第一次函数调用中:

printf(stderr, "Fork call failed! 
");

它实际上应该是fprintf()而不是:

fprintf(stderr, "Fork call failed! 
");

另外,不要忘记包括:

  • unistd.hfork()
  • sys/types.hsys/wait.hwaitpid()
  • stdlib.hexit()

并删除#include <iostream>,因为这是为了C ++。

以上是关于使用C创建子进程和父进程的主要内容,如果未能解决你的问题,请参考以下文章

(疑问)进程控制---vfork 函数

python 模块积累-----subprocess

你真的懂线程同步么?

linux进程管理

linux 系统进程

使用fork创建子进程时,父ID与父ID不同[重复]