【Linux】第一个简单shell

来源:互联网 发布:ubuntu安装jdk tar.gz 编辑:程序博客网 时间:2024/05/16 14:55

使用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;}


0 0
原创粉丝点击