Реферат Курсовая Конспект
Функции для работы с файловой системой - раздел Менеджмент, Управление ресурсами в ОС UNIX Возвращают Дескриптор Файла Преобразую...
|
Возвращают дескриптор файла | Преобразуют имя в описатель | Назначают inode | Работают с атрибутами | Ввод/вывод из файла | Работают со структурой ФС | Управляют деревьями |
Open, creat, dup, pipe, close | Open, creat, chdir, chmod, stat, mkfifo, mound, mknod, link, unmount, unlink, chown | Creat, link, unlink, mknod | Chown, chmod, stat | Read, write, lseek | Mount, unmount | Chmod, chown |
Остановимся на тех из них, которые требуются для выполнения лабораторной работы. Для получения информации о типе файла необходимо воспользо-ваться системными вызовами stat() (fstat()). Формат системных вызовов stat() (fstat()):
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char *name, struct stat *stbuf)
int fstat(int fd, struct stat *stbuf)
Оба системных вызова помещают информацию о файле (в первом случае специфицированным именем name, а во втором - дескриптором файла fd) в структурную переменную, на которую указывает stbuf. Вызывающая функция должна позаботиться о резервировании места для возвращаемой информации; в случае успеха возвращается 0, в противном случае -1 и код ошибки в errno. Описание структуры stat содержится в файле <sys/stat.h>. С небольшими модификациями она имеет вид:
struct stat
{
dev_t st_dev; /* device file */
ino_t st_ino; /* file serial inode */
ushort st_mode; /* file mode */
short st_nlink; /* number of links */
ushort st_uid; /* user ID */
ushort st_gid; /* group ID */
dev_t st_rdev; /* device ident */
off_t st_size; /* size of file */
time_t st_atime; /* last access time */
time_t st_mtime; /* last modify time */
time_t st_ctime; /* last status change */
}
Поле st_mode содержит флаги, описывающие файл. Флаги несут следующую информацию:
S_IFMT 0170000 - тип файла
S_IFDIR 0040000 - каталог
S_IFCHR 0020000 - байт-ориентированный специальный файл
S_IFBLK 0060000 - блок-ориентированный специальный файл
S_IFREG 0100000 - обычный файл
S_IFFIFO 0010000 - дисциплина FIFO
S_ISUID 04000 - идентификатор владельца
S_ISGID 02000 - идентификатор группы
S_ISVTX 01000 - сохранить свопируемый текст
S_ISREAD 00400 - владельцу разрешено чтение
S_IWRITE 00200 - владельцу разрешена запись
S_IEXEC 00100 - владельцу разрешено выполнение.
Символьные константы, четыре первых символа которых совпадают с контекстом S_IF, могут быть использованы для определения типа файла.
Большинство системных вызовов, работающих с каталогами, оперируют структурой dirent, определенной в заголовочном файле <dirent.h>
struct dirent
{
ino_t d_ino; /* номер индексного дескриптора */
char d_name[DIRSIZ]; /* имя файла */
}
Создание и удаление каталога выполняется системным вызовом mkdir():
#include <sys/types.h>
#include <sys/stat.h>
int mkdir (char *pathname, mode_t mode);
При создании каталога посредством системного вызова rmdir() в него помещается две ссылки (. и ..).
#include <unistd.h>
int rmdir (char *pathname);
Открытие и закрытие каталога выполняется системными вызовами opendir() и closedir():
#include <sys/types.h>
#include <dirent.h>
DIR *opendir (char *dirname);
При успешном открытии каталога системный вызов возвращает указатель на переменную типа DIR, являющуюся дескриптором каталога, определенную в файле <dirent.h> и используемую при чтении и записи в каталог. При неудачном вызове возвращается значение NULL.
#include <dirent.h>
int closedir (DIR *dirptr); где dirptr - дескриптор каталога.
Для смены каталога служит системный вызов chdir():
#include <unistd.h>
int chdir (char *pathname);
Чтение записей каталога выполняется системным вызовом readdir():
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir (DIR *dirptr);
Системный вызов readdir() по номеру дескриптора каталога возвращает очередную запись из каталога в структуру dirent, либо нулевой указатель при достижении конца каталога. При успешном чтении, указатель каталога перемещается к следующей записи.
Дополнительный системный вызов
void rewinddir (DIR *dirptr);
переводит указатель каталога к первой записи каталога.
– Конец работы –
Эта тема принадлежит разделу:
Управление ресурсами в ОС UNIX... ВВЕДЕНИЕ... Одной из задач любой операционной системы ОС является поддержание надежного и эффективного механизма управления...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Функции для работы с файловой системой
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов