Марк Митчелл - Программирование для Linux. Профессиональный подход

Здесь есть возможность читать онлайн «Марк Митчелл - Программирование для Linux. Профессиональный подход» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2002, ISBN: 2002, Издательство: Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программирование для Linux. Профессиональный подход: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программирование для Linux. Профессиональный подход»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга в основном посвящена программированию в среде GNU/Linux. Авторы применяют обучающий подход, последовательно излагая самые важные концепции и методики использования расширенных возможностей системы GNU/Linux в прикладных программах. Читатели научатся писать программы, к интерфейсу которых привыкли пользователи Linux; освоят такие технологии, как многозадачность, многопотоковое программирование, межзадачное взаимодействие и взаимодействие с аппаратными устройствами; смогут улучшить свои программы, сделав их быстрее, надежнее и безопаснее; поймут особенности системы GNU/Linux, ее ограничения, дополнительные возможности и специфические соглашения.
Книга предназначена для программистов, уже знакомых с языком С и имеющих базовый опыт работы в GNU/Linux.

Программирование для Linux. Профессиональный подход — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программирование для Linux. Профессиональный подход», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Б.6. Чтение содержимого каталога

В Linux имеются функции, предназначенные для чтения содержимого каталога. И хотя они не относятся к низкоуровневым функциям, мы все же решили их описать, так как они широко применяются в программах.

При чтении содержимого каталога необходимо придерживаться такой последовательности действий.

1. Вызовите функцию opendir(), передав ей путевое имя требуемого каталога. Эта функция возвращает дескриптор типа DIR*, который можно использовать для доступа к содержимому каталога. В случае ошибки возвращается NULL.

2. Последовательно вызывайте функцию readdir(), передавая ей дескриптор, полученный от функции opendir(). Всякий раз функция readdir()будет возвращать указатель на структуру типа dirent, содержащую информацию о следующем элементе каталога. По достижении конца каталога будет получено значение NULL. У структуры direntесть поле d_name, где содержится имя элемента каталога.

3. Вызовите функцию closedir(), передав ей имеющийся дескриптор, чтобы завершить сеанс работы с каталогом.

Для использования перечисленных функций необходимо включить в программу файлы и . Ответственность за сортировку содержимого каталога возлагается на программу.

В листинге Б.8 показана программа отображающая список содержимого каталога. Имя каталога задается в командной строке. Если этого не сделать, будет проанализирован текущий каталог. Для каждого элемента каталога отображается его тип и путевое имя. Функция get_file_type()определяет тип объекта файловой системы с помощью функции lstat().

Листинг Б.8. ( listdir.c ) Вывод содержимого каталога

#include

#include

#include

#include

#include

#include

#include

/* Эта функция возвращает строку с описанием типа объекта

файловой системы, заданного в аргументе PATH. */

const char* get_file_type(const char* path) {

struct stat st;

lstat(path, &st);

if (S_ISLNK(st.st_mode))

return "symbolic link";

else if (S_ISDIR(st.st_mode))

return "directory";

else if (S_ISCHR(st.st_mode))

return "character device";

else if (S_ISBLK(st.st_mode))

return "block device";

else if (S_ISFIFO(st.st_mode))

return "fifo";

else if (S_ISSOCK(st.st_mode))

return "socket";

else if (S_ISREG(st.st_mode))

return "regular file";

else

/* Нераспознанный тип. */

assert(0);

}

int main(int argc, char* argv[]) {

char* dir_path;

DIR* dir;

struct dirent* entry;

char entry_path[PATH_MAX + 1];

size_t path_len;

if (argc >= 2)

/* Если каталог указан в командной строке, анализируем его. */

dir_path = argv[1];

else

/* В противном случае анализируем текущий каталог. */

dir_path = ".";

/* Копируем имя каталога в переменную entry_path. */

strncpy(entry_path, dir_path, sizeof(entry_path));

path_len = strlen(dir_path);

/* Если имя каталога не заканчивается косой чертой,

добавляем ее. */

if (entry_path[path_len - 1] != '/') {

entry_path[path_len] = '/';

entry_path[path_len + 1] = '\0';

++path_len;

}

/* Начинаем обрабатывать список содержимого каталога. */

dir = opendir(dir_path);

/* просматриваем все элементы каталога. */

while ((entry = readdir(dir)) != NULL) {

const char* type;

/* Формируем полное путевое имя элемента каталога. */

strncpy(entry_path + path_len, entry->d_name,

sizeof(entry_path) — path_len);

/* Определяем тип элемента. */

type = get_file_type(entry_path);

/* Отображаем собранную информацию. */

printf("%-18s: %s\n", type, entry_path);

}

/* Конец работы. */

closedir(dir);

return 0;

}

Приведем несколько строк листинга полученного в каталоге /dev(в разных системах могут быть выданы разные результаты)

% ./listdir /dev

directory : /dev/.

directory : /dev/..

socket : /dev/log

character device : /dev/null

regular file : /dev/MAKEDEV

fifo : /dev/initctl

character device : /dev/agpgart

...

Для проверки этих данных можно воспользоваться командой ls. Флаг -Uотменяет сортировку списка, а флаг -aзаставляет включить в список записи текущего ( .) и родительского ( ..) каталогов.

% ls -lua /dev total 124

drwxr-xr-x 7 root root 36864 Feb 1 15:14 .

drwxr-xr-x 22 root root 4096 Oct 11 16:39 ..

srw-rw-rw- 1 root root 0 Dec 18 01:31 log

crw-rw-rw- 1 root root 1, 3 May 5 1998 null

-rwxr-xr-x 1 root root 26689 Mar 2 2000 MAKEDEV

prw------- 1 root root 0 Dec 11 18:37 initctl

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программирование для Linux. Профессиональный подход»

Представляем Вашему вниманию похожие книги на «Программирование для Linux. Профессиональный подход» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программирование для Linux. Профессиональный подход»

Обсуждение, отзывы о книге «Программирование для Linux. Профессиональный подход» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x