自己的C很差很差,所以趁着这一次写一个shell的作业来提高一下自己C的编程水平。
教程来自于https://brennan.io/2015/01/16/write-a-shell-in-c/,此为个人学习笔记。这个教程中的shell实现了三个功能,分别为cd,help,exit。
希望此笔记可以使初学者毫无阻碍的写成一个shell,并对每一个句子知其所以然。
由于我本人亦是初学者,内容难免谬误多多,望大神指导海涵。
要写一个shell出来,同时作为一个C语言的程序,大概需要三个部分:初始化,循环,结束。由此我们可以写出shell的主框架,如下:
int main(int argc, char **argv)
{
// Load config files, if any.
// Run command loop.
ssh_loop();
// Perform any shutdown/cleanup.
return EXIT_SUCCESS;
}
ssh_loop()为shell的主循环。
接下来具体写主循环的内容。在主循环里我们要写些什么呢?主要分成三个部分,读取命令行,分析(切割)命令行,执行命令。
体现在代码中就是:
void lsh_loop(void)
{
char *line; //读取的命令行
char **args; //命令行切割完成后得到的命令
int status; //执行状态
do {
printf("> ");
line = ssh_read_line();
args = ssh_split_line(line);
status = ssh_execute(args);
free(line); //释放内存
free(args);
} while (status);
}
接下来具体写读取命令行的部分。读取命令行可以通过两个函数来进行,一个是getchar(),一个是getline()。后者泄出来明显要简单许多,但是对于初学者来说,我觉得用第一种可以更加便于大家熟悉C。先放第二种用getline()的代码