免费注册 查看新帖 |

Chinaunix

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

老问题,仍没有满意答案 -- 可变参数列表传递 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-17 22:49 |只看该作者 |倒序浏览
int
func (const char *path,char const *arg,...)
{
    ...
    execl(path, ?????? )
}
我的func参数个数不定,如何原封不动的将func的参数列表传给execl?
老板要求:

1: 只能用C,不许用汇编,
2: 不能用execv代替

老板特别犟,认定有C方案,非要我找出来不可。

这个可愁死我,找了很久都没有找到答案,请熟悉C的朋友出手相助,不胜感激。

感觉一个可能的突破口是:func的参数将全部是char *,就是说func和execl的参数类型完全一样。

[ 本帖最后由 vupiggy 于 2007-7-17 15:51 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-07-18 01:28 |只看该作者
int func(const char *path, ...)
{
   va_list va;
   va_start(va,path);
   execl(path,va);
   va_end(va);
}

这样不就行了么?

[ 本帖最后由 baohuaihuai 于 2007-7-18 01:32 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-07-18 06:00 |只看该作者
原帖由 baohuaihuai 于 2007-7-17 18:28 发表
...
这样不就行了么?

你试过了吗?

论坛徽章:
0
4 [报告]
发表于 2007-07-18 08:53 |只看该作者
用v系列的函数,自己构造那个char *[]args的列表应该不是难事吧
int execvp(const char *file, char * const argv[]);
如果一定要构造execl,恐怕有些难度。

论坛徽章:
0
5 [报告]
发表于 2007-07-18 08:56 |只看该作者
参数都一模一样了,这样的封装想做什么?
直接#defie func execl  ?

论坛徽章:
0
6 [报告]
发表于 2007-07-18 09:52 |只看该作者
对,反复调用va_arg宏然后构造vector,最后调execv*系列是个最自然的想法,实际上glibc的execl*系列底下就是这么干的,但是,老板不喜欢这个方法,没办法,被逼无奈啊

论坛徽章:
0
7 [报告]
发表于 2007-07-18 09:54 |只看该作者
至于为什么,这个,呵呵......还望理解

论坛徽章:
0
8 [报告]
发表于 2007-07-18 13:46 |只看该作者
如果你非要execl,我觉得基本上就一条路,
穷举,按照参数个数分类,30个参数应该足够了吧。
写上30个if/else if/else

论坛徽章:
0
9 [报告]
发表于 2007-07-18 13:49 |只看该作者
最关键的还是没有意义,
不知道这么定义是不是合你要求
int (*func)(char *, char *, ...);
...
func = execl;

论坛徽章:
0
10 [报告]
发表于 2007-07-18 20:29 |只看该作者
唉,说穿了吧,我的任务是运行时替换glibc的execl函数,在真正Execl之前做点什么事情,然后最终还是要调execl来启动子程序,老大现在觉得有意义了吧

[ 本帖最后由 vupiggy 于 2007-7-18 13:30 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP