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

山西企业建站系统平台高端网站建设南宁

山西企业建站系统平台,高端网站建设南宁,出口手工艺品网站建设方案,创新型的赣州网站建设文章目录 makefilemybash.c 代码逻辑框架(重要的是,边写边查!) 命令行提示符,fflush 刷新显示获取 输入的 有效字符串,定义一个字符数组,用 fgets 从键盘上获取(注意处理命令行输入…

文章目录

  • makefile
  • mybash.c


代码逻辑框架(重要的是,边写边查!)

  1. 命令行提示符,fflush 刷新显示
  2. 获取 输入的 有效字符串,定义一个字符数组,用 fgets 从键盘上获取(注意处理命令行输入时的回车)
  3. 字符串切割,C语言函数 strtok,子串保存到指针数组
  4. 创建子进程,执行代码

细节:

  1. ls 的配色方案

  2. 内建命令的处理

  • cd .. cd / 这样的命令,需要让 bash 自己执行的,叫做 内建命令 / 内置命令
  • export,一般用户自定义的环境变量,在 bash 中要用户自己来进行维护,不要用一个经常被覆盖的缓冲区来保存环境变量!!!
  • env,我们一般需要 env 时,都要查看的是自己进程的环境列表,这里就是查看 bash 的环境列表。
  • echo,利用指针查找和输出
  • echo $?

其实我们之前提到过的几乎所有环境变量命令,都是 内建命令。


makefile


mybash:mybash.cgcc -o $@ $^
.PHONY:clean
clean:rm -f mybash

mybash.c


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>#define MAX 1024
#define ARGC 64
#define SEP " "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((argv[i++] = strtok(NULL, SEP)));//int i = 1;//while(1)//{//    argv[i] = strtok(NULL, SEP);//    if(argv[i] == NULL) break;//    i++;//}return 0;
}void debugPrint(char *argv[])
{for(int i = 0; argv[i]; i++){printf("%d: %s\n", i, argv[i]);}
}void showEnv()
{extern char **environ;for(int i = 0; environ[i]; i++) printf("%d:%s\n", i, environ[i]);
}int main()
{//当我们在进行 env 查看的时候,我们想查的是谁的环境变量列表?父进程 bash 的环境变量列表int last_exit = 0;char myenv[32][256];int env_index = 0;while(1){char commandstr[MAX] = {0};		// 命令行输入的,完整字符串char *argv[ARGC] = {NULL};		// 命令行输入的,子串// 1printf("[Stella@hostname currpath]# ");fflush(stdout);		// 把数据从缓冲区刷新显示出来// 2char *s = fgets(commandstr, sizeof(commandstr), stdin);assert(s);(void)s; // 保证在release方式发布的时候,因为去掉assert了,所以s就没有被使用,而带来的编译告警, 什么都没做,但是充当一次使用// abcd\n\0commandstr[strlen(commandstr)-1] = '\0';// 3// "ls -a -l" -> "ls" "-a" "-l"int n = split(commandstr, argv);if(n != 0) continue;//debugPrint(argv);// (1)【添加 ls 命令的配色方案】if(strcmp(argv[0], "ls") == 0)	{int pos = 0;while(argv[pos]) pos++;argv[pos++] = (char*)"--color=auto";加配色方案argv[pos] = NULL; // 比较安全的做法}// (2)【内建命令】// cd .. / cd /: 让bash自己执行的命令,我们称之为 内建命令/内置命令if(strcmp(argv[0], "cd") == 0){//说到底,cd 命令,重要的表现就如同 bash 自己调用了对应的函数if(argv[1] != NULL) chdir(argv[1]);	// chdir是一个系统调用函数,可以改变当前工作路径continue;}else if(strcmp(argv[0], "export") == 0) // 其实我们之前学习到的所有的(几乎)环境变量命令,都是内建命令{if(argv[1] != NULL){strcpy(myenv[env_index], argv[1]);putenv(myenv[env_index++]);}continue;}else if(strcmp(argv[0], "env") == 0){showEnv();continue;}else if(strcmp(argv[0], "echo") == 0){// echo $PATHconst char *target_env = NULL;if(argv[1][0] == '$') {if(argv[1][1] == '?'){printf("%d\n", last_exit);continue;}else target_env = getenv(argv[1]+1); // "abcdefgif(target_env != NULL) printf("%s=%s\n", argv[1]+1, target_env);}continue;}// 4// version 1pid_t id = fork();assert(id >= 0);(void)id;if(id == 0){if(redir_type != REDIR_NONE){//1. 存在文件的//2. redir_type获取到//3. dup2;}//childexecvp(argv[0], argv);exit(1);}int status = 0;pid_t ret = waitpid(id, &status, 0);if(ret > 0){last_exit = WEXITSTATUS(status);}//printf("%s\n", commandstr);}
}
http://www.hrbkazy.com/news/5240.html

相关文章:

  • 杭州网站建设制作公司广州网络运营课程培训班
  • 咸阳企业做网站seo网站推广批发
  • 从事网站开发办理什么个体百度保障客服电话
  • 个人网站空间怎么做大数据统计网站
  • 深圳市住建局官网入口seo推广沧州公司电话
  • 做优化网站建设百度关键字搜索排名
  • WordPress用wdcp面板中病毒石家庄seo网站管理
  • 小说网站的图片长图怎么做的外贸订单一般在哪个平台接
  • 怎么制作网站源码谷歌手机版下载安装
  • wordpress文档编辑器网站seo链接购买
  • 优秀的移动端网站长春网站制作推广
  • 科技公司网站设seo优化专员编辑
  • 做公司网站别人能看到吗6班级优化大师下载
  • wordpress 电影下载站武安百度seo
  • 商品网站做推广广东网络推广运营
  • 做破解的网站百度游戏中心官网
  • 专门做护肤品网站市场营销
  • 建站用wordpress好吗高端网站建设公司
  • 网站建设前期团队建设网络营销计划包括哪七个步骤
  • 智能网站建设公司排名百度seo推广是什么
  • 开个公司做购物网站北京网站优化seo
  • 网络科技有限公司网站网站设计制作公司
  • 网站服务器端口号是什么百度推广管理
  • 广州做网站的网络公司互联网100个创业项目
  • 菜鸟教程网站html网页制作
  • 国外品牌网站自己怎么免费做网站
  • 手机网站锁定竖屏看代码网络推广员压力大吗
  • 网站伪静态作用深圳优化网站
  • 衡水建个网站多少钱推广关键词排名
  • 银川网站制作引流获客app下载