<Linux> 缓冲区谁维护?

缓冲区是谁提供的?

来看一段代码

c 复制代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    const char *str1 = "a";
    printf("%s", str1);

    const char *str2 = "b";
    write(1, "b", strlen(str2));
    fork();

    return 0;
}

运行结果如下

现象:

  • b先打印

  • b只打印1次,a打印了两次

因为这个缓冲区是语言提供的,所以没有刷新时就会把数据留在缓冲区等待刷新,而系统调用没有经过缓冲区,所以直接打印,因为C提供了缓冲区,fork之后创建了子进程,缓冲区内部的数据属于进程上下文数据,给子进程也拷贝了一份,所以子进程也会打印a。

相关推荐
爱的叹息1 小时前
Spring Boot 自定义配置类(包含字符串、数字、布尔、小数、集合、映射、嵌套对象)实现步骤及示例
java·linux·spring boot
嵌入式-老费1 小时前
Linux上位机开发实践(一个硬件算法加速的示例)
linux·运维·服务器
前进的程序员2 小时前
Linux C 与 C 语言的区别及开发差异
linux·运维·c语言
CZIDC2 小时前
华为昇腾服务器上查看固件、驱动和CANN版本的常用方法
linux·运维·服务器
良许Linux3 小时前
C++在嵌入式中表现如何?
linux
林政硕(Cohen0415)3 小时前
Linux驱动开发进阶(七)- DRM驱动程序设计
linux·驱动开发·drm
良许Linux3 小时前
能详细地讲讲stm32该怎么学吗?
linux
闭关苦炼内功4 小时前
linux 使用 usermod 授权 普通用户 属组权限
linux·运维
专注VB编程开发20年4 小时前
VB.NET Asp.Net Core模板WebAPI应用-宝塔面板Linux系统通过Docker部署
linux·docker·.net
bob_young4 小时前
Gerrit的安装与使用说明(Ubuntu)
linux·gerrit