Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Clinton William 42 727552800Bush George 41 601322400Reagan Ronald 40 348861600Carter James 39 222631200Данные сортируются на основе сначала фамилии, затем имени, а затем старшинства. При запуске [160] программа выдает следующий результат:
$ <b>ch14-tsearch < presdata.txt</b>Depth: 1. Employee:Bush, George 41 Fri Jan 20 13:00:00 1989Depth: 0. Employee:Bush, George 43 Sat Jan 20 13:00:00 2001Depth: 2. Employee:Carter, James 39 Thu Jan 20 13:00:00 1977Depth: 1. Employee:Clinton, William 42 Wed Jan 20 13:00:00 1993Depth: 2. Employee:Reagan, Ronald 40 Tue Jan 20 13:00:00 198114.4.6. Удаление вершины дерева и удаление дерева:
tdelete()tdestroy()Наконец, вы можете удалить элементы из дерева и, на системах GLIBC, удалить само дерево целиком:
void *tdelete(const void *key, void **rootp,int (*compare)(const void*, const void*));/* Расширение GLIBC, в POSIX нет: */void tdestroy(void *root, void (*free_node)(void *nodep));Аргументы для
tdelete()tsearch()tdelete()NULLstruct employee *е, key; /* Объявления переменных */void *vp, *root;/* ...заполнить ключ для удаляемого из дерева элемента... */vp = tfind(&key, root, emp_name_id_compare); /* Найти удаляемый элемент */if (vp != NULL) { e = *((struct employee**)vp); /* Преобразовать указатель */ free(e); /* Освободить память */}(void)tdelete(&key, &root, emp_name_id_compare); /* Теперь удалить его из дерева */Хотя это и не указано в справочных страницах или стандарте POSIX, под GNU/Linux, если вы удаляете элемент, хранящийся в корневой вершине, возвращается значение новой корневой вершины. Для переносимого кода не следует полагаться на это поведение
Функция
tdestroy()NULL14.5. Резюме
• Иногда бывает необходимо выделить память, выровненную по определенной границе. Это осуществляет
posix_memalign()memalign()free()• Блокирование файлов с помощью
fcntl()• GNU/Linux функция
lockf()fcntl()flock()fcntl()flock()flock()•
gettimeofdaystruct timevalutimes()gettimer()settimer()struct timevastruct itimerval• Функция
nanosleep()struct timespec• Три API являются стандартным набором функций для хранения и поиска данных, которые сохраняют данные в двоичных деревьях в отсортированном виде. Эти три API очень гибкие, позволяя использовать множество деревьев и произвольные данные.
Упражнения
1. Напишите функцию
lockf()fcntl()2. Каталог
/usr/src/linux/Documentationlocks.txtmandatory.txt
