游戏怎么开发制作/百度seo怎么查排名

游戏怎么开发制作,百度seo怎么查排名,合肥网站建设网站制作,企业专业网站建设目录 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://www.mzph.cn/pingmian/70391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ETL工具: Kettle入门(示例从oracle到oracle的数据导入)

kettle介绍 ETL工具,用于对数据的抽取&#xff08;Extract), 转换(Transform),加载 (Load&#xff09; Kettle 是一种ETL工具, 现称为 Pentaho Data Integration (PDI) 特点:纯JAVA语言编写 官方学习文档 网站: https://docs.hitachivantara.com/r/en-us/pentaho-data-int…

SQLMesh 系列教程7- 详解 seed 模型

SQLMesh 是一个强大的数据建模和管道管理工具&#xff0c;允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型&#xff0c;主要用于初始化和填充基础数据集。它通常包含静态数据&#xff0c;如参考数据和配置数据&#xff0c;旨在为后续的…

基于大数据的国内高校排名可视化分析及推荐系统

【大数据】基于大数据的国内高校排名可视化分析及推荐系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 高校排名一直是教育研究领域的重要课题&#xff0c;具有丰富的理论价值。通过分析和可…

【前端小点】vue3项目内根据主题读取不同文件夹下的图片资源(图片文件)

项目要求实现一键换肤的功能&#xff0c;不仅仅是主题颜色上的替换&#xff0c;还有图片素材的替换&#xff0c;主题颜色替换的方案大同小异&#xff0c;下面仅对图片素材的一件替换进行方法描述。 主要思路 使用本地仓库对当前主题进行存储&#xff0c;系统根据主题去加载不同…

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…

Day6 25/2/19 WED

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p4&v…

大模型面经:SFT和RL如何影响模型的泛化或记忆能力?

监督微调 (SFT) 和强化学习 (RL)都是目前大模型的基础模型后训练技术&#xff0c;像DeepSeek-R1、kimi等的训练方法都将两种技术应用到了极致。 如何去设计训练步骤&#xff08;先SFT再RL&#xff0c;还是直接RL&#xff09;都需要对SFT和RL的能力有较深刻的了解。 本篇就以面…

Three.js 快速入门教程【一】开启你的 3D Web 开发之旅

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…

Navicat Premium17 连接Oracle出现 “未加载 Oracle库

报错信息如下 解决方案&#xff1a; 安装 Navicat for Oracle 12 for Mac 若已经打开任何来源&#xff0c;但运行还是遇到已损坏按照如下操作即可解决&#xff01; 终端中输入 xattr -cr cr 后面输入一个空格&#xff01;不要回车&#xff01;如下图 把 Navicat for Oracle…

Transformer解析——(一)概述

本系列已完结&#xff0c;全部文章地址为&#xff1a; Transformer解析——&#xff08;一&#xff09;概述-CSDN博客 Transformer解析——&#xff08;二&#xff09;Attention注意力机制-CSDN博客 Transformer解析——&#xff08;三&#xff09;Encoder-CSDN博客 Transforme…

Canvas进阶-2、可视化应用

前言 Canvas 可以用来创建各种 数据可视化 图表和图形&#xff0c;通过绘制不同的形状、线条和颜色来展示数据的特征和趋势。 数据可视化的基本原理是将数据转化为可视化的图形元素&#xff0c;以便人们更容易理解和分析数据。这涉及到以下几个方面&#xff1a; 数据映射&…

小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统,不需要降级 v1.0.91 (2025)

小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统&#xff0c;不需要降级 v1.0.91 &#xff08;2025&#xff09; 本文内容需要你有一定的 Linux 操作基础&#xff0c;最好是程序员那种&#xff0c;英文水平足够用才行。一般人不需要使用这么复杂的路由器操作系统&#xff0c…

python查错误TypeError: bad operand type for unary -: ‘str‘

TypeError: bad operand type for unary -: str​​​ 这个错误表明尝试对一个字符串类型的数据使用一元减号运算符&#xff08;​​-​​&#xff09;&#xff0c;而在 Python 中&#xff0c;一元减号运算符只能用于数值类型&#xff08;如整数、浮点数等&#xff09;&#xf…

搭建Kubernetes (K8s) 集群----Centos系统

前期准备 准备3台Linux虚拟机&#xff08;CentOS系统&#xff09;&#xff0c;参考 https://carry.blog.csdn.net/article/details/144578009https://carry.blog.csdn.net/article/details/144578009搭建Docker环境&#xff0c;参考 https://carry.blog.csdn.net/article/de…

wps中的js开发

严格区分大小写 /*** learn_js Macro*/ function test() {Range(D7).Value2Selection.Value2; // Selection.formula "100" }function Workbook_SheetSelectionChange(Sh, Target) {if(Sh.Name Sheet1) {test();}}function test2() {// 把I4单元格及其周边有数的单…

第3章 3.2 配置系统 .NET Core配置系统

3.2.1 配置系统的基本使用 .NET Core中的配置系统支持非常丰富的配置源&#xff0c;包括文件&#xff08;JSON、XML、INI等&#xff09;、注册表、环境变量、命令行、Azure Key Vault等&#xff0c;配置系统还支持自定义配置源。 用配置系统开发包Microsoft.Extensions.Confi…

第六届计算机信息和大数据应用国际学术会议(CIBDA 2025)

重要信息 大会官网&#xff1a;www.ic-cibda.org&#xff08;了解会议&#xff0c;投稿等&#xff09; 大会时间&#xff1a;2025年3月14-16日 大会地点&#xff1a;中国-武汉 简介 第六届计算机信息和大数据应用&#xff08;CIBDA 2025&#xff09;将于2025年3月14-16日在中国…

Mac M3/M4 本地部署Deepseek并集成vscode

Mac 部署 使用傻瓜集成平台ollama&#xff0c;ollama平台依赖于docker&#xff0c;Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用&#xff0c;导致docker无法启动&#xff0c;需要使用docker的替代品podman&#xff0c; 它完全兼容docker brew install p…

最优化方法-牛顿法

牛顿法 泰勒级数 泰勒级数展开 $$ \begin{aligned} f(x)&\lim\limits_{n\rightarrow \infin}\sum\limits_{i1}n\frac{1}{n!}f{(n)}(x_0)(x-x_0)^n\ &f(x_0)f’(x_0)(x-x_0)\frac{f’(x_0)}{2!}(x-x_0)2\cdots\frac{1}{n!}fn(x_0)(x-x_0)^n\ &\quad~ O\left[(x-x_…

【系统架构】分布式事务模型详解

1. 分布式基础理论 1.1 CAP理论 CAP 理论可以表述为&#xff0c;一个分布式系统最多只能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;这三项中的两项。 一致性是…