使用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.h
为fork()
。sys/types.h
和sys/wait.h
为waitpid()
。stdlib.h
为exit()
。
并删除#include <iostream>
,因为这是为了C ++。
以上是关于使用C创建子进程和父进程的主要内容,如果未能解决你的问题,请参考以下文章