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

用php做的网站必备那些文件网络营销外包

用php做的网站必备那些文件,网络营销外包,上传网站安装教程视频,做网页的心得体会📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、Shell程序思路二、Shell代码展示 一、Shell程序思路 用下图的时间轴来表示事件的发生次序…

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、Shell程序思路
  • 二、Shell代码展示


一、Shell程序思路

用下图的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。
在这里插入图片描述
然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程结束。

  1. 获取命令行
  2. 解析命令行
  3. 建立一个子进程(fork)
  4. 替换子进程(execvp)
  5. 父进程等待子进程退出(wait)
    根据这些思路,和我们前面的学的技术,就可以自己来实现一个shell了。

二、Shell代码展示

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>#define NUM 1024
#define SIZE 64
#define SEP " "
//#define Debug 1char cwd[1024];
char enval[1024]; // for test
int lastcode = 0;char *homepath()
{char *home = getenv("HOME");if(home) return home;else return (char*)".";
}const char *getUsername()
{const char *name = getenv("USER");if(name) return name;else return "none";
}
const char *getHostname()
{const char *hostname = getenv("HOSTNAME");if(hostname) return hostname;else return "none";
}
const char *getCwd()
{const char *cwd = getenv("PWD");if(cwd) return cwd;else return "none";
}
int getUserCommand(char *command, int num)
{printf("[%s@%s %s]# ", getUsername(), getHostname(), getCwd());char *r = fgets(command, num, stdin); // 最终你还是会输入\nif(r == NULL) return -1;// "abcd\n" "\n"command[strlen(command) - 1] = '\0'; // 有没有可能越界?不会return strlen(command);
}void commandSplit(char *in, char *out[])
{int argc = 0;out[argc++] = strtok(in, SEP);while( out[argc++] = strtok(NULL, SEP));#ifdef Debugfor(int i = 0; out[i]; i++){printf("%d:%s\n", i, out[i]);}
#endif
}int execute(char *argv[])
{pid_t id = fork();if(id < 0) return -1;else if(id == 0) //child{// exec commandexecvp(argv[0], argv); // cd ..exit(1);}else // father{int status = 0;pid_t rid = waitpid(id, &status, 0);if(rid > 0){lastcode = WEXITSTATUS(status);}}return 0;
}void cd(const char *path)
{chdir(path);char tmp[1024];getcwd(tmp, sizeof(tmp));sprintf(cwd, "PWD=%s", tmp); // bugputenv(cwd);
}// 什么叫做内键命令: 内建命令就是bash自己执行的,类似于自己内部的一个函数!
// 1->yes, 0->no, -1->err
int doBuildin(char *argv[])
{if(strcmp(argv[0], "cd") == 0){char *path = NULL;if(argv[1] == NULL) path=homepath();else path = argv[1];cd(path);return 1;}else if(strcmp(argv[0], "export") == 0){if(argv[1] == NULL) return 1;strcpy(enval, argv[1]);putenv(enval); // ???return 1;}else if(strcmp(argv[0], "echo") == 0){if(argv[1] == NULL){printf("\n");return 1;}if(*(argv[1]) == '$' && strlen(argv[1]) > 1){ char *val = argv[1]+1; // $PATH $?if(strcmp(val, "?") == 0){printf("%d\n", lastcode);lastcode = 0;}else{const char *enval = getenv(val);if(enval) printf("%s\n", enval);else printf("\n");}return 1;}else {printf("%s\n", argv[1]);return 1;}}else if(0){}return 0;
}int main()
{while(1){char usercommand[NUM];char *argv[SIZE];// 1. 打印提示符&&获取用户命令字符串获取成功int n = getUserCommand(usercommand, sizeof(usercommand));if(n <= 0) continue;// 2. 分割字符串// "ls -a -l" -> "ls" "-a" "-l"commandSplit(usercommand, argv);// 3. check build-in commandn = doBuildin(argv);if(n) continue;// 4. 执行对应的命令execute(argv);}
}

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

相关文章:

  • 网站如何添加认证联盟电商平台模板
  • 西安网站开发的空间wordpress需要登录才可以看到内容
  • 做设计一般用的素材网站是什么意思jquery网站开发
  • 188旅游网站源码下载做物流的都有哪些网站
  • 合肥市城乡建设局网站打不开成都交易网站建设
  • 网站别名男人网址你懂我意思正能量
  • 百度怎么注册自己的店铺域名对网站seo的影响吗
  • 宿迁建设网站专业网站设计公司行业
  • 二手房网站开发文档视频网站如何做
  • 周口网站建设多少钱济南商标注册
  • 诸城 建设外贸网站哈尔滨网站制作方案
  • 中山网站搜索排名企业网站制作公司24小时接单
  • 关于加强网站建设和管理的通知建一个团购网站
  • 南阳阿里巴巴网站推广梓潼销售网站建设哪家专业
  • 上海网站建设 分类广告企业年金
  • 做一个购物网站多少钱凡科建站怎么收费
  • 普通的宣传网站用什么做线上宣传方式有哪些
  • 百度网站名片自动化项目外包平台
  • 关于建设网站的情况说明书橙云网站建设
  • 学设计哪个网站好大连建设主管部门网站
  • 网站公司做的网站被攻击新公司网站建设费用怎么入账
  • 教做糕点的视频网站专业的网站建设企业
  • 迅睿cms建站教程php网站模板使用
  • 国外黄冈网站推广软件有哪些网站中加入百度地图
  • 金山区网站制作天水网站建设博客
  • 现在哪些网站做外贸的好做wordpress图片位置
  • 个人网站如何在工信部备案徐州市铜山新区建设局网站
  • 免费制作网站平台皖icp备 网站建设
  • 体验比较好的网站网上可以注销营业执照吗
  • 如何更改网站备案号黄州区精神文明建设网站