当前位置:网站首页 > R语言数据分析 > 正文

strip工具(systrace工具)



Linux | 红帽认证 | IT技术 | 运维工程师

👇1000人技术交流 备注【公众号】更快通过

1. 回车概念

在Linux系统中,\n和\r是两个重要的转义字符,它们分别代表着换行符和回车符,各自具有不同的功能和应用场景。

\n(换行符)

【定义】:\n表示换行符,其英文全称是newline,控制字符可以写成LF(Line Feed)它将光标移动到下一行的开头位置,常用于分隔文本的不同行。

【功能】:在Linux系统中,\n通常用于表示文本的换行。当新的字符输入时,它们会在新的行上输出。这使得文本内容更加清晰、易读。

\r(回车符)

【定义】:\r表示回车符,其英文全称是return,控制字符可以写成CR(Carriage Return)它将光标移动到当前行的开头位置,但不移动到下一行。

【功能】:在Linux系统中,\r通常用于在同一行上连续输出不同的内容。如果有新的字符输入,它们将覆盖已存在的字符。这使得在同一行内更新文本内容成为可能。

在制作进度条等动态文本输出时,\r非常有用。通过不断更新同一行的内容,可以创建出动态的视觉效果。

\n的主要功能是换行,将光标移动到下一行的开头;而\r的主要功能是回车,将光标移动到当前行的开头。

2. 行缓冲区

在Linux中,行缓冲区是一种缓冲机制,用于存储输出数据,直到满足某个条件后才将数据发送出去。行缓冲区是按行存储数据的,即只有当输出的数据中包含换行符时,才会发送数据。

这种缓冲机制对于一些需要批量输出的场景非常有用,可以提高效率。同时,也可以使用特定的函数来刷新缓冲区,强制将缓冲区中的数据发送出去。

需要注意的是,行缓冲区只是一种缓冲机制,默认情况下并不是所有的输出都是行缓冲的,可以通过配置文件或者代码中的特定函数来改变缓冲方式。

所以我们在动态显示文本进度条时借助的是\r回滚而非换行,无法满足输出数据的条件,这时我们就需要借助fflush(stdout);函数。

fflush(stdout)是用来刷新标准输出流(stdout)的函数。标准输出流是一个缓冲流,当数据写入到标准输出流时,并不会立即显示出来,而是先存储在缓冲区中,当缓冲区被填满或者手动调用fflush函数时,才会将缓冲区的内容刷新到显示器上。

3. 进度条代码

#include<stdio.h>#include<string.h>#include<unistd.h>int main(){ //进度条代码 //1.数组存放字符 char bar[101];//最后存放/0 memset(bar, '#', 100); //旋转字符数组 char label[4] = "-\\|/";//反斜杠要两个进行转义 //2.循环打印 int i = 0; while (i < 100) { bar[i + 1] = '\0'; printf("[%-100s][%d%%][%c]\r", bar, i + 1, label[i % 4]); //加上旋转标识 fflush(stdout);//刷新缓冲区 usleep(10000); bar[++i] = '#'; } //3.最后换行 printf("\n"); return 0;}

我们可以在Linux上打开vim编辑器创建progress.c代码,将上述进度条代码写上去,然后使用make/makefile工具搭配gcc的使用,将progress.c编译成可执行文件progress,然后在命来行输入https://mp.weixin..com/progress运行该程序,结果如下:

这样我们就可以模拟实现Linux上第一个小程序——文本进度条啦

清理文件时我们就可以使用make clean删除文件:

如果需要重新编译progress.c文件我们也可以使用make命令来实现:

Makefile文件内容如下:

彩色进度条

在C语言中,直接进行彩色输出并不是标准的一部分,因为C语言本身并不支持这种特性。然而,如果你在控制台环境下编写程序,并且目标环境如Linux或某些支持ANSI转义码的系统,你可以利用ANSI escape codes(ANSI转义序列)来模拟颜色输出。

比如我们想在控制台上打印一段带颜色的文字。假设你想打印一条红色的消息"Hello, World!",你可以这样写:

#include <stdio.h>int main() { if (isatty(fileno(stdout))) { // 检查是否是终端 printf("\033[31m"); // 设置红色字体 printf("Hello, World!\033[0m"); // 打印消息并恢复默认颜色 } else { printf("Hello, World!"); // 对于非终端设备,如文件,直接打印纯文本 } return 0;}

在这个例子中,如果运行程序的是一个终端,它会显示红色的"Hello, World!";如果不是终端(如通过重定向输出到文件),则只显示普通的白色文字。

对于颜色,通常会用到以下几种代码:

前景色:

黑色:\033[30m红色:\033[31m绿色:\033[32m黄色:\033[33m蓝色:\033[34m青色:\033[36m紫色:\033[35m白色:\033[37m

背景色:

黑色:\033[40m红色:\033[41m绿色:\033[42m黄色:\033[43m蓝色:\033[44m青色:\033[46m紫色:\033[45m白色:\033[47m

结束颜色设置:\033[0m 或 \x1b[0m (等效)

当你想要结束颜色输出时,可以使用\033[0m来清除所有设置。但是请注意,这取决于终端是否支持这些转义码,以及用户终端配置。在Windows控制台上,由于其默认不支持ANSI转义码,上述方法可能无法生效。

所以对于进度条代码,我们可以将其设置我们喜欢的颜色,只需要在循环打印前后设置和取消字体颜色,代码如下:

然后我们使用make命令重新编译progress.c源文件:

运行结果如下:

模拟真实下载速度的进度条

我们需要使用随机数来模拟一次下载的进度,然后累加到进度条中而不是一直维持一个速度下载,代码如下:

然后就可以利用每次的下载量比例更新进度条,代码如下:

进度条打印效果如下:


课程咨询添加:HCIE666CCIE

↑或者扫描上方二维码↑


你有什么想看的技术点和内容

可以在下方留言告诉小盟哦!

到此这篇strip工具(systrace工具)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • yarn logs -applicationid命令(yarn build命令)2025-10-06 17:09:07
  • prp离心后分层图(prp制作对离心机的要求)2025-10-06 17:09:07
  • treesoft官网(tree studio)2025-10-06 17:09:07
  • hprof怎么读(hpld怎么读)2025-10-06 17:09:07
  • raise和rises的区别(rise与raise的区别以及知识点)2025-10-06 17:09:07
  • aurochs.(aurochs怎么拆分音节)2025-10-06 17:09:07
  • ifstream打开文件(ifstream打开文件路径)2025-10-06 17:09:07
  • gridview 居中(gridview选中行)2025-10-06 17:09:07
  • nips和cvpr哪个好(cvpr和cvpr workshop)2025-10-06 17:09:07
  • pointrcnn代码(pointnet原理)2025-10-06 17:09:07
  • 全屏图片