Понимание файловых дескрипторов Unix - PullRequest
0 голосов
/ 13 сентября 2011

Из книги программирования сокетов Биджа:

Когда Unix-программы выполняют какие-либо операции ввода-вывода, они делают это, читая или запись в дескриптор файла. Дескриптор файла - это просто целое число связано с открытым файлом.

Говорит ли он, что программы читают и "записывают" в "целое число"? Если да, то как это возможно и что это значит?

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Это означает, что для чтения из файла или записи в него вам необходимо выполнить системный вызов, а дескриптор вашего файла (целое число) - это параметр, который вы используете, чтобы указать ядру, о каком файле вы говорите. Тот факт, что они являются целыми числами, относительно неинтересен, они могут быть чем угодно; вы используете их только прозрачно, то есть вы открываете файл, сохраняете дескриптор, а затем передаете дескриптор ядру для любых операций с этим файлом. Его значение интересно только ядру. Одним заметным исключением являются специальные файловые дескрипторы 0, 1 и 2 (stdin, stdout и stderr), но даже для них обычно используются предопределенные константы, а не литеральные целочисленные значения.

2 голосов
/ 15 сентября 2013

Я боролся с файловыми дескрипторами и beejs книгой тоже.Момент просветления был, когда я понял, как работает функция c dup .

PS: Это поздний ответ, но, возможно, он может кому-то помочь

1 голос
/ 13 сентября 2011

Это говорит о том, что файловые дескрипторы реализованы как целое число. То есть каждому открытому файлу дается уникальный способ ссылки на него, дескриптор файла, который на самом деле является просто уникальным числом.

Когда вы делаете:

int fd = open("filename", flags);

fd - это целое число, которое возвращается реализацией. Он уникален для файла, который вы открыли в своей программе и передали вам, чтобы позже вы могли ссылаться на тот же файл, например, для read / write / close и т. д. Это не более чем токен, используемый для связывания последовательности операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...