My-library.info
Все категории

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Майкл Джонсон - Разработка приложений в среде Linux. Второе издание. Жанр: Программное обеспечение издательство -, год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Разработка приложений в среде Linux. Второе издание
Издательство:
-
ISBN:
-
Год:
-
Дата добавления:
16 сентябрь 2019
Количество просмотров:
263
Читать онлайн
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - описание и краткое содержание, автор Майкл Джонсон, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info
Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.

Разработка приложений в среде Linux. Второе издание читать онлайн бесплатно

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон

#include <sys/stat.h>


int stat(const char *pathname, struct stat *statbuf);

int lstat (const char *pathname, struct stat *statbuf);

int fstat(int fd, struct stat *statbuf);

Первая версия, stat() возвращает информацию inode для файла, на который осуществляется ссылка через pathname, следуя всем символическим ссылкам, которые она представляет. Если вы не хотите следовать символическим ссылкам (например, чтобы проверить, не является ли само имя такой ссылкой), то используйте вместо этого lstat(). Последняя версия, fstat(), возвращает inode, на который ссылается текущий открытый файловый дескриптор. Все три системных вызова заполняют структуру struct stat, на которую указывает параметр statbuf, информацией о файловом inode. В табл. 11.3 описана информация, доступная в struct stat.


Таблица 11.3. Члены структуры struct stat

Тип Поле Описание dev_t st_dev Номер устройства, на котором находится файл. ino_t st_ino Номер файлового on-disk inode. Каждый файл имеет номер on-disk inode, уникальный в пределах устройства, на котором он расположен. То есть пара (st_dev, st_ino) представляет собой уникальный идентификатор файла. mode_t st mode Режим файла. Сюда включена информация о правах доступа и типе файла. nlink_t st_nlink Количество путевых имен, ссылающихся на данный inode. Сюда не включаются символические ссылки, потому что они ссылаются на другие имена, а не на inode. uid_t st_uid Идентификатор пользователя, владеющего файлом. gid_t st_gid Идентификатор группы, владеющей файлом. dev_t st_rdev Если файл — символьное или блочное устройство, это задает старший (major) и младший (minor) номера файла. Чтобы получить информацию о членах и макросах, которые манипулируют этим значением, обратитесь к обсуждению mknod() далее в этой главе. off_t st size Размер файла в байтах. Это определено только для обычных файлов. unsigned long st_blksize Размер блока в файловой системе, хранящей файл. unsigned long st_blocks Количество блоков, выделенных файлу. Обычно st_blksize * st_blocks — это немного больше, чем st_size, потому что некоторое пространство в конечном блоке не используется. Однако для файлов с "дырками" st_blksize * st_blocks может быть заметно меньше, чем st_size. time_t st_atime Время последнего доступа к файлу. Обновляется при каждом открытии файла или модификации его inode. time_t st_mtime Время последней модификации файла. Обновляется при изменении данных файла. time_t st_ctime Последнее время изменения файла или его inode, включая владельца, группу, счетчик связей и так далее.

11.3.2. Простой пример stat()

Рассмотрим простую программу, которая отображает информацию из lstat() для каждого имени файла, переданного в аргументе. Она иллюстрирует, как использовать значения, возвращенные семейством функций stat().

 1: /* statsamp.с */

 2:

 3: /* Для каждого имени файла, переданного в командной строке, отображаем

 4:    всю информацию, которую возвращает lstat() для файла. */

 5:

 6: #include <errno.h>

 7: #include <stdio.h>

 8: #include <string.h>

 9: #include <sys/stat.h>

10: #include <sys/sysmacros.h>

11: #include <sys/types.h>

12: #include <time.h>

13: #include <unistd.h>

14:

15: #define TIME_STRING_BUF 50

16:

17: /* Пользователь передает buf (минимальной длины TIME_STRING_BUF) вместо

18:    использования статического для функции буфера, чтобы избежать применения

19:    локальных статических переменных и динамической памяти. Никаких ошибок

20:    происходить не должно, поэтому никакой проверки ошибок не делаем. */

21: char *time String (time_t t, char *buf) {

22:  struct tm *local;

23:

24:  local = localtime(&t);

25:  strftime(buf, TIME_STRING_BUF, "%c", local);

26:

27:  return buf;

28: }

29:

30: /* Отобразить всю информацию, полученную от lstat() по имени

31:    файла как единственному параметру. */

32: int statFile(const char *file) {

33:  struct stat statbuf;

34:  char timeBuf[TIME_STRING_BUF];

35:

36:  if (lstat(file, &statbuf)) {

37:   fprintf(stderr, "не удалось lstat %s: %sn", file,

38:    strerror(errno));

39:   return 1;

40:  }

41:

42:  printf("Имя файла : %sn", file);

43:  printf("На устройстве: старший %d/младший %d Inode номер: %ldn" ,

44:   major(statbuf.st_dev), minor(statbuf.st_dev),

45:   statbuf.st_ino);

46:  printf ("Размер : %-101d Тип: %07o"

47:   "Права доступа : %05on", statbuf.st_size,

48:   statbuf.st_mode & S_IFMT, statbuf.st_mode &~(S_IFMT));

49:  printf("Владелец : %d Группа : %d"

50:   " Количество ссылок : %dn",

51:   statbuf.st_uid, statbuf.st_gid, statbuf.st_nlink);

52:  printf("Время создания : %sn",

53:   timeString(statbuf.st_ctime, timeBuf));

54:  printf("Время модификации : %sn",

55:   timeString(statbuf.st_mtime, timeBuf));

56:  printf("Время доступа : %sn",

57:   timeString (statbuf.st_atime, timeBuf));

58:

59:  return 0;

60: }

61:

62: int main(int argc, const char **argv) {

63:  int i;

64:  int rc = 0 ;

65:

66:  /* Вызвать statFile() для каждого имени файла,

67:     переданного в командной строке. */

68:  for (i = 1; i < argc; i++) {

69:   /* Если statFile() сбоит, rc будет содержать не ноль.*/

70:   rc |= statFile(argv[i]);

71:

72:   /* это печатает пробел между позициями,

73:      но не за последней */

74:   if ((argc - i) > 1) printf ("n");

75:  }

76:

77:  return rc;

78: }

11.3.3. Простое определение прав доступа

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

#include <unistd.h>


int access(const char *pathname, int mode);

mode — это маска, которая содержит одно или более перечисленных ниже значений.

F_OK Файл существует. Это требует прав на выполнение по всем каталогам, составляющим путь, поэтому может закончиться сбоем, даже если файл существует. R_OK Процесс может читать файл. W_OK Процесс может писать файл. X_OK Процесс может исполнять файл (или искать в каталоге).

access() возвращает 0, если указанный режим доступа разрешен, в противном случае возвращает ошибку EACCESS.

11.3.4. Изменение прав доступа к файлу

Права доступа и модификаторы прав доступа к файлу изменяются с помощью системного вызова chmod().

#include <sys/stat.h>


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


Разработка приложений в среде Linux. Второе издание отзывы

Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.