当前位置: 首页 > news >正文

高端网站制作公响应式网站制作软件

高端网站制作公,响应式网站制作软件,php企业中英文网站源码,建设工程质量管理条例网站文章目录 1.框架2.命令行3.获取用户命令字符串4.命令行字符串分割5.执行命令和内建命令6.完整代码#xff1a; 1.框架 我们知道shell是一直存在的#xff0c;所以首先我们第一步就是要搭建一个框架#xff0c;使其一直存在。 那么也很简单#xff0c;一个while循环就可以完… 文章目录 1.框架2.命令行3.获取用户命令字符串4.命令行字符串分割5.执行命令和内建命令6.完整代码 1.框架 我们知道shell是一直存在的所以首先我们第一步就是要搭建一个框架使其一直存在。 那么也很简单一个while循环就可以完成。 2.命令行 我们的shell最前面都是有一个命令行的 。如下图 那么命令行我们应该怎么获取呢我们可以从环境变量中获取env查看环境变量。 getenv函数就可以帮我们获取环境变量可以获取用户名、地址等等 getenv获取成功就会取到那个对象如果获取失败就会返回空 然后我们需要把上面获取到的三个字符拼接在一起这时候就需要用到snprintf函数了 到这里第一步就结束了 3.获取用户命令字符串 这一步我们需要获取命令字符串因为有空格。我们无法使用scanf。这里使用fgets 4.命令行字符串分割 分割思路 具体分割我们可以使用strtok函数 但是这里有个需要注意的地方strtok的第二参数需要是一个字符串 5.执行命令和内建命令 内建命令 6.完整代码 以上就是编写shell的大致思路了上面的shell为了和系统本身的shell做区分所以前的路径都是绝对路径一长串。 myshell.c: #include stdio.h #include stdlib.h #include string.h #include errno.h #include unistd.h #include sys/types.h #include sys/wait.h#define SIZE 512 #define ZERO \0 #define SEP #define NUM 32// 为了方便我就直接定义了 char cwd[SIZE*2]; char *gArgv[NUM]; int lastcode 0;void Die() {exit(1); }//获取家目录 const char *GetHome() {const char *home getenv(HOME);if(home NULL) return /;return home; }//获取用户名 const char *GetUserName() {const char *name getenv(USER);if(name NULL) return None;return name; } //获取主机名 const char *GetHostName() {const char *hostname getenv(HOSTNAME);if(hostname NULL) return None;return hostname; } //获取路径 const char *GetCwd() {const char *cwd getenv(PWD);if(cwd NULL) return None;return cwd; }int GetUserCommand(char command[], size_t n) {char *s fgets(command, n, stdin);if(s NULL) return -1;command[strlen(command)-1] ZERO;return strlen(command); }void MakeCommandLineAndPrint() {char line[SIZE];const char *username GetUserName();const char *hostname GetHostName();const char *cwd GetCwd();snprintf(line, sizeof(line), [%s%s %s] , username, hostname, cwd);printf(%s, line);fflush(stdout); }void SplitCommand(char command[], size_t n) {(void)n;// ls -a -l -n - ls -a -l -ngArgv[0] strtok(command, SEP);int index 1;while((gArgv[index] strtok(NULL, SEP))); // done, 故意写成,表示先赋值在判断.因为分割之后如果无法分割strtok会返回NULL刚好让gArgv最后一个元素是NULL, 并且while判断结束 }void ExecuteCommand() {pid_t id fork();if(id 0) Die();else if(id 0){// childexecvp(gArgv[0], gArgv);exit(errno);}else{// fahterint status 0;pid_t rid waitpid(id, status, 0);if(rid 0){lastcode WEXITSTATUS(status);if(lastcode ! 0) printf(%s:%s:%d\n, gArgv[0], strerror(lastcode), lastcode);}} }void Cd() {const char *path gArgv[1];if(path NULL) path GetHome();// path 一定存在chdir(path);// 刷新环境变量char temp[SIZE*2];getcwd(temp, sizeof(temp));snprintf(cwd, sizeof(cwd), PWD%s, temp);putenv(cwd); // OK }int CheckBuildin() {int yes 0;const char *enter_cmd gArgv[0];if(strcmp(enter_cmd, cd) 0){yes 1;Cd();}else if(strcmp(enter_cmd, echo) 0 strcmp(gArgv[1], $?) 0){yes 1;printf(%d\n, lastcode);lastcode 0;}return yes; }int main() {//首先自己写的shell需要一直存在所以设置一个while循环 int quite0; while(!quite) {// 1. 我们需要自己输出一个命令行MakeCommandLineAndPrint();// 2. 获取用户命令字符串char usercommand[SIZE];int n GetUserCommand(usercommand, sizeof(usercommand));if(n 0) return 1;// 3. 命令行字符串分割. SplitCommand(usercommand, sizeof(usercommand));// 4. 检测命令是否是内建命令n CheckBuildin();if(n) continue; // 5. 执行命令ExecuteCommand();}return 0; }
http://www.dnsts.com.cn/news/195918.html

相关文章:

  • 天津网站设计 河西如何做旅游计划的网站
  • 电子商务网站设计毕业设计论文学校网站建设公司
  • 长春免费建站模板网站开发流程ppt
  • 安全教育网站建设背景自学网站开发条件
  • 广州网站建设app开发上海最专业的网站建设公司排名
  • 网站备案需要多长时间如何创建一个自己的公众号
  • 如何建网站教程百度采购网
  • 上海营销型网站开发微商做百度推广发哪个网站收录高
  • 做网站维护有前途吗wordpress com login
  • 5151ppt网站建设游戏软件开发
  • 找婚庆公司去什么网站网站制作公司珠海
  • 教师廉政建设学校网站信息黄冈网站设计推广哪家好
  • 西安博网站建设网站建设捌金手指下拉四
  • 采集侠 wordpress西安官网优化哪家公司好
  • 宁波做亚马逊网站承德网站建设报价
  • 淘宝cms建站wordpress a
  • 营销企业网站建设应遵守的原则中国建设安全监理协会网站
  • 申办网站流程网站写好了怎么做后台管理
  • 北京住房与城乡建设厅网站自己电脑做电影网站吗
  • 企业做网站怎么做个人简历自我评价怎么写
  • 网站的电子画册怎么做枣庄做网站公司
  • 公司门户网站及oa系统建设的请示app推荐网站
  • 我有域名和服务器找人建设网站用代码做家乡网站
  • 全球排行前50网站开发语言做网站会提供源代码
  • 树状结构的网站使用wordpress做图站
  • 做网店好还是网站怎么做卖橘子的网站
  • 恶意刷网站嗨学网官网
  • 建网站空间都有什么平台wordpress主题等
  • 哪几个网站做acm题目温州网站优化指导
  • hao123网站模板深圳买房最新政策