http://blog.csdn.net/lishuhuakai/article/details/11928055

#include <stdio.h>
#include <unistd.h>
#include <wait.h>
#define MAXLINE 80 void setup (char inputBuffer[], char *argv[])
{ int i, j;
char *p;
i = ;
for (p = inputBuffer; ;p++)/*将字符命令一段一段拆分开来,如输入ls -l,则argv[0]= "ls",argv[1]="-l",argv[2]=NULL*/
{
argv[i++] = p;
while (*p != ' ' && *p != '\0')
p++;
if (*p == '\0')
{
break;
}
*p = '\0';
}
argv[i] = NULL;/*最后一个参数须用空指针NULL作结束*/
execvp (argv[], argv);/*执行命令,argv[0]放着执行的命令,其余的argv放着参数*/
} int main()
{ char inputBuffer[MAXLINE];
char *argv[MAXLINE / - ]; while ()
{
printf ("COMMAND->");
gets (inputBuffer);/*输入命令*/
setup (inputBuffer, argv);
printf ("扑街!");
}
return ;
}
#include <stdio.h>
#include <unistd.h>
//#define SIZE 20
#define MAXLINE 80
char *p; void setup (char inputBuffer[], char *argv[])
{
int i, j;
i = ;
for (p = inputBuffer; ;p++)/*一个一个地将输入字符分开*/
{
argv[i++] = p;
while (*p != ' ' && *p != '\0')
p++;
if (*p == '\0')
{
break;
}
*p = '\0';
}
argv[i] = NULL;
pid_t pid
pid = fork();/*新建一个子进程*/
if (pid == )/*对于子进程,执行输入的命令*/
{
execvp (argv[], argv);
printf ("command not found\n");/*如果execvp执行失败的话,会返回-1,也就是这句话会被执行*/
} else if( pid > )/*对于父进程,等待*/
{
wait(NULL);/*父进程等待子进程执行完*/
} else /*否则的话,就出错了*/
{
printf ("fork error\n");
}
} int main()
{
char inputBuffer[MAXLINE];
char *argv[MAXLINE / - ]; while ()
{
printf ("COMMAND->");
gets (inputBuffer);
/*关于scanf和gets,scanf对于输入的字符遇到空格或回车就结束了,而gets对于输入的空格也接受*/
setup (inputBuffer, argv); }
return ;
}
#include <stdio.h>
#include <unistd.h>
#define MAXLINE 100
char *p;
char buffer[]; void setup (char inputBuffer[], char *argv[])
{
int i=,j;
for (p = inputBuffer; ;p++)
{
argv[i++] = p;
while (*p != ' ' && *p != '\0') p++;
if (*p == '\0') break;
*p = '\0';
} argv[i] = NULL;
int pid;
pid = fork();/*新建一个子进程*/
if (pid == )/*对于子进程,执行输入的命令*/
{
execvp (argv[], argv);
printf ("command not found\n");
}
else if( pid > ) wait(NULL);
else printf ("fork error\n");
} void getLoc()
{
//获取当前的工作目录,注意:长度必须大于工作目录的长度加一
char *p = getcwd(buffer , );
char *dir = NULL; printf("buffer:%s p:%s size:%d \n" , buffer , p , strlen(buffer));
//获取当前工作目录的名字
dir = (char *)get_current_dir_name();
printf("dir:%s \n" , dir); char *twd = NULL ; twd = getwd(buffer); //printf("buffer:%s twd:%s \n" , buffer , twd);
} int main()
{
char inputBuffer[MAXLINE];
char *argv[MAXLINE/ - ];
while ()
{
getLoc();
printf ("%s->",buffer);
gets (inputBuffer);
setup (inputBuffer, argv);
}
return ;
}

