Теория вычислительных процессов и структур — страница 8

  • Просмотров 6046
  • Скачиваний 318
  • Размер файла 78
    Кб

envp[i] << " ";    }}Для работы с каталогами существуют системные вызовы: int mkdir (const char *pathname, mode_t mode) – создание нового каталога, int rmdir(const char *pathname) – удаление каталога.Первый параметр – имя создаваемого каталога, второй – права доступа: retval=mkdir(“/home/s1/t12/alex”,0777); retval=rmdir(“/home/s1/t12/alex”);Заметим, что вызов rmdir(“/home/s1/t12/alex”) будет успешен, только если удаляемый каталог пуст, т.е. содержит записи “точка” ( . ) и “двойная точка” (..). Для

открытия или закрытия каталогов существуют вызовы: #include <dirent.h> DIR *opendir (const char *dirname); int closedir( DIR *dirptr); Пример вызова: if ((d= opendir (“/home/s1”))==NULL) /* ошибка открытия */ exit(1);Передаваемый вызову opendir параметр является именем открываемого каталога. При успешном открытии каталога dirname вызов opendir возвращает указатель на переменную типа DIR. Определение типа DIR, представляющего дескриптор открытого каталога, находится в заголовочном файле

“dirent.h”. В частности, поле name структуры DIR содержит запись имени файла, содержащегося в каталоге: DIR *d; ff=d->name ; printf(“%sn”, ff);Указатель позиции ввода/вывода после открытия каталога устанавливается на первую запись каталога. При неуспешном открытии функция возвращает значение NULL. После завершения работы с каталогом необходимо его закрыть вызовом closedir. Для чтения записей каталога существует вызов: struct dirent *readdir(DIR *dirptr); Пример

вызова: DIR *dp; struct dirent *d; d=readdir(dp);При первом вызове функции readdir в структуру dirent будет считана первая запись каталога. После прочтения всего каталога в результате последующих вызовов readdir будет возвращено значение NULL. Для возврата указателя в начало каталога на первую запись существует вызов: void rewindir(DIR *dirptr); Чтобы получить имя текущего рабочего каталога существует функция: char *getcwd(char *name, size_t size);В переменную name при успешном вызове

будут помещено имя текущего рабочего каталога: char name1[255]; if (getcwd(name1, 255)==NULL) perror(“ошибка вызова”) else printf(“текущий каталог=%s”,name1); Вызов: int chdir(const char *path);изменяет текущий рабочий каталог на каталог path. Системные вызовы stat и fstat позволяют процессу определить значения свойств в существующем файле: #include <sys/types.h> #include <sys/stat.h> int stat (const char *pathname, struct stat *buf); int fstat (int filedes, struct stat *buf); Системный вызов stat имеет два аргумента: pathname – полное

имя файла, buf – указатель на структуру stat, которая после успешного вызова будет содержать связанную с файлом информацию. Системный вызов fstat функционально идентичен системному вызову stat. Отличие состоит в интерфейсе: вместо полного имени файла вызов fstat ожидает дескриптор файла, поэтому он может использоваться только для открытых файлов. Определение структуры stat находится в системном заголовочном файле <sys/stat.h> и включает