免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2196 | 回复: 3
打印 上一主题 下一主题

[应用] execl()参数的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-31 11:03 |只看该作者 |倒序浏览
本帖最后由 garyv 于 2013-05-31 11:06 编辑

函数声明是:
int execl(const char *path, const char *arg, ...);

我使用这个函数测试发现:

execl("/work/app", NULL); // 编译报错
execl("/work/app", "app", NULL); // 编译运行都正常
execl("/work/app", "a", NULL); // 编译运行都正常

问题是,第二个参数到底是干什么用的?如果是应用程序名称的话,第一个参数里面已经有了啊,而且从第三行代码看随便填个字符串都行
我知道后面几个参数都是/work/app的参数,问题如果一个参数都不要的话,为什么不能用第一种方式呢?

论坛徽章:
0
2 [报告]
发表于 2013-05-31 11:45 |只看该作者
execl () 函数,l 就是list 的意思,你要将程序的所有参数,包括程序本身都要列出来,然后以NULL 结尾。。。这就是l 的意思

论坛徽章:
0
3 [报告]
发表于 2013-05-31 12:15 |只看该作者
本帖最后由 garyv 于 2013-05-31 12:16 编辑

回复 2# CAIYUE10720795


    问题是:第二个参数不能为NULL,又不是/work/app的参数,随便填个字符串都行,这样的话这个参数就是多余了的。。。


   我的意思是说,从execl()的第三个参数开始才是/work/app的参数。

论坛徽章:
0
4 [报告]
发表于 2013-06-20 10:57 |只看该作者
execl()—执行文件函数
相关函数:fork, execle, execlp, execv, execve, execvp

头文件:#include <unistd.h>
定义函数:int execl(const char * path, const char * arg, ...);

函数说明:execl()用来执行参数path 字符串所代表的文件路径, 接下来的参数代表执行该文件时传递过去的argv(0), argv[1], ..., 最后一个参数必须用空指针(NULL)作结束.

返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中.

范例
  1. #include <unistd.h>
  2. main()
  3. {
  4.     execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *)0);
  5. }
复制代码
执行:
/*执行/bin/ls -al /etc/passwd */
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd

看下例子,相信你就明白了.

回复 1# garyv


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP