№ Это не совсем безопасно.
Предполагается, что freopen() повторно использует те же файловые дескрипторы, которые не гарантируются. Поэтому, если freopen() использует другой файловый дескриптор, скажем, например, для stdout
, кроме 1
, то ваш последующий write()
с использованием этого файлового дескриптора не будет работать должным образом. Поскольку POSIX для чтения/записи функция использует *_FILENO
определяются как:
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
для соответствующих операций ввода-вывода.
Вместо этого вы могли бы сделать:
#include<unistd.h>
fd = open("/dev/null",O_RDWR);
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
добиться того же. Очевидным недостатком является то, что open()
и dup2()
являются функциями POSIX и не являются частью стандарта C.
Но вы в безопасности, если freopen()
повторно использует дескрипторы файлов 0, 1 & 2 соответственно, или вы не используете IO с потенциально некорректными файловыми дескрипторами.