简单shell实现的更多相关文章

  1. grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量

    问一个简单shell问题,将grep的输出赋值给一个变量 用grep命令得到的输出赋值给一个变量不成功. grep命令如下: 代码: $ grep -c '^abc' file.txt 输出为22,表 ...

  2. 简单shell脚本

      简单shell脚本备忘   #!/bin/sh num= ] do table_num=`printf %03d ${num}` echo album_info_${table_num} #mys ...

  3. 基于u-boot源码的简单shell软件实现

    一.概述 1.shell概念 Shell(命令解析器),它用于接收用户输入的命令,进行解析,然后调用相应的应用程序,为使用者提供了使用软件的界面. shell是操作系统最外面的一层.shell管理你与 ...

  4. 查看当前支持的shell,echo -e相关转义符,一个简单shell脚本,dos2unix命令把windows格式转为Linux格式

    /etc/shells [root@localhost ~]# more /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bi ...

  5. 简单shell 编程

    简单shell编程  by  dreamboy #!/bin/bash while true do echo clear echo echo " 系统维护菜单 " echo &qu ...

  6. Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用

    一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境       2> 练习命令历史.命令别名       3 ...

  7. Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间

    Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...

  8. zabbix通过简单shell命令监控elasticsearch集群状态

    简单命令监控elasticsearch集群状态 原理: 使用curl命令模拟访问任意一个es节点可以反馈的集群状态,集群的状态需要为green curl -sXGET http://serverip: ...

  9. 简单shell指令

    第一部分 简单的常用指令 1.date命令 date 2.显示日历 cal 3.显示当前目录 pwd  4.切换当前工作目录 默认情况下,超级用户的主目录是/root,而普通用户的主目录是/home下 ...

  10. linux之shell基本认知操作和简单shell练习

    shell编程: 1.Shell的作用 命令解释器,“翻译官”.介于操作系统内核与用户之间,负责解释命令行. shell功能非常强大,除负责解释名另外,还可以将多个命令组合起来,完成复杂的任务,这就是 ...

随机推荐

  1. Ubuntu 安装后的配置及美化(一)

    Ubuntu 安装后的配置及美化(一) 记录一下 完成后的主界面. 配置 1.更新源为阿里云 找到 软件和更新 选项,更新源为阿里云的源. 在 其他软件 中将 Canonical合作伙伴 打上勾. 然 ...

  2. loj #2255. 「SNOI2017」炸弹

    #2255. 「SNOI2017」炸弹 题目描述 在一条直线上有 NNN 个炸弹,每个炸弹的坐标是 XiX_iX​i​​,爆炸半径是 RiR_iR​i​​,当一个炸弹爆炸时,如果另一个炸弹所在位置 X ...

  3. 洛谷P4525 【模板】自适应辛普森法1

    题面 传送门 题解 我似乎连积分都不太熟练→_→ 总之就是对于一个原函数,我们找一个二次函数来近似它,那么有 \[ \begin{aligned} \int_a^bf(x)dx &\appro ...

  4. ueditor的bug

    1)过滤script style标签ueditor.all.jsallowDivTransToP:false ueditor.config.js,allowDivTransToP:false //允许 ...

  5. JavaScript学习笔记——4.数组

    数组(Array) 数组也是一个对象   数组中保存的内容我们称为元素 数组的操作 - 创建数组 - var arr = new Array();   - var arr = []; 例如:var m ...

  6. 【BZOJ1053】[HAOI2007]反素数 (搜索+数论)

    \([POI2002][HAOI2007]\)反素数 题目描述 对于任何正整数x,其约数的个数记作\(g(x)\).例如\(g(1)=1.g(6)=4\). 如果某个正整数x满足:\(g(x)> ...

  7. mysql 创建表时注意事项

    mysql  创建表时注意事项 mysql 想必大家都不会陌生吧  是我学习中第一个接触的的数据库 已学习就很快上手的   这是一个关系型数据库  不懂什么是关系型数据库 啊哈哈哈  现在知道啦  因 ...

  8. HDOJ3085 Nightmare II 双向BFS

    重构一遍就A了...但这样效率太低了...莫非都要重构???QWQ 每一秒男同志bfs3层,女同志bfs1层.注意扩展状态时,要判一下合不合法再扩展,而不是只判扩展的状态合不合法,否则有可能由非法的走 ...

  9. python3.6 request模块和ddt模块的安装

    1.1用cmd命令进到python的安装目录的Scripts文件夹 1.2.然后输入 pip install requests,出现以下提示,说明安装成功 2.安装ddt步骤一样,只是把pip ins ...

  10. oracle 笔记---(三)__体系架构

    查看控制文件位置 SQL> show parameter control_files; NAME TYPE VALUE ------------------------------------ ...