Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемДарья Ситникова
1 УПРАВЛЕНИЕ ДИРЕКТОРИЯМИ Системные вызовы и библиотеки Unix SVR4 Иртегов Д.В. ФФ/ФИТ НГУ Электронный лекционный курс подготовлен в рамках реализации Программы развития НИУ-НГУ на г.г.
2 СВОЙСТВА ДИРЕКТОРИИ используется для организации обычных файлов, программных каналов, специальных файлов и других директорий формат, требуемый операционной системой содержит имена файлов и inode-номера записи в директории называются связями нет ограничения глубины вложенности поддиректорий права доступа –r: право на чтение –w: право на запись –x: право на поиск
3 Системно-независимая структура записи в директории struct dirent { ino_t d_ino; /* "inode number" of entry */ off_t d_off; /* offset of disk directory entry */ unsigned short d_reclen; /* length of this record */ char d_name[1]; /* name of file */ };
4 Изменение текущей директории ИСПОЛЬЗОВАНИЕ #include int chdir(conts char *path); int fchdir(int fildes); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
5 Создание директории ИСПОЛЬЗОВАНИЕ #include int mkdir(const char *path, int mode); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
6 Удаление директории ИСПОЛЬЗОВАНИЕ #include int rmdir(conts char *path); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
7 Создание и удаление цепочки директорий ИСПОЛЬЗОВАНИЕ #include int mkdirp(conts char *path, int mode); int rmdirp(char *path, char *path1); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - mkdirp -1 и errno установлена rmdirp - -1, -2 или -3
8 Чтение директории ИСПОЛЬЗОВАНИЕ #include DIR *opendir(const char *filename); struct dirent *readdir(DIR *dirp); long teldir(DIR *dirp); void seekdir(DIR *dirp, long loc); void rewinddir(DIR *dirp); int closedir(DIR *dirp); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех – opendir, readdir - указатель на структуру closedir - 0 telldir - текущая позиция неуспех - opendir, readdir - NULL и errno установлена telldir, closedir - -1 и errno установлена
9 Чтение директории readdir возвращает один и тот же указатель, поэтому память из-под struct dirent * освобождать не надо В действительности, структура DIR содержит небольшой кольцевой буфер Есть форма int readdir_r(DIR *restrict dirp, struct dirent *restrict entry, struct dirent **restrict result); При размещении struct dirent необходимо также разместить память под строку d_name; размер этой строки рекомендуется определять при помощи pathconf(dir, _PC_NAME_MAX), т.е. динамически
10 Создание связи ИСПОЛЬЗОВАНИЕ #include int link(const char *path1, const char *path2); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
11 Жесткая связь
12 Создание символической связи ИСПОЛЬЗОВАНИЕ #include int symlink (const char *name1, const char *name2); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
13 Символическая связь
14 Чтение значения симлинка ИСПОЛЬЗОВАНИЕ #include int readlink(const char *path, void *buf, size_t bufsize); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - количество символов, считанных в буфер неуспех - -1 и errno установлена
15 Следование симлинкам следуют символическим связям open(2) chmod(2) chown(2) Не следуют символическим связям chgrp(2) chdir(2) stat(2) lchown(2) readlink(2) lstat(2) link(2) unlink(2) rename(2) rmdir(2)
16 Удаление записи из директории ИСПОЛЬЗОВАНИЕ #include int unlink(const char *path); int remove( const char *filename); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех - -1 и errno установлена
17 Переименование файла ИСПОЛЬЗОВАНИЕ #include int rename(const char *old, const char *new); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех - 0 неуспех -1 и errno установлена
18 Разбор путевого имени ИСПОЛЬЗОВАНИЕ cc -lgen #include char *dirname(char *path); char *basename(char *path); ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ успех – компонент имени неуспех - NULL
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.