云计算百科
云计算领域专业知识百科平台

Linux下C语言缓冲区原理 + Git版本控制

一、缓冲区(Buffer)详解

1. 什么是缓冲区

缓冲区本质就是内存上的一块临时空间。 操作系统 IO 操作(读写显示器、磁盘、网络)速度很慢,如果程序每输出一个字符就直接调用系统接口,频繁陷入内核态,效率极低。 缓冲区核心作用:合并多次 IO 操作,减少系统调用次数,提升效率。

Linux 下默认打开三类标准流:

  • stdin:标准输入(键盘)

  • stdout:标准输出(显示器)

  • stderr:标准错误输出

区分重点:stdout 带行缓冲,stderr无缓冲,错误信息可以立刻打印。

2. stdout 行缓冲规则

终端场景下,stdout 使用行缓冲,满足任意条件才刷新缓冲区:

  • 遇到换行符 \\n;

  • 程序正常结束;

  • 缓冲区空间写满;

  • 主动调用 fflush(stdout) 强制刷新。

  • 演示代码:

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

    int main()
    {
        printf("12345");
        sleep(5);
        return 0;
    }

    运行现象:程序暂停 5 秒之后,字符串才一次性打印。 原因:没有换行,数据保存在缓冲区,直到进程退出自动刷新缓冲区。

    加上换行:printf("12345\\n");,文字立刻输出。

    强制刷新写法

    printf("12345");
    fflush(stdout); // 立刻把缓冲区内容刷到显示器
    sleep(5);

    3. 补充知识点

    缓冲区模式区分:

    • 行缓冲:终端 stdout,遇\\n刷新;

    • 全缓冲:普通文件,缓冲区写满才刷新;

    • 无缓冲:stderr,数据直接输出,不缓存。

    二、版本控制工具 Git

    1. 版本控制器发展历史

  • 早期:人工备份,复制文件夹(code_v1、code_v2),极其笨重;

  • 中心化版本工具(SVN):所有代码保存在中心服务器,离线无法提交,单点故障风险;

  • Git(分布式版本控制):2005 年 Linus 为 Linux 内核开发。

  • 分布式:每个人本地都拥有一份完整仓库快照,不依赖单一服务器,支持离线提交。

    2. Git 核心概念

    • 工作区 (Working Directory):你肉眼看到的代码文件夹;

    • 暂存区 (Stage/Index):临时中转站,git add 将文件放入暂存区;

    • 本地仓库 (Repository):.git 隐藏目录,保存所有历史版本快照,git commit 将暂存内容存入本地仓库。

    简易流转流程: 工作区 →(git add)→ 暂存区 →(git commit)→ 本地仓库

    3. 基础命令清单

  • git init 初始化仓库,生成隐藏目录 .git

  • git add [文件名] / git add . 将工作区修改加入暂存区

  • git commit -m "提交注释" 暂存区内容生成版本快照,保存到本地仓库

  • git status 查看当前文件状态(未跟踪 / 已修改 / 在暂存区)

  • git log 查看历史提交日志

  • 4. Github / Gitee 作用

    Github/Gitee 是远程代码托管平台,本质是存放 Git 远程仓库。 作用:

  • 代码云端备份;

  • 多人协作开发;

  • 开源项目交流。

  • 常用远程交互指令:

    • git remote add origin 仓库地址 绑定远程仓库

    • git push:本地版本推送至远端

    • git pull:拉取远端最新代码到本地

    三、面试常见问题汇总

  • 为什么 printf 不带换行不会立刻打印? stdout 在终端是行缓冲,没有\\n,不会触发缓冲区刷新,数据暂存在内存缓冲区;进程退出或者主动 fflush 才会输出。

  • stdout 和 stderr 区别? stdout 行缓冲,用于普通信息;stderr 无缓冲,专门输出报错,保证错误信息即时展示。

  • SVN 和 Git 最核心区别? SVN 是中心化;Git 分布式,本地拥有完整仓库,支持离线提交。

  • git add 和 git commit 分别干了什么? git add:文件从工作区移动到暂存区; git commit:把暂存区内所有改动打包,生成永久版本存入本地仓库。

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux下C语言缓冲区原理 + Git版本控制
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!