欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


Linux下的无名管道pipe的设计
wifi共享精灵如何开启软件非软AP模式
wifi共享精灵手机无法加入网络怎么办
wifi共享精灵的网卡兼容性
linux下的进程等待
酷盘PC版如何自动备份移动设备中的照片
Centos硬件信息查看命令
linux之计划任务管理
linuxloadavg笔记整理
Hadoop是什么
Linux下execl学习
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   Linux下头文件

  #include

  函数定义

  int execl(const char *path, const char *arg, ...);

  函数说明

  execl()其中后缀"l"代表list也就是参数列表的意思,第一参数path字符指针所指向要执行的文件路径, 接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]... 最后一个参数须用空指针NULL作结束。

  函数返回值

  成功则不返回值, 失败返回-1, 失败原因存于errno中,可通过perror()打印

  实例1:

  root@wl-MS-7673:/home/wl/桌面/c++# cat -n execl.cpp

  1 /* 执行 /bin/ls -al /ect/passwd */

  2 #include /*** File: execl.c**/

  3 #include

  4 using namespace std;

  5 int main()

  6 {

  7 // 执行/bin目录下的ls, 第一参数为程序名ls, 第二个参数为"-al", 第三个参数为"/etc/passwd"

  8

  9 if(execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *) 0) < 0)

  10

  11 {

  12 cout<<"execl error"<

  13 }

  14 else

  15 {

  16 cout<<"success"<

  17 }

  18 return 0;

  19 }

  root@wl-MS-7673:/home/wl/桌面/c++# g++ execl.cpp -o execl

  root@wl-MS-7673:/home/wl/桌面/c++# ./execl

  -rw-r--r-- 1 root root 1801 11月 28 09:46 /etc/passwd

  root@wl-MS-7673:/home/wl/桌面/c++#

  大家可以清楚的看到, 执行/bin目录下的ls, 第一参数为程序名ls, 第二个参数为"-al", 第三个参数为"/etc/passwd",但是没有输出success!!

  这是为什么呢?

  execl函数特点:

  当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。

  用另一个新程序替换了当前进程的正文、数据、堆和栈段。

  当前进程的正文都被替换了,那么execl后的语句,即便execl退出了,都不会被执行。

  再看一段代码:root@wl-MS-7673:/home/wl/桌面/c++# cat -n execl_test.cpp

  1 #include

  2 #include

  3 #include

  4

  5 int main(int argc,char *argv[])

  6 {

  7 if(argc<2)

  8 {

  9 perror("you haven,t input the filename,please try again!n");

  10 exit(EXIT_FAILURE);

  11

  12 }

  13 if(execl("./file_creat","file_creat",argv[1],NULL)<0)

  14 perror("execl error!");

  15 return 0;

  16 }

  17

  root@wl-MS-7673:/home/wl/桌面/c++# cat -n file_creat.cpp

  1 #include

  2

  3 #include

  4

  5 #include

  6 #include

  7 #include

  8 void create_file(char *filename)

  9 {

  10 if(creat(filename,0666)<0)

  11 {

  12 printf("create file %s failure!n",filename);

  13 exit(EXIT_FAILURE);

  14 }

  15 else

  16 {

  17 printf("create file %s success!n",filename);

  18 }

  19 }

  20

  21 int main(int argc,char *argv[])

  22 {

  23 if(argc<2)

  24 {

  25 printf("you haven't input the filename,please try again!n");

  26 exit(EXIT_FAILURE);

  27 }

  28 create_file(argv[1]);

  29 exit(EXIT_SUCCESS);

  30 }

  31

  32

  root@wl-MS-7673:/home/wl/桌面/c++# g++ execl_test.cpp -o execl_test

  root@wl-MS-7673:/home/wl/桌面/c++# g++ file_c

  file_copy file_copy.cpp file_creat.cpp

  root@wl-MS-7673:/home/wl/桌面/c++# g++ file_creat.cpp -o file_creat

  root@wl-MS-7673:/home/wl/桌面/c++# ./execl_test

  you haven,t input the filename,please try again!

  : Success

  root@wl-MS-7673:/home/wl/桌面/c++# ./execl_test file

  create file file success!

  root@wl-MS-7673:/home/wl/桌面/c++#

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站