长丰县建设局网站,做网站要备案,全国装修公司排名100强,镇江嘉创网络科技有限公司目录
从显示屏获取输入字符流
分割字符串 取出命令名称及选项
去除输入时多按的那个换行符
创建子进程#xff0c;实现程序替换
如果替换失败#xff0c;进程终止exit
查看子进程情况
实现echo $?功能
实现cd
最终代码 基本思路 让父进程创建一个子进程#xff0c… 目录
从显示屏获取输入字符流
分割字符串 取出命令名称及选项
去除输入时多按的那个换行符
创建子进程实现程序替换
如果替换失败进程终止exit
查看子进程情况
实现echo $?功能
实现cd
最终代码 基本思路 让父进程创建一个子进程由这个子进程进行程序替换。父进程要对这个进程进行追踪、回收。具体实现模块如下 从显示屏获取输入字符流 char* sfgets(buffer,sizeof (buffer)-1,stdin);assert(s!NULL);buffer[strlen (buffer)-1]0;(void*)s; 分割字符串 取出命令名称及选项 //切割字符串myargv[0]strtok(buffer, );int i0;if(myargv[0] ! NULL strcmp(myargv[0], ls) 0){myargv[i] (char*)--colorauto;}while(myargv[i]!NULL){myargv[i]strtok(NULL, );}创建子进程实现程序替换 pid_t id fork();if(id0){//子进程//程序替换execvp(myargv[0],myargv); //如果走到这里表示替换失败exit(1);} 查看子进程情况 //父进程int status0;pid_t ret waitpid(id,status,0);assert(ret 0);(void)ret;quitcode(status8)0XFF;quitsignal (status 0x7F); 实现echo $?功能 //实现echo $?功能if(myargv[0]!NULLmyargv[1]!NULLstrcmp(myargv[0],echo)0){if(strcmp(myargv[1],$?)0){//输出上一个进程的退出码printf(退出码为%d\n,quitcode);}else{printf(%s\n,myargv[1]);}continue;} 实现cd //实现cd功能if(myargv[0] ! NULL strcmp(myargv[0],cd)0){if(myargv[1]!NULL){chdir(myargv[1]);}continue;} 最终代码
#includestdio.h
#includestring.h
#includeassert.h
#includeunistd.h
#includesys/types.h
#includesys/wait.h
#includestdlib.h#define B_NUM 1024
#define ARGV_NUM 10char buffer[B_NUM];
char* myargv[ARGV_NUM];
int quitcode;
int quitsignal;int main()
{while(1){printf(【用户名服务器 当前目录】$);fflush(stdout);char* sfgets(buffer,sizeof (buffer)-1,stdin);assert(s!NULL);buffer[strlen (buffer)-1]0;(void*)s;//切割字符串myargv[0]strtok(buffer, );int i0;if(myargv[0] ! NULL strcmp(myargv[0], ls) 0){myargv[i] (char*)--colorauto;}while(myargv[i]!NULL){myargv[i]strtok(NULL, );}//实现cd功能if(myargv[0] ! NULL strcmp(myargv[0],cd)0){if(myargv[1]!NULL){chdir(myargv[1]);}continue;}//实现echo $?功能if(myargv[0]!NULLmyargv[1]!NULLstrcmp(myargv[0],echo)0){if(strcmp(myargv[1],$?)0){//输出上一个进程的退出码printf(退出码为%d\n,quitcode);}else{printf(%s\n,myargv[1]);}continue;}pid_t id fork();if(id0){//子进程//程序替换execvp(myargv[0],myargv); //如果走到这里表示替换失败exit(1);}//父进程int status0;pid_t ret waitpid(id,status,0);assert(ret 0);(void)ret;quitcode(status8)0XFF;quitsignal (status 0x7F);}return 0;
}最后 加油