Роббинс Арнольд
Шрифт:
Вот результаты запуска программы:
Случайно мы знаем, что каждый дисковый блок файла использует 4096 байтов. (Откуда мы это знаем, обсуждается в разделе 5 4.2 «Получение информации о файле». Пока примите это как данное.) Финальная команда bc указывает, что файлу размером 81944 байтов нужен 21 дисковый блок. Однако, опция -s команды ls, которая сообщает нам, сколько блоков использует файл на самом деле, показывает, что файл использует лишь 16 блоков! [48] Отсутствующие блоки в файле являются дырами. Это показано на рис. 4.2.
48
По крайней мере, три из этих блоков содержат данные, которые мы записали, другие для использования операционной системой при отслеживании размещения этих данных — Примеч. автора.
Рис. 4.2. Дыры в файле
ЗАМЕЧАНИЕ.
На практике сохранение данных путем использования двоичного ввода/вывода является решением, которое необходимо тщательно взвесить. Например, что если предположить, что вам нужно переместить данные на систему, использующую отличный порядок байтов для целых? Или другие форматы чисел с плавающей точкой? Или на систему с другими требованиями выравнивания? Игнорирование подобных вопросов может стать слишком дорогостоящим.
4.6. Создание файлов
Как было описано ранее,
4.6.1. Определение начальных прав доступа к файлу
Как пользователь GNU/Linux, вы знакомы с правами доступа к файлу, выдаваемыми командой '
Когда вы создаете файл, вы должны знать, какую защиту необходимо назначить новому файлу. Вы можете сделать это с помощью простого восьмеричного числа, если захотите, и такие числа довольно обычно можно увидеть в старом коде. Однако, лучше использовать побитовую операцию OR для одной или более символических имен из
Таблица 4.5. Символические имена POSIX для режимов доступа к файлу
Символическое имя | Значение | Комментарий |
---|---|---|
S_IRWXU | 00700 | Разрешение на чтение, запись и исполнение для владельца |
S_IRUSR | 00400 | Разрешение на чтение для владельца |
S_IREAD | Аналогично S_IRUSR | |
S_IWUSR | 00200 | Разрешение на запись для владельца |
S_IWRITE | Аналогично S_IWUSR | |
S_IXUSR | 00100 | Разрешение на исполнение для владельца. |
S_IEXEC | Аналогично S_IXUSR | |
S_IRWXG | 00070 | Разрешение на чтение, запись и исполнение для группы |
S_IRGRP | 00040 | Разрешение на чтение для группы |
S_IWGRP | 00020 | Разрешение на запись для группы. |
S_IXGRP | 00010 | Разрешение на исполнение для группы |
S_IRWXO | 00007 | Разрешение на чтение, запись и исполнение для остальных. |
S_IROTH | 00004 | Разрешение на чтение для остальных. |
S_IWOTH | 00002 | Разрешение на запись для остальных |