免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 889 | 回复: 0
打印 上一主题 下一主题

myshell [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-13 23:05 |只看该作者 |倒序浏览

               
               
                #include stdio.h>
#include stdlib.h>
#include string.h>
#include unistd.h>
void FenliCanshu(int *argc,char argv[100][256], char *arg[100]);//分离参数
void Exec_cmd(char *arg[100]);//执行命令
void FenliCanshu(int *argc,char argv[100][256], char *arg[100])
{
    char commod[256], ch;
    int i;
    int j,k;
    j = 0;
    k = 0;
    memset(commod, '\0', 256);
    while(1)
    {
        printf("myshell$$ ");
        while((ch = getchar()) != '\n'){
                commod[strlen(commod)] = ch;   
        }
        if(commod[0] == '\0')
            continue;
        if(commod[0] == ' ' ){
            printf("The commmod is Error!\n");
            memset(commod, '\0', 256);
            continue;
        }
        if(commod[strlen(commod) - 1] == ' '){
            commod[strlen(commod) - 1] = '\0';
        }
        for(i = 0; commod != '\0'; i++){
            argv[j][k++] = commod;
            if(commod == ' '){
                argv[j][strlen(argv[j]) - 1] = '\0';
                j++;
                k = 0;
            }
        }
        *argc = j + 1;
        for(j = 0; j  *argc; j++)
        {
            arg[j] = (char *)argv[j];
        }
        arg[*argc] = NULL;
        if(strcmp(commod, "exit") == 0)
                    exit(0);
            if(strlen(commod) > 256){
                    printf("The commod is Error!\n");
                    memset(commod, '\0', 256);
                    continue;
            }
        Exec_cmd(arg);   
        memset(commod, '\0', 256);
        j = 0;
        k = 0;
        for(i = 0; i  100; i++)
            memset(argv, '\0', 256);
        for(i = 0; i  100; i++)
            arg[j] = (char *)argv[j];
        }
}
void Exec_cmd(char *arg[100])
{
        pid_t pid;
        pid = fork();
        if(pid == 0){
            if(execvp(arg[0], arg) == -1)
            {
                printf("Failed!\n");
                exit(0);
            }
        }
        else if(pid > 0){
            wait(NULL);   
        }
}
int main()
{   
    int argc;
    char *arg[100];
    char argv[100][256];
    FenliCanshu(&argc, argv, arg);      
        return 0;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94212/showart_1963908.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP