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

移动网站建设初学视频教程网站开发项目管理文档

移动网站建设初学视频教程,网站开发项目管理文档,wordpress+centos6,wordpress上传新建lpexec族函数函数的作用#xff1a; 我们用fork函数创建新进程后#xff0c;经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时#xff0c;该进程被完全替换为新程序#xff08;在exec都后面的代码不会被得到执行#xff09;。因为调用exec函数并不创建…exec族函数函数的作用 我们用fork函数创建新进程后经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时该进程被完全替换为新程序在exec都后面的代码不会被得到执行。因为调用exec函数并不创建新进程所以前后进程的ID并没有改变。 exec族函数功能 在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件也可以是任何Linux下可执行的脚本文件。 函数族 exec函数族分别是execl, execlp, execle, execv, execvp, execvpe 函数原型 #include unistd.h extern char **environ;int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg,..., char * const envp[]);//使用较少 int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[],char *const envp[]);//使用较少返回值 exec函数族的函数执行成功后不会返回调用失败时会设置errno并返回-1然后从原程序的调用点接着往下执行。errno这个值可以通过perror打印出来 参数说明 path可执行文件的路径名字arg可执行程序所带的参数第一个参数为可执行文件名字没有带路径且arg必须以NULL结束例如execl(./bin/echoarg,“echoarg”,“abc”,NULL) echoarg是可执行文件名abc是第一个参数最后必须以NULL结尾。file如果参数file中包含/则就将其视为路径名否则就按 PATH环境变量在它所指定的各目录中搜寻可执行文件。 exec族函数参数极难记忆和分辨函数名中的字符会给我们一些帮助 l : 使用参数列表p使用文件名并从PATH环境进行寻找可执行文件v应先构造一个指向各参数的指针数组然后将该数组的地址作为这些函数的参数。e多了envp[]数组使用新的环境变量代替调用进程的环境变量 字符串转整型 #include stdlib.h int atoi(const char *nptr); long atol(const char *nptr); long long atoll(const char *nptr);示例代码 ****execl代码**** #includestdio.h #include unistd.h int main() {printf(before execl);if(execl(./number,number,12,13,NULL)-1){printf(execl fail\n);perror(because);}printf(after execl);//因为execl函数调用成功所以它之后的代码就不再执行。return 0; }****number可执行文件代码**** #includestdio.h #include stdlib.h int main(int agrc,char*argv[3]) {printf(参数和为:%d\n,atoi(argv[1])atoi(argv[2]));return 0; }可以通过whereis ls查看ls可执行程序的位置 上述程序中就可以替换为下列代码——执行ls即可 execl(ls路径,ls,NULL); 想用ls -l就可以在ls后面加参数即可 execl(ls路径,ls,-l,NULL);获取系统服务时间指令date 同样的道理可以用whereis date查看date可执行程序的路径 上述程序中就可以替换为下列代码——执行date即可 execl(date路径,date,NULL);execl和execlp的区别在于 exaclp函数带p所以能通过环境变量PATH查找到可执行文件ps当可执行文件的文件路径中带有 / 这种路径符号我们将其视为路径名就是按照这个路径去找可执行文件否则就将其视为环境变量path变量的作用是可以让我们在没有这个应用的路径下面打开我们需要打开的应用前提是这个应用得在环境变量里面配置了路径在linux系统中可以用 echo $PATH 查看当前的环境变量那些冒号是分隔符。如果用execlp就可以写为execlp(“date”,“date”,NULL);直接写date就好。 环境变量和pwd显示的路径不一样只有将当前路径加入到环境变量的时候环境变量里面才会出现当前路径也就意味着在任何路径下都可以访问该路径下的可执行文件。 PATH是什么 如何修改环境变量 在linux环境中可以通过以下代码将路径加入到环境变量 方法一 export PATH$PATH:当前路径 $PATH表示当前环境变量 //配置完后可以通过echo $PATH查看配置结果。 生效方法立即生效 有效期限临时改变只能在当前的终端窗口中有效当前窗口关闭后就会恢复原有的path配置 用户局限仅对当前用户方法二 通过修改.bashrc文件: vim ~/.bashrc //在最后一行添上 export PATH/usr/local/mongodb/bin:$PATH 生效方法有以下两种 1、关闭当前终端窗口重新打开一个新终端窗口就能生效 2、输入“source ~/.bashrc”命令立即生效 有效期限永久有效 用户局限仅对当前用户方法三 通过修改profile文件: vim /etc/profile /export PATH //找到设置PATH的行添加 export PATH/usr/local/mongodb/bin:$PATH 生效方法系统重启 有效期限永久有效 用户局限对所有用户方法四 通过修改environment文件: vim /etc/environment 在PATH”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games”中加入“:/usr/local/mongodb/bin” 生效方法系统重启 有效期限永久有效 用户局限对所有用户带v不带l的一类exec函数 其实就是将execl可执行程序里面的餐数放到指针数组里面然后用数组的首地址代替可执行程序名字和程序的参数。 示例 char* canshu[]{number,12,13,NULL}; execv(./number,canshu)exec配合fork使用 实现功能当父进程检测到输入为1的时候后创建子进程把配置文件的字段修改掉。 *********************** 以下是存在父子进程的程序 通过调用现有的可执行程序 修改目标文件的内容他这个 要修改文件要加上绝对路径 ************************ #includestdio.h #include sys/types.h #include unistd.h #includestdlib.h #include sys/wait.h int main() {pid_t pid;pid_t fpid,returnpid;int status;int input0;int execlreturn0;while(1){printf(请输入数字:\n);scanf(%d,input);if(input1){fpidfork();if(fpid0){returnpidwaitpid(fpid,status,0);if(WIFEXITED(status)){printf(子进程正常退出,退出参数是:%d\n,WEXITSTATUS(status));}}if(fpid0){execlreturnexecl(/home/fhn/linuxfile/changfile,changfile,/home/fhn/linuxfile/test.txt,NULL); if(execlreturn-1){printf(exec fail\n);perror(execfail);}}}else{printf(do nothing\n);}}return 0; }system函数 #include stdlib.h int system(const char *command);函数说明 system()会调用fork()产生子进程由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令 此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置SIGINT和SIGQUIT 信号则会被忽略。sh -c就相当于./ 就是为了执行后面的指令string返回值 如果fork()失败 返回-1:出现错误如果exec()失败表示不能执行Shell,返回值相当于Shell执行了exit(127)如果执行成功则返回子Shell的终止状态如果system()在调用/bin/sh时失败则返回127其他失败原因返回-1。若参数string为空指针(NULL)则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值但是此返回值也有可能为 system()调用/bin/sh失败所返回的127因此最好能再检查errno 来确认执行成功。system调用结束后还会返回原程序继续执行system下面的代码而exec族函数不会。我的理解 在system函数调用成功时返回进程的状态值 当因shell不能执行时也就是system()在调 用/bin/sh时失败时返回127其他失败情况 返回-1命令string为空指针(NULL)system 函数的返回值很简单明了只有0和1。返回1 表明系统的命令处理程序即/bin/sh是可用的。 相反如果命令处理程序不可用则返回0。 在 判断返回值时最好能再检查errno来确认执行成功使用例子 system(/home/fhn/linuxfile/changfile /home/fhn/linuxfile/test.txt);popen函数和system函数区别 popen函数 #include stdio.h FILE *popen(const char *command, const char *type); int pclose(FILE *stream);函数说明 popen()会调用fork()产生子进程然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取“w”代表写入。依照此type值popen()会建立管道连到子进程的标准输出设备比如说ps指令所以可以用“”r“”根据返回的指针读取子进程的标准输出内容或标准输入设备然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外所有使用文件指针(FILE*)操作的函数也都可以使用除了fclose()以外。如果 type 为 r那么调用进程读进 command 的标准输出。如果 type 为 w那么调用进程写到 command 的标准输入。popen比sysytem的好处是可以通过管道获取运行结果 返回值 若成功则返回文件指针否则返回NULL错误原因存于errno中。 注意 popen()会继承环境变量通过环境变量可能会造成系统安全的问题。 为什么要用popen函数 #includestdio.h #include stdlib.h int main() {system(ps);return 0; }这几行代码的运行结果如下 fhnubuntu:~/jincheng$ ./popen PID TTY TIME CMD20157 pts/3 00:00:03 bash24755 pts/3 00:00:00 popen24756 pts/3 00:00:00 sh24757 pts/3 00:00:00 ps如果想要把它运行的结果放到文件或者字符串中去 就要用到popen函数将结果流入到文件中去如下面代码 #includestdio.h #include stdlib.h #include unistd.h int main() {char* buf;FILE* fd;int n_read;buf(char*)malloc(1024);fdpopen(ps,r);n_readfread(buf,1,1024,fd);pclose(fd);printf(管道输出:%s,buf);return 0; } 以下是输出结果fhnubuntu:~/jincheng$ ./popen 管道输出: PID TTY TIME CMD20157 pts/3 00:00:03 bash24865 pts/3 00:00:00 popen24866 pts/3 00:00:00 sh24867 pts/3 00:00:00 ps如果有将信息流入到内存而不打印则屏幕上面没有显示。注意popen用的是fread、fwrite而不是read和write因为read返回的是文件描述符不符合fread返回的是文件指针
http://www.huolong8.cn/news/186587/

