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. centos 在vm下网络不通

    VMware是一款虚拟机,支持各种热门系统,我们可以在VMware虚拟机中安装其他系统以满足个人需求,但在为VMware安装CentOS6.5后,无法连接网络,这是什么原因导致的呢?下面就给大家介绍下 ...

  2. Ubuntu16.04搭建各种开发环境的IDE: QT5 , CodeBlocks ,eclipse-cdt, PyCharm

    搭建Ubuntu下C/C++以及Python的集成开发环境,采用双系统(Win7+Ubuntu)的Ubuntu16.04-LTS系统, 关于双系统的搭建可以参考下面博客(图文十分详细):https:/ ...

  3. Error creating bean with name 'dateSource' defined in file 错误信息

    问题的原因: 在web项目中搭建SSM框架,启动Tomcat时出现错误信息 有配置文件:applicationContext-mybatis.xml (Spring配置) spring-servlet ...

  4. 关于Execel 2007 连接到 hive odbc

    官方给出的都是 2010 或2012版的连接方案,看起来与2007有些不同,但我相信这些功能都是通用的. 下载 odbc hive 驱动.http://hortonworks.com/products ...

  5. Hdp 4 window MR 注意事项

      1,本机未安装HDP, 在代码中加一个环境变量,跳过检查. Environment.SetEnvironmentVariable("HADOOP_HOME", @"D ...

  6. fiddler使用——配置抓取https,出现提示“禁用解密”“单击配置”

    自己在设置fiddler抓https的时候,浏览器总是提示:此证书不受信任:中午没午睡下午一直昏沉沉的,弄了好久,终于想起来是证书的问题:度娘有个不错的答案,这里分享一下!给以后有相同问题的朋友,也同 ...

  7. css grid学习笔记

    仅为自己用而收藏罢了 w3c官方文档 https://www.w3.org/TR/css-grid-1/#grid-items w3cplus(zhongwenban ) 大漠博主的系列文章 基础知识 ...

  8. MAC终端下常用Git命令

    送给新手的简单命令操作.远程Git和local的同步实现流程: 1.把git上的代码clone到本地 $ git clone http:xxxx(地址,可以http也可以ssh) 2.clone到本地 ...

  9. Android StateListDrawable资源的使用(文本的高亮显示)

    1.介绍 2.xml文件属性介绍 3.实例演示 <1>新建drawable文件 app--->src---->main---->res---->drawable , ...

  10. hibernate自动生成时报错问题

    创建好了实体类和.hbm.xml文件,运行项目报上错: 实体类和xml文件中的字段要一致.(顺序和字段)