gpt4 book ai didi

c - 如何仅使用 fork() 和 if 连续打印多个内容?

转载 作者:行者123 更新时间:2023-11-30 19:29:50 24 4
gpt4 key购买 nike

经过几个小时的搜索,我最终来到了这里。这是我的问题:

我需要做一个练习。给出的代码是这样的:

int main(){
int x,y,z....;
//

fill the gap

//
printf("A");
//

fill the gap

//
printf("B");
return(0);
}

我必须使用 ONLY fork(),if 和 exit() 准确打印“AAAABBB”。(没有“等待”,没有多个“printf”,没有“ sleep ”。没有“for”)

我怎样才能做到呢?我已经在在线 IDE 中对其进行了测试,但我无法以这种确切的方式打印它们。输出总是令人困惑(ABBBBAA、ABABABAA 等),我似乎无法理解如何在不使用除 fork() 和 if 之外的任何东西的情况下优先考虑父级或子级。

如有任何提示,我们将不胜感激。

最佳答案

您应该在这里学习的是 fork() 在 fork() 处复制了您的过程。它向父进程返回一个进程标识符 (PID) 数字,向子进程返回

因此,通过简单地观察 fork() 的返回,执行路径就可以确定它们是父进程还是子进程。

因此,为了解决这个问题,我采取了从单父进程控制一切的方法,让子进程简单地输出一个字母,然后 exit() - 它终止进程。

使用 for() 循环会更好,但这是不允许的。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
int pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();

if (pid == 0)
{
// child process only
printf("A");
exit(0);
}

pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid == 0)
{
// child process only
printf("B");
exit(0);
}

return 0;
}

注意:我怀疑由于系统负载、调度等原因,它可能偶尔会混淆。但在我的所有测试中,我都收到了正确的答案。

关于c - 如何仅使用 fork() 和 if 连续打印多个内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com