-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwasher.c~
126 lines (126 loc) · 35.7 KB
/
washer.c~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <stdlib.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
//процесс мойщика
//
// int main()
// {
// char c;
// int shtuk;
// ssize_t len; //длина информативной части сообщения
// int msqid; //IPC дескриптор для очереди сообщений
// char pathname[]="mess.c";
// key_t key; //IPC ключ
//
// //структура сообщений
// struct mymsgbuf{
// long mtype;
// int ptype;
// int ptime;
// int n;
// } mybuf;
//
// int buf_ptype=0,buf_ptime;
//
//
// mybuf.n=5;
// //определяем длину информативной части сообщения
// len=sizeof(struct mymsgbuf);
//
//
// //организуем очередь сообщений
//
// if( (key=ftok(pathname,0))<0 )
// {
// printf("Can\'t genetare key.");
// exit(-1);
// };
//
// if( (msqid=msgget(key,0666|IPC_CREAT))<0 )
// {
// printf("Can\'t get msqid.");
// exit(-1);
// };
//
// //открывем файл "shtuk"
// FILE *sh;
//
// if( (sh=fopen("shtuk","r"))==NULL )
// {
// printf("Can't open file shtuk.");
// exit(-1);
// };
//
// //открываем файл "time"
// FILE *ti;
//
// if( (ti=fopen("time","r"))==NULL )
// {
// printf("Can't open file time.");
// exit(-1);
// };
//
// while(!EOF(sh))
// {
// shtuk=0;
// while(shtuk==0)
// {
// fscanf(sh,"%d",&mybuf.ptype); //узнали тип посуды
// fscanf(sh,"%c",&c); //пропустили символ ":"
// fscanf(sh,"%d",&shtuk); //узнали количество этой посуды
// };
//
// //определяем время необходимое для мытья посуды этого типа
// //в файле ищем строку с этим типом посуды
// int search_type=mybuf.ptype+1;
// while( search_type!=mybuf.ptype )
// {
// fscanf(ti,"%d",&search_type); //узнали тип посуды
// fscanf(ti,"%c",&c); //пропустили символ ":"
// fscanf(ti,"%d",&mybuf.ptime); //узнали время мытья
// };
//
// int buf_ptype,buf_ptime;
// buf_ptype=mybuf.ptype;
// buf_ptime=mybuf.ptime;
// while (shtuk!=0)
// {
// //принимаем сообщение от вытиральщика
// //чтобы узнать, есть ли место на столе
// //если да, то моем посуду
//
// if( mybuf.n!=0 )
// {
// sleep(mybuf.ptime); //моет посуду
// shtuk-=1; //на мойке посуды уменьшилось
// mybuf.n-=1; //на столе стало меньше места
//
// //посылаем сообщение
// if(msgsnd(msqid, (struct mymsgbuf *) &mybuf,len,0) < 0)
// {
// printf("Can\'t send message.");
// msgctl(msqid, IPC_RMID,(struct msqid_ds *) NULL);
// exit(-1);
// };
//
// if(( len=msgrcv(msqid, (struct mymsgbuf *) &mybuf,len, 0, 0) < 0))
// {
// printf("Can\'t receive message from queue\n");
// exit(-1);
// };
//
//
// };
// };
// };
//
// fclose(sh);
// fclose(ti);
//
// return 0;
// }: