#include<stdio.h>
#include<dirent.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<wait.h>
void getstring(char *cmd,int size);
void getstring(char *cmd,int size){
fgets(cmd,size,stdin);
int len = strlen(cmd);
if(cmd[len-1]==10){
cmd[len-1]=0;
}
}
int main(int argc, const char *argv[])
{
while(1){
//建立子进程
int ret = fork();
if(ret>0){
//打印信息
char* username = getlogin();
char hostname[128] = {0};
char path[128]={0};
gethostname(hostname,128);
getcwd(path,128);
printf("\033[1;32;10m%s@%s\033[0m:\033[1;34;10m%s\033[0m$",username,hostname,path);
fflush(stdout);
//堵塞父进程,进入子进程
wait(0);
}else if(ret == 0){
//输入并获取终端字符串
char cmd[100]={0};
getstring(cmd,100);//获取终端指令 ;100个字符
//分割字符串放入数组
//存放每一段分割的字符串
char *buf[30]={0};
char *temp = NULL;
int i = 0;
do{
if(temp==NULL){
temp=strtok(cmd," ");
}else{
temp = strtok(NULL," ");
}
if(temp==NULL){break;}
buf[i++]=temp;
}while(1);
//cd指令是函数
if(strcmp(argv[0],"cd")==0){
if(argv[1][0]==0||strcmp(argv[1],"~")==0){
chdir("/home/ubuntu");
}else{
chdir(argv[1]);
}
}else{
execvp(buf[0],buf);
}
}else if(ret = -1){
printf("创建失败\n");
}
}
}
2024-03-07 作业
最新推荐文章于 2024-06-20 00:02:16 发布