Книга: Операционная система UNIX
Перемещение по файловой системе
Перемещение по файловой системе
Каждый процесс имеет два атрибута, связанных с файловой системой — корневой каталог (root directory) и текущий рабочий каталог (current working directory). Когда некоторый файл адресуется по имени (например, в системных вызовах open(2), creat(2) или readlink(2)), ядро системы производит поиск файла, начиная с корневого каталога, если имя файла задано как абсолютное, либо текущего каталога, если имя файла является относительным. Абсолютное имя файла начинается с символа '/', обозначающего корневой каталог. Все остальные имена файлов являются относительными. Например, имя /usr/bin/sh является абсолютным, в то время как mydir/test1.c или ../andy/mydir/test1.c — относительным, при котором фактическое расположение файла в файловой системе зависит от текущего каталога.
Процесс может изменить свой корневой каталог с помощью системного вызова chroot(2) или fchroot(2).
#include <unistd.h>
int chroot (const char *path);
int fchroot(int fildes);
После этого поиск всех адресуемых файлов с абсолютными именами будет производиться, начиная с нового каталога, указанного аргументом path
. Например, после изменения корневого каталога на домашний каталог пользователя абсолютное имя инициализационного скрипта .profile станет /.profile.[22]
Изменение корневого каталога может потребоваться, например, при распаковке архива, созданного с абсолютными именами файла, в другом месте файловой системы, либо при работе над большим программным проектом, затрагивающим существенную часть корневой файловой системы. В этом случае для отладочной версии удобно создать собственную корневую иерархию.
Процесс также может изменить и текущий каталог. Для этого используются системные вызовы chdir(2) или fchdir(2):
#include <unistd.h>
int chdir(const char* path);
int fchdir(int fildes);
Например, внутренняя команда командного интерпретатора cd может быть реализована следующим кодом:
...
char newdir[PATH_MAX];
...
/* Предположим, что имя нового каталога,
введенного пользователем, уже находится
в переменной newdir*/
if (chdir(newdir) == -1) perror("sh: cd");
...
- 8.4.3. Перемещение по иерархии: nftw()
- 17.14. Анимирование и перемещение видов
- Перемещение курсора
- Перемещение по диалоговым окнам
- Восстановление из резервной копии на системе-приемнике
- Создание многофайловой базы данных
- Глава 5. Разработка и анализ бизнес-планов в системе Project Expert
- ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ
- В моей системе нет утилиты Настройка системы (msconfig). Где ее взять?
- Как получить исчерпывающую информацию о драйверах, установленных в системе?
- Windows требует вставить установочный компакт-диск, которого у меня нет, но его копия хранится на жестком диске. Как объ...
- Потерялась наклейка с серийным номером Windows. Как найти его в уже установленной системе?