Write a Shell in C 学习(一)

本文是作者学习如何用C语言编写Shell程序的笔记,主要介绍了通过getline()和getchar()读取命令行,涉及C语言动态内存管理和指针的基本概念。教程中的简易Shell实现了cd、help和exit三个基本功能。
摘要由CSDN通过智能技术生成

自己的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()的代码࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值