Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: HondaBoard.de .com .net .org .info das Hondaforum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Spinal

Fortgeschrittener

  • »Spinal« ist der Autor dieses Themas

Beiträge: 350

Registrierungsdatum: 22. Februar 2004

Mein Auto: Honda Civic

  • Nachricht senden

1

Freitag, 16. April 2004, 11:54

Problem in UNIX mit C

Hallo Leute,

dies richtet sich an alle die Ahnung von C unter Unix/Linux haben.
Ich muss ein kleines Programm mit Message Queues schreiben (es MÜSSEN Message Queues sein).
Es sollen 2 Sohnprozesse gestartet werden, die mithilfe der Message Queues kommunizieren.
Sohn 1 sendet ein paar Integer Werte
Sohn 2 empfängt in einer Endlosschleife Werte verarbeitet sie und sendet ein paar Integer und float Werte zurück.
Sohn 1 empfängt die zurückgegebenen Werte, terminiert und der Vaterprozess killt schliesslich den Sohn 2.

Mein Problem ist, das ich die Kommunikation mit den Message Queues nicht hinbekomme :idiot:. Irgendwie bleibt das Programm einfach stehen. Manchmal startet der noch nicht einmal die Sohnprozesse.

Hier ist eine vereinfachung des Programms, wo quasi nur einmal mit einer Message Queue kommuniziert werden soll, aber selbst da hängt das Ding.

Vielleicht kann mir einer helfen????

#define _HPUX_SOURCE
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/signal.h>

main()
{
int i, status, server_id;

struct
{
long mtype;
int wert1, wert2, wert3;
}message_snd, message_rcv;

int msgid;

msgid = msgget(IPC_PRIVATE, IPC_CREAT|0777);

if(fork()==0)
{
printf("CLIENT\n");

sleep(1);
message_snd.mtype = 1;
message_snd.wert1 =10;
message_snd.wert2 = 11;
message_snd.wert3 = 12;
msgsnd(msgid, &message_snd, sizeof(message_snd)-sizeof(long),0);

sleep(5);exit(0);
}

if((server_id=fork())==0)
{
printf("SERVER\n");
sleep(2);
while(1)
{
msgrcv(msgid, &message_rcv, sizeof(message_rcv)-sizeof(long), 0, 0);
printf("Empfangen: %d %d %d\n", message_rcv.wert1, message_rcv.wert2, message_rcv.wert3);
}
}

wait(&status);
kill(server_id,SIGKILL);
msgctl(msgid, IPC_RMID, 0);
}

Danke schonmal.....

EDIT: habe noch ein paar Änderungen vorgenommen. Jetzt bleibt er nicht hängen, aber er sendet oder empfängt nicht.

bye
Spinal

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spinal« (16. April 2004, 12:03)


DrPest

Fortgeschrittener

Beiträge: 410

Registrierungsdatum: 22. Februar 2004

Mein Auto: Corsa C 1.4l Sport

  • Nachricht senden

2

Freitag, 16. April 2004, 12:45

Ich leite das mal zu nem Kumpel von mir weiter, der ziemlicher C-Meister ist, wenn du nichts dagegen hast.
Vllt kann der dir helfen.

mfg
Pest
411 UR 8453 4R3 8310N6 70 U5!

w3 4r3 1337! w3 0wn 4nd c0n7r01!

Spinal

Fortgeschrittener

  • »Spinal« ist der Autor dieses Themas

Beiträge: 350

Registrierungsdatum: 22. Februar 2004

Mein Auto: Honda Civic

  • Nachricht senden

3

Freitag, 16. April 2004, 13:07

Au ja, das wäre nett.
Ich sitze auch noch dran. Irgendwo ist da bestimmt nur eine Kleinigekeit, das der nicht sendet/empfängt, aber ich finds halt nicht.
Danke schonmal!!!

bye
Spinal

Unmountable

unregistriert

4

Freitag, 16. April 2004, 14:20

Ach, shit. Sowas haben wir doch mal 3. Semester gemacht...

Mal sehen, ob ich die Files noch finde...

Spinal

Fortgeschrittener

  • »Spinal« ist der Autor dieses Themas

Beiträge: 350

Registrierungsdatum: 22. Februar 2004

Mein Auto: Honda Civic

  • Nachricht senden

5

Freitag, 16. April 2004, 16:01

Ja, das einzige Problem ist, das die Dinger nicht funtinieren :(

Wenn jemand ein fertiges funktionstüchtiges Beispiel hat, am besten so einfach wie möglich aufgebaut, dann kann er mir das per Mail oder so gerne schicken. Wäre echt dankbar.
Ich raff das nicht, ich habe hier ein Beispiel Prog vom Prof. das läuft auch nicht.....vielleicht mache ich was falsch.

EDIT: Funktioniert jetzt. Habe eigentlich nix geändert. Vielleicht lags an der Unix Maschine. Aber wahrscheinlich war der Fehler zwischen den Kopfhörern.
ABER DANKE AN ALLE!


bye
Spinal

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spinal« (16. April 2004, 16:12)