используйте dup
вместо dup2
. dup
создает дескриптор файла псевдонима, значение которого всегда должно быть наименьшим доступным файловым дескриптором.
new_fd = dup(file);
- В этом утверждении file
может иметь значение 3
(поскольку stdin
- 0
, stdout
- 1
, а stderr
- 2
). поэтому new_fd
будет 4
Если вы хотите перенаправить stdout
в файл. Затем сделайте, как показано ниже.
close(stdout);
new_fd = dup(file);
Теперь dup вернет 1 в качестве псевдонима для дескриптора file
, потому что мы закрыли stdout
, поэтому открытые дескрипторы файла 0,2,3
и 1
являются наименьшими доступный файловый дескриптор.
Если вы используете dup2
, значит, dup2(file,1);
- сделайте так