Я пытаюсь создать простую программу клиент/сервер, которая позволяет клиенту подключаться к серверу с помощью сокета TCP, а затем позволяет пользователю выполнять системные вызовы с клиентской стороны на серверную и возвращать ответ пользователю. Например:
Проблемы клиента: ls
Сервер найдет ls в /usr/bin или w/e, а затем выполнит его с помощью execve().
У меня также будет что-то вроде lls или lmkdir и т. д., которое будет выполнять системные вызовы на стороне клиента.
Проблема в том, что мой execve() не работает правильно, потому что 'ls' или любая другая команда на самом деле не вызывается. Раньше я делал такую же программу только с локальной стороной (без сервера или чего-то еще), и execve() работал нормально. Вот код:
pid = fork();
if(pid){ // Child
printf("child wait");
pid = wait(&status);
printf("Child dead\n");
}else{ // Parent
if(execPath){
execve(execPath, arglist, env);
printf("Command Complete\n");
}
}
По какой-то причине printfs в дочернем разделе инструкции PID вообще не выполняются. Я не думаю, что система на самом деле когда-либо разветвляет процесс. Есть ли что-то особенное, что мне нужно сделать, чтобы эта работа работала, поскольку это программа типа клиент/сервер, или она должна работать точно так же?
Спасибо
execPath
иarglist
. - person cnicutar   schedule 25.02.2013fork()
-1
, указывая на ошибку (например, слишком много процессов в вашей системе). - person Adam Rosenfield   schedule 25.02.2013