聘我网

新概念招聘3.0

如何在变长参数的函数外面包一层?

vote up0vote downstar

比如

我想在

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

外面包一层自己的函数

wrap_execl(const char *path, char *arg, ...);

wrap_execl的调用方式跟execl一样,

并会在内部去掉execl

该如何实现?

 

1 个答复

vote up0vote downcheck

通过execv

#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>

int wrap_execl(const char *path, char *arg, ...){
    va_list vl;
    char *p;
    char* a[10];
    int i = 0;
    a[i++] = arg;
    va_start(vl, arg);
    do {
        p = va_arg(vl, char *);
        a[i++] = p;
    } while(p);
    return execv(path, a);
}

int main(int argc, char *argv[]){
    wrap_execl("/bin/ls", "ls", NULL);
    return 0;
}

参考:

可变参数实现原理

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.