open
возвращает значение там. Преобразование в пустоту используется для указания компилятору, что возвращаемое значение намеренно игнорируется.
Функция init
- это та, в которой текущий поток готов выполнитьinit
программа в пространстве пользователя.init
будет ожидать открытия стандартных дескрипторов in, out и error.Полный код такой:
(void) open("/dev/tty1",O_RDWR,0);
(void) dup(0);
(void) dup(0);
Нет необходимости хранить возвращаемое значение для чего-либо, поскольку гарантированно open
используется самый низкий свободный дескриптор , и ни один из них не используетсяв процессе до входа в эту функцию, таким образом, open
вернет 0. То же правило возврата наименьшего свободного применяется и к dup
.После этих 3 вызовов все дескрипторы 0, 1 и 2 совместно используют одно и то же описание файла , что также означает, что вы можете писать в стандартный и читать из стандартной ошибки.
Возможно, этомикрооптимизация, но в действительности нет необходимости использовать переменную и заставлять компилятор генерировать некачественный код, когда известно возвращаемое значение open - оно равно , в конце концов аналогично
int fd = open("/dev/tty1",O_RDWR,0);
assert(fd == 0);
(void) dup(fd);
(void) dup(fd);
В текущей редакции там есть утверждение на месте, проверяющее, что open
не отказывает:
/* Open the /dev/console on the rootfs, this should never fail */
if (ksys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
pr_err("Warning: unable to open an initial console.\n");
(void) ksys_dup(0);
(void) ksys_dup(0);
Однако,фактические возвращаемые значения дескриптора файла игнорируются.