Linux программирование в примерах | страница 87
Рис. 4.2. Дыры в файле
ЗАМЕЧАНИЕ. >ch04-holes.c
не осуществляет непосредственный двоичный ввод/вывод. Это хорошо демонстрирует красоту ввода/вывода с произвольным доступом: вы можете рассматривать дисковый файл, как если бы он был очень большим массивом двоичных структур данных.
На практике сохранение данных путем использования двоичного ввода/вывода является решением, которое необходимо тщательно взвесить. Например, что если предположить, что вам нужно переместить данные на систему, использующую отличный порядок байтов для целых? Или другие форматы чисел с плавающей точкой? Или на систему с другими требованиями выравнивания? Игнорирование подобных вопросов может стать слишком дорогостоящим.
4.6. Создание файлов
Как было описано ранее, >open()
, очевидно, открывает лишь существующие файлы. Данный раздел описывает, как создавать новые файлы. Есть две возможности: >creat()
и >open()
с дополнительными файлами. Первоначально >creat()
был единственным способом создания файла, но затем эта возможность была добавлена также и к >open()
. Оба механизма требуют указания начальных прав доступа к файлу.
4.6.1. Определение начальных прав доступа к файлу
Как пользователь GNU/Linux, вы знакомы с правами доступа к файлу, выдаваемыми командой '>ls -l
': на чтение, запись и исполнение для каждого из владельца файла, группы и остальных. Различные сочетания часто выражаются в восьмеричной форме, в частности, для команд >chmod
и >chmask
. Например, права доступа к файлу >-rw-r--
r-- эквивалентны восьмеричному 0644, a >-rwxr-xr-x
эквивалентно восьмеричному 0755. (Ведущий 0 в нотации С означает восьмеричные значения.)
Когда вы создаете файл, вы должны знать, какую защиту необходимо назначить новому файлу. Вы можете сделать это с помощью простого восьмеричного числа, если захотите, и такие числа довольно обычно можно увидеть в старом коде. Однако, лучше использовать побитовую операцию OR для одной или более символических имен из >
, описанных в табл. 4.5.
Таблица 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 | Аналогично |