这段代码中出现了多个错误,都是由于等号(=)和等于(==)混淆导致的。正确的代码应该是:

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

int main() {
    pid_t p1, p2;
    while((p1=fork()) == -1); /*创建子进程p1*/
    if (p1 == 0) {
        putchar('b');
        fflush(stdout);
        while((p2=fork()) == -1); /*创建子进程p2*/
        if (p2 == 0) {
            putchar('e');
            fflush(stdout);
        } else {
            waitpid(p2, NULL, 0); /*等待子进程p2结束*/
            putchar('d');
            fflush(stdout);
        }
    } else {
        waitpid(p1, NULL, 0); /*等待子进程p1结束*/
        putchar('a');
        fflush(stdout);
    }
    return 0;
}

修改的主要内容如下:

  • 将等号(=)改为等于(==)。
  • 在子进程中加上 fflush(stdout) 语句,强制刷新输出缓冲区,以保证输出顺序正确。
  • 在父进程中加上 waitpid(p1, NULL, 0) 语句,等待子进程p1结束。
  • 在子进程p1中再创建一个子进程p2,并分别处理p2的情况。
  • 在父进程和子进程p1中分别加上输出语句
rootlocalhost 1c# gcc -o 1 1c1c 在函数‘main’中1c521 错误:expected expression before ‘=’ token whilep1=fork = = -1; 创建子进程p1 ^1c69 错误:expected expression before ‘=’ token if p1= =0

原文地址: http://www.cveoy.top/t/topic/djok 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录