Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
26.05.2014
Размер:
1.88 Кб
Скачать
#include <stdio.h>
#include <sys/types.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <errno.h>
#include <string.h>
#include "bank.h"
#define NUM 3

int ust_free=18, ust_all=18, ust_need[NUM]={4,6,8}, ust_videl[NUM]={2,3,2}, ust_ost[NUM]={2,3,6};
int cantstop[NUM]={1,1,1};
int pr=1;
main ()
    {
    key_t key;
    int semid;
    int i;
    /* Getting key*/
    if ((key = ftok("server", 'A')) <0)
    {
	printf("Getting key.........\e[31m Fail: %s %s \e[37m \n", strerror(errno));
	exit(1);
    } else {
    	printf("Getting key......... \e[32m OK \e[37m \n");
    }
    if ((semid = semget(key, 2, 0666)) < 0)
    {
	printf("Accessing semafor........\e[31m Fail: %s %d \e[37m \n", strerror(errno));
	exit(1);
    } else {
    	printf("Accessing semafor........\e[32m OK \e[37m \n");
    }
ust_free=ust_all;
for (i=0;i<3;i++)
{
    ust_free=ust_free-ust_videl[i];
    cantstop[i]=1;
    ust_ost[i]=ust_need[i]-ust_videl[i];
}
while(pr)
{
    pr=0;
    for(i=0;i<3;i++)
    {
	if ((cantstop[i]) && (ust_ost[i] <= ust_free))
	{
	    cantstop[i]=0;
	    ust_free=ust_free+ust_videl[i];
	    pr=1;
	    printf("%d \n", ust_free);
	}
    }
}

printf("%d --- %d \n", ust_free, ust_all);

if (ust_free == ust_all)
{
    if (semop(semid, &proc_wait[1],1) < 0)
    {
	printf("Sync with server........\e[31m Fail: %s \e[37m \n", strerror(errno));
	exit(1);
    } else {
    	printf("Sync with server........\e[32m OK \e[37m \n");
    }
}
    if (semop(semid, &proc_wait[1],1) < 0)
    {
	printf("Sync with server2........\e[31m Fail: %s \e[37m \n", strerror(errno));
	exit(1);
    } else {
    	printf("Sync with server2........\e[32m OK \e[37m \n");
    }


    if (semctl(semid, 0, IPC_RMID) < 0)
    {
	printf("Deleting semafor........\e[31m Fail: %s \e[37m \n", strerror(errno));
	exit(1);
    } else {
    	printf("Deleting semafor........\e[32m OK \e[37m \n");
    }
exit(0);
}
Соседние файлы в папке lab04