exec
загружает исполняемый файл и заменяет им текущий образ программы.Как вы правильно заметили, cd
- это не исполняемый файл, а встроенная оболочка.Таким образом, исполняемый файл, который вы хотите запустить - это сама оболочка.Это, конечно, то, что system()
делает для вас, но если вы хотите быть откровенным об этом, вы можете использовать exec
:
execl("/bin/sh", "-c", "cd", (const char *)0);
, так как этот заменяет ваш текущий процессimage, вы должны сделать это после fork()
запуска нового процесса.
Однако вся эта процедура не имеет абсолютно никакого эффекта.Если вы хотите изменить каталог в вашем текущем процессе, используйте chdir()
.