Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SysSoft.doc
Скачиваний:
520
Добавлен:
16.03.2016
Размер:
4.36 Mб
Скачать

Текст программы в

#define INCL_BASE

#define INCL_DOS

#include <os2.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#include "progr.h"

#include "func.h"

/*Глобальные переменные*/

char myword[ ]="PROGR_B.EXE";

/*Главная функция*/

int main(int argc, char* argv[ ], char* envp[ ])

{

/*Локальные переменные*/

int i,j; strcpy(Word,myword);

/*Инициализация семафоров*/

rc=DosOpenEventSem("\\SEM32\\PIPESEM", &PipeSem);

if (rс!=0) { HaltSystem(“Open Sem (PipeSem) ", rc); }

rc=DosOpenEventSem("\\SEM32\\EXITSEM", &ExitSem);

if (rc!=0) { HaltSystem("Open Sem (ExitSem) ", rc);}

rc=DosOpenEventSem("\\SEM32\\WRITEFILE", &FileSem);

if (rc!=0) { HaltSystem("Open Sem (FileSem) ", rc);}

rc=DosOpenEventSem("\\SEM32\\POINT1SEM", &Point1Sem);

if (rc!=0) { HaltSystem("Create Sem (Point1Sem) ", rc);}

rc=DosOpenEventSem("\\SEM32\\POINT2SEM", &Point2Sem);

if (rc!=0) { HaltSystem("Create Sem (Point2Sem) ", rc);}

rc=DosOpenEventSem("\\SEM32\\POINT3SEM", &Point3Sem);

if (rc!=0) { HaltSystem("Create Sem (Point3Sem) ", rc);}

/*Проверка количества аргументов */

if (argc!=4) { HaltSystem( "Ошибка командной строки",rc);}

/*Инициализация переменных для записи в транспортер и файл*/

WriteHandle=atoi(argv[2]); ReadHandle=atoi(argv[1]); FilеОреп=аtoi(argv[З]);

/*0жидание свободного транспортера*/

do { DosWaitEventSem(PipeSem, -1);

rc=DosResetEventSem(PipeSem, &NPost);

} while (rc!=0);

/* Работа с транспортером*/

rc=DosRead(ReadHandle, (PVOID)&OldInform, sizeof(OldInform), &BytesReaden);

DosPostEventSem(PipeSem); if (rc!=0) { HaltSystem("Read Pipe", rc);}

/*Уведомление предка о завершении инициализации*/

if (OldInform.Number==1)

{ rc=DosPostEventSem(ExitSem);

if (rc!=0) { HaltSystem(“PostSem (ExitSem) ", rc);} }

else { do { Oldlnform.Number--;

DosWaitEventSem(PipeSem,-1) ;

Rc=DosResetEventSem(PipeSem,&NPost);

} white (rc!=0);

rc=DosWrite(WriteHandle,(PVOID)&OldInform,sizeof(Oldlnform),&BytesWritten);

DosPostEventSem(PipeSem);

if (rc!=0) { HaltSystem("Write Pipe", rc);} }

/*3адание строк аргументов*/

for (i=0;i<=strlen(mywoгd);i++ ) { Argument [i]=myword[i]; }

j=i; Argument2=itoa(ReadHandle.MyBuffer, 10);

for (i=0;i<=strlen(Argument2);i++) { Argument[j+i]='MyBuffer[i]; }

j+=i; Argument[j-1]=' '; Argument2=itoa(WriteHandle, MyBuffer, 10);

for (i=;0;i<=strlen(Argument2);i++) { Argument[i+j]=MyBuffer[i]; }

j+=i; Argument[j-1]=' '; Argument2=itoa(FileOpen, MyBuffer, 10);

for (i=0;i<=strlen(Argument2);i++) { Argument [i+j], MyBuffer[i]; }

/*Выполнение процесса - цикл */

strcpy(Pmessege, "Программа "); strcat(Pmessege,myword);

VioWrtNAttr(&atr, 80*25, 0, 0, 0); VioWrtCharStr(Pmessege, sizeof(PMessege), 2, 27,0);

strcpy(Pmessege,"Запущена в "); strcat(Pmessege,OldInform.LaunchTime);

VioWrtNAttr(&atr,80*25, 0, 0, 0); VioWrtCharStr(PMessege.sizeof(PMessege), 3, 27, 0);

strcpy(Fmessege1, myword); strcat(Fmessege1, " "); strcat (Fmessegel, PMessege);

strcpy(Pmessege, "Программой "); strcat(PMessege.OldInform.ParentName);

VioWrtNAttr(&atr, 80*25, 0, 0, 0); VioWrtCharStr(Pmessege, sizeof(PMessege), 4, 27, 0);

strcpy(FMessege2,myword); strcat(FMessege2, " "); strcat (FMessege2, PMessege);

foг(i=0;i<22;i++)

{ VioWrtNAttr(&atr, 80*25, 0, 0, 0); VioWrtCharStr("|", 1, 5, 27+i, 0);

for (j=0;j<(25000*Speed);j++); };

/*Получение времени загрузки программ-потомков*/

DosGetDateTime(&Time);

strcpy(MyTime, itoa(Time.hours, MyBuffer, 10)); strcat(MyTime, ":");

strcat(MyTime, itoa(Time.minutes, MyBuffer, 10)); strcat(MyTime, ":");

strcat(MyTime, itoa(Time.seconds, MyBuffer, 10)); strcat(MyTime, ";");

strcat(MyTime, itoa(Time.hundredths, MyBuffer, 10));

strcpy(NewInform.LaunchT1me,MyT1me);

strcpy(NewInform.ParentName, myword); NewInform.Number=3;

strcpy(PMessege."Завершена в "); strcat(PMessege.MyTime);

VioWrtNAttr(&atr, 80*25, 0, 0, 0); VioWrtCharStr(Pmessege, sizeof(PMessege), 6, 27, 0);

strcpy(FMessege3, myword); strcat(FMessege3, " "); strcat (FMessege3, PMessege);

/*0жидание доступности записи в файл и немедленная запись в файл*/

do { DosWaitEventSem(FileSem, -1);

rc=DosResetEventSem(FileSem, &BytesWritten);

} while (rc!=0);

DosWrite(FileOpen, (PVOID)&Fmessege1,sizeof(Fmessege1), &BytesWritten);

DosWrite(FileOpen, (PVOID)&FMessege2, sizeof(FMessege2), &BytesWritten);

DosWrite(FileOpen, (PVOID)&FMessege3, sizeof(FMessege3), &BytesWritten);

DosPostEventSem(FileSem);

/*Алгоритм прохождения точки 2*/

rc=DosPostEventSem(Point1Sem);

if (rc==0) {

/*3апись сообщения в Pipe; имя предка и время запуска программ*/

rc=DosWrite(WriteHandle, (PVOID)&NewInform, sizeof(NewInform), &BytesWritten);

if (rc!=0) { HaltSystem("(DosWrite)", rc); }

/*Создание семафора ожидания инициализации ресурсов потомками*/

r=DosCreateEventSem("\\SEM32\\EXITSEM2", &ExitSem2, DC_SEM_HARED, 0);

if (rc!=0) { HaltSystem("Create Sem (ExitSem2) ", rc);}

/*3апуск программ-потомков*/

rc=DosExecPgm(FailFileb.sizeof (FailFileb), 1, Argument, 0, &ResCodeb, "progr_d.exe");

if (rc!=0) { HaltSystem("(DosExecPgm)", rc);}

rc=DosExecPgm(FailFileb,sizeof(FailFileb), 1, Argument, 0, &ResCodeb, "progr_e.exe");

if (rc!=0) { HaltSystem("(DosExecPgm)", rc);}

rc=DosExecPgm(FailFileb, sizeof(FailFileb), 1, Argument, 0, &ResCodeb, "progr_f.exe");

if (rc!=0) { HaltSystem("(DosExecPgm)", rc);}

/*0жидание инициализации ресурсов потомками*/

DosWaitEventSem(ExitSem2,-1);

DosCIoseEventSem(ExitSem2);

}

return(0);}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]