Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
<b>#include <unistd.h></b>
<b>int chdir(const char *path);</b>
Программа может определить свой текущий рабочий каталог, вызвав функцию
getcwd
<b>#include <unistd.h></b>
<b>char *getcwd(char *buf, size_t size);</b>
Функция
getcwd
buf
NULL
ERANGE
size
buf
Функция
getcwd
NULL
EINVAL
EACCESS
Просмотр каталогов
Широко распространенная проблема систем Linux — просмотр каталогов, т.е. определение файлов, размещенных в конкретном каталоге. В программах командной оболочки она решается легко — просто скомандуйте оболочке выполнить подстановку в выражении с метасимволами. В прошлом в разных вариантах UNIX был разрешен программный доступ к низкоуровневой структуре файловой системы. Вы все еще можете открывать каталог как обычный файл и непосредственно считывать элементы каталога, но разные структуры файловых систем и реализации сделали такой подход непереносимым с машины на машину. Был разработан стандартный комплект библиотечных функций, существенно упрощающий просмотр каталогов.
Функции работы с каталогами объявлены в заголовочном файле dirent.h. В них используется структура
DIR
DIR*
FILE*
DIR
Мы рассмотрим следующие функции:
□
opendir
closedir
□
readdir
□
telldir
□
seekdir
□
closedir
opendir
Функция
opendir
DIR
<b>#include <sys/types.h></b>
<b>#include <dirent.h></b>
<b>DIR *opendir(const char *name);</b>
В случае неудачи функция opendir возвращает пустой указатель. Имейте в виду, что для доступа к самому каталогу поток каталога использует низкоуровневый дескриптор файла, поэтому opendir может дать сбой, если открыто слишком много файлов.
readdir
Функция
readdir
dirp
readdir
readdir
NULL
NULL
errno
<b>#include <sys/types.h></b>
<b>#include <dirent.h></b>
<b>struct dirent *readdir(DIR *dirp);</b>
Просмотр каталога с помощью функции
readdir
В состав структуры
dirent
□
ino_t d_ino
□
char d_name[]
Для выяснения других реквизитов файла в каталоге вам необходимо вызвать
stat
telldir
Функция
telldir
seekdir
<b>#include <sys/types.h></b>
<b>#include <dirent.h></b>
<b>long int telldir(DIR *dirp);</b>
seekdir
Функция
seekdir
dirp
loc
telldir
<b>#include <sys/types.h></b>
<b>#include <dirent.h></b>
<b>void seekdir (DIR *dirp, long int loc);</b>
closedir
Функция
closedir
<b>#include <sys/types.h></b>
<b>#include <dirent.h></b>
<b>int closedir(DIR *dirp);</b>
В приведенной далее программе printdir.c (упражнение 3.4) вы соберете вместе множество функций обработки файлов для создания простого перечня содержимого каталога. Каждый файл представлен отдельной строкой. У каждого подкаталога есть имя, за которым следует слэш, и файлы, содержащиеся в подкаталоге, выводятся с отступом шириной в четыре пробела.