我想用exec()和fork()做一個簡單的例子。但我有一個小問題,我不明白如何解決它。Exec(cd和ls)和Fork調用C
該代碼確實有3個分支,並且在每個孩子中它都會調用一個exec。第一個系統調用是「誰」,在「cd」和「ls -ls」之後。我的問題是:在製作「cd」後,「ls」調用不會顯示當前目錄中的文件。所以,如果我有'dir1/dir2',我會做'cd',但是當我做'ls'時,程序顯示'dir/dir2'中的文件。
可能有一個孩子訪問另一個孩子所做的更改嗎?
while (cont_arg < 3) {
pid_t pid = fork();
if (pid == -1) {
perror("fork failed");
exit(EXIT_FAILURE);
} else if (pid == 0) {
printf("\n---: child process ID -> %d.\n", getpid());
printf("command --- > %s\n", command[cont_arg]);
execlp(command[cont_arg], command[cont_arg], arg[cont_arg], NULL);
_exit(EXIT_SUCCESS);
} else {
wait(&status);
}
cont_arg++;
}
非常感謝!我使用了chdir,它工作。 –
最後一個問題,當我使用chdir時,我會將當前目錄更改爲將來可以使用fork創建的子目錄,或者只更改當前子目錄? –
@GabrielaCavalcante通過fork(2)創建的子進程繼承其父進程的當前工作目錄。所以是的,所有的孩子都會有變化的。 – fluter