Linux 学习笔记(十):行缓冲区、\r 与 动态进度条实现
发布时间:2026/10/23 9:21:22 锦皓数字建站
:行缓冲区、\r 与 动态进度条实现`)
一、 回车\r与换行\n的历史渊源在计算机术语中这两个词源于老式打字机\rCarriage Return将打印头移回当前行的行首。\nLine Feed将纸张向上移动一行。在 Linux 中换行只有\n。如果我们只输出\r下一次的输出就会覆盖当前行的内容。这为实现进度条的原地刷新提供了基础。二、 有趣的行缓冲区现象我们看这段代码printf(Hello); sleep(3);程序运行后屏幕会先卡住 3 秒然后才出现 Hello。原因是printf默认输出到终端时是行缓冲的。如果不遇到换行符\n数据会憋在缓冲区里。使用fflush(stdout);可以强制刷新标准输出让内容立即显示。这是进度条能实时动起来的关键。三、 实战编写一个 Linux 进度条进度条的原理就是在一行内不断修改内容 - 输出\r回到行首 -fflush刷新屏幕 - 循环。核心实现代码process.cvoid process_v1() { char buffer[101]; memset(buffer, 0, sizeof(buffer)); const char *lable |/-\\; // 动效光标 int cnt 0; while(cnt 100) { // %-100s 表示左对齐占100个字符\r 确保每次回到行首覆盖 printf([%-100s][%d%%][%c]\r, buffer, cnt, lable[cnt%4]); fflush(stdout); // 强制刷新 buffer[cnt] ; // 每次多打印一个等号 cnt; usleep(50000); // 暂停50毫秒 } printf(\n); }四、 编译与自动化构建为了复习 Makefile 知识我们将代码拆分为main.c、process.c和process.h。通过编写 Makefile结合了自动化变量$和$的思想只需敲一个make命令即可将多个源文件编译链接为myproc可执行文件。运行./myproc即可看到一个完美的动态进度条。总结这个项目虽小但融合了 C 语言基础、Linux 终端机制以及 Make 自动化构建工具是对前面几节课知识的完美综合实战。自我实战操作为了复习刚学的 Makefile 和 GCC 多文件编译把这个进度条写成三个文件。cd ~/linux_study mkdir progress_bar cd progress_bar第一步写头文件process.hvim process.h输入#pragma once #include stdio.h void process_v1();(按 Esc输入 :wq 保存)第二步写实现文件process.cvim process.c输入注意看\r和fflush的位置#include process.h #include string.h #include unistd.h #define NUM 101 #define STYLE void process_v1() { char buffer[NUM]; memset(buffer, 0, sizeof(buffer)); const char *lable |/-\\; // 旋转光标 int len strlen(lable); int cnt 0; while(cnt 100) { // \r 回到行首[%-100s] 左对齐占100个字符%% 输出百分号%c 输出旋转光标 printf([%-100s][%d%%][%c]\r, buffer, cnt, lable[cnt%len]); fflush(stdout); // 强制刷新 buffer[cnt] STYLE; // 填充 cnt; usleep(50000); // 睡眠 50ms (usleep 的单位是微秒) } printf(\n); }(按 Esc输入 :wq 保存)第三步写主函数main.cvim main.c输入#include process.h int main() { process_v1(); return 0; }(按 Esc输入 :wq 保存)第四步写 Makefilevim Makefile输入注意命令前面必须是 TabSRC$(wildcard *.c) OBJ$(SRC:.c.o) BINmyproc $(BIN):$(OBJ) gcc -o $(BIN) $(OBJ) %.o:%.c gcc -c $ .PHONY:clean clean: rm -f $(OBJ) $(BIN)第五步见证奇迹make ./myproc(屏幕上出现一个进度条从 0% 跑到 100%旁边还有一个转圈圈的符号)
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。