Я испытываю что-то таинственное с программой на C, которая отлично работает на моем компьютере, но не удается, когда я скомпилирую ее на сервере, над которым я работаю. В основном выполняется выполнение execve. Оригинальная программа не слишком большая, поэтому я начал резать некоторые части, чтобы попытаться понять, где может быть проблема.Ошибка компилятора из-за ошибки execve?
Здесь крой программы (это просто вырезать так из-конечно, это не имеет никакого смысла), ну, здесь до сих пор execve не удается:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(){
// Arguments
char *argv[100] = {"/home/input/input", [1 ... 99] = "A"};
//The real program would use some pipes later
int pipestdin[2];
int pipestderr[2];
pipe(pipestdin);
pipe(pipestderr);
// Call
char *env = "\xde\xad\xbe\xef=\xca\xfe\xba\xbe";
execve("/home/input/input",argv,&env); // Execute the program
printf("ERROR\n"); // printed only if execve fails
return 0;
}
но когда Я вынимаю эту часть:
int pipestdin[2];
int pipestderr[2];
pipe(pipestdin);
pipe(pipestderr);
программа начинает работать снова.
Вот некоторая информация:
- GCC версии на моем компьютере: 4.8.4
- GCC версии на сервере: 4.6.3
- Сборка программы выше: http://pastebin.com/nTagaErP
Программа работает нормально на сервере, когда я использую версию, скомпилированную на моем компьютере, поэтому я полагаю, что есть проблема с компилятором.
И с какой ошибкой происходит 'execve' с? (Подсказка: ваша текущая программа не говорит вам. Вы должны изменить ее так, чтобы она говорила вам, с perror или strerror (errno)) – immibis
Ваши argv и envp построены неправильно. Прочтите страницу руководства. –