Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
МИНИСТЕРСТВО ОБРАЗОРВАНИЯ И НАУКИ УКРАИНЫ
Донецкий национальный технический университет
Кафедра КИ
Отчёт
по лабораторной работе №5
по курсу «СПО»
Выполнила:
студентка гр. КС-09а
Процько Е.Г.
Проверила:
Чередникова О.Ю.
2011
Задание:
* Неоверлейный вызов процесса-потомка из процесса-родителя
с помощью функции spawnl()*/
/* Неоверлейный вызов процесса-потомка из процесса-родителя
с помощью функции spawnl()*/
#include<process.h>
#include<stdio.h>
#include<dos.h>
#include"mcb.c"
int main(void)
{ int stat,x,y;
char sx[5];
char sy[5];
printf("\nVvedite zna4eniya x i y dlya rasheta formuli z=x+5/y");
scanf("%d",&x);
scanf("%d",&y);
itoa(x,sx,10);
itoa(y,sy,10);
printf("\nRaspredelenie pamyati do zagruzki potomka:\n");
mcbfun();
printf("\nVizov porogdennogo processa\n");
stat = spawnlp(P_OVERLAY, "FUNC.EXE", "FUNC.EXE",sx,sy,NULL);
if (stat == -1)
{ perror("Error");
return 1;
}
else
{ if (stat == 1) printf("\nNedostato4no argumentov\n");
printf("\nRaspredelenie pamyati posle vozvrata:\n");
mcbfun();
}
return 0;
}
/* потомок FUNC.c*/
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include"mcb.c"
int main(int argc, char *argv[])
{
int f;
if(_osmajor >= 3)
printf("Process potomok iz faila %s zapushen\n", argv[0]);
if(argc < 3) return 1;
printf("Dannie: x = %s, y = %s",(argv[1]),(argv[2]));
f=5/atoi(argv[2]);
f+=atoi(argv[1]);
printf("Funkziya z = %d\n",f);getch();
printf("\nRaspredelenie pamyati posle zagruzki potomka:\n");
mcbfun();
return 0;
}
/* файл mcb.c*/
#include<math.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>
union REGS reg;
struct SREGS sregs;
typedef struct
{
unsigned char marker;
unsigned int owner;
unsigned int sizePara;
unsigned char dummy[3];
unsigned char name[8];
}mcb;
mcb far *ptr;
void mcbfun(void)
{ unsigned int segm, i;
reg.h.ah = 0x52;
intdosx(®, ®, &sregs);
segm = peek(sregs.es, reg.x.bx - 2);
printf(" Adress MCB | Type | Razmer bloka | Imya vladelec\n"
" | | | pamyati (bait)\n");
printf("--------------------------------------------------\n");
ptr = MK_FP(segm, 0);
printf(" %04X:0000 | %c | %8lu |", segm,ptr->marker,
(long)ptr->sizePara*16);
if(!ptr->owner){printf("Blok svoboden");delay(100);}
else
if(( _osmajor >= 4) && (segm + 1) == ptr->owner)
{ for(i=0; i<=7; i++)
printf("%c", ptr->name[i]); }
delay(100);
printf("\n");
while( ptr->marker == 'M')
{ segm = segm + ptr->sizePara + 1;
ptr = MK_FP(segm, 0);
printf(" %04X:0000 | %c | %8lu |", segm,ptr->marker,
(long)ptr->sizePara * 16);
if(!ptr->owner){printf("Blok svoboden");delay(300);}
else if((_osmajor >= 4) && ( segm + 1) == ptr->owner)
{ for(i=0; i<=7; i++) printf("%c", ptr->name[i]);}
delay(300);printf("\n");
}getch();
}