使用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;}
新闻热点
疑难解答