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. So cd
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. See also getcwd(3), errno(3), credentials(7), proc(5) and path_resolution(7).
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 and syscalls(2).
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 with system
or popen
library functions inside your C code) till their termination or some further call to chdir
. But it won't affect the shell in your terminal (where you started your C program).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…