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

wordpress 做手机站您的网站对百度设置了ip封禁

wordpress 做手机站,您的网站对百度设置了ip封禁,做网站用广告赚钱过时了,手机软件开发商[Linux]编写一个极简版的shell-version1 文章目录 [Linux]编写一个极简版的shell-version1命令行提示符打印接收命令行参数将命令行参数进行解释执行用户命令完整代码 本文能够帮助Linux系统学习者通过代码的角度更好地理解命令行解释器的实现原理。 命令行提示符打印 Linux操…[Linux]编写一个极简版的shell-version1 文章目录 [Linux]编写一个极简版的shell-version1命令行提示符打印接收命令行参数将命令行参数进行解释执行用户命令完整代码 本文能够帮助Linux系统学习者通过代码的角度更好地理解命令行解释器的实现原理。 命令行提示符打印 Linux操作系统运行时就需要shell进程进行命令行解释然后让系统完成对应的命令因此打印命令行提示符时要采用死循环打印的方式具体的代码逻辑如下 int main() {while(1){printf([%s%s %s]$$ , getenv(USER), getenv(HOSTNAME), getpath(getenv(PWD)));fflush(stdout);//sleep(200); -- 当前阶段用于演示效果}为了和系统的shell进行区分因此打印两个$符号命令行提示符打印的信息都是通过环境变量得来的因此只需要调用系统接口获取相应的环境变量即可 USER环境变量 – 当前使用的用户名HOSTNAME环境变量 – 当前的主机名称PWD环境变量 – 当前用户所处绝对路径 由于显示器采用的是行缓冲的策略因此需要手动刷新缓冲区才能让命令行提示符显式到屏幕上 由于环境变量PWD是当前用户所处的绝对路径因此需要编写一个函数getpath来获取当前所处的目录名称具体的代码逻辑如下 const char* getpath(char* path) {int length strlen(path);if(length 1) return /; //根目录int i length - 1;while((path[i] ! /)) i--;return pathi1; }如果绝对路径的字符串长度为1表示所处为根目录返回/其余路径下都要将绝对路径里当前目录前的所有路径分割掉包括路径分隔符譬如当前记录绝对路径环境变量为PWD/home/qxm/linux-warehouse/review/mybash/version1getpath的返回值为verson1字符串的首地址 效果演示 接收命令行参数 接受命令行参数只需要设置一个字符串数组将用户的输入接收即可具体的代码逻辑如下 #define MAX 1024int main() {while(1){char commandstr[MAX] { 0 }; //接收命令行参数printf([%s%s %s]$$ , getenv(USER), getenv(HOSTNAME), getpath(getenv(PWD)));fflush(stdout);char* s fgets(commandstr, sizeof(commandstr), stdin);commandstr[strlen(commandstr) - 1] \0; //去除输入时末尾的\n//printf(%s\n, commandstr); -- 当前阶段用于演示效果}return 0; }由于用户输入时会按下回车也就是会在输入时在末尾出现一个\n,命令行参数使用时需要将其去除掉譬如用户输入ls -a -l\n,命令行参数只需要ls -a -l 效果演示 将命令行参数进行解释 获取用户输入的命令行参数后需要将命令行参数根据输入的空格将字符串分割为多个字串譬如用户输入ls -a -l,要分割为ls, -a, -l,具体的代码逻辑如下 #define MAX 1024 #define ARGC 64 #define SEP int split(char commandstr[], char* argv[])//命令行参数解释 {argv[0] strtok(commandstr, SEP);if (argv[0] NULL) return -1; //字符串为空int i 1;while(1){argv[i] strtok(NULL, SEP);if(argv[i] NULL) break;i;}return 0; }void debugPrint(char* argv[])//--当前阶段用于演示效果 {int i 0;for (i 0; argv[i] ! NULL; i){printf(%s\n, argv[i]);} }int main() {while(1){char commandstr[MAX] { 0 }; //接收命令行参数char* argv[ARGC] { NULL }; //存储命令行参数printf([%s%s %s]$$ , getenv(USER), getenv(HOSTNAME), getpath(getenv(PWD)));fflush(stdout);char* s fgets(commandstr, sizeof(commandstr), stdin);commandstr[strlen(commandstr) - 1] \0; //去除输入时末尾的\nint n split(commandstr, argv);if(n ! 0) continue; //用户输入空串//debugPrint(argv); -- 当前阶段用于演示效果}return 0; }调用C语言库函数strtok获取分割空格字符后字串的首地址并且将空格置为\0并将字串的首地址存储起来 效果演示 执行用户命令 创建子进程进程进程程序替换让子进程完成用户所输入的命令具体的代码逻辑如下 #define MAX 1024 #define ARGC 64 #define SEP const char* getpath(char* path) {int length strlen(path);if(length 1) return /; //根目录int i length - 1;while((path[i] ! /)) i--;return pathi1; }int split(char commandstr[], char* argv[]) {argv[0] strtok(commandstr, SEP);if (argv[0] NULL) return -1; //字符串为空int i 1;while(1){argv[i] strtok(NULL, SEP);if(argv[i] NULL) break;i;}return 0; }int main() {while(1){char commandstr[MAX] { 0 }; //接收命令行参数char* argv[ARGC] { NULL }; //存储命令行参数printf([%s%s %s]$$ , getenv(USER), getenv(HOSTNAME), getpath(getenv(PWD)));fflush(stdout);char* s fgets(commandstr, sizeof(commandstr), stdin);commandstr[strlen(commandstr) - 1] \0; //去除输入时末尾的\nint n split(commandstr, argv);if(n ! 0) continue; //用户输入空串pid_t id fork();//创建子进程完成命令执行if (id 0){//子进程execvp(argv[0], argv); //进程程序替换exit(0);}int status 0;waitpid(id, status, 0);//回收子进程}return 0; }由于实现的shell用于执行系统命令并且获取了记录命令行参数的数组因此采用execvp进程程序替换 效果演示 完整代码 #include stdio.h #include stdlib.h #include string.h #include assert.h #include unistd.h #include sys/types.h #include sys/wait.h#define MAX 1024 #define ARGC 64 #define SEP const char* getpath(char* path) {int length strlen(path);if(length 1) return /; //根目录int i length - 1;while((path[i] ! /)) i--;return pathi1; }int split(char commandstr[], char* argv[]) {assert(commandstr);assert(argv);argv[0] strtok(commandstr, SEP);if (argv[0] NULL) return -1; //字符串为空int i 1;while(1){argv[i] strtok(NULL, SEP);if(argv[i] NULL) break;i;}return 0; }int main() {while(1){char commandstr[MAX] { 0 }; //接收命令行参数char* argv[ARGC] { NULL }; //存储命令行参数printf([%s%s %s]$$ , getenv(USER), getenv(HOSTNAME), getpath(getenv(PWD)));fflush(stdout);char* s fgets(commandstr, sizeof(commandstr), stdin);assert(s); //对fgets函数的结果断言(void)s;//保证在release方式发布的时候因为去掉assert了所以s就没有被使用而带来的编译告警, 什么都没做但是充当一次使用commandstr[strlen(commandstr) - 1] \0; //去除输入时末尾的\nint n split(commandstr, argv);if(n ! 0) continue; //用户输入空串pid_t id fork();assert(id 0);(void)id;if (id 0){//子进程execvp(argv[0], argv); exit(0);} int status 0;waitpid(id, status, 0);}return 0; } );if(n ! 0) continue; //用户输入空串pid_t id fork();assert(id 0);(void)id;if (id 0){//子进程execvp(argv[0], argv); exit(0);} int status 0;waitpid(id, status, 0);}return 0; }说明 该版本shell只能够执行系统命令并且不能够支持所有系统命令比如cd命令。
http://www.yutouwan.com/news/197741/

相关文章:

  • 河南天丰建设工程有限公司网站paypal外贸门户网站
  • 做任务可以给钱的网站网站开发规划书
  • 学做网站 为了熊掌号网站建设合同 费用
  • 东道 网站建设小广告发布
  • 谁有网站推荐一下好在线网站建设诚信经营
  • 网站特效网大连建设工程信息网华宇凤凰城东侧市政管网配套工程
  • 承德市网站开发大连企业建设网站
  • 网站页面效果图怎么做唐山做企业网站的公司
  • 网站开发前台mip网站怎么做匹配
  • 建设网站沙井东营网站设计公司
  • 网站从服务器上下载文件怎么做百度联盟网站
  • 抖音代运营服务流程南宁7天优化网络科技公司
  • 网站开发项目挣钱吗主体负责人和网站负责人不能是同一个人
  • 网站全屏代码泰安市住房和城乡建设厅网站
  • 怎样自己做网站卖钱重庆招聘一般上什么网站
  • 求推荐好的网站建设平台怎么制作网页
  • 深圳哪里有做网站的网站开发实验结论
  • 网站建设费用明细报价把里面的dede和plugins这2个文件夹覆盖到你的网站根目录
  • 哈尔滨网站小程序制作湘潭专业seo优化推荐
  • 深圳网站建设网站运营最吸引人的汽车广告语
  • 双轨网站开发简述网站的建设流程
  • 网站加速服务哈尔滨模板建站源码
  • 分析苏宁易购的网站建设未来网站建设想法
  • 哈尔滨网站外包wordpress ps.w.org
  • 水墨背景风格企业网站模板桂林漓江景区介绍
  • 网站卡的原因网站地址做图标
  • 网站响应式和非响应式网站做支付接口吗
  • 网站开发规划方案慧聪网郭凡生现状
  • 网站开发前途查询网站所有关键词排名
  • 云南高端网站制作价格上海市建设工程安全生产协会网站