Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Системные вызовы работы с файлами open, creat, close, dup, dup2. (21-2, 19-2)

Системный вызов wait и _exit

Системный вызов fork

Системные вызовы fork, wait, pipe. (22-2)

Системный вызов execl

Системный вызов system

Понятие системного вызова. Системные вызовы system и execl. (23-2)

(Здесь явно указать отличия этих двух системных вызовов)

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

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

Простейшим способом вызвать другую программу из уже выполняющейся является системный вызов system:

int system(“Командная строка”);

Вызывает новую программу, вместо уже выполняющейся без возврата в вызывающую программу:

int execl(“полное_имя_файла”, arg0, arg1,…,null);

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

Для этого используется системный вызов fork:

int fork();

После выполнения системного вызова fork() программа делиться на две идентичные копии. Одна из копий получает код ответа 0 (процесс потомок). Другая копия (процесс отец) получает идентификатор процесса сына.

if(fork()==0)

{ процесс сын }

else

{ процесс родитель }

После системного вызоваfork() процесс родитель может посредством системного вызова wait() приостановить свое выполнение до завершения процесса сына или продолжить выполнение независимо от процесса сына.

int wait(int* s);

Системный вызов wait() возвращает идентификатор завершаемого процесса сына, а в свой единственный аргумент записывает код завершения процесса сына.

Код завершения можно представить в виде следующей битовой маски:

· 7 младших битов (с 0 по 6) содержат нули, если процесс сын был завершен с помощью системного вызова _exit, или номер сигнала, завершившего процесс.

· 7-й бит равен 1, если из-за прерывания процесса сына был создан дамп образа процесса (core файл).

· Если процесс был завершен с помощью системного вызова _exit, то биты с 8 по 15й содержат аргумент системного вызова _exit.

Системный вызов _exit:

void _exit(int status);

В случае параллельной работы, с помощью системного вызова signal процесс отец может выявить или игнорировать завершение процесса сына:

int signal(sigaction);

Операции ввода/вывода в ОС Unix связанны с вводом/выводом в файл. Файлы стандартного ввода/вывода и протокола ошибок автоматически открываются для любого вновь порожденного процесса и получают пользовательские дескрипторы файла 0,1,2 соответственно.

Эти дескрипторы ассоциируются с одним и тем же специальным файлов /dev/tty, соответствующему терминалу данного пользователя.

0. /dev/tty – ввод с клавиатуры.

1. /dev/tty – вывод на экран.

2. /dev/tty – сообщения об ошибках.

<== предыдущая лекция | следующая лекция ==>
Интерактивный режим работы в ОС UNIX. (24-2) | Системный вызов open
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 592; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.