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

网站编排页面莱芜网站优化排名

网站编排页面,莱芜网站优化排名,深圳商城网站制作公司,wordpress编辑器代码🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

        感觉,有很久都没有写博客,主要是最近学的内容难以理解,所以时间不太充足,就没有写博客的时间,今天为什么要这一篇文章呢?主要是我感觉实现一个自己的命令行小程序还是比较有趣的。

         我们平时都是在linux的shell命令行上直接输入指令,有没有想过自己也可以去实现一个,自己的bash呢?

        那就让我们一起来探索属于自己自己的bash 

这次我就直接给出源代码,没有把其中的方法,单独拿出来分析,我主要觉得那样有点显得代码冗余,其实也不用担心看不懂,我在源码中加了很多注释,大家也不怕看不懂。其实这样做还有一个好处,就是我们可以直接复制到我们的linux文件中,直接运行。 

源码 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>#define SIZE 100 //用于定义命令的最大长度
#define NUM 1024 //用于定义命令参数的最多个数
#define SEP " " //分割字符的时候,默认以空格作为分隔符char _cwd[1024]; //用于存储PWD的环境变量
char env_val[1024]; //用于自定义一个环境变量,这里有一个缺点,就是env_val是一个数组,只能添加一个自定义的环境变量,下次添加时,就会覆盖上次添加的环境变量
int lastcode=0; //用于定义最近一个进程的退出码//获取用户名字
const char* getUsername(void)
{const char* name=getenv("HOME");//getenv如果没有获取到环境变量会返回空值if(name)return name;else return "none";
}//获取主机名字
const char* getHostname(void)
{const char* host=getenv("HOSTNAME");if(host)return host;else return "none";
}//获取工作目录
const char* getCwd(void)
{const char* cwd=getenv("PWD");if(cwd)return cwd;else return "none";
}//获取用户输入的命令
int getUserCommand(char* usercommand,int num)
{char* r=fgets(usercommand,num,stdin);if(r==NULL)return -1;usercommand[strlen(usercommand)-1]='\0';return strlen(usercommand);
}//分割字符串
int commandSplist(char* usercommand,char* argv[])
{int argc=0;argv[argc++]=strtok(usercommand,SEP);while(argv[argc++]=strtok(NULL,SEP));return 0;
}//执行命令
int execute(char* argv[])
{pid_t id=fork();if(id<0)return -1;else if(id==0){//childexecvp(argv[0],argv);//程序替换exit(1);//程序替换失败返回1}else{//fartherint status=0;//保存子进程退出时的退出码和退出信号pid_t rid=waitpid(id,&status,0);//阻塞等待if(rid>0)lastcode=WEXITSTATUS(status);//获取子进程退出时的退出码}return 0;
}//改变工作路径
void cd(const char* path)
{chdir(path);//改变工作路径//虽然路径改了,但是环境变量中PWD存储的工作路径并没有改变char temp[1024];getcwd(temp, sizeof(temp));sprintf(_cwd, "PWD=%s",temp);putenv(_cwd);//为什么这里putenv[temp]?因为temp是一个临时变量,putenv只是将temp这个指针放到环境变量体系中,当函数调用结束,指针就销毁了,这个工作路径的环境变量就访问不了了}//什么叫做内建命令:内建命令就是bash自己执行的,类似于自己内部的一个函数!
//1.是内建命令 0不是内建命令
//执行的是内建命令
int doBuildin(char* argv[])
{if(strcmp(argv[0],"cd")==0)//cd命令{char* path=NULL;if(argv[1]==NULL)path=".";elsepath=argv[1];cd(path);return 1;}else if(strcmp(argv[0],"export")==0)//export命令{if(argv[1]==NULL)return 1;strcpy(env_val,argv[1]);putenv(env_val);return 1;}else if(strcmp(argv[0],"echo")==0)//echo命令{char val_0=*argv[1];char* val=argv[1]+1;//argv[1]+1:例如$? 则argv[1]是$ argv[1]+1是?if(val_0=='$'&&strcmp(val,"?")==0)//我们定义?保存着最近一个进程的退出码{printf("%d\n",lastcode);lastcode=0;}else if(val_0=='$'){printf("%s\n",getenv(val));//打印环境}else//echo打印字符{printf("%s\n",argv[1]);}return 1;}else{//可以添加其他的内建命令}return 0;
}int main()
{while(1){char usercommand[SIZE];//存储用户输入的命令char* argv[NUM];//存储命令行参数//打印命令行提示符printf("[%s@%s %s]$",getUsername(),getHostname(),getCwd());//输入命令int n=getUserCommand(usercommand, sizeof(usercommand));if(n<=0)continue;//分割字符commandSplist(usercommand, argv);//判断是否是内建命令n=doBuildin(argv);if(n==1)continue;//执行命令execute(argv);}return 0;
}

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 

http://www.yayakq.cn/news/702711/

相关文章:

  • 让人家做网站需要问什么问题软件技术主要学什么就业前景
  • 有的网站显示正在建设中wordpress微信机器人破解版
  • 河北建设厅网站修改密码在哪wordpress 返回顶部代码
  • 重庆做网站公司贴吧建设大型的企业网站费用
  • 怎样在凡科网站做网页微信小程序开发费用
  • 深圳的设计网站太原模板建站软件
  • 哪里长沙网站开发百度导航地图下载
  • 西数网站管理助手 伪静态商城类网站建设步骤
  • 自己开一个网站怎么赚钱网络公司网站建设彩铃样本
  • 网站优化 英文wordpress学做网站
  • 手机网站支持微信支付类似云盘 网站开发
  • 网站建设商城网站app开发一个多少钱
  • 哪个网站ppt模板免费下载怎么建立和设计公司网站
  • 想让网站的文章都被收录怎么做链接交换公司
  • centos7做网站响应式网站制作价格
  • 网站符号wordpress数据表优化
  • 全国好的深圳网站设计wordpress searchform
  • 海珠高端网站建设松原做网站
  • 最全的网站大全高端网站定制开发深圳
  • 东莞网站排名优化玉树市公司网站建设
  • 低价网站空间融资平台公司
  • 网站建设开户行查询网站要怎么做关键词
  • 长沙口碑好网站建设公司wordpress熊掌号主题
  • 网站建设的 几点wordpress 发邮件 php
  • 深圳模板网站建设案例宁波广告公司
  • 重庆黄埔seo整站优化海南公司注册网站
  • 网站开发费用投入情况什么情况下网站需要备案
  • 做网站的一般尺寸杭州做网站小程序公司
  • 汽车服务站建站流程网站后台里有网页代码没
  • 江西省寻乌县建设局网站wordpress搬家后变慢