1

我已经用 C 编写了一个程序并在 Ubuntu 中运行它,主要代码如下:

int main(){    
    pid_t pid=fork();
    if(pid==0){
        printf("d");
        exit(0);
    }
    else{
        printf("a");
        sleep(4);
    }
}

问题是:为什么代码sleep(4);之前运行printf("a");

希望有人能给我答案,谢谢!

4

3 回答 3

4

它不是。最有可能的是,printf()缓冲其输出,直到有机会输出缓冲区(在您的情况下,当进程终止时)。

于 2013-10-09T17:22:52.480 回答
3

问:为什么代码 sleep(4) 在 printf("a") 之前运行?

答:printf("a") 实际上在 "sleep(4)"之前运行,就像您在代码中看到的那样。

但是,它不会立即显示

问题是“缓冲”。

在此处查看更多详细信息:

建议的替代方案:

pid_t pid=fork();
if(pid==0){
    fprintf(stderr, "d");
    exit(0);
}
else{
    fprintf(stderr, "a");
    sleep(4);
}

原因是“stderr”是无缓冲的:你会立即看到输出。

使用 stderr 的替代方法包括调用fflush(stdout)修改流

于 2013-10-09T17:24:14.393 回答
2

它不是,但它可能看起来那样。 printf将其输出放入缓冲区,该缓冲区可能仅在sleep运行后才被刷新。尝试在fflush(stdout)之后printf,但在调用 之前调用sleep

于 2013-10-09T17:24:58.443 回答