При компиляции через g++ 5.4.0 этого кода получаю вывод, из которого могу судить, что execve попросту не срабатывает. Подскажите, пожалуйста, почему?
Исходный код:
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
#include <cstring>
int main(int argc, char** argv)
{
if (argc > 1)
{
for(int i = 0; i < argc; i++)
{
std::cout << argv[i] << std::endl;
}
return 0;
}
pid_t pid = fork();
if (pid < 0)
{
std::cout << "Error creating process" << std::endl;
}
else if (pid == 0)
{
//child
std::cout << "Hello from Child" << std::endl;
char** params = new char*[5];
for (int i = 0; i < 3; i++)
{
params[0] = new char[10];
}
strcpy(params[0], "1st");
strcpy(params[1], "2nd");
strcpy(params[2], "3rd");
params[3] = nullptr;
execve("test", params, nullptr);
return 0;
}
else
{
//parent
waitpid(pid, nullptr, 0);
std::cout << "Hello from parent" << std::endl;
}
std::cin.get();
return 0;
}
Сам вывод:
Hello from Child
Hello from parent
P.S. Компилировал с параметром -std=c++11
Исправьте-ка код
for (int i = 0; i < 3; i++)
{
params[0] = new char[10];
}
Зачем присваивать указатель одной и той же переменной params[0] целых три раза?...
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости