首页 > 学院 > 开发设计 > 正文

【Linux】第一个简单shell

2019-11-08 18:51:30
字体:
来源:转载
供稿:网友

使用c/c++完成一个简单shell,具有基本功能

#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<wait.h>#include<pwd.h>#include<string.h>void GetLoginName(){	struct passwd* pwd;	pwd=getpwuid(getuid());	PRintf("[%s@",pwd->pw_name);}void GetHostName(){char name[128]={0};gethostname(name,sizeof(name)-1);printf("%s",name);}void GetDir(){char pwd[128]={0};getcwd(pwd,sizeof(pwd)-1);int len=strlen(pwd);char* p=pwd+len;while(*p!='/'&&len--){p--;}p++;printf(" %s]&",p);}int main(){	while(1)	{	GetLoginName();	GetHostName();	GetDir();	fflush(stdout);	char line[1024];	ssize_t _s=read(0,line,1024);	char* myargv[10];	char* start=line;    myargv[0]=start;	int  i=1;	if(_s>0)	{		while(*start)		{			if(isspace(*start))			{				while(isspace(*start))				{					*start='/0';								start++;				}							myargv[i++]=start;			}			else			{				start++;			}		}	}	else	{      continue;	}	myargv[i-1]=NULL;	pid_t id=vfork();	if(id==0)	{		execvp(myargv[0],myargv);		perror("error");	}	else{		sleep(3);		wait(NULL);	}	printf("/n");	}运行结果

也可以直接将命令头输出,不用函数获取

#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<wait.h>#include<string.h>int main(){	while(1)	{	printf("[root@localhost 2.13]&");	fflush(stdout);	char line[1024];	ssize_t _s=read(0,line,1024);	char* myargv[10];	char* start=line;    myargv[0]=start;	int  i=1;	if(_s>0)	{		while(*start)		{			if(isspace(*start))			{				while(isspace(*start))				{					*start='/0';								start++;				}							myargv[i++]=start;			}			else			{				start++;			}		}	}	else	{      continue;	}	myargv[i-1]=NULL;	pid_t id=vfork();	if(id==0)	{		execvp(myargv[0],myargv);		perror("error");	}	else{		sleep(3);		wait(NULL);	}	printf("/n");	}	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表