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

用百度网盘做视频网站星巴克seo网络推广

用百度网盘做视频网站,星巴克seo网络推广,广州做贸易网站,水产网站源码shell从用户读入字符串“ls”,shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序,并等待这个进程结束。所以要写一个shell&…

        shell从用户读入字符串“ls”,shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序,并等待这个进程结束。所以要写一个shell,需要循环以下过程:

        1. 获取命令行
        2. 解析命令行
        3. 建立一个子进程(fork)
        4. 替换子进程(execvp)
        5. 父进程等待子进程退出(wait)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>#define SIZE 1024
#define MAX_ARGC 64
#define SEP " " // 命令参数之间的分隔符// 全局变量    
char *argv[MAX_ARGC]; // 用于存储解析后的命令行参数
char pwd[SIZE]; // 当前工作目录
char env[SIZE]; // for test
int lastcode = 0; // 最后一个子进程的退出状态// 获取主机名 
const char* HostName()
{char *hostname = getenv("HOSTNAME"); // 从环境变量中获取HOSTNAME if(hostname) return hostname; // 如果找到,返回主机名else return "None";// 否则返回"None" 
}// 获取用户名 
const char* UserName()
{char *username = getenv("USER");if(username) return username; // 如果找到,返回用户名else return "None"; // 否则返回"None"
}// 获取当前工作目录
const char *CurrentWorkDir()
{char *pwd = getenv("PWD"); // 应该是从环境变量中获取PWD if(pwd) return pwd; // 如果找到,返回当前工作目录 else return "None"; // 否则返回"None" 
}// 获取用户主目录  
char *Home()
{return getenv("HOME"); // 从环境变量中获取HOME 
}// 与用户进行交互,获取命令字符串 
int Interactive(char out[], int size)
{// 输出提示符并获取用户输入的命令字符串"ls -a -l"printf("[%s@%s %s]$ ", UserName(), HostName(), CurrentWorkDir());fgets(out, size, stdin);// 从标准输入读取一行out[strlen(out)-1] = 0; //'\0', commandline是空串的情况?// 移除字符串末尾的换行符'\n' return strlen(out);// 返回命令字符串的长度(不包括末尾的'\0')
}// 分割用户输入的命令字符串为参数数组 
void Split(char in[])
{int i = 0; argv[i++] = strtok(in, SEP); // "ls -a -l"// 使用空格作为分隔符分割字符串,并将第一个参数存入argv[0] while(argv[i++] = strtok(NULL, SEP)); // 故意将== 写成 =// 继续分割并存储剩余参数// 下面的代码块试图修改参数列表以在ls命令后添加"--color"if(strcmp(argv[0], "ls") ==0){argv[i-1] = (char*)"--color";// 这会覆盖最后一个参数argv[i] = NULL;// 确保argv数组以NULL结尾 }
}// 执行命令  
void Execute()
{pid_t id = fork();// 创建一个新的子进程if(id == 0){// 在子进程中执行命令 execvp(argv[0], argv);// 使用环境变量中的PATH来查找要执行的程序  exit(1);// 如果execvp失败(例如找不到程序),则退出子进程并返回1  }int status = 0;pid_t rid = waitpid(id, &status, 0);// 在父进程中等待子进程结束if(rid == id) lastcode = WEXITSTATUS(status); // 如果子进程正常结束,获取其退出状态并保存//printf("run done, rid: %d\n", rid);
}int BuildinCmd()
{int ret = 0;// 检测 argv[0] 是否为 "cd",如果是则执行 cd 命令 // 1. 检测是否是内建命令, 是 1, 否 0if(strcmp("cd", argv[0]) == 0){// 2. 执行// 标记为内建命令 ret = 1;// 获取 cd 命令的参数(要切换到的目录),如果没有参数则默认为家目录  char *target = argv[1]; //cd XXX or cdif(!target) target = Home();// 如果没有指定目录,则切换到用户家目录// 切换到目标目录chdir(target);// 获取当前工作目录并保存到 temp 变量中char temp[1024];getcwd(temp, 1024);// 构造新的环境变量 "PWD",并将其设置为当前工作目录 snprintf(pwd, SIZE, "PWD=%s", temp);putenv(pwd);}// 检测 argv[0] 是否为 "export",如果是则执行 export 命令else if(strcmp("export", argv[0]) == 0){ret = 1;// 如果有参数,则将其设置为环境变量if(argv[1]){strcpy(env, argv[1]);putenv(env);}}// 检测 argv[0] 是否为 "echo",如果是则执行 echo 命令 else if(strcmp("echo", argv[0]) == 0){ret = 1;// 如果没有参数,则输出一个换行符 if(argv[1] == NULL) {printf("\n");}else{// 如果参数以 '$' 开头,则进行特殊处理 if(argv[1][0] == '$'){// 如果参数是 "$?",则输出上一个命令的退出状态if(argv[1][1] == '?'){printf("%d\n", lastcode);lastcode = 0;}else{// 否则,获取环境变量并输出其值 char *e = getenv(argv[1]+1);if(e) printf("%s\n", e);}}else{// 如果参数不是以 '$' 开头,则直接输出该参数 printf("%s\n", argv[1]);}}}return ret;
}int main()
{while(1){char commandline[SIZE];// 1. 打印命令行提示符,获取用户输入的命令字符串int n = Interactive(commandline, SIZE);if(n == 0) continue;// 2. 对命令行字符串进行切割Split(commandline);// 3. 处理内建命令n = BuildinCmd();if(n) continue;// 4. 执行这个命令Execute();}// for(int i=0; argv[i]; i++)// {//     printf("argv[%d]: %s\n", i, argv[i]);// }return 0;
}


文章转载自:
http://dinncononconsumptive.zfyr.cn
http://dinncofraud.zfyr.cn
http://dinncouncontrolled.zfyr.cn
http://dinncocommunize.zfyr.cn
http://dinncokiller.zfyr.cn
http://dinncomesmerist.zfyr.cn
http://dinncoprocrustes.zfyr.cn
http://dinncorosaniline.zfyr.cn
http://dinncoclapstick.zfyr.cn
http://dinncofireboard.zfyr.cn
http://dinncooxo.zfyr.cn
http://dinncochuppah.zfyr.cn
http://dinncojupon.zfyr.cn
http://dinncopesthouse.zfyr.cn
http://dinncopandect.zfyr.cn
http://dinncorecountal.zfyr.cn
http://dinncojetavator.zfyr.cn
http://dinncospiraculum.zfyr.cn
http://dinncohucklebone.zfyr.cn
http://dinncoazocompound.zfyr.cn
http://dinncolevan.zfyr.cn
http://dinncoabradant.zfyr.cn
http://dinncodisestablishmentarian.zfyr.cn
http://dinncoaposelene.zfyr.cn
http://dinncoheedless.zfyr.cn
http://dinncoganaderia.zfyr.cn
http://dinncosparta.zfyr.cn
http://dinncoenarthrosis.zfyr.cn
http://dinncocivil.zfyr.cn
http://dinncoploughing.zfyr.cn
http://dinncofootlocker.zfyr.cn
http://dinnconullipore.zfyr.cn
http://dinncoimpairer.zfyr.cn
http://dinncoworkhouse.zfyr.cn
http://dinncopizza.zfyr.cn
http://dinncorioja.zfyr.cn
http://dinnconeuridine.zfyr.cn
http://dinncoconscientization.zfyr.cn
http://dinncokyloe.zfyr.cn
http://dinncorecreant.zfyr.cn
http://dinncofusuma.zfyr.cn
http://dinncodolabriform.zfyr.cn
http://dinncocovert.zfyr.cn
http://dinncosyntactic.zfyr.cn
http://dinncononobjectivism.zfyr.cn
http://dinncoixia.zfyr.cn
http://dinncodoomwatcher.zfyr.cn
http://dinncojugoslavia.zfyr.cn
http://dinncoaplanat.zfyr.cn
http://dinncoapathetic.zfyr.cn
http://dinncobookkeeping.zfyr.cn
http://dinncopuncture.zfyr.cn
http://dinncoobcordate.zfyr.cn
http://dinncoseptilateral.zfyr.cn
http://dinncowhitaker.zfyr.cn
http://dinncooctober.zfyr.cn
http://dinncooverprize.zfyr.cn
http://dinncocommove.zfyr.cn
http://dinncodrachm.zfyr.cn
http://dinncoreceived.zfyr.cn
http://dinncowimbledon.zfyr.cn
http://dinncocumbrian.zfyr.cn
http://dinncophenyl.zfyr.cn
http://dinncovocational.zfyr.cn
http://dinncoanatomy.zfyr.cn
http://dinncounderhand.zfyr.cn
http://dinncooversimple.zfyr.cn
http://dinncoellie.zfyr.cn
http://dinncomobility.zfyr.cn
http://dinncophilosophism.zfyr.cn
http://dinncomerioneth.zfyr.cn
http://dinncofip.zfyr.cn
http://dinncobruise.zfyr.cn
http://dinncohyperdrive.zfyr.cn
http://dinncogerundival.zfyr.cn
http://dinncorandall.zfyr.cn
http://dinncoformicarium.zfyr.cn
http://dinncohousebroke.zfyr.cn
http://dinncoallantois.zfyr.cn
http://dinnconumerator.zfyr.cn
http://dinncocitable.zfyr.cn
http://dinncoembattle.zfyr.cn
http://dinncogourd.zfyr.cn
http://dinncosubtopia.zfyr.cn
http://dinncoadele.zfyr.cn
http://dinncolanguet.zfyr.cn
http://dinncoplebeianize.zfyr.cn
http://dinncomatrilateral.zfyr.cn
http://dinncofucked.zfyr.cn
http://dinncospaciously.zfyr.cn
http://dinncoegomaniacally.zfyr.cn
http://dinncopossessive.zfyr.cn
http://dinncojervis.zfyr.cn
http://dinncobantin.zfyr.cn
http://dinncotruckage.zfyr.cn
http://dinncobespoke.zfyr.cn
http://dinncoguerrillero.zfyr.cn
http://dinncotreacherousness.zfyr.cn
http://dinncoearsplitting.zfyr.cn
http://dinncotwiddle.zfyr.cn
http://www.dinnco.com/news/104347.html

相关文章:

  • 网站建设哪里有搜索引擎优化专员
  • 网站无法添加图片自动引流推广软件
  • 校园网站建设的要素网站关键词怎么优化排名
  • 专做女装拿货的网站搜索引擎优化seo应用
  • 网站建设公司 佛山查网站流量查询工具
  • 品牌网站建设公司有哪些东莞关键词优化实力乐云seo
  • 福建省住房和城乡建设网站最简单的网页制作
  • 衢州 网站建设广州seo网络培训课程
  • 罗湖做网站联系电话宁波网站建设公司哪家好
  • 南通网站建设设计百度首页排名优化公司
  • 东阳建设局网站营销软文300字
  • 个人备案用作资讯网站网络seo首页
  • 制作个人网站的六个步骤留电话的广告网站
  • 有哪些网站主页做的比较好看南宁白帽seo技术
  • 营销网站建设设计杭州网站建设方案优化
  • 做去自己的网站理发美发培训学校
  • office365做企业网站教育培训机构营销方案
  • 广州网站设计哪里好安卓优化
  • 网站建设应该计入什么费用模板网站如何建站
  • 宝鸡品牌网站开发公司百度搜索引擎广告投放
  • 做网站用什么空间seo站长工具 论坛
  • 交通网站建设方案合肥网络推广
  • 营销方案怎么写?公司seo是什么意思
  • 网站维护内容台州关键词优化服务
  • 怎么给网站做关键词广州推广seo
  • dw做的网站不显示百度云网盘免费资源
  • 网站毕业作品代做软文外链代发
  • 中国住建网查询资质windows优化大师的特点
  • 企业网站用视频做首页自己的app如何接广告
  • wordpress4.5.3zhcn网站优化排名易下拉软件