Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$ <b>ch06-sortemp < presdata.txt</b>Sorted by name: Bush George 41 Fri Jan 20 13:00:00 1989 Bush George 43 Sat Jan 20 13:00:00 2001 Carter James 39 Thu Jan 20 13:00:00 1977 Clinton William 42 Wed Jan 20 13:00:00 1993 Reagan Ronald 40 Tue Jan 20 13:00:00 1981 Sorted by seniority: Carter James 39 Thu Jan 20 13:00:00 1977 Reagan Ronald 40 Tue Jan 20 13:00:00 1981 Bush George 41 Fri Jan 20 13:00:00 1989 Clinton William 42 Wed Jan 20 13:00:00 1993 Bush George 43 Sat Jan 20 13:00:00 2001(Мы использовали 1 час пополудни как приблизительное время, когда все президенты начали работать.) [66]
Стоит заметить одну вещь:
qsort()qsort()Платой за это является дополнительная память для размещения указателей и модификация функций сравнения для дополнительного перенаправления указателей при сравнении структур. Полученной выгодой может стать значительное ускорение работы, поскольку на каждом шаге перемещается лишь четырех- или восьмибайтный указатель вместо большой структуры. (Наша
struct employeeЗАМЕЧАНИЕ. Если вы являетесь программистом С++, знайте!
qsort()qsort()operator=()6.2.1.2. Пример: сортировка содержимого каталога
В разделе 5.3 «Чтение каталогов» мы продемонстрировали, как элементы каталогов возвращаются в физическом порядке каталога. В большинстве случаев гораздо полезнее иметь содержимое каталога отсортированным каким-нибудь образом, например, по имени или по времени изменения. Хотя и не стандартизованные POSIX, несколько процедур упрощают это, используя
qsort()#include <dirent.h> /* Обычный */int scandir(const char *dir, struct dirent ***namelist, int (*select)(const struct dirent*), int (*compare)(const struct dirent **, const struct dirent **));int alphasort(const void *a, const void *b);int versionsort(const void *a, const void *b); /* GLIBC */Функции
scandir()alphasort()versionsort()scandir()dirmalloc()struct dirent*nameliststruct direntmalloc()free()Для выбора нужных элементов используйте указатель функции
selectNULL(*select)()Указатель функции compare сравнивает два элемента каталога. Он передается функции
qsort()alphasort()strcoll()strcoll()strcmp()versionsort()strverscmp()В
ch06-sortdir.cch04-catdir.cscandir()alphasort()1 /* ch06-sortdir.c --- Демонстрирует scandir(), alphasort(). */23 #include <stdio.h> /* для printf() etc. */4 #include <errno.h> /* для errno */5 #include <sys/types.h> /* для системных типов */6 #include <dirent.h> /* для функций каталогов */78 char *myname;9 int process(const char *dir);1011 /* main --- перечислить аргументы каталога */12
