各位看官们,大家好,上一回中咱们说的是DIY less命令的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,看了上一回的内容,相信大家意犹未尽,我们趁热打铁,继续介绍响应用户命令的内容。
less命令支持很多用户命令,我们只响应三个常用的命令:
- 命令q:输入该命令后,结束less程序,回到shell中;
- 命令j:输入该命令后,屏幕向下滚动一行,显示文件中下一行的内容;
- 命令k:输入该命令后,屏幕向上滚动一行,显示文件中上一行的内容;
响应用户命令的整体思路是:
获取用户输入的命令,然后判断是什么命令,并且依据命令对文件进行相应的处理。
接下来我们沿着这个思路,一步一步地介绍:
1.获取用户输入的命令
我们使用getchar
从终端中获取用户输入的命令,这点相信大家都能想到,不过这里有个细节需要给大家解释一下。我们在使用less命令的时候,输入相应的命令后less就直接运行,不但没有显示命令的内容而且没有输入回车键就直接执行命令。我们使用getchar显然是达不到这种效果的,那么是不是还有其它获取用户输入命令的办法?其实不需要其它的办法,我们只需要关闭当前终端的回显功能和缓冲功能就可以实现这种效果。关于终端回显功能和缓冲功能的内容,我们在前面章回中有详细的介绍,这里就不再介绍了,下面是主要的代码,请大家参考:
//close the echo and buffer
system("stty -echo -icanon");
cmd = getchar(); // get the commend
//open the echo and buffer
system("stty echo icanon");
2.判断命令并且响应命令
判断命令本质上就是比较字符的ASCII码值,这点我们以前也介绍过。我们程序中我们通过if/else语句来判断不同命令,下面是主要的代码,请大家参考:
if(cmd == 'q')
{
//对q命令做相应的处理
}
else if(cmd == 'j')
{
//对j命令做相应的处理
}
else if(cmd == 'k')
{
//对k命令做相应的处理
}
else
{
//对q,j,k以外的命令不做处理
printf("can't running this cmd in less \n");
}
各位看官,关于DIY less命令的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。