Чтобы сделать то, что вы пытаетесь сделать, я использую dup2 (2) .
Просто open (2) два файла fd1 и fd2, а затемиспользуйте dup2(fd1, 1)
для stdout и dup2(fd2, 2)
для stderr.
ОС (libc, загрузчик или ядро, не знаю, какой) устанавливает 3 дескриптора открытых файлов перед вводом main:
0 : stdin pipe
1 : stdout pipe
2 : stderr pipe
и из документов dup2:
dup2 (int oldfd, int newfd) делает newfd копией oldfd, при необходимости сначала закрывая newfd
, поэтомудва вызова dup2 заменяют 1 и 2 открытыми файлами.Поэтому после того, как ваш процесс вызовет write (2) (системный вызов всех выходных подпрограмм, таких как вызовы printf и cout) в fd 1 или fd 2, данные будут записаны в ваши файлы, а не в каналы, настроенныесправочная страница OS
справочной страницы :
справочных страниц представлена в главах.запись foo (N) означает справочную страницу с именем "foo" в главе N. Чтобы открыть foo (N), наберите:
$ man N foo
, например, чтобы открыть write (2)тип:
$ man 2 write