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

免费做封面网站网站制作包括什么

免费做封面网站,网站制作包括什么,视差 长沙做网站,中专网站建设课程目标 能处理普通命令能处理内建命令 实现原理 用下面的时间轴来表示时间发生次序。时间从左向右。shell由标识为sh的方块,它随着时间从左向右移动。 shell从用户读入字符串“ls”。shell建立一个新的进程,然后等待进程中运行ls程序并等待进程结束。 …

目标

  • 能处理普通命令
  • 能处理内建命令

实现原理

用下面的时间轴来表示时间发生次序。时间从左向右。shell由标识为sh的方块,它随着时间从左向右移动。
shell从用户读入字符串“ls”。shell建立一个新的进程,然后等待进程中运行ls程序并等待进程结束。
在这里插入图片描述
然后shell读取新的一行输入,建立一个新的进程在这个进程中运行程序,等待进程结束。
所以写一个shell,需要循环一下过程

  1. 获取命令行
  2. 解析命令行
  3. 建立子进程(fork)
  4. 替换子进程(execvp)
  5. 父进程等待子进程退出(wait)

源码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<string>#define COMMAND_SIZE 1024
#define FORMAT "[%s@%s %s]# "//下面是shell定义的全局数据
// 1.命令行参数表
#define MAXARGC 128
char *g_argv[MAXARGC];
int g_argc = 0;// 2.环境变量表
#define MAX_ENV 100
char* g_env[MAX_ENV];
int g_envs = 0;char cwd[1024];
char cwdenv[1024];// last code exit
int lastcode = 0;const char* GetUserName()
{const char* name=getenv("USER");return name == NULL ? "None" : name;
}const char* GetHostName()
{const char* host=getenv("HOSTNAME");return host == NULL ? "None" : host;
}const char* GetPwd()
{//const char* pwd=getenv("PWD");const char* pwd = getcwd(cwd,sizeof(cwd));if(pwd != NULL){snprintf(cwdenv,sizeof(cwdenv),"PWD=%s",cwd);putenv(cwdenv);}return pwd == NULL ? "None" : pwd;
}const char* GetHome()
{const char* home=getenv("HOME");return home == NULL ? "None" : home;
}const char* GetOldpwd()
{const char* oldpwd=getenv("OLDPWD");return oldpwd == NULL ? "None" : oldpwd;
}// 处理目录
std::string DirName(const char* pwd)
{
#define SLASH "/"std::string dir = pwd;if(dir == SLASH) return SLASH;auto pos = dir.rfind(SLASH);if(pos == std::string::npos) return pwd;return dir.substr(pos+1);
}void InitEnv()
{extern char** environ;memset(g_env,0,sizeof(g_env));g_envs = 0;//简化操作,从父进程获得环境变量for(int i = 0; environ[i]; i++){g_env[i]=(char*)malloc(strlen(environ[i])+1);strcpy(g_env[i],environ[i]);g_envs++;}g_env[g_envs] = NULL;//2.导成环境变量for(int i = 0; g_env[i]; i++){putenv(g_env[i]);}environ = g_env;
}void MakeCommandLine(char cmd_prompt[], int size)
{snprintf(cmd_prompt, size, FORMAT, GetUserName(), GetHostName(), DirName(GetPwd()).c_str());
}void PrintfCommandPrompt()
{char command[COMMAND_SIZE];MakeCommandLine(command,COMMAND_SIZE);printf("%s",command);fflush(stdout);
}// ls -a -l => "ls -a -l"字符串
bool GetCommandLine(char* out, int size)
{char* c = fgets(out, size, stdin);if(c==NULL) return false;out[strlen(out)-1]=0; // 清理\nif(strlen(out) <= 0) return false;return true;
}// 命令行分析 "ls -a -l" => "ls" "-a" "-l"
bool CommandParse(char* commandline)
{
#define SEP " "g_argc = 0;g_argv[g_argc++] = strtok(commandline, SEP);while((bool)(g_argv[g_argc++] = strtok(nullptr,SEP)));g_argc--;return g_argc > 0 ? true :false;
}// command
bool cd()
{//cdif(g_argc == 1){std::string home = GetHome();if(home.empty()) return true;chdir(home.c_str());}else {std::string where = g_argv[1];//cd ~if(where == "~"){std::string home = GetHome();chdir(home.c_str());}//cd -if(where == "-"){std::string oldpwd = GetOldpwd();chdir(oldpwd.c_str());}chdir(where.c_str());}return true;
}
void PrintEnv()
{extern char** environ;for(int i = 0; environ[i];++i){printf("%-2d->%s\n",i,environ[i]);}
}bool CheckAndExcuteBuildin()
{std::string cmd = g_argv[0];if(cmd == "cd"){cd();return true;}if(cmd == "test"){PrintEnv();return true;}return false;
}void Excute()
{pid_t id = fork();if(id == 0) // child{execvp(g_argv[0], g_argv);exit(1);}// fatherint status = 0;pid_t rid = waitpid(id,&status,0);if(rid > 0){lastcode=WEXITSTATUS(status);        }
}void test_GetCommandLine(char* str)
{printf("%s\n", str);
}
void test_CommandParse()
{for(int i = 0; i < g_argc; ++i)std::cout << g_argv[i] << " " ;
}
void test_InitEnv()
{for(int i = 0; g_env[i]; i++){printf("env[%2d]->%s\n",i,g_env[i]);}printf("envs: %d\n",g_envs);
}int main()
{InitEnv();while(true){// 1. 输出命令行提示符  [jfs@superg-alicloud myshell]$PrintfCommandPrompt();// 2. 获取用户输入的命令 ls -a -lchar commandline[COMMAND_SIZE];if(!GetCommandLine(commandline, sizeof(commandline))) continue;//test_GetCommandLine(commandline);// 3. 命令行分析,"ls -a -l" => "ls" "-a" "-l"if(!CommandParse(commandline))continue;//test_CommandParse();// 4.检测并处理内建命令if(CheckAndExcuteBuildin())continue;// 5. 执行命令Excute();}return 0;
}

文章转载自:

http://Pu84MFW2.bnfrj.cn
http://yUf7OeY4.bnfrj.cn
http://mjbLyiAE.bnfrj.cn
http://JOc9MnUu.bnfrj.cn
http://fGXqyrvP.bnfrj.cn
http://677I1AL8.bnfrj.cn
http://MV0mAw7b.bnfrj.cn
http://2t0ZRWVe.bnfrj.cn
http://sPUkMiYK.bnfrj.cn
http://1h1rWScz.bnfrj.cn
http://YiCabOFT.bnfrj.cn
http://F9QTJHua.bnfrj.cn
http://5MPvX3An.bnfrj.cn
http://LMfViQTR.bnfrj.cn
http://zN0ecXHM.bnfrj.cn
http://WRppRfno.bnfrj.cn
http://Fy1q0n0x.bnfrj.cn
http://GhkWixQU.bnfrj.cn
http://nng6MzPs.bnfrj.cn
http://bMpscnpR.bnfrj.cn
http://WaSvLkiQ.bnfrj.cn
http://5ZDOqNd9.bnfrj.cn
http://e0mtYeA0.bnfrj.cn
http://VNumTICI.bnfrj.cn
http://K1LWocea.bnfrj.cn
http://JGUfzEuW.bnfrj.cn
http://1ra0yrm2.bnfrj.cn
http://BzxGiB3G.bnfrj.cn
http://jzaGbbJc.bnfrj.cn
http://IrD1PgMz.bnfrj.cn
http://www.dtcms.com/wzjs/702884.html

相关文章:

  • 东莞建站模板代理如何在大学网站做宣传
  • 企业网站建设平台福建网站建设模板
  • 网站建设与管理实训课程广州专业网站建设
  • 佛山外贸网站建设价位办公室装修效果图片大全
  • 网站开发可以当程序员湖南企业名录大全
  • 西城网站建设公司旅游网站建设模版
  • 名片在哪个网站做网站网址怎么写
  • 青岛城市建设投资建设集团网站谷歌可以绑定wordpress
  • 企业门户网站 php网页制作与设计教材
  • 跨境电商平台网站建设广州微信上的微网站在哪里
  • 正规手表回收网站东营网站设计
  • 多语种企业网站建设海口网红景点
  • 厦门网站建设团队新手怎么建立自己的网站
  • 品品牌牌建建设设网站代做ppt平台
  • 网站营销推广有哪些卢龙建设银行官网网站
  • 哪些是用vue做的网站python创建wordpress
  • 手工艺品网站建设方案珠海网站制作费用
  • 网站优化如何做深圳福田
  • 时装网站建设的背景青海省住房和城乡建设部网站
  • 网站配置全球贸易平台
  • 用易语言做攻击网站软件下载汽配网站建设成本
  • 小说网站开发思路抖音代运营培训
  • 辽宁做网站免费高清无专码区直接看
  • 深圳网站设计收费wordpress theme ide
  • 网易网站开发淘宝客手机网站搭建
  • 挖掘爱站网什么是二级网站推广
  • 成都建站模板制作网站的工作流程
  • 怎么把自己的网站做自适应网站网站服务器修改登录密码
  • 开发公司交钥匙流程官网seo
  • 八里庄街道网站建设网站设计时多页面切换时什么控件