char* getLine(char* buf,int size)
{
fgets(buf,size,stdin);
int len = strlen(buf);
if(buf[len-1]=='\n')
{
buf[len-1]='\0';
}
}
int main(int argc, const char *argv[])
{
while(1)
{
int res = fork(); //创建子进程
if(res > 0)
{
wait(0); //父进程等待回收资源
}
else
{
{
//子进程执行仿终端逻辑
//环境获取
char* username = getlogin();//获取用户名
char hostname[64] = {0};
char pwd[128] = {0};
gethostname(hostname,64);//获取主机名
getcwd(pwd,128);
gethostname(hostname,64);
printf("\033[1;32;10m%s@%s\033[0m:\033[1;34;10m%s\033[0m$ ",username,hostname,pwd);
fflush(stdout);
//分割用户输入shell指令
char* arg[20] = {0}; //数组指针,用于存贮分割后的shell指令
char cmd[128] = {0};
getLine(cmd,128); //stdin的内容写到cmd中
char* retvel = NULL;
int i = 0;
do
{
if(retvel==NULL)
{
retvel = strtok(cmd," ");
}
else
{
retvel = strtok(NULL," ");
}
arg[i++] = retvel; //存贮指令
}while(retvel!=NULL);
//执行shell指令,cd不运行进程,做特殊处理
if(strcmp(arg[0],"cd")==0)
{
chdir(arg[1]);
}
else
{
execvp(arg[0],arg); //进程替换,执行shell命令
printf("没有这个指令☺ \n");
}
}
}
}
return 0;
}
7.18号作业
于 2024-07-19 09:03:51 首次发布