- •Кафедра автоматики и электроники в машиностроении
- •Введение
- •Лабораторная работа № 1
- •Контрольные вопросы
- •Методические указания к работе
- •Основные назначения командного интерпретатора в ос unix
- •Синтаксис языка Bourne Shell
- •Общий синтаксис скрипта
- •Переменные
- •Встроенные переменные
- •Перенаправление ввода-вывода
- •Логические операции в контексте test
- •Условный оператор "if"
- •Оператор выбора case
- •Оператор цикла с перечислением for
- •Оператор цикла с истинным условием while
- •Задание 4.
- •5. Команда cat.
- •Задание 5.
- •6. Простейшие команды работы с файлами: cp, rm, mkdir, mv
- •Задание 6.
- •Задание 7.
- •Системные вызовы getuid и getpid
- •Задание 8.
- •Контрольные вопросы
- •Лабораторная работа № 3.
- •Методические указания к работе Иерархия процессов
- •Прототипы системных вызовов
- •Создание процесса в unix
- •Прототип системного вызова
- •Завершение процесса. Функция exit() Прототип функции
- •Описание функции
- •Параметры функции main() в языке с Переменные среды и аргументы командной строки
- •Задание 3.
- •Прототипы функции
- •Описание функций
- •Системный вызов wait():
- •Задание 4.
- •Варианты:
- •Контрольные вопросы
- •Лабораторная работа № 4
- •Методические указания Понятие о потоке ввода-вывода
- •Понятие о работе с файлами через системные вызовы и стандартную библиотеку ввода-вывода для языка с
- •Файловый дескриптор
- •Открытие файла
- •Системный вызов open Прототип системного вызова
- •Описание системного вызова
- •Возвращаемое значение
- •Системные вызовы read(), write().
- •Прототипы системных вызовов:
- •Описание системных вызовов
- •Возвращаемые значения
- •Особенности поведения при работе с файлами
- •Описание системного вызова
- •Возвращаемые значения
- •Пример программы для записи информации в файл
- •Понятие неименованного канала. Системный вызов pipe()
- •Важное отличие pip'a от файла заключается в том, что прочитанная информация немедленно удаляется из него и не может быть прочитана повторно.
- •Описание системного вызова
- •Возвращаемые значения
- •Организация связи через pipe между процессом-родителем и процессом-потомком.Наследование файловых дескрипторов при вызовах fork() и ехес().
- •Пример программы для организации однонаправленной связи между родственными процессами через pipe
- •Манипуляция таблицей дескрипторов
- •Описание системного вызова
- •Возвращаемые значения
- •Описание функции
- •Возвращаемые значения
- •Особенности поведения вызова ореn() при открытии fifo
- •Пример программы с fifo в родственных процессах
- •Контрольные вопросы
- •Филоненко Ирина Николаевна
Завершение процесса. Функция exit() Прототип функции
#include <stdlib.h>
void exit(int status);
Описание функции
Функция exit служит для нормального завершения процесса. При выполнении этой функции происходит сброс всех частично заполненных буферов ввода-вывода с закрытием соответствующих потоков (файлов, pipe, FIFO, сокетов), после чего инициируется системный вызов прекращения работы процесса и перевода его в состояние «закончил исполнение».
Возврата из функции в текущий процесс не происходит, и функция ничего не возвращает.
Значение параметра status кода завершения процесса передается ядру операционной системы и может быть затем получено процессом, породившим завершившийся процесс. Для кода завершения допустимы значения от 0 до 255. По соглашению, код завершения 0 означает безошибочное завершение процесса.
Параметры функции main() в языке с Переменные среды и аргументы командной строки
У функции main() в языке программирования С существует три параметра, которые могут быть переданы ей операционной системой. Полный прототип функции main() выглядит следующим образом:
int main(int argc, char *argv[], char *envp[]);
Первые два параметра при запуске программы на исполнение командной строкой позволяют узнать полное содержание командной строки. Вся командная строка рассматривается как набор слов, разделенных пробелами. Через параметр argc передается количество слов в командной строке, которой была запущена программа. Параметр argv является массивом указателей на отдельные слова. Третий параметр envp является массивом указателей на параметры окружающей среды процесса.
Задание 3.
Напишите и отладьте программу, которая распечатывает значения параметров командной строки и переменных окружения процесса. Перенаправьте эту информацию со стандартного потока вывода в файл. Продемонстрируйте работу программы преподавателю и включите ее и содержимое файла (с выводом) в отчет.
Прототипы функции
#include <unistd.h>
int execlp(const char *file, const char *arg0,
... const char *argN, (char *)NULL)
int execvp(const char *file, char *argv[]),
int execl(const char *path, const char *arg0
... const char *argN, (char *)NULL)
int execv(const char *path, char *argv[])
int execle(const char *path, char *arg0,
... const char *argN, (char *)NULL, char *envp[])
int execve(const char *path, char *argv[],char *envp[])
Описание функций
Для загрузки новой программы в системный контекст текущего процесса используется семейство взаимосвязанных функций, отличающихся друг от друга формой представления параметров.
Аргумент file является указателем на имя файла, который должен быть загружен. Аргумент path это указатель на полный путь к файлу, который должен быть загружен.
Аргументы arg0 и argN представляют собой указатели на аргументы командной строки. Заметим, что аргумент arg0 должен указывать на имя загружаемого файла. Аргумент argv представляет собой массив из указателей на аргументы командной строки. Начальный элемент массива должен указывать на имя загружаемой программы, а заканчиваться массив должен элементом, содержащим указатель NULL.