#include #include #include #include #include static void terminate_libc() { fclose(stdout); fclose(stderr); } static void check_for_file(int fd, FILE** target_stream, const char* path, const char* mode) { if (lseek(fd, 0, SEEK_CUR) < 0) { if (errno == EBADF) *target_stream = fopen(path, mode); else exit(-127); if (!*target_stream) exit(-127); errno = 0; } else { *target_stream = fdopen(fd, mode); } } extern "C" void initialize_libc() { check_for_file(STDOUT_FILENO, &stdout, "/dev/console", "rw"); check_for_file(STDERR_FILENO, &stderr, "/dev/console", "rw"); atexit(terminate_libc); }