Exec не работает
Собираю программу на gcc под debian jessie. В программе необходимо вызвать exec.
После того как перед вызовом добавил одно функцию, после неё exec перестал срабатывать.
Проверял на execv("hello",NULL). В папке с программой есть файл hello.
Вызвал до функции - сработало.
Вызвал после функции - не сработало.
Закомментировал содержимое функции - работает.
П.С.: Правда, дальше exec тоже странно себя ведёт.
Куда с таким случаем обратиться? Может быть, это глюк нестабильного ядра?
Вот функция:
Основная часть закомментирована, и возвращён подставленный ответ.
// ==================================================
// ==================================================
int get_config(char *ans)
{
/*
char buff[256];
strcpy(ans,"");
strcpy(buff,"");
char cmp[9];
FILE *faddr = fopen("autotest_config.txt","r");
if ( faddr == 0 )
{
printf(RED "Файл конфигурации autotest_config.txt не существует.\n Генерирую шаблон для редактирования.." RESET);
write_conf();
return 0;
} else {
while ( fgets( buff ,256,faddr ) ) // В этом if выполняется чтение из файла
{
if (strlen(buff)>8) { strncpy(cmp,buff,8); cmp[8]=0; printf("cmp=%s\n",cmp);
if (!strcmp(cmp,"binpath=")) { strcpy(ans,buff+8); printf("ans=%s\n",ans); }
}
}
printf("finished while\n");
fclose(faddr);
}
printf("returning,%p\n",ans);
if (strlen(ans)<1) return 0;
return 1;
*/
strcpy(ans,"abc");
return 1;
}
Обновление
Всем спасибо за внимание, пока составлял минимальный код, проблема как-то исчезла.
Видимо, переполнялся стек, переменная, в которую возвращался ans была описана как:
char *path;
Я заменил на
char path[256];
Кроме этого, программа, которую я запускаю почему-то запускается только через execl() с параметрами командной строки (а без них падает), это к странному поведению с закомменченой функцией.