рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Функции для работы с файловой системой

Функции для работы с файловой системой - раздел Менеджмент, Управление ресурсами в ОС 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

Управление ресурсами в ОС UNIX... ВВЕДЕНИЕ... Одной из задач любой операционной системы ОС является поддержание надежного и эффективного механизма управления...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Функции для работы с файловой системой

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Методические указания к лабораторной работе
Обычно в ОС UNIX доступны несколько интерпретаторов. Наиболее распространены Bourne-shell (или просто - shell), C-shell, Korn-shell. В идейном плане все эти интерпретаторы близки и в дальнейшем реч

Контpольные вопpосы
21. Что такое внутренние и внешние команды Shell-интерпретатора? Приведите примеры внутренних команд. 22. Какие существуют средства группирования команд? Приведите примеры использования.

Методические указания к лабораторной работе
Интерфейс между пользовательской программой и внешним устройством (или между двумя пользовательскими программами) в ОС UNIX осуществляется в рамках единой структуры данных, называемой файлом ОС UNI

Методические указания к лабораторной работе
Основным назначением системы управления вводом-выводом ОС UNIX является создание интерфейса между программой и внешним усройством компьютера. Поскольку любая операция ввода-вывода осуществляется ка

Контpольные вопpосы
1. Какова структура описателей файлов, таблицы файлов, таблицы открытых файлов процесса? 2. Какова цепочка соответствия дескриптора файла, открытого процессом, и файлом на диске?

Методические указания к лабораторной работе
Для порождения нового процесса (процесс-потомок) используется системный вызов fork(). Формат вызова: int fork() Порожденный таким образом процесс представляет собой точную копию с

Методические указания к лабораторной работе
В предыдущей лабораторной работе были рассмотрены различные программные средства, связанные с созданием и управлением процессами в рамках ОС UNIX. Данная лабораторная работа предполагает комплексно

Методические указания к лабораторной работе
При выполнении операции перенаправления ввода-вывода важным моментом является наследование пользовательских дескрипторов, осуществляемое с помощью системных вызовов dup() и fcntl(). Систем

Методические указания к лабораторной работе
Механизм IPC (Inter-Process Communication Facilities) включает: средства, обеспечивающие возможность синхронизации процессов при доступе к совместно используемым ресурсам (семафоры -

I. Семафоры.
Для работы с семафорами поддерживаются три системных вызова: semget() для создания и получения доступа к набору семафоров; semop() для манипулирования значениями семафоров

II. Очереди сообщений.
Для обеспечения возможности обмена сообщениями между процессами механизм очередей поддерживается следующими системными вызовами: msgget() для образования новой очереди сообщений или

Адресация и создание сокета
Совокупная информация об адресе, порте программы-адресата (абонента), модели соединения, протоколе взаимодействия составляет т.н. сокет (конечная абонентская точка), формально представляющий собой

Int socket (int domain, int type, int protocol);
Параметр domain - домен связи, в котором будет использоваться сокет (значение AF_INET - для домена Internet (соединение через сеть), AF_UNIX

Связывание
Системный вызов bind() связывает сетевой адрес компьютера с идентификатором сокета. #include<sys/types.h> #include<sys/socket.h&

Прием запроса на установку TCP-соединения
Когда сервер получает от клиента запрос на соединение, он создает новый сокет для работы с новым соединением. Первый же сокет используется только для установки соединения. Дополнительный сокет для

Подключение клиента
Для выполнения запроса на подключение к серверному процессу клиент использует системный вызов connect(). #include<sys/types.h> #inc

Пересылка данных
Для сокетов типа SOCK_STREAM дескрипторы сокетов, полученные сервером посредством вызова accept() и клиентом с помощью вызова socked(), могут испо

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги