int filedes?системные вызовы чтение и запись - PullRequest
0 голосов
/ 06 ноября 2011

Кто-нибудь из вас, ребята, может сказать мне, что означает "int filedes"? http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html

Я заметил, что могу вставить туда любое целое число, и оно работает, но я не знаю, для чего оно ...

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 ноября 2011

Это дескриптор файла.См. http://en.wikipedia.org/wiki/File_descriptor. Так как он представляет смещение для поиска файлов и каналов в таблице, может быть несколько дескрипторов, которые могут возвращать действительные данные.0 = stdin и 2 = stderr будут существовать по умолчанию, или вы можете посмотреть на функцию open, чтобы создать свою собственную.

1 голос
/ 06 ноября 2011

Самое первое предложение описания гласит: «файл, связанный с дескриптором открытого файла, fildes».Другими словами, это указывает на файл, из которого вы читаете.Если ваш read вызов функции работает независимо от того, какой дескриптор файла вы передаете, ваша программа не делает то, о чем вы думаете.

0 голосов
/ 06 ноября 2011

Где-то внутри ядра есть таблица, содержащая записи файловых дескрипторов для каждого процесса.Дескриптор файла - это структура, которая описывает состояние файла.Какую информацию имеет файловый дескриптор?Прежде всего, позиция, из которой может быть выполнена следующая операция чтения / записи.Затем режим доступа к файлу, указанный системным вызовом open.И, наконец, что не менее важно, структура данных, которая представляет информацию файла на диске.В * nix это структура inode.Здесь основной вопрос, на который нужно ответить: где находятся блоки файла на диске.Если у вас есть inode файла в памяти, вы можете быстро найти, где находится N-й блок файла (что означает, что вам не нужно каждый раз анализировать путь и сканировать каждый каталог в пути, чтобы найтиинод).

...