Linux下進度條實現以及緩衝區和回車換行

2021-07-27 02:28:21 字數 2310 閱讀 3457

1.首先,為了實現進度條,我編寫了一段小的c**:
#include

#include

int main()

printf("\n");

return

0;}

2.在當前工作目錄下編寫makefile檔案,完成後如圖。

3.完成後鍵入make命令,生成test檔案。

然後./test如下:

實現簡單進度條的2個問題:

linux下關於標準io的幾種緩衝機制:

1.全緩衝,全緩衝指的是系統在填滿標準io緩衝區之後才進行實際的io操作;對於駐留在磁碟上的檔案來說通常是由標準io庫實施全緩衝。

2.行緩衝,在這種情況下,標準io在輸入和輸出中遇到換行符時執行io操作;注意,當流涉及終端的時候,通常使用的是行緩衝。

3.無緩衝,無緩衝指的是標準io庫不對字元進行緩衝儲存;注意,標準出錯流stderr通常是無緩衝的。

printf是乙個行緩衝函式,先寫到緩衝區,滿足條件後,才將緩衝區刷到對應檔案中,刷緩衝區的條件如下:

(1)緩衝區填滿;

(2)寫入的字元中有『\n』 ,』\r』;

(3)呼叫fflush手動重新整理緩衝區;

(4)呼叫scanf要從緩衝區中讀取資料時,也會將緩衝區內的資料重新整理;

滿足上面4個條件之一緩衝區就會重新整理

符號    ascii碼      意義

\n 10 換行nl

\r 13 回車cr

關於「回車」(carriage return)和「換行」(line feed)這兩個概念的來歷和區別。

在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33)的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。

於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。乙個叫做「回車」,告訴打字機把列印頭定位在左邊界;另乙個叫做「換行」,告訴打字機把紙向下移一行。

這就是「換行」和「回車」的來歷,從它們的英語名字上也可以看出一二。

後來,計算機發明了,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加乙個就可以。於是,就出現了分歧。

unix系統裡,每行結尾只有「《換行》」,即「\n」;windows系統裡面,每行結尾是「《換行》《回 車》」,即「\n\r」;mac系統裡,每行結尾是「《回車》」。乙個直接後果是,unix/mac系統下的檔案在windows裡打 開的話,所有文字會變成一行;而windows裡的檔案在unix/mac下開啟的話,在每行的結尾可能會多出乙個^m符號。

dos和windows採用回車+換行cr/lf表示下一行,

而unix/linux採用換行符lf表示下一行,

蘋果機(mac os系統)則採用回車符cr表示下一行.

cr用符號'\r'表示, 十進位制ascii**是13, 十六進製制**為0x0d;

lf使用'\n'符號表示, ascii**是10, 十六制為0x0a. 所以windows平台上換行在文字檔案中是使用 0d 0a 兩個位元組表示, 而unix和蘋果平台上換行則是使用0a或0d乙個位元組表示.

一般作業系統上的執行庫會自動決定文字檔案的換行格式. 如乙個程式在windows上執行就生成cr/lf換行格式的文字檔案,而在linux上執行就生成lf格式換行的文字檔案. 在乙個平台上使用另一種換行符的檔案檔案可能會帶來意想不到的問題, 特別是在編輯程式**時. 有時候**在編輯器中顯示正常, 但在編輯時卻會因為換行符問題而出錯. 很多文字/**編輯器帶有換行符轉換功能, 使用這個功能可以將文字檔案中的換行符在不同格式單互換.

在不同平台間使用ftp軟體傳送檔案時, 在ascii文字模式傳輸模式下, 一些ftp客戶端程式會自動對換行格式進行轉換. 經過這種傳輸的檔案位元組數可能會發生變化. 如果你不想ftp修改原檔案, 可以使用bin模式(二進位制模式)傳輸文字.

Linux下實現進度條

1 進度條存在乙個區間,不斷載入資料,直到區間加載滿了。2 發現會顯示你的進度,從0 100 3 在網速不好的時候,會出現乙個旋轉的小圈,表示在進行載入資料。下來呢,我們先說一下實現的大概思路 1 進度條由0 100 在字元陣列中,輸出一串字元時,最後以 0 結 束的,故需要乙個 大小為102的陣列...

Linux下進度條

功能 模擬1到100的進度條,每次顯示列印了百分之多少 首先要明白幾個轉義字元在不同平台的功能 r return 到當前行的最左邊。n newline 向下移動一行,並不移動左右。linux中 n表示回車 換行 windows中 r n表示回車 換行。mac中 r表示回車 換行。現在進行實現 buf...

linux實現進度條

linux實現進度條 如下 include 2 include 3 int main 4 17 return 0 18 截圖 上述 採用 makefile 基本原理 1 進度條原理 建立乙個範圍為0到100的進度條.我會把進度條初始為0,然後,當我載入乙個資源的時候我會用單位長度來讓進度條前進乙個步...