【Linux篇】自主Shell命令行解释器
1. 获取用户名的接口
通过环境变量来获取
我们需要用到的接口getenv
//获取用户名
const char* GetUserName()
{
const char* name = getenv("USER");
return name == NULL ? "None" : name;
}
//获取主机名
const char* GetHostName()
{
const char* hostname = getenv("HOSTNAME");
return hostname == NULL ? "None" : hostname;
}
//获取当前路径
const char* GetPwd()
{
const char* pwd = getenv("PWD");
return pwd == NULL ? "None" : pwd;
}
2. 等待用户输入接口
当我们没有输入时,我们会发现命令行会卡在这里等待我们输入
我们也让我们自己的命令行能等待输入
我们可以采用fgets
以文件形式读取一行,也可以使用gets
读取一行字符串
我们接下来进行C/C++
混编的方式,因为我们后面会用到系统调用,而这些系统调用都是用C
写的,如果我们纯用C++
来实现的话可能会要适配某些接口。
我们下来用fgets
实现
效果展示:
我们会发现最后多了一个空行,这里为什么会多一个空行呢?因为我们在输入完字符串后还按了一次回车,我们不想让它有这一行空行该怎么办?我们在输入字符串后后面还会有个\n
,比如我们输入的是"ls -a -l"
最后再按一次回车就变成了"ls -a -l \n"
,我们只需要输入完之后把最后的\n
置为0
就好了
效果展示: