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

电子商务网站建设基础项目实训字体设计欣赏网站

电子商务网站建设基础项目实训,字体设计欣赏网站,网站手机端做排名,淘宝网站模板是什么做的文章目录 1.框架2.命令行3.获取用户命令字符串4.命令行字符串分割5.执行命令和内建命令6.完整代码: 1.框架 我们知道shell是一直存在的,所以首先我们第一步就是要搭建一个框架,使其一直存在。 那么也很简单,一个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" "-n"gArgv[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 quite=0;
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.yayakq.cn/news/83519/

相关文章:

  • 网站建设中html保利拍卖公司网站
  • 石家庄建站优化公司nas可以做网站吗
  • 建设定制网站红色网站呢
  • 网站备案网站建设方案公司建网站软件
  • 网站建设走的路线风格德阳网站建设ghxhwl
  • 网站持有者和备案企业搭建一个平台
  • 网站关键词怎么做效果好wp网站模板安装
  • 北仑网站网页建设wordpress搬家404
  • wap卖料建站系统wordpress占500内存
  • win7用iis搭建网站网络营销服务的特点
  • 免费发做网站云南网站制作公司
  • 摄影网站建设需求分析免费网站建站方法
  • 加强学校网站建设的要求我学的 网站开发 能进华为公司么
  • 网站建设亇金手指排名十五微信音乐音频怎么关闭
  • 佛山网站优化包年虾皮购物网站怎么做
  • 北京城市雕塑建设管理办公室网站百度广告投放价格
  • 深圳做网站建设比较好的公司wordpress修改
  • 做哪类视频网站需要视频证书wordpress 主分类
  • 合肥哪家制作网站手机如何申请个人邮箱
  • 企业信息化建设方案 网站上海整站seo
  • 郑州网站建设系统培训企业管理培训课程目录
  • 贵阳做网站的大公司app开发制作定制外包26
  • 云南俊发建设集团网站北京公司注册中介正规
  • 沈阳网站推广优化公司淘宝搜索关键词排名查询工具
  • 营销型网站成功案例低代码开发平台 免费
  • 如何撰写网站建设方案书网站开发学习教程
  • 免费创建网站的平台唯尚广告联盟平台
  • 加强宣传阵地建设 高校 网站服务器上网站建设
  • 除了淘宝还有哪些购物网站赣榆城乡建设局网站
  • 个人建网站教程建站快车凡科