[讨论] Docker的字串显示处理是怎么做出来的?

楼主: InvincibleK (我是无敌的K)   2019-08-28 10:19:19
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?
作者: jerryh001   2019-08-28 10:24:00
直接盖掉那一行
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2019-08-28 11:54:00
基本上是用 ansi escape sequence 来移动光标跟盖掉重画的
作者: a58524andy (a58524andy)   2019-08-28 12:22:00
cout << '\b' << flush
作者: eddie55020 (eddie)   2019-08-28 20:02:00
ncurses?
作者: firejox (Tangent)   2019-08-28 20:30:00
ncurses
楼主: InvincibleK (我是无敌的K)   2019-08-29 16:43:00
我就在想纯C不太可能,果然是C++来的~
作者: eddie55020 (eddie)   2019-08-29 16:51:00
纯c可以啊,上面那个'\b'只是ASCII code而已ncurses也是c的库
作者: LPH66 (-6.2598534e+18f)   2019-08-29 16:53:00
其实 \b \r 的机制和 <ncurses.h> 的机制是不一样的<ncurses.h> 会需要平台支援, 但能控制的范围就很大\b \r 则是这些 ascii 字符古早以前的意义转义到萤幕显示上所以其控制范围只有当年的行控制而已至于 ansi escape sequence 也是要看平台支援
作者: james732 (好人超)   2019-08-29 17:01:00
C就用 printf("%c", '\b'); 也是一样的
作者: lantw44 (#######################)   2019-08-30 22:44:00
Docker 是 Go 写的吧?从 pkg/jsonmessage 看起来是这个https://github.com/morikuni/aec只用 \b 和 \r 应该没办法像 Docker 那样退回上一行

Links booklink

Contact Us: admin [ a t ] ucptt.com