Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. A) дохода лица, работающего по найму и b) дохода самозанятого лица.
  2. III. Работа над темой
  3. Quot;Бедные и средний класс работают ради денег". "Богатые заставляют деньги работать на себя".
  4. Quot;РАБОТА" ЛЮБВИ
  5. V. Самостоятельная работа студентов.
  6. V.Игра «Мы работаем на фабрике».
  7. VIII. Самостоятельная работа студентов

Тема: «Управление задачами и памятью в Windows»

(2 часа)

Для управления задачами используется механизм «предок-потомок».

Программа, которая запускается на исполнение, называется программой-потомком (child program – дочерняя программа). Программа, которая запускает дочернюю программу, называется программой-предком (parent program – родительская программа). Функции языка С, работающие с процессами, находятся в библиотеке <PROCESS.H>.

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

int spawnl(int mode, char *path, char *arg0, …, NULL);

int spawnle(int mode, char *path, char *arg0, …, NULL, char **env);

int spawnlp(int mode, char *path, char *arg0, …, NULL);

int spawnlpe(int mode, char *path, char *arg0, …, NULL, char **env);

Параметры:

int MODE – определяет режим. Режим имеет 5 предопределенных значений:

1. P_WAIT – предок останавливается и запускается потомок, после завершения которого, управление возвращается в предок;

2. P_DETACH – потомок и родитель работают параллельно, но потомок работает в фоновом режиме;

3. P_NOWAIT – потомок и родитель работают параллельно;

4. P_NOWAITO – потомок и родитель работают параллельно, но процесс потомка не сохраняется;

5. P_OVERLAY – потомок замещает предка, т.е. предок прекращает свое существование и поэтому невозможен возврат управления в программу предок.

Если функция spawnl() по каким-либо причинам не может быть выполнена, в точку вызова возвращается -1 и во внешнюю переменную errno записывается код ошибки.

Коды ошибок, возвращаемых функциями spawnl():

Константа Причина ошибки

EINVAL Неправильный аргумент

E2BIG Список аргументов слишком велик;

ENOENT Не найден файл загрузочного модуля;

ENOEXEC Запускаемый на выполнение файл не является запускаемым или поврежден;

ENOMEM Ошибка при выделении оперативной памяти потомку.

Если работа программы-потомка была успешно исполнена, то функции spawnl() возвращают код завершения потомка.

Буква ‘p’ в названии функции говорит о том, что для поиска файла потомка будут просматриваться не только маршрут, заданный параметром path, но и маршруты, указанные в строке среды PATH, если поиск по маршруту path завершается неудачей.

Буква ‘е’ говорит о том, что при запуске программы-потомка будет переопределяться среда. Массив указателей envp содержит указатели на ASCIIZ-строки новой среды. Если буква ‘е’ в названии функции отсутствует, потомок наследует среду предка в неизменном виде.

Буква ‘l’ в названии функции свидетельствует о том, что в точку входа main() потомка передается известное заранее число слов, указатели на которые задаются при вызове функции. Если число параметров в функции заранее неизвестно, то единственный выход – использовать массив указателей и передавать адрес начала этого массива.

Все функции spawn***(), имеющие в названии букву ‘v’, передают в качестве второго аргумента указатель на массив указателей argv.

char *path – указатель на ASCIIZ – строку спецификации файла загрузочного модуля программы-потомка. Если не задается директория и/или накопитель, то поиск файла выполняется в текущих директории и (или) накопителе.

char *arg0, char *arg1, …, NULL – указатели на ASCIIZ – строки, образующие в совокупности командную строку запускаемой на выполнение программы (указатели на отдельные слова командной строки).

Пример

1. Запуск дочерней программы (вызываемой) с возвратом в родительскую (вызывающую).

z1.cpp: //родительская программа (процесс)

#include<stdio.h>

#include<process.h>

#include<conio.h>

void main(void){

clrscr();

printf("Запушена родительская программа\n");

spawnl(P_WAIT,"test.exe","arg1","arg2",NULL);

}

test.cpp: //дочерняя программа (процесс)

#include<stdio.h>

void main(int kol_arg, char **arg){

printf("\nДанная программа является дочерней\n");

for(int i=0;i<kol_arg; i++){

printf("Аргумент %d = %s\n",i,arg[i]);

}

}

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

z1e.cpp: //родительская программа

#include<stdio.h>

#include<process.h>

#include<conio.h>

void main(void){

char *env[]={"System Programm = 3 and 2 course",

"Laboratornay = Number 2",

"Rk.com=c:\\rk.com",0,0 };

clrscr();

printf("Запушена родительская программа\n");

spawnle(P_WAIT,"test_z1e.exe","arg1","arg2",NULL,env);

}

test_z1e.cpp:// дочерняя программа

#include<stdio.h>

#include<stdlib.h>

void main(int kol_arg, char **arg){

printf("\nДанная программа является дочерней\n");

printf("Значение аргумента 1=%s\n",

getenv("Laboratornay "));

printf("Значение аргумента 2=%s\n",

getenv("System Programm "));

printf("Значение аргумента 3 \

(передача дочерней программе \

пути к программе \n \

rk.com)=%s\n",getenv("Rk.com"));

}


Дата добавления: 2015-07-11; просмотров: 105 | Нарушение авторских прав


Читайте в этой же книге: Лабораторная работа №1 | Лабораторная работа №2 | Лабораторная работа №3 | Лабораторная работа №8 | Лабораторная работа №9 |
<== предыдущая страница | следующая страница ==>
Лабораторная работа №6| Задание на выполнение

mybiblioteka.su - 2015-2024 год. (0.009 сек.)