Системные вызов для работы с файлами: open, close, creat, read, write, lseek, ioctl. Команда umask.
open(char *path, int flag, mode_t mode) - открывает указанный фал для чтения и записи.
первый аргумент – указатель на имя файла, второй – режим открытия файла (см ниже), третий - определяет права доступа к файлу, используется только при создании файла.
Если операция открытия файла закончилась удачно, то будет возвращен файловый дескриптор — указатель на файл, использующийся в последующих операциях чтения, записи и т. д. Значение файлового дескриптора определяется минимальным свободным слотом в таблице дескрипторов процесса. В случае неудачи возвратит -1, а глобальная переменная errno будет содержать код ошибки
!если права доступа к файлу не разрешают то, что просит флаг, операция открытия файла завершится с ошибкой!
!только один из флагов 0_RDONLY, 0_WRONL, O_RDWR может быть указан в аргументе flag!
Основные флаги
O_RDONLY - Открыть файл только для чтения
0_WRONL - Открыть файл только для записи
O_RDWR - Открыть файл для чтения и записи
O_APPEND - Производить добавление в файл
O_CREAT - Если указанный файл уже существует, этот флаг не принимается во внимание. В противном случае, создается файл, атрибуты которого установлены по умолчанию
0_EXCL - Если указан совместно с O_CREAT, то вызов ореп(2) за% вершится с ошибкой, если файл уже существует
О_SYNC - Все записи в файл, а также соответствующие им изменения в метаданных файла будут сохранены на диске до возврата из вызова write
creat(path, mode) – аргументы – имя файла и права доступа. Если файл уже существует, его длина сокращается до 0, а права доступа остаются прежними.
Короче, тоже самое что open(path, О_WRONGLY | О_CREAT | О_TRUNK, mode);
close - разрывает связь между файловым дескриптором и открытым файлом. В случае успеха возвращает 0, иначе -1 (ну как всегда)
Вообще, exit закрывает открытые файлы, так что close не нужен часто.
lseek(desc, col, whence) - установливает файловый указатель(откуда начинать писать/читать) на любое место файла и тем самым обеспечить прямой доступ к любой части файла. Аргументы – дескриптор, на сколько, каким образом. Возвращает целое число, равное текущему значению файлового указателя.
Значения whence:
SEEK_CUR - Указатель смещается на col байт от текущего положения
SEEK_END - Указатель смещается на col байт от конца файла
SEEK_SET - Указатель устанавливается равным col
!указатель может выйти за размер файла, тогда при следующей записи размер файла увеличится, но можно старым концом и новым продолжением возникнет дыра(скорее всего заполненная нулями, но все равно отстой)
read(desc, *buf, nbyte) – считать nbyte из файла с дескриптором desc и поместить эти данные в буфер. В конце увеличивает значение файлового указателя на nbyte.
write(desc, *buf, nbyte) – записать nbyte байт в файлс дескриптором. Данные для записи находятся в буфере приложения, указанном аргументом buf. После завершения операции значение файлового указателя будет увеличено на nbyte.
Но это всё низкоуровневые методы, если импортировать библиотеку <stdio.h> тогда буферы и дескрипторы будут по умолчанию заполняться и всё станет удобнее
Перенаправление ввода/вывода с помощью функции dup2 .
dup – дублирует существующий файловый дескриптор, возвращает новый дескриптор. Оба указывают на один и тот же файл и на одно и то же место, откуда начинать запись
dup2(старый, новый) – делает тоже самое, но при этом позволяет указать номер файлового дескриптора, который требуется получить после дублирования. Если новый занят, его сначала закроют, а потом в него засунут то, что надо.
Все подряд функции
getenv(name) – возвращает значение переменной окружения name(помогает проверить,определена переменна или нет)
putenv – помещает переменную и её значение в окружение программы
grep – поиск заданных подстрок в файлах
chmod – меняет права доступа к файлу
chroot – изменяет корневой каталог процесса
chdir – изменяет текукщий каталог
Дата добавления: 2019-11-25; просмотров: 113; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!
