Я хочу сделать оболочку, и я хочу обрабатывать несколько труб.Я пытался понять, как работает dup2 () и fork.Обычно fork () создает новый дочерний процесс, который точно такой же, как и отец.Но когда я использую dup2 перед разветвлением, кажется, что он не работает так, как должен.Но когда я использую dup2 () в дочернем процессе, он работает ... Я не понимаю, потому что обычно fork создает копию вызывающего процесса ...
Может кто-нибудь объяснить, почему?
Это не работает:
int fd = open("toto.txt", O_RDONLY);
char str[10] = {0};
int test[2] = {0, 0};
char *av[] = {"/bin/ls", NULL};
pipe(test);
dup2(test[1], 1);
if (fork() == 0) {
execve(av[0], av, env);
}
else {
wait(NULL);
read(test[0], str, 10);
write(1, str, 10);
}
, но это работает:
int fd = open("toto.txt", O_RDONLY);
char str[10] = {0};
int test[2] = {0, 0};
char *av[] = {"/bin/ls", NULL};
pipe(test);
if (fork() == 0) {
dup2(test[1], 1);
execve(av[0], av, env);
}
else {
wait(NULL);
read(test[0], str, 10);
write(1, str, 10);
}