您的位置:首页 > 运维架构 > Shell

shell外部命令解析器

2016-01-21 09:26 621 查看
/* ************************************************************************
* Filename: shell.c
* Description:
* Version: 1.0
* Created: 2012年04月02日 18时52分12秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME (),
* Company:
* ************************************************************************/

于2012年04月09日修改后的代码:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>

int main(int argc,char *argv[])
{
while(1)
{
pid_t pid;
char *p1=NULL,*p2=NULL,*p3=NULL; //指针要初始化
char *p4=NULL;
char str[100]=""; //这里要初始化或者用memset函数初始化
char *temp[100];
int i=0;
int status;

p1=getenv("USER"); //取得环境变量内容getenv()
p2=getenv("HOSTNAME");
p3=getenv("PWD");
p4=strrchr(p3,'/');
printf("[%s@%s %s]$",p1,p2,p4+1);
// gets(str);
/*可以代替下面的4句话
fgets(str, sizeof(str), stdin);//获取字符串
str[strlen(str)-1]='\0'; //把最后一位'\n'变成字符串结束标志'\0'
if(str[0]=='\0')
continue; //如果是输入回车的话,继续while循环
temp[i++]=strtok(str, " ");
while((temp[i++]=strtok(NULL," "))!=NULL); //字符串按空格切割
*/
fgets(str,100,stdin); //str用指针时要开辟空间,100可以用strlen测出str的长度来代替
temp[i++]=strtok(str," \n");
while((temp[i++]=strtok(NULL," \n"))!=NULL)
;
pid=vfork();
if(pid<0)
{
perror("fork\n");
}
else if(pid==0)
{
if(temp[0]==NULL)
{
exit(0);
}
execvp(temp[0],temp);
}
else
{
pid=wait(&status);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: