• Написание приложений setuid-root
Упражнения
1. Напишите простую версию команды id
$ id
uid=2076(arnold) gid=42(devel) groups=19(floppy), 42(devel), 2076(arnold)
Ее использование:
id [
id -G [ -nr ] [
id -g [ -nr ] [
id -u [ -nr ] [
При указанном
id выводит сведения о пользователе, вызвавшем программу. Опции следующие: -G
-n
-g
-u
2. Напишите простую программу с именем sume
sume должна выполнить exec оболочки. Попросите другого пользователя помочь вам ее протестировать.3. Как вы относитесь к тому, чтобы сделать sume
Глава 12 Общие библиотечные интерфейсы — часть 2
В главе 6, «Общие библиотечные интерфейсы — часть 1», был представлен первый набор API библиотеки общего пользования. В некотором смысле, эти API поддерживают работу с фундаментальными объектами, которыми управляют системы Linux и Unix: время дня, пользователи и группы для файлов, сортировка и поиск.
Данная глава более эклектична; функции API, рассмотренные здесь, не особо связаны друг с другом. Однако, все они полезны в повседневном программировании под Linux/Unix. Наше представление движется от простых, более общих функций API к более сложным и более специализированным.
12.1. Операторы проверки: assert()
Операторы проверки особенно полезны для описания двух разновидностей инвариантов:
/* lsearch --- возвратить индекс с данным значением в массиве или -1,
если не найдено */
int lsearch(int *array, size_t size, int value) {
size_t i;
/* предусловие: array != NULL */
/* предусловие: size > 0 */
for (i = 0; i < size; i++)
if (array[i] == value)
return i;
/* постусловие: i == size */
return -1;
}
Этот пример определяет условия, используя комментарии. Но не было бы лучше проверить условия с использованием кода? Это является задачей макроса assert()
#include
void assert(/*
Когда
assert() выводит диагностическое сообщение и завершает программу (с помощью функции abort(); см. раздел 12.4 «Совершение самоубийства: abort()»). ch12-assert.c снова предоставляет функцию lsearch(), на этот раз с оператором проверки и функцией main():1 /* ch12-assert.с --- демонстрация операторов проверки */
2
3 #include
4 #include
5
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT