I'm trying to write a simple C++ program to execute Linux commands. I'm stuck at changing the directories (commands like chdir
and cd
don't work). This is what I have so far:
system("echo -n '1. Current Directory is '; pwd");
system("chdir Desktop");
This is not possible, if you want to change the directory (i.e.
cd
, that is chdir(2) ...) of the shell which has invoked your program. Socd
has to be a bash(1) builtin.The reason is that
chdir
affects only the calling process (which would be your C program) not the parent process. Each process has its own current directory.If you call system(3) it will fork(2) a new shell and execve(2)
/bin/sh -c
so only the forked shell can change its current directory.You need to read Advanced Linux Programming.
Perhaps you want to call
chdir
directly inside your C program. This will affect the current process and all future child processes (including those started withsystem
orpopen
library functions inside your C code) till their termination or some further call tochdir
. But it won't affect the shell in your terminal (where you started your C program).