简单shell实现
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实现的更多相关文章
- grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量
问一个简单shell问题,将grep的输出赋值给一个变量 用grep命令得到的输出赋值给一个变量不成功. grep命令如下: 代码: $ grep -c '^abc' file.txt 输出为22,表 ...
- 简单shell脚本
简单shell脚本备忘 #!/bin/sh num= ] do table_num=`printf %03d ${num}` echo album_info_${table_num} #mys ...
- 基于u-boot源码的简单shell软件实现
一.概述 1.shell概念 Shell(命令解析器),它用于接收用户输入的命令,进行解析,然后调用相应的应用程序,为使用者提供了使用软件的界面. shell是操作系统最外面的一层.shell管理你与 ...
- 查看当前支持的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 ...
- 简单shell 编程
简单shell编程 by dreamboy #!/bin/bash while true do echo clear echo echo " 系统维护菜单 " echo &qu ...
- Shell基础(一):Shell基础应用、简单Shell脚本的设计、使用Shell变量、变量的扩展应用
一.Shell基础应用 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 切换用户的Shell环境 2> 练习命令历史.命令别名 3 ...
- Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间
Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...
- zabbix通过简单shell命令监控elasticsearch集群状态
简单命令监控elasticsearch集群状态 原理: 使用curl命令模拟访问任意一个es节点可以反馈的集群状态,集群的状态需要为green curl -sXGET http://serverip: ...
- 简单shell指令
第一部分 简单的常用指令 1.date命令 date 2.显示日历 cal 3.显示当前目录 pwd 4.切换当前工作目录 默认情况下,超级用户的主目录是/root,而普通用户的主目录是/home下 ...
- linux之shell基本认知操作和简单shell练习
shell编程: 1.Shell的作用 命令解释器,“翻译官”.介于操作系统内核与用户之间,负责解释命令行. shell功能非常强大,除负责解释名另外,还可以将多个命令组合起来,完成复杂的任务,这就是 ...
随机推荐
- vs引入资源
把资源放在程序目录中,然后点击显示所有文件,然后在资源上右键“包括在项目中”
- The server of Apache (三)——网页优化
在企业中,部署apache后只采用默认的配置参数,会有很多问题,因为那些配置都是针对以前服务器配置的. 一.网页压缩 1.介绍 配置apache的网页压缩功能,是使用Gzip压缩算法来对apache服 ...
- Nagios监控平台搭建及配置文件详解
Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, ...
- Liunux疑问
Liunux疑问 其中的各种软件的安装有模糊的点,待解决 待解决 待解决 待解决 ... ...
- org.apache.storm.utils.NimbusLeaderNotFoundException: could not find leader nimbus from seed hosts["datanode9"]. Did you specify a valid of nimbus hosts for config nimbus.seeds?
出现这个异常的原因主要是zookeeper没有正常工作引起的.可以在storm-conf-storm.yaml中设置 storm.zookeeper.servers: -"zookeeper ...
- BCH code
简单介绍 若循环码的生成多项式具有如下形式\(g(x)=LCM[m_{1}(x),m_{3}(x)..m_{2t-1}(x)]\) 其中LCM表示最小公倍式,t为纠错个数,\(m_{i}(x)\)为素 ...
- CentOS 7 设置日期和时间
现代操作系统分为以下两种类型的时钟: 实时时钟(Real-Time Clock,RTC),通常称为硬件时钟(一般是系统主板上的集成电路),它完全独立于操作系统的当前状态,即使在计算机关闭时也能运行. ...
- python学习之路---day05
字典一:基本组成 dic={"",[],{},"",2,} 字典由key 和value组成, key(键):键是不可变的(且必须要不可改变),一个字典中的key ...
- pscp 命令---windows和linux之间互相拷贝文件的工具
pscp -r d:\cc root@10.0.0.8:/root/test copy d:\cc content recursively into the /root/test, contains ...
- Apache Shiro(六)-基于URL配置权限
数据库 先准备数据库啦. DROP DATABASE IF EXISTS shiro; CREATE DATABASE shiro DEFAULT CHARACTER SET utf8; USE sh ...