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

品牌网站制作项目立项查询平台

品牌网站制作,项目立项查询平台,路由器做内部网站服务器,有人用wordpress默认主题文章目录 minishell支持重定向minishell完整代码 minishell支持重定向 支持重定向的核心逻辑#xff1a; 1.分析字符串是否含有重定向的符号#xff0c;并且提取文件名。 #define INPUT_REDIR 0 //输入重定向 #define OUTPUT_REDIR 1 //输出重定向 #define APPEND_REDIR… 文章目录 minishell支持重定向minishell完整代码 minishell支持重定向 支持重定向的核心逻辑 1.分析字符串是否含有重定向的符号并且提取文件名。 #define INPUT_REDIR 0 //输入重定向 #define OUTPUT_REDIR 1 //输出重定向 #define APPEND_REDIR 2 //追加重定向 #define NONE_REDIR 4 //没有重定向 int redir_status NONE_REDIR;//状态char* CheckRedir(char* start) { assert(start); char* end start strlen(start)-1; //end执行指令的最后一个内容 while(start end) { if(*end ) { if(*(end -1) ) { //ls -a -llog.txt\0 追加redir_status APPEND_REDIR; *(end-1) \0; end; break; } //ls -a -llog.txt\0 输出redir_status OUTPUT_REDIR; *(end) \0; end; break;}else if(*end ){//ls -a -llog.txt\0 输入redir_status INPUT_REDIR;*end \0;end;break;}else {end--;}}//循环结束如果end还是大于start说明存在重定向if(end start){return end;}//走到这说明不存在重定向return NULL; }例子 end开始向前找重定向符 然后end 这样end指向的就是文件名start执行的就是指令内容。 然后就开始在子进程进行重定向了。 //printf(parent process create subprocess success\n); if(sep) { int fd -1; switch(redir_status) { case INPUT_REDIR: fd open(sep,O_RDONLY); dup2(fd,0); break; case OUTPUT_REDIR: fd open(sep,O_WRONLY | O_CREAT | O_TRUNC,0666); dup2(fd,1); break; case APPEND_REDIR: fd open(sep,O_WRONLY | O_CREAT | O_APPEND,0666); dup2(fd,1); break; default: assert(NULL); break; } }minishell完整代码 #include stdio.h #include string.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include sys/wait.h #include stdlib.h #include assert.h#define NUM 1024 #define SIZE 32 #define SEP #define INPUT_REDIR 0 #define OUTPUT_REDIR 1 #define APPEND_REDIR 2 #define NONE_REDIR 4 int redir_status NONE_REDIR;char cmd_line[NUM];//array for saving command line char* g_argv[SIZE];//the array are used to store paresed commands char g_myval[64];char* CheckRedir(char* start) {assert(start);char* end start strlen(start)-1;while(start end) {if(*end ){if(*(end -1) ){//ls -a -llog.txt\0redir_status APPEND_REDIR;*(end-1) \0;end;break;}//ls -a -llog.txt\0 redir_status OUTPUT_REDIR;*(end) \0;end;break;}else if(*end ){//ls -a -llog.txt\0redir_status INPUT_REDIR;*end \0;end;break;}else {end--;}}if(end start){return end;}return NULL; } int main() {//1.命令行解释器一定是一个常驻内存的进程不退出while(1) {//2.显示提示行printf([xiaolinlocalhost myshell]#);fflush(stdout);memset(cmd_line,\0,sizeof cmd_line);//3.获取用户输入的字符串if(fgets(cmd_line,sizeof cmd_line,stdin) NULL){//if cmd_line empty contiue get commandcontinue;}cmd_line[strlen(cmd_line)-1] \0;char* sep CheckRedir(cmd_line);//4.对字符串进行解析int index 0;g_argv[index] strtok(cmd_line,SEP);//Firest parse cmd_line while(1)//Second parse cmd_line dont pass cmdline;{g_argv[index] strtok(NULL,SEP);if(g_argv[index] NULL) break;index;}if(strcmp(g_argv[0],ls) 0){g_argv[index] (char*)--colorauto;g_argv[index] NULL;} if(strcmp(g_argv[0],ll) 0){ g_argv[0] (char*)ls;g_argv[1] (char*)-l;g_argv[2] (char*)--colorauto;g_argv[3] NULL;}// processing of built-in commandsif(strcmp(g_argv[0],cd) 0){//chdir() changes the current working directory of the calling process to the directory specified in path.if(g_argv[1] ! NULL) chdir(g_argv[1]);continue;}if(strcmp(g_argv[0],export) 0 g_argv[1] ! NULL){//There is a very hidden issue here//Ptuenv passes an environment variable as a pointer to it //And g_ Argv [1] will be cleared on the next command_line read//In this way, the environment variable pointer points to a place with empty data, and this pointer is also a null pointer//int res putenv(g_argv[1]);//if(res 0) printf(export success\n);//else printf(export fail\n);//solve the problemstrcpy(g_myval,g_argv[1]);int res putenv(g_myval);if(res 0) printf(export success\n);else printf(expor fail\n);continue;}/*//test if the g_argv array id correct for(index 0; g_argv[index]; index){printf(g_argv[%d]:%s\n,index,g_argv[index]);}*///5.create subprocess execute commandpid_t id fork();if(id 0){//subprocess//printf(parent process create subprocess success\n);if(sep){int fd -1;switch(redir_status){case INPUT_REDIR:fd open(sep,O_RDONLY);dup2(fd,0);break;case OUTPUT_REDIR:fd open(sep,O_WRONLY | O_CREAT | O_TRUNC,0666);dup2(fd,1);break;case APPEND_REDIR:fd open(sep,O_WRONLY | O_CREAT | O_APPEND,0666);dup2(fd,1);break;default:assert(NULL); break;}}printf(subprocess starts running\n);execvp(g_argv[0],g_argv);printf(subprocess replace fail\n);}else if(id 0){//parent processint status 0;pid_t res waitpid(-1,status,0);//blocking waitingif(res -1){printf(parent process wait subprocess fail\n);}else if(res 0){printf(parent process wait subprocess success exit_code:%d\n,WEXITSTATUS(status));}else {printf(unkown error\n);}}else{//failprintf(parent procrss create subprocess fail\n);}}return 0; }
http://www.w-s-a.com/news/562477/

