implement sample shell

  • sample shell
/*************************************************************************
  > File Name: shell.c
  > Author:perrynzhou 
  > Mail:perrynzhou@gmail.com 
  > Created Time: Thu 20 Jun 2019 09:15:59 PM CST
 ************************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <glob.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
static const char *delimiter = " \t\n";
typedef struct
{
  glob_t gt;
  int (*cmd_cd_fn)(char **argv);
  int (*cmd_exit_fn)(char **argv);
  int (*cmd_help_fn)(char **argv);
} cmd_t;
static void prompt()
{
  fprintf(stdout, "zsh-0.1$ ");
}
void parsed_cmd(char *line, cmd_t *cmd)
{
  char *token;
  int flag = 0;
  while (1)
  {
    token = strsep(&line, delimiter);
    if (token == NULL)
    {
      break;
    }
    if (*token == '\0')
    {
      continue;
    }
    glob(token, GLOB_NOCHECK | GLOB_APPEND * flag, NULL, &cmd->gt);
    flag = 1;
  }
}
int main(int argc, char *argv[])
{
  char *line = NULL;
  size_t line_size = 0;
  cmd_t cmd;
  pid_t pid;
  while (1)
  {
    prompt();
    if (getline(&line, &line_size, stdin) < 0)
    {
      break;
    }
    parsed_cmd(line, &cmd);
    pid = fork();
    switch (pid)
    {
    case -1:
      perror("fork()");
      exit(1);
    case 0:
      execvp(cmd.gt.gl_pathv[0], cmd.gt.gl_pathv);
      exit(0);
    default:
      wait(NULL);
    }
  }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 走进 Shell 编程的大门 什么是 Shell? 简单来说,Shell编程就是对一堆Linux命令的逻辑化处理。...
    赵客缦胡缨v吴钩霜雪明阅读 4,941评论 0 32
  • Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种...
    好看的羊儿阅读 1,823评论 0 0
  • 背景(Background) 使用哪种 Shell(Which Shell to Use) Bash是唯一被允许执...
    haw_haw阅读 7,591评论 1 4
  • 二. 在shell脚本中输出调试信息 通过在程序中加入调试语句把一些关键地方或出错的地方的相关信息显示出来是最常见...
    很少更新了阅读 4,216评论 0 1
  • 又看了一遍《罪与罚》正好与最近刚看完电影《烈日灼心》主题不谋而合,主角都是善良的人,但却都杀了人,触犯了法律。小时...
    3ae845c97b3d阅读 2,241评论 0 0

友情链接更多精彩内容