В Unix мы можем создать новый процесс с помощью fork (); execvp (argv [0], argv); (с небольшой долей сантехники, работающей, если мы являемся родителем или ребенком, следующим за развилкой). В дочернем процессе main (argc, argv) будет видеть строки в точности так, как они были переданы в execvp.
В Windows семейство _spawn () в основном реализует fork (); Exec (); в один шаг. Пока все хорошо. Проблема в том, что к тому моменту, когда мы доходим до 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 от родителя к ребенку, как есть, с ее переосмыслением и изменением?