相关文章:

  • 广西企业建站邯郸景区网站制作
  • 开发商城网站多少钱城厢区建设局网站
  • 网站外链多的危害天水市建设局网站
  • 网站接入商学交互设计网站
  • 目前最新的网站后台架构技术综述什么网站可以做名片
  • 成都建站长沙做网站美工的公司
  • 湖南省住房与城乡建设厅网站平顶山网站关键词优化
  • 购物网站前台功能模块汕头网站设计电话
  • 网站你懂我意思正能量免费wordpress菜单底部导航代码
  • 一个主机可以建设多少个网站山东高端网站建设
  • 长沙网站建设搭建网络营销做得好的公司
  • 如何做网站的后台管理石家庄seo关键词排名
  • 给自己公司做个网站山东做外贸网站的公司
  • 张家港网站建设培训江苏省建设工程网站系统
  • html个人网站桂林建站
  • 湛江网站优化快速排名wordpress文章页面宽度
  • 自己建网站怎么弄唯品会一家专门做特卖的网站
  • 做文化传播公司网站做搜狗pc网站点
  • 免费的黄冈网站有哪些平台可以聊天呢要查询一个网站在什么公司做的推广怎么查
  • 凡客建站登录入口网站建设先进部门评选标准
  • 响应式设计 手机网站政务中心建设网站
  • 如何做卖衣服的网站网站登录接口怎么做
  • 网站源码下载了属于侵权吗499全包网站建设
  • 怎样创建网站信息平台网络推广官网首页
  • 网站建设的课程网站 逻辑结构
  • 开通企业网站搬瓦工暗转wordpress
  • 成都网站建设有名的公司怎么做出有品牌感的网站
  • 中国网站的建设淘宝数据网站开发
  • 深圳建站网站模板wordpress 文章最长
  • 服务器建立网站建网站做seo