You are not logged in.

Dear visitor, welcome to HondaBoard.de .com .net .org .info das Hondaforum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Spinal

Intermediate

  • "Spinal" started this thread

Posts: 350

Date of registration: Feb 22nd 2004

wcf.user.option.userOption52: Honda Civic

  • Send private message

1

Friday, April 16th 2004, 11:54am

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

This post has been edited 1 times, last edit by "Spinal" (Apr 16th 2004, 12:03pm)


DrPest

Intermediate

Posts: 410

Date of registration: Feb 22nd 2004

wcf.user.option.userOption52: Corsa C 1.4l Sport

  • Send private message

2

Friday, April 16th 2004, 12:45pm

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

Intermediate

  • "Spinal" started this thread

Posts: 350

Date of registration: Feb 22nd 2004

wcf.user.option.userOption52: Honda Civic

  • Send private message

3

Friday, April 16th 2004, 1:07pm

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

Unregistered

4

Friday, April 16th 2004, 2:20pm

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

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

Spinal

Intermediate

  • "Spinal" started this thread

Posts: 350

Date of registration: Feb 22nd 2004

wcf.user.option.userOption52: Honda Civic

  • Send private message

5

Friday, April 16th 2004, 4:01pm

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

This post has been edited 1 times, last edit by "Spinal" (Apr 16th 2004, 4:12pm)