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

徐州网站外贸没有公司 如何做企业网站

徐州网站,外贸没有公司 如何做企业网站,网站的建设公司简介,网站建设的相关问题📘北尘_:个人主页 🌎个人专栏:《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/470894/

相关文章:

  • 查询域名后缀网站网站为什么做静态
  • 网站设计制作合同范本为新公司取名免费
  • 网站登录qqwordpress站下所有标签
  • 会用wordpress建站网站建设注意哪些内容
  • wordpress登录非常慢关键词营销优化
  • 深圳营销网站建设服务上海外企公司有哪些
  • 成都网站建设 推广行网站首页线框图怎么做
  • 衡水网站制作设计网站百度
  • 比较好的平面设计网站国外界面设计网站
  • 怎么制作网站模版网站开发的工资一般是多少
  • 福州的网站建设网站进度条特效
  • 北京南站到北京西站注塑模具东莞网站建设
  • 高质量视频素材网站网站缓存设置怎么做
  • 做网站怎样盈利宁波网站排名方法
  • 最新网站架构自己做的网站怎么在局域网中访问
  • 沈阳网站如何制作wordpress上传html
  • 做网站建设需要什么工具政网站首页怎么做试
  • 网站建设找哪家公司好做网站的框架有
  • 西安全网优化 西安网站推广自己怎么做小程序接单
  • 深圳福田做网站公司制作公司网站价格
  • 网站后台管理系统制作wordpress文章摘录
  • 网站怎么做优化步骤电子商务网站建设与维护 答案
  • 网站推广技巧厦门网页设计制作
  • 报送举报网站建设情况做局域网网站教程
  • 精选网站建立 推广 优化大同做网站
  • 多用户商城网站方案河南南阳最新消息今天
  • 智慧团建网站pc端建设集团招工信息网站
  • 北京个人制作网站网站后台怎么修改
  • 郑州定制网站php网站开发技术
  • 合肥 网站建设网络管理系统中故障管理的目标是