открытый () консоль для дескрипторов файлов по умолчанию

Я читаю реализацию программной оболочки в C (оболочка xv6 от 6,828 хода Разработки Операционной системы MIT).

main() функция для этой оболочки запускается со следующего кода:

//Assumes three file descriptors open
while((fd = open("console", O_RDWR)) >= 0){
    if(fd >= 3){
        close(fd)
        break;
    }
}

Это - кавычка из книги xv6, которая объясняет код выше:

"Оболочка гарантирует, что всегда имеет три дескрипторов файлов, открытые, которые являются дескрипторами файлов по умолчанию для консоли".


Я понимаю это open() возвратит дескриптор файла с самым низким доступным количеством, таким образом этот код удостоверяется, что существует не больше, чем три открытые дескрипторов файлов, который довольно очевиден после чтения объяснения автора.

Но, часть, которую я не понимаю:

  1. То, почему делает оболочку, хочет закрыть все дескрипторы файлов, но 0, 1 и 2? В конце концов, гарантируется, что 0, 1 и 2 будет связан с консолью, не так ли? Почему оболочка должна заботиться о дескрипторах файлов с большим закрываемым числом?

  2. Я предполагаю, что действительно не понимаю цели консоли (/dev/console?) файл здесь.

3
14.01.2020, 21:48
1 ответ

Этот фрагмент кода открывается /dev/console. Получающийся дескриптор файла является дескриптором файла с самым низким номером, который не уже открыт. Если то число равняется самое большее 2, цикл выполняется снова. Если то число равняется 3 или выше, дескриптор закрывается и остановки цикла.

Когда цикл закончится, дескрипторы файлов от 0 до 2 (stdin, stdout и stderr), как гарантируют, будут открыты. Или они были открыты прежде и могут быть подключены к любому файлу, или они были просто открыты, и они подключены с /dev/console.

Выбор /dev/console является странным. Я ожидал бы /dev/tty, который всегда является терминалом управления, связанным с группой процесса обработки вызовов. Это - один из нескольких файлов, которых стандарт POSIX требует для существования. /dev/console системная консоль, которая является, куда сообщения системного журнала, отправленные в консоль, идут; для оболочки не полезно заботиться об этом.

1
27.01.2020, 21:32

Теги

Похожие вопросы