/*************************************************************************
> File Name: Kris_shell.c
> Author: KrisChou
> Mail:zhoujx0219@163.com
> Created Time: Thu 21 Aug 2014 04:31:55 PM CST
************************************************************************/ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/wait.h> #define PROMPT ">>"
#define ARG_CNT 32 void command_to_arglist(char** arglist,char *cmd_line);
int main(int argc, char *argv[])
{
char cmd_line[1024];
char *arglist[ARG_CNT];
while(memset(cmd_line,0,1024), printf("%s",PROMPT), fgets(cmd_line,1024,stdin))
{
if(cmd_line[0] != '\n')
{
cmd_line[strlen(cmd_line) - 1] = '\0'; //将读进来的换行符变成'\0'
command_to_arglist(arglist,cmd_line);
if(fork() > 0)
{
wait(NULL);
}else
{
execvp(arglist[0],arglist);
exit(0);
}
}
}
return 0;
} static int my_isspace(char c)
{
if(c == ' '|| c == '\n' || c == '\t' || c =='\v')
return 1;
else
return 0;
}
static void command_to_arglist(char** arglist,char *cmd_line)
{
int cnt = 0;
int bg,end;
bg = 0;
while(cmd_line[bg] != '\0')
{
while(my_isspace(cmd_line[bg]))
{
bg++;
}
if(cmd_line[bg] == '\0')
{
break;
}
end = bg;
while(cmd_line[end] != '\0' && !my_isspace(cmd_line[end]))
{
end++;
}
arglist[cnt] = (char*)calloc(1, (end-bg+1));
strncpy(arglist[cnt],cmd_line+bg,(end-bg));
cnt++;
bg = end;
}
arglist[cnt] = NULL; }

编程实现linux下的shell的更多相关文章

  1. linux下的shell和脚本

    1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/s ...

  2. linux下的shell运算(加、减、乘、除)

    linux下的shell运算(加.减.乘.除) 标签: linuxshell运算加减乘除 2014-03-12 16:25 15127人阅读 评论(0) 收藏 举报 分类: linux(17) ((i ...

  3. [转] 关于linux下通过shell命令(自动)修改用户密码

    关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...

  4. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  5. Linux下使Shell 命令脱离终端在后台运行

    --Linux下使Shell 命令脱离终端在后台运行------------------------------------2014/02/14你是否遇到过这样的情况:从终端软件登录远程的Linux主 ...

  6. linux下实现shell脚本自动连接mongodb数据库并创建索引

    在linux下创建shell脚本

  7. Linux下的shell与make

    Linux下的shell与make 一.shell 1.1 什么是shell ● 用户与Linux的接口 ● 命令解释器 ● 支持多用户 ● 支持复杂的编程语言 ● Shell有很多种,如:csh,t ...

  8. linux下的shell操作mysql

    (1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...

  9. linux下的shell运算(加、减、乘、除

    linux下的shell运算(加.减.乘.除 摘自:https://blog.csdn.net/hxpjava1/article/details/80719112 2018年06月17日 16:03: ...

随机推荐

  1. ios中的XMPP简介

      1.XMPP的定义 •XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)   •XMPP可用于服务类实时通讯.表示和需求 ...

  2. SecurityManager一:理解AccessController.doPrivileged()

    AccessController.checkPermission()检测模型: 从VM Stack的current stack frame起逐个检测stack frome所指class的protect ...

  3. Ubuntu 修改用户密码与启动root账号

    passwd sban 修改当前帐号 sudo passwd root 修改root帐号 修改/etc/ssh/sshd_config,改: PermitRootLogin without-passw ...

  4. 10个 iOS 用户暂可以嘲笑 Android 的特点

    Android 与 iOS 设备之间的争斗从未停止,毕竟一切高科技产品的理念和实际表现方式都不相同.就拿 Android 来说,很多功能令用户并 不太开心,甚至是令人愤怒,下面让我们来简单的盘点 10 ...

  5. [转]理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...

  6. 关于sqlserver身份登录失败的解决方法

    前几天写程序需要用到数据库,下载了一个用用,出现了不少的小问题(都怪我的32bit不争气的笔记本),有问题不要怕,至少证明我们在思考解决方案.废话不说了,直接上正题. Sqlserver有两种登陆方式 ...

  7. 从C中变化过来的各种语言的printf输出格式

    在c.php和shell中经常可以碰到printf的使用,特别是在php中printf的相关变种有好几个:print.printf.sprintf.vprintf.vsprintf     在这些语言 ...

  8. window8左下角窗口和右上角窗口失效解决方法

    win8系统有时会出现任务栏和桌面点击没反应 小常识: “Windows徽标键” 这个键,左右各一个,称为“Windows徽标键”,键冒上的图案为Windows徽标,由此得名. [知识链接]位于计算机 ...

  9. bzoj 2697 贪心

    就贪心就行了,首先可以看成n个格子,放物品,那么 一个物品假设放3个,放在1,k,n处,那么价值和放在1,n 是一样的,所以一个物品只放两个就行了,价值大的应该尽量放 在两边,那么排序之后模拟就行了 ...

  10. BZOJ2457 BeiJing2011 双端队列

    [问题描述] Sherry现在碰到了一个棘手的问题,有N个整数需要排序.  Sherry手头能用的工具就是若干个双端队列.        她需要依次处理这N个数,对于每个数,Sherry能做以下两件事 ...