天天看點

一起talk C栗子吧(第一百九十四回:C語言執行個體--DIY less指令三 )

各位看官們,大家好,上一回中咱們說的是DIY less指令的例子,這一回咱們繼續說該例子。閑話休提,言歸正轉。讓我們一起talk C栗子吧!

看官們,我們在上一回中介紹了響應使用者指令的整體架構,這回我們詳細介紹響應使用者指令的具體内容。因為我們隻響應了q,j,k三個指令,是以我們分别介紹如何響應這三個指令:

1.響應q指令:

我們在接受到使用者輸入該指令後會使用break跳出讀取檔案内容的while循環。然後關閉打開的檔案并且結束less指令,回到我們DIY的shell中。這裡的核心代碼就是break語句,為了更加友好一些,我們還輸出了一個提示,告訴使用者less指令已經退出了,請大家參考以下代碼:

if(cmd == 'q')
            {
                current_line = ;
                printf("Exit less cmd. \n");

                break;
            }
           

2.響應j指令:

我們在接受到使用者輸入該指令後,會向目前終端中輸出檔案中下一行的内容,螢幕會向下滾動一行,然後繼續回到while循環中讀取檔案中下一行的内容。在輸出内容的時候,我們修改了兩個變量的值。一個是用來統計目前行數的變量:

current_line

;另外一個是統計j指令運作的次數:

back_count

current_line

變量在顯示“一個螢幕大小的内容”時使用,

back_count

是留給k指令使用的,看官莫急,我們稍後就會介紹他。下面是程式的主要代碼,請大家參考:

else if(cmd == 'j')
            {
                printf("line: %-4d:",current_line);
                printf("%s",buf);

                back_count += ; // add the count of j cmd
                current_line += ;
            }
           

3.響應k指令:

我們在接受到使用者輸入該指令後,會向目前終端中顯示檔案中前一行的内容,螢幕會向上滾動一行。

大家都知道,我們操作檔案流的時候檔案流會自動向前移動,是以輸出檔案下一行的内容比較容易。這時我們想輸出檔案中前一行的内容,相當于檔案流向後退,目前還沒有這樣的功能。就像水往低處流是一種自然現象現象一樣,想要讓水往高處流怎麼辦?那就需要使用水泵。那麼讓檔案流回退是不是可以使用檔案流泵呢?這位看官可真會想呀,檔案流泵都能想出來,哈哈。雖然檔案流不能回退,但是我們可以想辦法讓它達到回退的效果。至于使用什麼辦法呢?我們暫且不表,下一回中再給大家詳細介紹。

各位看官,關于DIY less指令的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。