[討論] Docker的字串顯示處理是怎麼做出來的?

看板C_and_CPP (C/C++)作者 (我是無敵的K)時間6年前 (2019/08/28 10:19), 編輯推噓3(3014)
留言17則, 9人參與, 6年前最新討論串1/1
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://www.ptt.cc/bbs/C_and_CPP/M.1566958761.A.444.html

08/28 10:24, 6年前 , 1F
直接蓋掉那一行
08/28 10:24, 1F

08/28 11:54, 6年前 , 2F
基本上是用 ansi escape sequence 來移動游標跟蓋掉重畫的
08/28 11:54, 2F

08/28 12:22, 6年前 , 3F
cout << '\b' << flush
08/28 12:22, 3F

08/28 20:02, 6年前 , 4F
ncurses?
08/28 20:02, 4F

08/28 20:30, 6年前 , 5F
ncurses
08/28 20:30, 5F

08/29 16:43, 6年前 , 6F
我就在想純C不太可能,果然是C++來的~
08/29 16:43, 6F

08/29 16:51, 6年前 , 7F
純c可以啊,上面那個'\b'只是ASCII code而已
08/29 16:51, 7F

08/29 16:52, 6年前 , 8F
ncurses也是c的庫
08/29 16:52, 8F

08/29 16:53, 6年前 , 9F
其實 \b \r 的機制和 <ncurses.h> 的機制是不一樣的
08/29 16:53, 9F

08/29 16:54, 6年前 , 10F
<ncurses.h> 會需要平台支援, 但能控制的範圍就很大
08/29 16:54, 10F

08/29 16:54, 6年前 , 11F
\b \r 則是這些 ascii 字元古早以前的意義轉義到螢幕顯示上
08/29 16:54, 11F

08/29 16:55, 6年前 , 12F
所以其控制範圍只有當年的行控制而已
08/29 16:55, 12F

08/29 16:55, 6年前 , 13F
至於 ansi escape sequence 也是要看平台支援
08/29 16:55, 13F

08/29 17:01, 6年前 , 14F
C就用 printf("%c", '\b'); 也是一樣的
08/29 17:01, 14F

08/30 22:44, 6年前 , 15F
Docker 是 Go 寫的吧?從 pkg/jsonmessage 看起來是這個
08/30 22:44, 15F

08/30 22:44, 6年前 , 16F

08/30 22:45, 6年前 , 17F
只用 \b 和 \r 應該沒辦法像 Docker 那樣退回上一行
08/30 22:45, 17F
文章代碼(AID): #1TPUIfH4 (C_and_CPP)
文章代碼(AID): #1TPUIfH4 (C_and_CPP)