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. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон

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

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

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

#include <sys/stat.h>


int chmod(const char *pathname, mode_t mode);

int fchmod(int fd, mode_t mode);

Хотя chmod() позволяет указать путь, помните, что права доступа к файлу определяет inode, а не имя файла. Если у файла есть множество жестких ссылок, то изменение прав доступа по одному из имен файла изменяет права доступа к нему везде, где он встречается в файловой системе. Параметр mode может быть любой комбинацией прав доступа и модификаторов прав доступа, объединенных по логическому "И". Хотя это достаточно нормально — специфицировать по несколько этих значений за раз, общей практикой для программ является указание новых прав доступа непосредственно в восьмеричном виде. Только пользователь root и владелец файла могут изменять права доступа к файлу — все остальные, кто попытается это сделать, получат ошибку EPERM.

11.3.5. Смена владельца и группы файла

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

#include <unistd.h>


int chown(const char *pathname, uid_t owner, gid_t group);

int fchown(int fd, uid_t owner, gid_t group);

Параметры owner и group указывают нового владельца и группу для файла. Если любой из них равен -1, соответствующее значение не изменяется. Только пользователь root имеет право сменить владельца файла. Когда владелец файла меняется или файл записывается, то бит setuid для этого файла всегда очищается из соображений безопасности. Как root, так и владелец файла могут менять группу, которая владеет файлом, но при условии, что владелец сам является членом этой группы. Если у файла установлен бит выполнения для группы, то бит setgid очищается из тех же соображений безопасности. Если же бит выполнения для группы не установлен, то у файла включена принудительная блокировка и режим предохраняется.

11.3.6. Изменение временных меток файла

Владелец файла может изменять mtime и atime файла на любое желаемое значение. Это делает такие метки бесполезными для целей аудита, но позволяет инструментам архивирования вроде tar и cpio сбрасывать временные метки файлов в то значение, когда они были архивированы. Метка ctime изменяется, когда обновляются mtime и atime, поэтому tar и cpio не могут восстановить их.

Существуют два способа изменения этих меток: utime() и utimes(). utime() появилась в System V, после чего была адаптирована POSIX, в то время как utimes() пришла из BSD. Обе функции эквивалентны; они отличаются только способом, каким указываются новые временные метки.

#include <utime.h>

int utime(const char *pathname, struct utimbuf *buf);


#include <sys/time.h>

int utimes(const char *pathname, struct timeval *tvp);

Версия POSIX, utime(), принимает struct utimbuf, которая определена в <utime.h>, как показано ниже.

struct utimbuf {

 time_t асtime;

 time_t modtime;

};

utimes() из BSD вместо этого передает новое значение atime и mtime через struct timeval, которая определена в <sys/time.h>.

struct timeval {

 long tv_sec;

 long tv_usec;

};

Элемент tv_sec содержит новое значение atime; tv_usec содержит новое значение mtime для utimes().

Если каждой из функций вторым параметром передать NULL, то обе временные метки должны быть установлены в текущее время. Новые значения atime и mtime устанавливаются в секундах, прошедших с начала эры (так же, как значение, возвращаемое time()), как определено в главе 18.

11.3.7. Расширенные атрибуты Ext3

Главная файловая система, используемая в Linux — это Third Extended File System (третья расширенная файловая система)[47], обычно упоминаемая как ext3. Хотя она поддерживает все традиционные функциональные средства файловых систем Unix, такие как значение отдельных бит в режиме файла, она также позволяет хранить некоторые дополнительные атрибуты для каждого файла. В табл. 11.4 описаны поддерживаемые в настоящее время дополнительные атрибуты. Эти флаги могут быть установлены и просмотрены с помощью программ chattr и lsattr.


Таблица 11.4. Расширенные атрибуты файла

Атрибут Определение EXT3_APPEND_FL Если файл открыт для записи, должен быть указан флаг O_APPEND. EXT3_IMMUTABLE_FL Файл не может быть модифицирован или удален ни одним пользователем, включая root. EXT3_NODUMP Файл должен быть проигнорирован командой dump. EXT3_SYNC_FL Файл должен обновляться синхронно, как если бы при открытии был указан флаг O_SYNC

Поскольку расширенные атрибуты ext3 выходят за пределы стандартного интерфейса файловых систем, они не могут модифицироваться с помощью chmod(), как все остальные атрибуты. Вместо этого используется ioctl(). Вспомним, как определен вызов ioctl().

#include <sys/ioctl.h>

#include <linux/ext3_fs.h>


int ioctl(int fd, int request, void *arg);

Файл, атрибуты которого меняются, должен быть открыт, как для fchmod(). Запрос (параметр request) на получение текущего состояния флагов — EXT3_IOC_GETFLAGS, а для установки их — EXT3_IOC_SETFLAGS. В обоих случаях arg должен быть указателем на int. Если используется EXT3_IOC_GETFLAGS, то long устанавливается в текущее значение программных флагов. Если применяется EXT3_IOC_SETFLAGS, то новое значение файловых флагов берется из int, на который указывает arg.

Это дополнение и неизменяемые флаги могут быть изменены только пользователем root, поскольку это связано с операциями, которые может выполнять только root.

Другие флаги могут быть модифицированы либо пользователем root, либо владельцем файла.

Приведем пример небольшой программы, которая отображает флаги для любого файла, переданного в командной строке. Она работает только с файлами из файловой системы ext3[48]. Вызов ioctl() завершится неудачей, если применить его к файлам из любой другой файловой системы.

 1: /* checkflags.c */

 2:

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

 4:    информацию об атрибутах этого файла в файловой системе ext3. */

 5:

 6: #include <errno.h>

 7: #include <fcntl.h>

 8: #include <linux/ext3_fs.h>

 9: #include <stdio.h>

10: #include <string.h>

11: #include <sys/ioctl.h>

12: #include <unistd.h>

13:

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

15:  const char **filename = argv + 1;

16:  int fd;

17:  int flags;

18:

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

20:     указатель в argv[] равен NULL, поэтому такие циклы while() корректны. */

21:  while(*filename) {

22:   /* В отличие от нормальных атрибутов, атрибута ext3 можно опрашивать только

23:      если есть файловый дескриптор (имя файла не годится).

24:      Для выполнения запроса атрибутов ext3 нам не нужен доступ на запись,

25:      поэтому O_RDONLY подойдет. */

26:   fd = open(*filename, O_RDONLY);

27:   if (fd<0) {

28:    fprintf(stderr, "не открывается %s: %sn", *filename,

29:     strerror(errno));

30:    return 1;

31:   }

32:

33:   /* Этот вызов получает атрибуты, и помещает их в flags */

34:   if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags)) {

35:    fprintf(stderr, "ioctl завершился ошибкой на %s: %sn", *filename,

36:     strerror(errno));

37:    return 1;

38:   }

39:

40:   printf("%s: ", *filename++);

41:

42:   /* Проверить каждый атрибут, и отобразить сообщение для каждого,

43:      который включен. */

44:   if (flags & EXT3_APPEND_FL) printf("Append");

45:   if (flags & EXT3_IMMUTABLE_FL) printf("Immutable");

46:   if (flags & EXT3_SYNC_FL) printf("Sync");


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

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


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

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

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