作者InvincibleK (我是无敌的K)
看板C_and_CPP
标题[讨论] Docker的字串显示处理是怎麽做出来的?
时间Wed Aug 28 10:19:19 2019
docker pulling images的时候:
Using default tag:latest
latest:Pulling from library/ubuntu
fd2731e4c50c: Downloading [===========> ]
28a2f68d1120: Pull complete
a3ed95caeb02: Pull complete
...
在同一行,文字显示会有动画的效果,
如:
Downloading [===========> ]
完成後,
同一行变成:
28a2f68d1120: Pull complete
印象中,
很古早的时代,
Unix Terminal/ Windows DOS早就存在这种效果.
所以docker这个显示部份,很有可能是用C语言写的.
想请问大大们,
这是怎麽写出来的?
iostream好像没有这类functions?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.91.59 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1566958761.A.444.html
1F:推 jerryh001: 直接盖掉那一行 08/28 10:24
2F:→ CP64: 基本上是用 ansi escape sequence 来移动游标跟盖掉重画的 08/28 11:54
3F:→ a58524andy: cout << '\b' << flush 08/28 12:22
4F:→ eddie55020: ncurses? 08/28 20:02
5F:→ firejox: ncurses 08/28 20:30
6F:→ InvincibleK: 我就在想纯C不太可能,果然是C++来的~ 08/29 16:43
7F:→ eddie55020: 纯c可以啊,上面那个'\b'只是ASCII code而已 08/29 16:51
8F:→ eddie55020: ncurses也是c的库 08/29 16:52
9F:推 LPH66: 其实 \b \r 的机制和 <ncurses.h> 的机制是不一样的 08/29 16:53
10F:→ LPH66: <ncurses.h> 会需要平台支援, 但能控制的范围就很大 08/29 16:54
11F:→ LPH66: \b \r 则是这些 ascii 字元古早以前的意义转义到萤幕显示上 08/29 16:54
12F:→ LPH66: 所以其控制范围只有当年的行控制而已 08/29 16:55
13F:→ LPH66: 至於 ansi escape sequence 也是要看平台支援 08/29 16:55
14F:→ james732: C就用 printf("%c", '\b'); 也是一样的 08/29 17:01
15F:推 lantw44: Docker 是 Go 写的吧?从 pkg/jsonmessage 看起来是这个 08/30 22:44
17F:→ lantw44: 只用 \b 和 \r 应该没办法像 Docker 那样退回上一行 08/30 22:45