服装购物商城网站建设,推广链接点击器app,简述电子商务网站的建设步骤,您身边的网站建设顾问sh1.c: 实现shell程序#xff0c;要求具备如下功能支持命令参数
$ echo arg1 arg2 arg3
$ ls /bin /usr/bin /home
实现内置命令cd、pwd、exit
$ cd /bin
$ pwd
/bin
实现思路#xff1a;在获取命令字符串后#xff0c;用strtok函数对字符串进行处理#xff0c;获取参数…sh1.c: 实现shell程序要求具备如下功能支持命令参数
$ echo arg1 arg2 arg3
$ ls /bin /usr/bin /home
实现内置命令cd、pwd、exit
$ cd /bin
$ pwd
/bin
实现思路在获取命令字符串后用strtok函数对字符串进行处理获取参数列表然后判断命令是内部命令还是外部命令进行分别处理。
1、内部命令的实现内部命令全部自己实现exit通过myexit函数实现myexit直接调用exit0cd通过mycd函数调用chdir函数来实现pwd通过mypwd函数调用getcdw函数实现。
2、外部命令的实现外部命令通过在cmd函数中创建子进程在子进程通过execvp函数装载外部命令实现。 实现代码
#includestdio.h
#includesys/wait.h
#includeunistd.h
#includesys/types.h
#includestdlib.h
#includestring.h
#includepwd.h#define MAX_PATH_LEN 200
#define CMD_LEN 200
int cmd_num;
char *cmd_array[100];void cmd(){pid_t pid;pidfork();if(pid0){if(execvp(cmd_array[0],cmd_array)0){printf(Error:command not found\n);}}wait(NULL);
}void print_user(){struct passwd *pwd;char path_name[MAX_PATH_LEN];getcwd(path_name,MAX_PATH_LEN);pwdgetpwuid(getuid());printf(%skali:%s$ ,pwd-pw_name,path_name);
}void get_cmd(){int i0;char str[CMD_LEN];char *buf;cmd_num0;memset(cmd_array,0,100);fgets(str,CMD_LEN,stdin);bufstrtok(str, \n);while(buf!NULL){cmd_array[i](char *)malloc(sizeof(*buf));strcpy(cmd_array[i],buf);bufstrtok(NULL, \n);}cmd_array[i]NULL;cmd_numi;
}void mycd(){struct passwd *pwd;char path_name[MAX_PATH_LEN];pwdgetpwuid(getuid());if(cmd_num1){strcpy(path_name,pwd-pw_dir);if(chdir(path_name)-1){perror(mycd:chdir..);exit(1);}}else{if(chdir(cmd_array[1])-1){printf(mycd: cd:%s:No such directory\n,cmd_array[1]);}}
}void myexit(){exit(0);
}void mypwd(){char path_name[MAX_PATH_LEN];if(getcwd(path_name,MAX_PATH_LEN)){printf(%s\n,path_name);}else{perror(Error:getcwd...\n);exit(0);}
}int main(){while(1){print_user();get_cmd();if(cmd_array[0]NULL)return 0;else if(strcmp(cmd_array[0],exit)0)myexit();else if(strcmp(cmd_array[0],pwd)0)mypwd();else if(strcmp(cmd_array[0],cd)0)mycd();else cmd();}return 0;
}
运行结果 欢迎留言交流。。。。