实现自主myshell

标签: 函数
9人阅读 评论(0) 收藏 举报
分类:

简单实现自己的myshell

用到以下三个函数:
fork:pid_t fork(void);  //创建子进程
int execvp(const char *file,char * const argv[]);//替换子进程
pid wait(int *status);进程等待
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/wait.h>


char *argv[8];
int argc = 0;

void do_shell()
{
        int statu;
        pid_t pid = fork();
        if(pid == -1){
                perror("fork error\n");
                exit(EXIT_FAILURE);
        }
        if(pid == 0){
                execvp(argv[0],argv);
                perror("execvp error\n");
        }else{
                pid_t ret = wait(&statu);
                if(ret == -1){
                        perror("wait error");
                        exit(-1);
                }
        }
}
void do_parse(char *buf)
{
        int i = 0 ;
        int status = 0;
        while(buf[i]){
                if((!isspace(buf[i]))&&(status ==0) ){
                        argv[argc++] = &buf[i];
                        status = 1;
                }else if(isspace(buf[i])&&(status == 1)){
                        status = 0;
                        buf[i] = '\0';
                }
                i++;
        }
        argv[argc++] = NULL;
}


int main()
{
        char buf[1024] = {};
        while(1){
                printf("myshell>:");
                scanf("%[^\n]%*c",buf);
                do_parse(buf);
                do_shell();
        }

}

这里写图片描述

查看评论

实现自己的myshell

在linux环境下,编写自己的shell 命令行的参数解析以及带有空格的目录名解析...
  • zhuxinquan61
  • zhuxinquan61
  • 2015-08-01 15:11:21
  • 2821

自主实现一个简单的myshell

#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;unistd.h&amp;gt;...
  • yummy_alice
  • yummy_alice
  • 2018-03-28 12:47:12
  • 16

简单myshell的实现

这个程序可以实现简单的shell功能:输入命令,处理命令。参考了《Linux C 编程实战》的shell例程。 代码如下: /***********************************...
  • Li_zheng_yu
  • Li_zheng_yu
  • 2015-07-31 08:51:35
  • 1368

LinuxC学习之myshell的实现

通过两天时间的努力
  • lhGDB
  • lhGDB
  • 2014-07-25 20:32:00
  • 847

操作系统上机——实现一个简单的shell

原题见《操作系统—精髓与设计原理(第五版)》一书110页。   这里是实现代码。实现了基本的功能,主要通过系统调用,实验环境为Fedora 16 linux 。 //myshell.h   ...
  • xiangshimoni
  • xiangshimoni
  • 2012-03-21 22:28:01
  • 2496

ls命令、myshell程序编写总结

一、ls命令实现总结        本程序要实现的功能是ls命令和ls命令-a(列出所有的文件)、-l(列出文件的详细信息)、-c(按照文件的ctime排序)、-g(输出除所有者外的所有信息)、-U(...
  • Jung_zhang
  • Jung_zhang
  • 2015-07-24 23:42:14
  • 1207

用C语言实现myshell

C语言实现一个简单的交互式Shell:
  • lifan1314521
  • lifan1314521
  • 2014-11-15 22:23:20
  • 532

Linux下实现myshell的重定向

实现myshell 的重定向实际上就是进程间的程序替换 由于要替换的ls程序是在/usr/bin目录下的ls程序 因此可以直接使用带p的exec函数,由于我们需要从标准输入中读数据,并且将这些命令...
  • persistence_s
  • persistence_s
  • 2017-05-16 15:25:47
  • 360

自己编写的myshell.c

  • 2013年09月25日 11:03
  • 2KB
  • 下载

说几个myshell过程中的思路

本文旨在对自己所写的myshell中的几个思路做以记录 多管道复合 整体的思路是每个管道符隔开的命令将由shell进程创建一个子进程去执行,那么每个管道符隔开的命令之间将会是一系列兄弟进程,因此问...
  • fujie2017
  • fujie2017
  • 2017-07-30 22:24:41
  • 126
    个人资料
    等级:
    访问量: 1051
    积分: 177
    排名: 101万+
    文章分类
    文章存档