用realine库完善你的my_shell
来源:互联网 发布:大拿韩代 知乎 编辑:程序博客网 时间:2024/05/22 09:49
linux下的标准IO输入很不友善,至少它都不按左右方向键来移动光标,着很多时候会给你很大的困扰,而我在完善自己的shell的时候就被这块难倒了,到底怎么解决方向键的问题呢,我百度了很久,找到了这个好东西,readline库,他可以实现左右方向键移动光标,上下方向键查看历史输入,tab键补全的功能,下面我就来教大家如何使用这个库.
首先,安装它:
sudo apt-get install libreadline6-devsudo apt-get install lib64readline6
我的ubuntu用这两条命令安装的,centos系就是把apt-get换成yum,后面的包名不确定,但肯定时readline开头,多用tab键,耐心查找.
装好之后你要确定有/usr/include/readline这个目录.
然后用ldconfig -p | grep readline命令来确定你的你的.so文件位置,找/lib64下的.
┌─╼[~] └╼ ldconfig -p | grep readline libreadline.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libreadline.so.6 libreadline.so.6 (libc6,x86-64) => /lib64/libreadline.so.6 libreadline.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libreadline.so libguilereadline-v-18.so.18 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so.18 libguilereadline-v-18.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so
#include <stdio.h>#include <readline/readline.h>#include <readline/history.h>char *readline (const char *prompt);
这是它的声明,需要include两个.h文件,prompt参数是你要输出的提示信息,它返回的时char* 型的.
然后给大家个简单的示例吧.
#include<stdio.h>#include<readline/readline.h>#include<readline/history.h>int main(){ char *line; while(1) { line = readline(">>"); puts(line); if(*line) { add_history(line); } free(line); } return 0;}
add_history()函数是用来保存历史记录的!
然后,由于它的编译挺复杂,我么帮直接写makefile吧
cc = gcc
OBJ = ksh
all:
$(cc) -c ./1.3.c
$(cc) -o $(OBJ) ./1.3.o /lib64/libreadline.so.6 -I -lreadlin -lncurses -g
rm *.o
clean:
rm *.o
至此,你的shell已经相当帅气了!
0 0
- 用realine库完善你的my_shell
- my_shell的简单实现
- my_shell
- 2018 年你需要知道的 Vue.js 组件库,完善你的应用开发
- 2018 年你需要知道的 Vue.js 组件库,完善你的应用开发
- my_shell 编写
- my_shell.c
- 完善你的Blog功能(一)
- reaLine()和read()
- 完善细节,使你的网站清新脱俗!
- AngularJS带给你一个简单完善的Demo
- 用sdk建立完善的滚动
- MFC-实现计算机完善(+-*/%的完善)
- 完善你的Blog功能(二) 制作自定义CSDNBLOG皮肤
- 这是一个正在完善的框架,你拿来做毕业设计足够了
- 当你无法决定结果的时候,不如去完善过程!
- google验证码完善你的项目,为世界做一点点贡献
- google验证码完善你的项目,为世界做一点点贡献
- [交换机]POE交换机 - 简介
- POJ 2377Bad Cowtractors(并查集+Sort)
- POJ 1789 Truck History 最小生成树模板题
- 【35】数组中的逆序对
- HDU 1573 X问题
- 用realine库完善你的my_shell
- 《Apache Spark Graph Processing》中文版前4章下载
- 手写数字识别(2)---- CNN网络模型
- 数据结构实验之栈三:后缀式求值
- Google Code服务要关门了
- Tomcat热部署配置
- python读取文件时地址书写
- Swift右下角悬浮按钮简单实现
- SDUT3364数据结构实验之图论八:欧拉回路