c-如何使用fork()函数处理父进程和子进程



我正试图编写一个程序,打印从1到10的数字,但我希望前五个数字由子进程打印,最后五个数字应由父进程打印:

#include <unistd.h>
#include <stdio.h>
#include "process.h"
/**
* main - Entry point for my program
*
* Return: On success, it returns 0.
* On error, it returns 1
*/
int main(void)
{
int id = fork();
int n, i;
if (id == 0)
n = 1;
else
n = 6;
for (i = n; i < n + 5; i++)
printf("%dn", i);
return (0);
}

输出为:

6
7
8
9
10
1
2
3
4
5

我是UNIX进程的新手,所以我不明白为什么要先打印父进程输出(6-10(。父进程的执行是否优先于子进程?如果我想让子进程先运行(即先打印1-5个(,我该怎么做?

这可以实现您的愿望:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
/**
* main - Entry point for my program
*
* Return: On success, it returns 0.
* On error, it returns 1
*/
int main(void)
{
int id = fork();
int n, i;
if (id < 0) {
perror("fork failed: ");
exit(1);
} else if (id == 0) {
n = 1;
} else {
int status, cid;
n = 6;
cid = wait(&status);
if (cid != id) {
perror("fork failed: ");
exit(1);
}
}
for (i = n; i < n + 5; i++) {
printf("%dn", i);
}
return (0);
}

做了几个改动,让孩子们先走。

  • 使用fork((添加了对id < 0的检查,以打印错误
  • 添加了对wait((的调用,以允许子循环在父循环之前退出
  • 检查等待返回以确保成功
  • 为使用的函数添加了几个标头
  • 格式更改,基本上无关紧要

在测试中,这是输出:

1
2
3
4
5
6
7
8
9
10

最新更新