简单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功能非常强大,除负责解释名另外,还可以将多个命令组合起来,完成复杂的任务,这就是 ...
随机推荐
- 题解 CF520E 【Pluses everywhere】
题目链接 ps:可能组合数一不小心打错了,请发现的大佬提出,谢谢. 我们来讨论每一位数$a_{i}$被算了多少次. 总共有$n-1$个空位可以放$'+'$所以,$a_{i}$左边有$i-1$个空位,右 ...
- 快速理解mysql主从,主主备份原理及实践
感谢大家在上一篇 学一点Git--20分钟git快速上手 里的踊跃发言.这里再次分享干货, 简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动 ...
- centos6.3安装 jdk-8u131-linux-x64.gz
解压指令为:tar -zxvf jdk-8u131-linux-x64.gz 设置环境变量,首先是打开设置环境变量的文件夹,指令为:vi /etc/profile 然后在英文输入法下切换到“插 ...
- Win7下C/C++跨平台开发工具IDE的安装之CodeBlocks
1. Win7下安装CodeBlocks: 下载带有mingw的CodeBlocks:http://www.codeblocks.org/downloads/26#windows 运行所下载程序: 点 ...
- HTML的相关路径与绝对路径的问题---通过网络搜索整理
问题描述: 在webroot中有个index.jsp 在index.jsp中写个表单. 现在在webroot中有个sub文件夹,sub文件夹中有个submit.jsp想得到index.jsp表单 ...
- angularjs指令弹框点击空白处隐藏及常规方法
效果图展示: 第一种方法:angularjs自定义指令: 指令: app.directive('onBlankHide', function () { return { restrict: 'A', ...
- 【算法笔记】B1027 打印沙漏
1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇 ...
- Visual Studio Ultimate 2013 免费下载地址
ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467 ...
- P3813 [FJOI2017]矩阵填数
传送门 矩阵很大,但是发现 $n$ 很小,从这边考虑,对于一个一堆小矩阵放在一起的情况 考虑把每一块单独考虑然后方案再乘起来 但是这些奇怪的东西很不好考虑 所以暴力一点,直接拆成一个个小块 但是这样我 ...
- springboot(二)框架整合
我们做web项目或者写api接口通常使用的是springmvc+spring+mybatis+mysql,那么使用springboot之后,默认是集成了所有的后台框架,只需要添加dependency依 ...