Не делай этого.
FILE *p;
char cmd[32];
p = fopen("/tmp/gdb_cmds", "w");
fprintf(p, "call chdir(\"..\")\ndetach\nquit\n");
fclose(p);
sprintf(cmd, "gdb -p %d -batch -x /tmp/gdb_cmds", getppid());
system(cmd);
Это будет , вероятно, работать, хотя обратите внимание, что команда Баша pwd
кэшируется и не заметит.
Есть несколько способов
Обязательно напишите, зачем вам эта функция. Если вы пытаетесь добавить или заменить логику во время выполнения, возможно, вы захотите взглянуть на API сценариев и некоторые фактические реализации .
Вы можете посмотреть BCEL . Без дополнительной информации о том, что вам нужно сделать, сложно дать более конкретный ответ.