русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-28; просмотров: 1645; Нарушение авторских прав


Возвращают дескриптор файла open, creat, dup, pipe, close
Преобразуют имя в описатель open, creat, chdir, chmod, stat, mkfifo, mound, mknod, link, unmount, unlink, chown
Назначают inode 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 –дисциплина FIFOS_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() и rmdir(). При создании каталога посредством системного вызова mkdir() в него помещается две ссылки ("." и "..").

#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int mkdir (char *pathname, mode_t mode); int rmdir (char *pathname);

Открытие и закрытие каталога выполняется системными вызовами opendir() и closedir(). При успешном открытии каталога системный вызов возвращает указатель на переменную типа DIR, являющуюся дескриптором каталога, определенную в файле dirent.h и используемую при чтении и записи в каталог. При неудачном вызове возвращается значение NULL.

#include <sys/types.h> #include <dirent.h> DIR *opendir (char *dirname); int closedir (DIR *dirptr); /* dirptr - дескриптор каталога */

Для смены каталога служит системный вызов chdir():

#include <unistd.h> int chdir (char *pathname);

Чтение записей каталога выполняется системным вызовом readdir(). Системный вызов readdir() по номеру дескриптора каталога возвращает очередную запись из каталога в структуру dirent, либо нулевой указатель при достижении конца каталога. При успешном чтении, указатель каталога перемещается к следующей записи. Дополнительный системный вызов rewinddir() переводит указатель каталога к первой записи каталога.

#include <sys/types.h> #include <dirent.h> struct dirent *readdir (DIR *dirptr); void rewinddir (DIR *dirptr);

Варианты заданий

1. Разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран его содержимое группами в порядке возрастания числа ссылок на файлы (в том числе имена каталогов). Группа представляет собой объединение файлов с одинаковым числом ссылок на них.

2. Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем файлов с заданным расширением. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог.

3. Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем обычных файлов. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог.

4. Разработать программу, которая выводит на экран имена тех каталогов, которые находятся в текущем каталоге и не содержат в себе подкаталогов.

5. Разработать программу, которая выводит на экран имена тех каталогов, которые находятся в текущем каталоге и содержат в себе подкаталоги.

6. Разработать программу, которая выводит на экран содержимое текущего каталога, упорядоченное по времени создания файлов. При этом имена каталогов должны выводиться последними.

7. Разработать программу, которая выводит на экран содержимое текущего каталога в порядке возрастания размеров файлов. При этом имена каталогов должны выводиться первыми.

8. Разработать программу, которая выводит на экран содержимое текущего каталога в алфавитном порядке. Каталоги не выводить.

9. Разработать программу, которая просматривает текущий каталог и выводит на экран имена всех встретившихся в нем каталогов. Затем осуществляется переход в родительский каталог, который затем становится текущим, и указанные выше действия повторяются до тех пор, пока текущим каталогом не станет корневой каталог.

10. Разработать программу, которая осуществляет просмотр текущего каталога и выводит на экран имена находящихся в нём каталогов, упорядочив их по числу файлов и каталогов, содержащихся в отображаемом каталоге. Для каждого такого каталога указывается число содержащихся в нём файлов и каталогов.

Контрольные вопросы

1. Что представляет собой суперблок?

2. Что представляет собой список свободных блоков?

3. Что представляет собой список свободных описателей файлов?

4. Как производится выделение свободных блоков под файл?

5. Как производится освобождение блоков данных, занятых под файл?

6. Каким образом осуществляется монтирование дисковых устройств?

7. Каково назначение элементов структуры stat?

8. Каким образом осуществляется защита файлов в ОС UNIX?

9. Каковы права доступа к файлу, при которых владелец может выполнять все операции (r, w, x), а прочие пользователи - только читать?

10. Что выполняет системный вызов lseek(fd, (off_t)0, SEEK_END)?

 



<== предыдущая лекция | следующая лекция ==>
Методические указания к лабораторной работе | Методические указания к лабораторной работе


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.