- •1 Системы реального времени. Основные понятия и определения
- •2 Программирование в ос семейства unix (linux)
- •2.1 Программирование на shell. Использование командных файлов
- •Процедура языка shell
- •Структура команд
- •В таблице 2.1 представлены некоторые средства группировки команд, которые могут быть использованы при создании командных файлов на shell.
- •Перенаправление данных
- •Shell-переменные
- •Условный оператор if
- •Команда test
- •Структурные операторы shell Оператор цикла for
- •Оператор цикла while
- •Оператор цикла until
- •Оператор выбора case
- •Отладка процедур языка shell
- •Практическое задание
- •2.2 Программирование в ос семейства unix с использованием awk»
- •Практическое задание «Программирование с использованием awk»
- •2.3 Программирование в ос с использованием си»
- •Системный вызов ореn
- •Системный вызов сrеаt
- •Системный вызов read
- •Системный вызов write
- •Системный вызов сlose
- •Практическое задание
- •Системный вызов fork
- •Системный вызов wait
- •Системный вызов exit
- •Системные вызовы ехес1, ехес1е, ехесv и ехесvе
- •Системный вызов getpid
- •Системные вызовы getgid, getegid
- •Системные вызовы getuid, geteuid
- •Системный вызов setgid
- •Системный вызов setuid
- •Системный вызов nice
- •Практическое задание «си. Управление процессами»
- •2.3.3 Управление оперативной памятью
- •Указатели на простые переменные
- •Массивы и указатели на массивы
- •Указатели на структуры
- •Динамическое распределение оп
- •Практическое задание
- •3 Компиляция, компоновка и загрузка в Linux
Системный вызов сrеаt
Системный вызов сrеаt (создать файл) имеет следующий формат:
сreat(name,mode)
сhar *name;
int mode;
Функция сгеаt создает новый (или подготавливает к повторной записи уже существующий) файл с именем name. Если файл еще не существует, значение параметра mode используется для формирования режимов доступа создаваемого файла, при этом учитывается значение маски режимов процесса. Значение параметра mode составляется по правилам, приведенным в описание системного вызова chmod. Если указанный файл существует, то его владелец и режим доступа остаются прежними, а файл усекается до нулевой длины. Кроме того, файл открывается для записи и возвращается его дескриптор.
При неудачном завершении, операции сгеаt возвращается значение -1, в остальных случаях возвращается дескриптор открытого файла (целое положительное число).
После неудачного завершения системного вызова сгеаt переменная еrrnо может принимать следующие значения:
[ЕNOTDIR] - указанное имя содержит компоненту, которая не является справочником;
[ЕNOENТ] - задано слишком длинное или пустое имя файла, или указанный файл не существует или какой-либо из справочников, входящих в имя файла, не доступен для просмотра;
[ЕРЕКМ] - указанное имя содержит символ, отсутствующий в коде АSСП;
[ELООР] - число косвенных ссылок в указанном имени превышает максимально допустимое значение;
[ЕROFS] - попытка создания файла в файловой системе, закрытой на запись;
[ЕТХТВSУ] - попытка сократить длину файла, содержащего загрузочный модуль реентерабельной программы (разделяемый текстовый сегмент), которая в настоящей момент выполняется;
[ЕАССЕS] - режим доступа указанного файла не соответствует запросу;
[ЕFAULТ] - адреса аргументов системного вызова выходят за границы памяти, доступной данному процессу;
[ЕISDIR] - указанное имя файла является именем справочника;
[ЕМFILЕ] - переполнилась таблица открытых файлов процесса;
[ЕNXIO] - указано имя специального файла, для которого нет соответствующего устройства.
Параметр mode задается произвольно, в нем не обязательно должно быть разрешение на запись. Эта возможность используется программами, которые работают с временными файлами с фиксированными именами. Создание производится с режимом, запрещающим запись. Затем, если другая программа пытается выполнить вызов сгеаt, возвращается ошибка и программе становится известно, что в данный момент это имя использовать нельзя. Все действия, перечисленные для вызова сгеаtе, можно выполнить с помощью системного вызова ореn. Вызов сгеаtе оставлен для совместимости с ранними версиями ОС Unix.
Системный вызов read
Системный вызов геаd (чтение файла) имеет следующий формат:
read (fd, buf, nbytes)
char *buf;
int fd, nbytes;
Системный вызов read обеспечивает считывание nbytes данных в массив buf из файла с дескриптором fd. Информация читается из файла по текущему указателю позиции чтения/записи. После завершения пересылки данных значение указателя увеличивается на число считанных байт. Для некоторых файлов значение указателя позиции чтения/записи не имеет смысла (например, для терминала), тем не менее, данные передаются. При успешном завершении вызова, возвращается число считанных байт, в случае ошибки - значение -1, при достижении конца файла в процессе чтения - число 0.
При возникновении ошибки чтения, переменная еrrnо может принимать следующие значения:
[ЕВАDF] - указанный дескриптор не является дескриптором файла, открытого для чтения;
[ЕFAULТ] - адрес параметра системного вызова не входит в адресное пространство процесса;
[ЕINTR] - чтение с медленного устройства прервано до передачи данных.
