Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
getmntent()static struct mntentNULLaddmntent()mountendmntent()fclose()FILE*hasmntopt()struct mntentmountNULLПоля в
struct mntent/etc/fstabstruct mntent { char *mnt_fsname; /* Устройство или сервер для файл. С-мы. */ char *mnt_dir; /* Каталог для монтирования. */ char *mnt_type; /* Тип файловой системы: ufs, nfs и т.д. */ char *mnt_opts; /* Отделяемые запятыми опции для fs. */ int mnt_freq; /* Частота дампа (в днях). */ int mnt_passno; /* Номер для 'fsck'. */};Обычным принципом работы со смонтированными файловыми системами является создание внешнего цикла, читающего
/etc/mtabstruct mntentch08-mounted.c1 /* ch08-mounted.с --- вывод списка смонтированных файловых2 систем */3 /* ЗАМЕЧАНИЕ: специфично для GNU/Linux! */45 #include <stdio.h>6 #include <errno.h>7 #include <mntent.h> /* для getmntent() и др. */8 #include <unistd.h> /* для getopt() */910 void process(const char *filename);11 void print_mount(const struct mntent *fs);1213 char *myname;1415 /* main --- обработка опций */1617 int main(int argc, char **argv)18 {19 int c;20 char *file = "/etc/mtab"; /* файл по умолчанию для чтения */2122 myname = argv[0];23 while ((c = getopt(argc, argv, "f:")) != -1) {24 switch (c) {25 case 'f':26 file = optarg;27 break;28 default:29 fprintf(stderr, "usage: %s [-f fstab-file]n", argv[0]);30 exit(1);31 }32 }3334 process(file);35 return 0;36 }3738 /* process --- прочесть структуры struct mntent из файла */3940 void process(const char *filename)41 {42 FILE *fp;43 struct mntent *fs;4445 fp = setmntent(filename, "r"); /* только для чтения */46 if (fp == NULL) {47 fprintf(stderr, "%s: %s: could not open: %sn",48 myname, filename, strerror(errno));49 exit(1);50 }5152 while ((fs = getmntent(fp)) != NULL)53 print_mount(fs);5455 endmntent(fp);56 }5758 /* print_mount --- вывод одного смонтированного элемента */5960 void print_mount(const struct mntent *fs)61 {62 printf("%s %s %s %s %d %dn",63 fs->mnt_fsname,64 fs->mnt_dir,65 fs->mnt_type,66 fs->mnt_opts,67 fs->mnt_freq,68 fs->mnt_passno);69 }В отличие от большинства программ, которые мы до сих пор видели, эта специфична для Linux. Во многих Unix-системах есть схожие процедуры, но их идентичность не гарантируется.
По умолчанию,
ch08-mounted/etc/mtab-f/proc/mounts/etc/fstab
