【发布时间】:2010-11-10 17:04:48
【问题描述】:
在 Unix 上,我们可以使用 fork() 创建一个新进程; execvp(argv[0], argv); (如果我们是跟随叉子的父母或孩子,则需要进行一些管道工作)。在子进程中,main(argc, argv) 将看到与传递给 execvp 完全相同的字符串。
在 Windows 上,_spawn() 系列基本上实现了 fork();执行();一步。到目前为止,很好。问题是,当我们到达孩子的 main() 时,我们的字符串已经不是原来的样子了。我举个例子吧。
argv[0] = "foo";
argv[1] = "bar";
argv[2] = "Use spaces and \"quotes\"";
_spawnvp(0, argv[0], argv);
当我们到达子节点时,在 main() 中,我们会发现,在这个例子中,argv[0] 和 argv[1] 符合预期,但是 argv[2] 已经在空格上进行了标记,并且去掉了引号等那个
argv[2] == "Use"
argv[3] == "and"
argv[4] == "quotes"
如何将 argv 结构按原样从父级传递给子级,并对其进行重新解释和更改?
【问题讨论】:
-
如果用单引号括起来会怎样? argv[2] = "'使用空格和\"引号\"'";
-
@Chris:这甚至不接近 C 语法。