4

我正在使用以下代码在 Linux 中启动新进程

pid_t processID;
char *argV[] = {"192.168.1.40",(char *) 0};
int status = -1;
status = posix_spawn(&processID,"/home/user/application",NULL,NULL,argV,environ);
if(status == 0)
     std::cout<<"Launched Application";
else
     std::cout<<"Launching application Failed";

应用程序确实启动了,但没有说命令行参数。posix_spawn 参数中的错误是什么?

4

1 回答 1

11

posix_spawn手册页:

参数 argv 是指向以空字符结尾的字符指针数组的指针,这些字符指针指向以空字符结尾的字符串。这些字符串构成了可供新进程使用的参数列表。至少 argv[0] 必须存在于数组中,并且应该包含正在生成的程序的文件名,例如路径或文件参数的最后一个组成部分。

发生的事情是在启动的过程中,argv[0]192.168.1.40代替可执行文件的名称,之后程序没有参数。

所以改变:

 char *argV[] = {"192.168.1.40",(char *) 0};

到:

char *argV[] = {"/home/user/application", "192.168.1.40",(char *) 0};

argv 数组的行为将在后面更明确地提到:

当程序作为 posix_spawn() 或 posix_spawnp() 调用的结果执行时,输入如下:

main(argc, argv, envp)
int argc;
char **argv, **envp;

其中 argc 是 argv 中的元素数(“arg count”),argv 指向指向参数本身的字符指针数组。

于 2013-10-23T16:19:13.947 回答