编写execl()函数的包装器,得到了奇怪的结果

时间:2013-12-18 09:46:12

标签: c linux arguments exec

我正在尝试编写execl函数的包装器,但该命令没有运行(直接使用execl

然后我添加了vfprintf用于调试目的。但是vfprintf只打印/bin/ls,所以我认为它在中间某处被截断了。

我的代码出了什么问题?

int my_execl(const char *file, const char *format, ...)
{
    int ret = 0;

    va_list args;
    va_start (args, format);
    vfprintf (stdout, format, args);
    ret = execl (file, format, args);
    va_end (args);

    return ret;
}

int main (int argc , char **argv)
{
    my_execl ("/bin/ls", "/bin/ls", "-r", "-t", NULL);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

你必须手动构建参数列表并调用例如execv   用它。 - Joachim Pileborg

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

int my_execl(const char *file, ...)
{
    int ret;
    va_list args;
    va_start(args, file);
    ret = execv(file, (char **)args);
    va_end(args);
    return ret;
}