百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

C语言如何在终端实现进度条效果?(c语言如何实现进程)

citgpt 2024-08-05 13:50 6 浏览 0 评论

一 什么是ANSI控制码(ANSI escape sequences)

维基百科给出的解释如下:

ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators. Certain sequences of bytes, most starting with an ASCII escape character and a bracket character, are embedded into text. The terminal interprets these sequences as commands, rather than text to display verbatim.

C语言如何在终端实现进度条效果?(c语言如何实现进程)

标准控制码是一个标准用于规范控制视频文本终端和模拟终端上的光标位置,颜色,字体样式和其他选项的带内信号(笔者注:用于规范带内信号)。这些特定的序列,大都以一个ASCII的 'escape' 字符和一个 '[' 字符开头,并被嵌入到文本中,终端将这些特定的序列解释成命令,而不是显示在屏幕上的文本。

二 CSI (Control Sequence Introducer) sequences

ANSI标准规定 'esc' 字符后面所跟的第一个字符用于标识序列的类型,同时又根据第一个字符的大小将Escape序列分为四个大类:

  • nF Escape Sequence (0x20~0x2F),
  • Fp Escape Sequence (0x30~0x3F),例如:esc [
  • Fe Escape Sequence (0x40~0x5F),例如:esc 7
  • Fs Escape Sequence (0x60~0x7E),例如:esc c

为了不偏离本文的中心,我们这里只关注当 'esc' 后面接 '[' 的情况,当 'esc'后面接 '[' 时我们称之为CSI序列。下面给出几个常用的CSI序列语法(格式中CSI指代esc [)。

格式

说明

CSI n A

光标上移n行

CSI n B

光标下移n行

CSI n C

光标往前移动n字符

CSI n D

光标往后移动n字符

CSI n J

清屏

CSI n K

清行(n取0时,清空光标到行尾的所有字符;当n取1时,清空光标到行尾的所有字符;当n取2时,清空整行的字符,光标位置不变。)

CSI ? 25 h

显示光标

CSI ? 25 I

隐藏光标


三 简单案例

案例:实现进度条效果,每秒增长10%

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

#define BAR_SIZE 10

void progressbar(int sec)
{

    char bar[BAR_SIZE+1] = {0}; /* '\\0' */

    for(int j = 1; j <= BAR_SIZE; j++) {
        memset(bar, ' ', BAR_SIZE);
        memset(bar, '>', j);
        printf("[%s]%3d%%", bar, j*10);
        fflush(stdout);
        sleep(sec);
      	/* \033[1K代表清行,\033[16D代表光标左移16字符。 */
        printf("\\033[1K\\033[16D"); ///< 光标回到行首
    }
}

int main(void)
{
    progressbar(1);
}


参考文献

[1] ANSI escape code (http://en.volupedia.org/wiki/ANSI_escape_code)

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: