Не срабатывает фунция execve() в Linux

274
06 марта 2017, 12:39

При компиляции через 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

Answer 1

Исправьте-ка код

for (int i = 0; i < 3; i++)
{
    params[0] = new char[10];
}

Зачем присваивать указатель одной и той же переменной params[0] целых три раза?...

READ ALSO
Запись в бинарный файл

Запись в бинарный файл

Здравствуйте, помогите пожалуйста, решить проблему

254
Рефакторинг большой функции

Рефакторинг большой функции

Дана функция на 200 строк, обрабатывающая большое количество данных, принимающая много параметровПутём неимоверных усилий функция была порезана...

234
Найти вариант обхода графа длинной k C++

Найти вариант обхода графа длинной k C++

Есть матрица смежности a[n * m][n * m]Есть первая вершина v0 Есть число k

238
Проблема в совместном использовании curl и exe

Проблема в совместном использовании curl и exe

Я написал программу,которая работает с текстовым файлом и должна отправить его по emailДля отправки по email использовал curl

352