各位看官们,大家好,上一回中咱们说的是DIY less命令的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,我们在上一回中介绍了响应用户命令的整体框架,这回我们详细介绍响应用户命令的具体内容。因为我们只响应了q,j,k三个命令,所以我们分别介绍如何响应这三个命令:
1.响应q命令:
我们在接受到用户输入该命令后会使用break跳出读取文件内容的while循环。然后关闭打开的文件并且结束less命令,回到我们DIY的shell中。这里的核心代码就是break语句,为了更加友好一些,我们还输出了一个提示,告诉用户less命令已经退出了,请大家参考以下代码:
if(cmd == 'q')
{
current_line = 0;
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 += 1; // add the count of j cmd
current_line += 1;
}
3.响应k命令:
我们在接受到用户输入该命令后,会向当前终端中显示文件中前一行的内容,屏幕会向上滚动一行。
大家都知道,我们操作文件流的时候文件流会自动向前移动,因此输出文件下一行的内容比较容易。这时我们想输出文件中前一行的内容,相当于文件流向后退,目前还没有这样的功能。就像水往低处流是一种自然现象现象一样,想要让水往高处流怎么办?那就需要使用水泵。那么让文件流回退是不是可以使用文件流泵呢?这位看官可真会想呀,文件流泵都能想出来,哈哈。虽然文件流不能回退,但是我们可以想办法让它达到回退的效果。至于使用什么办法呢?我们暂且不表,下一回中再给大家详细介绍。
各位看官,关于DIY less命令的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。