МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Получить отметку преподавателя.





Лабораторная работа № 7.

Тема: Самостоятельная работа «Компиляция программ».

Теоретические сведения.

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

На языке C использование системных вызовов ничем внешне не отличается от использования других функций стандартной ANSI библиотеки языка C, таких как функции работы со строками strlen(), strcpy() и т.д. Стандартная библиотека UNIX – libc – обеспечивает C-интерфейс к каждому системному вызову. Это приводит к тому, что системный вызов выглядит как функция на языке C для программиста.

Большинство системных вызовов, возвращающих целое значение, использует значение -1 для оповещения о возникновении ошибки и значение большее или равное 0 – при нормальном завершении. Системные вызовы, возвращающие указатели, обычно для идентификации ошибочной ситуации пользуются значением NULL. Для точного определения причины ошибки C-интерфейс предоставляет глобальную переменную errno , описанную в файле <errno.h> вместе с ее возможными значениями и их краткими определениями. Анализировать значение переменной errno необходимо сразу после возникновения ошибочной ситуации, так как успешно завершившиеся системные вызовы не изменяют ее значения. Для получения символьной информации об ошибке на стандартном выводе программы для ошибок (по умолчанию экран терминала) может применяться стандартная UNIX-функция perror().

Для входа в операционную систему UNIX каждый пользователь должен быть зарегистрирован в ней под определенным именем. Вычислительные системы не умеют оперировать именами, поэтому каждому имени пользователя в системе соответствует некоторое числовое значение – его идентификаторUID ( user identificator ). Все пользователи в системе делятся на группы. Например, студенты одной учебной группы могут составлять отдельную группу пользователей. Группы пользователей также получают свои имена и соответствующие идентификационные номера – GID ( group identificator ). В одних версиях UNIX каждый пользователь может входить только в одну группу, в других – в несколько групп.

Системные вызовы getuid() и getgid(). Узнать идентификатор пользователя, запустившего программу на исполнение, - UID и идентификатор группы, к которой он относится, - GID можно с помощью системных вызовов getuid() и getgid(), применив их внутри этой программы.

Прототипы системных вызовов:

#include <sys/types.h>
#include <unistd.h>

uid_t getuid(void);
gid_t getgid(void);

Системный вызов getuid возвращает идентификатор пользователя для текущего процесса.
Системный вызов getgid возвращает идентификатор группы пользователя для текущего процесса.

Типы данных uid_t и gid_tявляются синонимами для одного из целочисленных типов языка C.

Для компиляции программ применим компилятор gcc. Для того, чтобы он нормально работал, необходимо, чтобы исходные файлы, содержащие текст программы, имели имена, заканчивающиеся на .c. В простейшем случае откомпилировать программу можно, запустив компилятор командой



gcc имя_исходного_файла

Если программа была написана без ошибок, то компилятор создаст исполняемый файл с именем a.out. Изменить имя создаваемого исполняемого файла можно, задав его с помощью опции

-o :

gcc имя_исходного_файла -o имя_исполняемого_файла

Компилятор gcc имеет несколько сотен возможных опций. Получить информацию о них вы можете в UNIX Manual.

Запустить программу на исполнение можно, набрав имя исполняемого файла и нажав клавишу <Enter>.

Ход работы.

Напишите, откомпилируйте и запустите программу, которая печатала бы идентификатор пользователя, запустившего программу, и идентификатор его группы.

Получить отметку преподавателя.





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.