execv是如何做到的?

时间:2012-08-30 20:02:43

标签: c windows exec

也许这是一个神奇的问题。我正在尝试创建一个具有以下签名(或等效的const char * const * args)

的函数
void ExecuteJavaVM(char** args){

}

我想模仿execv如何处理参数数组,您可能知道execv不要求我们放置数组的最大元素数。它只是神奇地计算我们传递的数组中的元素数量作为其第二个参数。

这是execv签名。

intptr_t _execv( 
   const char *cmdname,
   const char *const *argv 
);

不知何故,execv设法“计算”数组argv中的元素数量。这正是我想要做的。

sizeof几乎没用,因为数组的数据类型衰减为一个简单的指针,所以sizeof很可能总是返回4。

有什么想法吗?任何人都知道在哪里可以找到Windows的这些功能的来源?

最诚挚的问候, 爱丽儿

1 个答案:

答案 0 :(得分:8)

来自POSIX docs(强调我的):

  

参数argv是一个以空字符结尾字符串的字符指针数组。 应用程序应确保此数组的最后一个成员是空指针。这些字符串应构成新进程映像可用的参数列表。 argv[0]中的值应指向与其中一个exec函数启动的进程相关联的文件名。