相关文章:

  • 房产网站怎么推广wordpress图片缩放
  • 网站风格总结项目计划
  • 甘肃农村网站建设网站推广建设策略
  • wordpress做复杂网站电子商务平台管理
  • 阅读网站建设做百度推广送网站
  • 国家官方网站果洛州公司网站建设
  • 建设企业网站官网u盾登录做的网站怎么申请软件著作权
  • 做文字图片的网站天津圣辉友联做网站
  • 临沂网站制作策划百度上如何创建自己的网站
  • 网站链接分享做推广做网站的越来越少了
  • 我会编程怎么做网站中国商品价格网
  • 做钓鱼网站要具备什么网上商城有哪几个
  • 做翻译网站 知乎在线制作图片头像
  • 数字校园建设专题网站制作一个购物网站
  • 哪个网站可以做身份核验dede门户网站模板下载
  • 上海微网站公司传奇开服表
  • 国内人做韩国网站一般都卖什么学校网站建设专业公司
  • 新市网站建设嘉定西安网站建设
  • 七台河北京网站建设网站建设与设计摘要
  • asp.net 网站开发 ppt最优的赣州网站建设
  • 做的比较好的网站推荐珠海网站制作推荐
  • 合肥高端网站建设公司高端室内设计工作室
  • 手机应用商店app下载官方网站下载wordpress手机底部联系插件
  • 沈阳网站建设tlmh湛江网站建设与网页
  • 佛山个人制作网站公司自定义建设网站
  • 网站建设端口3d网页游戏排行
  • 企业网站建设和管理像优酷这样的网站需要怎么做
  • 求网页设计网站济南建网站公司
  • 做新闻类网站还有市场吗钣金外包加工网
  • 青羊建站报价南通市优普网站建设