/[cvs]/api/Classes/Semaphore/Semaphore.cpp
ViewVC logotype

Contents of /api/Classes/Semaphore/Semaphore.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Sun Jul 1 20:47:58 2001 UTC (22 years, 10 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

1 #include "Semaphore.h"
2
3 #ifdef linux
4
5 Semaphore::Semaphore()
6 {
7 needs_attach = 1;
8 }
9
10 Semaphore::Semaphore(char* path, char id, unsigned int permissions)
11 {
12 arg.val = 1;
13 needs_attach = 1;
14 key_t key;
15 key = ftok(path,id); //skapar nyckel
16 semid = semget(key , 1 , IPC_CREAT | IPC_EXCL | permissions);
17 semctl(semid , 0 , SETVAL , arg);
18
19 if(semid == -1)
20 {
21 cout << "Kunde inte skapa semafor" << endl << "Kan bero på att semaforen redan finns" << endl;
22 }
23 else
24 {
25 cout << "Du har skapat en semafor." << endl;
26 needs_attach = 0;
27 }
28
29 }
30
31 Semaphore::~Semaphore()
32 {
33 if(semctl(semid , 0 , IPC_RMID , arg) == -1)
34 {
35 cout << "Lyckades inte ta död på semaforen" << endl;
36 }
37 else
38 {
39 cout << "Semaforen är död" << endl;
40 }
41 }
42
43 void Semaphore::attach(char* path, char id, unsigned int permissions)
44 {
45 if(needs_attach)
46 {
47 key_t key;
48 key = ftok(path ,id); //skapar nyckel
49 semid = semget(key , 1 , permissions); //IPC_CREAT | IPC_EXCL |
50
51 if(semid == -1)
52 {
53 cout<<"Du har inte blivit kopplad till en semafor"<< endl <<" "<<endl;
54 }
55 else
56 {
57 cout<<"Du har nu kopplat dig till en semafor."<<endl;
58 needs_attach = 0;
59 }
60 }
61 }
62
63 void Semaphore::signal() //Måste ligga utanför objektet
64 {
65 static sembuf sb;
66
67 sb.sem_num = 0;
68 sb.sem_flg = 0; //Kan vara: SEM_UNDO eller IPC_NOWAIT , mm
69 sb.sem_op = 1;
70
71 if(semop(semid , &sb , 1) == -1)
72 {
73 // perror("Signalfel hos semaforen i signal-funktionen");
74 cout << "Signalfel hos semaforen i signal-funktionen" << endl;
75 exit(1);
76 }
77 }
78
79 void Semaphore::wait()
80 {
81 static sembuf sb;
82
83 sb.sem_num = 0;
84
85 sb.sem_flg = 0; //kan vara SEM_UNDO eller IPC_NOWAIT
86
87 sb.sem_op = -1;
88
89
90 if(semop(semid , &sb , 1) == -1)
91 {
92 // perror("Signalfel hos semaforen i wait-funktionen");
93 cout << "Signalfel hos semaforen i wait-funktionen" << endl;
94 exit(1);
95 }
96 }
97
98 int Semaphore::semset(int i)
99 {
100 arg.val = i;
101 return semctl(semid , 0 , SETVAL , arg);
102 }
103
104 #endif
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26