Semaphore löschen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Semaphore löschen

Beitrag von Columbus » 24.06.2006 17:01:06

Hallo zusammen,
ich frage mich gerade ob das löschen vom Semaphoren, so wie ich es gemacht habe, richtig ist.

Code: Alles auswählen

int sem_delete ( int kennung )
{
  union semun mysem;

  if ( ( semctl ( kennung, 0, IPC_RMID, mysem ) ) == -1 )
  {
     perror ( "Fehler beim Loeschen der Semaphore\n" );
     exit ( errno );
  }

return ( 1 );
}
Mein Problem ist die 0 als 1. Parameter von semctl ( als {angehender} Informatiker zähle ich immer beginnend mit 0 ). Dieser Parameter gibt an, welche Semaphore im Array bzw. der Semaphorenmenge gelöscht werden soll.
Semaphoren werden ja immer als Semaphoren-Menge angelegt, über die dann mit einem Index zugegriffen werden kann. Wenn ich nun die Semaphore lösche, kann ich das auch über einen Index tun oder wird auf jeden Fall immer die ganze Semaphoren-Menge gelöscht? Da bin ich mir nicht ganz sicher. Der Index ist ja da, aber ich kann mir nicht vorstellen daß ich den Semaphor[4] lösche, den Semaphor[5] und [3] aber nicht !?!! :?:

Gruss Christian

P.S. die Überschrift müsste natürlich heisen "Semaphoren löschen"
Zuletzt geändert von Columbus am 25.06.2006 13:32:06, insgesamt 1-mal geändert.
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Sockets löschen

Beitrag von gms » 24.06.2006 19:53:41

Hallo Columbus!

Die Funktion "semctl" stellt sowohl Operationen auf einzelne Semaphoren der Gruppe zur Verfügung (z.B. GETVAL, SETVAL), als auch Operationen auf die ganze Gruppe (GETALL; SETALL und eben auch IPC_RMID). Bei den Operationen auf die ganze Gruppe wird üblicherweise 0 als Index gewählt. Ich denke aber dieser Parameter wird völlig ignoriert und du könntest dort jeden Wert eintragen.
Columbus hat geschrieben: if ( ( semctl ( kennung, 0, IPC_RMID, mysem ) ) == -1 )
...
[/code]
Mein Problem ist die 0 als 1. Parameter von semctl ( als {angehender} Informatiker zähle ich immer beginnend mit 0 ).
die anderen Informaitker werden dich aber nicht verstehen wenn du die Parameter einer Funktion auch mit 0 zu zählen beginnst :wink:
Columbus hat geschrieben: P.S. die Überschrift müsste natürlich heisen "Semaphoren löschen"
[/quote]
Müßtest du eigentlich auch noch nachträglich ändern können, oder ?

Gruß
gms

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 25.06.2006 13:31:33

die anderen Informaitker werden dich aber nicht verstehen wenn du die Parameter einer Funktion auch mit 0 zu zählen beginnst Wink
Ja, das stimmt wohl aber es verwirrt manchmal, normalerweise zählt man beginnend mit 0, bei Parametern und anderen Ausnahmen aber ab 1...

Dank Dir auf jeden Fall...

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

Antworten