私はexec()とfork()で簡単な例を作ろうとしています。しかし、私は少し問題があると私はそれを修正する方法を理解していない。Exec(cdとls)とフォークコールC
コードは3つのフォークを行い、各子では1つのexecを呼び出します。最初のシステムコールは "who"、 "cd"、 "ls -ls"の後です。私の問題は次のとおりです。 "cd"を作成した後、 "ls"呼び出しは現在のディレクトリにファイルを表示しません。ですから、もし私が 'dir1/dir2'を持っていれば、私は "cd"しますが、 "ls"を実行すると、プログラムは 'dir/dir2'にファイルを表示します。
1人の子供が他の子供の変更にアクセスする可能性がありますか?
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を使用すると、現在のディレクトリをフォークまたは現在の子ディレクトリだけで作成できる将来の子に変更しますか? –
@GabrielaCavalcante fork(2)で作成された子プロセスは、その親の現在の作業ディレクトリを継承します。そう、はい、すべての子供は変更されたものを持っています。 – fluter