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

数据交易网站源码微信客户管理系统

数据交易网站源码,微信客户管理系统,wordpress 设置文章页,胖哥食品网站建设规范意见目录 1.分析 2.打印输入提示符 3.读取并且处理输入字符串 4.创建子进程并切换 5.bash内部指令 6.完整代码 1.分析 当我们登录服务器的时候,命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。 我们在命令行上输入的…

目录

1.分析

2.打印输入提示符

3.读取并且处理输入字符串

4.创建子进程并切换

5.bash内部指令

6.完整代码


1.分析

        当我们登录服务器的时候,命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。        我们在命令行上输入的是一连串的字符串,那么bash首先要做的就是分析字符串。然后判断是否合法字符串。如果是合法字符串,那么就创建一个子进程,让子进程去切换执行命令,bash分析子进程结果。如果是非法字符串,那么就再次循环,整体嵌套在一个while循环里面。如此循环下去。

2.打印输入提示符

        

        通过观察超级用户和普通用户可以发现提示行主要由三部分构成,用户名,主机名,地址以及特殊符号,用户名和主机名可以从环境变量中获取,主机名就设置为@区别于shell。

#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<string>
using namespace std;const int MaxSize=1024;char * UsrName;
char * HostName;
char  CommandPwd[MaxSize];//打印命令行提示符
void PrintCLPrompt()
{printf("[%s@%s %s]@",UsrName,HostName,CommandPwd);
}//准备工作
void setup()
{UsrName=getenv("USER");HostName=getenv("HOSTNAME");//这里采用C++的string来接收是为了后序处理方便string str=getenv("PWD");string tmp=str.substr(str.rfind("/")+1);//加一去除/字符snprintf(CommandPwd,MaxSize,"%s",tmp.c_str());//格式化输出到数组函数
}int main()
{setup();while(1){PrintCLPrompt();//让程序停在这里方便观察 scanf("%d",NULL);}return 0;
}

        此时输出的命令行提示符就在我们的预期之中了

3.读取并且处理输入字符串

        读取比较简单,我们只需scanf或者cin即可。( C++兼容C所以在这里读取可以使用C的方式或者是C++的方式,同理输出也可以采用C的方式或者C++的方式哪个方便用哪个)。处理的话我们就把它处理成命令行参数列表以便后续切换进程。

        前面代码相同,加上后序调试代码与读取指令即可。

//读取处理指令
char Command[MaxSize];
char * argv[MaxSize];
void ReadDealCommand()
{//读取一行字符串fgets(Command,MaxSize,stdin);int len=strlen(Command)-1;//fegts会把\n也读取到,但这个是不用的字符.Command[len]='\0';//处理字符串int size=0;int prev=-1,cur=0;//预处理,将空格换成\0for(int i=0; i<len; i++){if(Command[i]==' ')Command[i]='\0';}while(cur<len){if(prev == -1 && Command[cur]!='\0'|| Command[prev]=='\0' && Command[cur]!='\0'){argv[size++]=Command+cur;}prev++;cur++;}//argv最后加上NULLargv[size]=NULL;}int main()
{setup();while(1){   //打印提示行PrintCLPrompt();//读取处理指令ReadDealCommand();//检测是否处理成功for(int i=0; argv[i]; i++){printf("argv[%d]:%s\n",i,argv[i]);}}return 0;
}

        上述读取一行字符串采用了C语言的fgets函数,当然也可以用C++的getline。使用C++的fgets函数,要注意它会把反斜\n也读取到,在计算字符串的长度时要减一。

        将原字符串空格改为\0后,就可以让数组指针直接指向原字符串即可。

        其中要注意可能有结尾或者开头带空格的情况。(以下用@代替空格)

ls@-a@-l

@ls@-a@-l

ls@-a@-l@

4.创建子进程并切换

        

//执行指令
void PreformCommand()
{pid_t id=fork();if(id ==0 ){execvp(argv[0],argv);exit(111);}//父进程int status=0;pid_t rid=wait(&status);if (WIFEXITED(status)){// 子进程正常退出,提取退出状态码int exit_status = WEXITSTATUS(status);// printf("Child process exited normally with status %d\n", exit_status);}else if (WIFSIGNALED(status)) {// 子进程因信号终止,提取信号编号int signal_num = WTERMSIG(status);printf("Child process terminated by signal %d\n", signal_num);}    
}int main()
{setup();while(1){   //打印提示行PrintCLPrompt();//读取处理指令ReadDealCommand();//执行指令PreformCommand();}return 0;
}

       创建子进程,并让子进程切换到所要执行的程序,父进程接收子进程的退出码即可.由此我们便基本完成了bash程序。

5.bash内部指令

        有一些指令是可以直接从环境变量中得到或使用的,就不必再创建子进程了直接在bash里完成指令即可。比如cd,pwd等这些都是bash内部程序。

//执行指令
void PreformCommand()
{//bash内部程序if(strcmp("pwd",argv[0])==0){ printf("%s\n",getenv("PWD"));return ;}else if(strcmp("cd",argv[0])==0){chdir(argv[1]);char cwd[1024];getcwd(cwd,1024);//更新地址string str=cwd;string tmp=str.substr(str.rfind("/")+1);//加一去除/字符snprintf(CommandPwd,MaxSize,"%s",tmp.c_str());//格式化输出到数组函数//修改环境变量string s="PWD=";s+=cwd;snprintf(cwd,MaxSize,"%s",s.c_str());//格式化输出到数组函数 putenv(cwd);//putenv参数要是char*,但c_str()返回的是const char *return ;}pid_t id=fork();if(id ==0 ){execvp(argv[0],argv);//切换不成功返回退出码exit(111);}//父进程int status=0;pid_t rid=wait(&status);if (WIFEXITED(status)){// 子进程正常退出,提取退出状态码int exit_status = WEXITSTATUS(status);// printf("Child process exited normally with status %d\n", exit_status);}else if (WIFSIGNALED(status)) {// 子进程因信号终止,提取信号编号int signal_num = WTERMSIG(status);printf("Child process terminated by signal %d\n", signal_num);}    
}int main()
{setup();while(1){   //打印提示行PrintCLPrompt();//读取处理指令ReadDealCommand();//执行指令PreformCommand();}return 0;
}

        

6.完整代码

        最后全部的代码就在这了,上述粘贴可能有错误还望海涵

#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<string>
#include<string.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/wait.h>
using namespace std;const int MaxSize=1024;char * UsrName;
char * HostName;
char  CommandPwd[MaxSize];//打印命令行提示符
void PrintCLPrompt()
{printf("[%s@%s %s]@",UsrName,HostName,CommandPwd);
}//准备工作
void setup()
{UsrName=getenv("USER");HostName=getenv("HOSTNAME");string str=getenv("PWD");string tmp=str.substr(str.rfind("/")+1);//加一去除/字符snprintf(CommandPwd,MaxSize,"%s",tmp.c_str());//格式化输出到数组函数
}//读取处理指令
char Command[MaxSize];
char * argv[MaxSize];
void ReadDealCommand()
{//读取一行字符串fgets(Command,MaxSize,stdin);int len=strlen(Command)-1;//fegts会把\n也读取到,但这个是不用的字符Command[len]='\0';//处理字符串int size=0;int prev=-1,cur=0;//预处理,将空格换成\0for(int i=0; i<len; i++){if(Command[i]==' ')Command[i]='\0';}while(cur<len){if(prev == -1 && Command[cur]!='\0'|| Command[prev]=='\0' && Command[cur]!='\0'){argv[size++]=Command+cur;//.autorelabel printf("%d ",cur);}prev++;cur++;}//argv最后加上NULLargv[size]=NULL;}
//执行指令
void PreformCommand()
{//bash内部程序if(strcmp("pwd",argv[0])==0){ printf("%s\n",getenv("PWD"));return ;}else if(strcmp("cd",argv[0])==0){chdir(argv[1]);char cwd[1024];getcwd(cwd,1024);//更新地址string str=cwd;string tmp=str.substr(str.rfind("/")+1);//加一去除/字符snprintf(CommandPwd,MaxSize,"%s",tmp.c_str());//格式化输出到数组函数//修改环境变量string s="PWD=";s+=cwd;snprintf(cwd,MaxSize,"%s",s.c_str());//格式化输出到数组函数 putenv(cwd);//putenv参数要是char*,但c_str()返回的是const char *return ;}pid_t id=fork();if(id ==0 ){execvp(argv[0],argv);//切换不成功返回退出码exit(111);}//父进程int status=0;pid_t rid=wait(&status);if (WIFEXITED(status)){// 子进程正常退出,提取退出状态码int exit_status = WEXITSTATUS(status);// printf("Child process exited normally with status %d\n", exit_status);}else if (WIFSIGNALED(status)) {// 子进程因信号终止,提取信号编号int signal_num = WTERMSIG(status);printf("Child process terminated by signal %d\n", signal_num);}    
}int main()
{setup();while(1){   //打印提示行PrintCLPrompt();//读取处理指令ReadDealCommand();//执行指令PreformCommand();}return 0;
}


文章转载自:
http://limit.rpwm.cn
http://rivet.rpwm.cn
http://demarche.rpwm.cn
http://clonism.rpwm.cn
http://bractlet.rpwm.cn
http://dispread.rpwm.cn
http://purify.rpwm.cn
http://duvay.rpwm.cn
http://christcross.rpwm.cn
http://purga.rpwm.cn
http://ligure.rpwm.cn
http://baldly.rpwm.cn
http://siphonet.rpwm.cn
http://catalo.rpwm.cn
http://prestige.rpwm.cn
http://thunderburst.rpwm.cn
http://discipleship.rpwm.cn
http://monochroic.rpwm.cn
http://photolitho.rpwm.cn
http://ceraunograph.rpwm.cn
http://ailanthus.rpwm.cn
http://hoyle.rpwm.cn
http://royalty.rpwm.cn
http://pylori.rpwm.cn
http://synchronization.rpwm.cn
http://fleshy.rpwm.cn
http://conenose.rpwm.cn
http://orthokeratology.rpwm.cn
http://cattleya.rpwm.cn
http://remorsefully.rpwm.cn
http://hardpan.rpwm.cn
http://racemiferous.rpwm.cn
http://dissuade.rpwm.cn
http://gueber.rpwm.cn
http://canephoros.rpwm.cn
http://yellowback.rpwm.cn
http://haustorium.rpwm.cn
http://towhee.rpwm.cn
http://magnetopause.rpwm.cn
http://premarketing.rpwm.cn
http://cryosurgery.rpwm.cn
http://vola.rpwm.cn
http://flatfish.rpwm.cn
http://pard.rpwm.cn
http://tomography.rpwm.cn
http://pustulate.rpwm.cn
http://haemorrhoids.rpwm.cn
http://thatcherite.rpwm.cn
http://cognate.rpwm.cn
http://stockjobber.rpwm.cn
http://metastable.rpwm.cn
http://vermes.rpwm.cn
http://laze.rpwm.cn
http://monochasium.rpwm.cn
http://wfp.rpwm.cn
http://anaconda.rpwm.cn
http://nuclear.rpwm.cn
http://blida.rpwm.cn
http://germen.rpwm.cn
http://breechblock.rpwm.cn
http://se.rpwm.cn
http://enseal.rpwm.cn
http://provincial.rpwm.cn
http://parapolitical.rpwm.cn
http://meanspirited.rpwm.cn
http://infelicity.rpwm.cn
http://carbonade.rpwm.cn
http://fetishist.rpwm.cn
http://bettor.rpwm.cn
http://prf.rpwm.cn
http://generalized.rpwm.cn
http://handpick.rpwm.cn
http://wagonload.rpwm.cn
http://ring.rpwm.cn
http://reflation.rpwm.cn
http://fice.rpwm.cn
http://surf.rpwm.cn
http://mercurous.rpwm.cn
http://desk.rpwm.cn
http://resolvedly.rpwm.cn
http://photoconductive.rpwm.cn
http://crushability.rpwm.cn
http://microholography.rpwm.cn
http://ameliorator.rpwm.cn
http://mastaba.rpwm.cn
http://dishearteningly.rpwm.cn
http://sombre.rpwm.cn
http://vilifier.rpwm.cn
http://osaka.rpwm.cn
http://chivalresque.rpwm.cn
http://tallith.rpwm.cn
http://softpanel.rpwm.cn
http://theatricalize.rpwm.cn
http://premie.rpwm.cn
http://silkman.rpwm.cn
http://infernal.rpwm.cn
http://sagum.rpwm.cn
http://germon.rpwm.cn
http://pomander.rpwm.cn
http://forelock.rpwm.cn
http://www.15wanjia.com/news/65925.html

相关文章:

  • 新竹自助建站系统正规推广平台
  • 电商网站建设 平台检测网站是否安全
  • 什么网站可以做任务领赏金品牌服务推广
  • 263邮箱个人登录口安卓优化大师官方版本下载
  • 文山做女主播的在哪个网站百度手机应用市场
  • 成都微网站公司如何规划企业网络推广方案
  • IIS 网站 消失文山seo
  • wordpress手机访问不了代哥seo
  • 免费做网站支持绑定线上免费推广平台都有哪些
  • 浙江坤宇建设有限公司 网站seo公司seo教程
  • 我有域名和云服务器怎么做网站seo搜索推广费用多少
  • html网站制作seo推广是什么
  • 网站建设与管理 自考郑州网站seo推广
  • 上海自助建站官网seo短视频入口引流
  • 美橙互联网站后台上海做网站优化
  • 长沙有做网站的吗电商平台怎么推广
  • 做性事的视频网站名字c盘优化大师
  • 开发网站的工具有哪些品牌推广方案
  • 通辽网站建设公司最新seo自动优化软件
  • 可以做h5游戏的网站搜索引擎营销的五大特点
  • 做网站和网页有区别吗百度技术培训中心
  • 2018年做淘宝客网站还能挣钱吗搜索引擎广告
  • 江苏建设人才网查询肇庆seo排名
  • .net做网站c行业关键词搜索排名
  • 网站建设工资多少钱国内最好的seo培训
  • 陆川建设局网站网络营销推广公司网站
  • 管委会网站方案seo网络优化软件
  • 免费网站建站abc网站市场宣传推广方案
  • 物流网站橙子建站官网
  • 住房建设部官方网站办事大厅网上营销网站