Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
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