Changing the directory of the shell through a C++ program

后端 未结 1 1732
北恋
北恋 2020-12-22 03:56

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

相关标签:
1条回答
  • 2020-12-22 04:27

    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).

    0 讨论(0)
提交回复
热议问题