gpt4 book ai didi

c - 奇怪的 fork() 行为(调用了之前的 printf)

转载 作者:行者123 更新时间:2023-12-02 09:06:08 24 4
gpt4 key购买 nike

我正在尝试解决一个关于模拟具有一名员工(父进程)和多个客户(子进程)的商店的学校问题。我简化了下面的代码以突出显示我在测试时遇到的问题:

#define N_CUSTOMERS 10

void employee() {
}

void customer(int id) {
exit(0);
}

int main() {

printf("working!");

// create customers
for(int i = 0; i < N_CUSTOMERS; i++)
if(!fork())
customer(i);

// be employee
employee();

// end
exit(0);
}

输出为(使用 gcc -Wall -pthread store.c -o store 编译):

working!working!working!working!working!working!working!working!working!working!

我期望 printf只由父进程执行一次,但是,创建的每个子进程似乎都有一个打印。

我在这里缺少什么?

最佳答案

printf 使用行缓冲输出。由于打印的字符串没有'\n',因此它不会在fork()之前打印。在 exit() 上,缓冲区被刷新,这发生在父级和所有子级中。

关于c - 奇怪的 fork() 行为(调用了之前的 printf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58326930/

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