noid
2004-06-12, 10:10:18
also ich weiss nicht warum das hier nicht funktioniert:
nach eingabe eines zeichens passiert nix, außerdem reagiert er etwas seltsam auf ne wiederholte eingabe.
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSGSIZE 100
main(void)
{
int sqid, rqid, key, pid, op1 = 0, op2 = 0, erg;
char opc;
struct msgbuf {
long mtype;
char mtext[MSGSIZE];
} buf;
pid = (long) getpid();
puts("Welcome to mclient");
sqid = msgget((key_t)1111, 0660);
if (sqid == -1)
{
perror("Fehler: ");
exit(1);
}
rqid = msgget((key_t)2222, 0660);
if (rqid == -1)
{
perror("Fehler: ");
exit(1);
}
do
{
printf("Ausgabe: Auftrag eingeben\nEingabe: ");
scanf("%c", &opc);
if (opc == 'x' || opc == 'X') exit(0);
scanf("%d %d", &op1, &op2);
sprintf(buf.mtext,"%d %c %d %d", pid, opc, op1, op2);
buf.mtype = (long)1;
//printf("Zu sendende Nachricht: "); puts(s_buf.mtext);
if (msgsnd(sqid,&buf, strlen(buf.mtext)+1, 0) == -1)
{
printf("Fehler: msgsnd failed\n");
exit(1);
}
//puts("Nachricht gesendet");
if (msgrcv(rqid,&buf, MSGSIZE, (long)pid, 0) == -1)
{
printf("Fehler: msgrcv failed\n");
exit(1);
}
sscanf(buf.mtext, "%d", &erg);
printf("Ausgabe: %d\n", erg);
} while(1);
}
dann bin ich bei dieser lösung gelandet, weil ich das gefühl hab mir machen die whitespaces ein strich durch die rechnung (der code geht auch 1a):
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSGSIZE 100
main(void)
{
int sqid, rqid, key, pid, op1 = 0, op2 = 0, erg;
char opc[1];
struct msgbuf {
long mtype;
char mtext[MSGSIZE];
} buf;
pid = (long) getpid();
puts("Welcome to mclient");
sqid = msgget((key_t)1111, 0660);
if (sqid == -1)
{
perror("Fehler: ");
exit(1);
}
rqid = msgget((key_t)2222, 0660);
if (rqid == -1)
{
perror("Fehler: ");
exit(1);
}
do
{
printf("Ausgabe: Auftrag eingeben\nEingabe: ");
scanf("%s", opc);
if (*opc == 'x' || *opc == 'X') exit(0);
scanf("%d %d", &op1, &op2);
sprintf(buf.mtext,"%d %c %d %d", pid, *opc, op1, op2);
buf.mtype = (long)1;
//printf("Zu sendende Nachricht: "); puts(s_buf.mtext);
if (msgsnd(sqid,&buf, strlen(buf.mtext)+1, 0) == -1)
{
printf("Fehler: msgsnd failed\n");
exit(1);
}
//puts("Nachricht gesendet");
if (msgrcv(rqid,&buf, MSGSIZE, (long)pid, 0) == -1)
{
printf("Fehler: msgrcv failed\n");
exit(1);
}
sscanf(buf.mtext, "%d", &erg);
printf("Ausgabe: %d\n", erg);
} while(1);
}
nach eingabe eines zeichens passiert nix, außerdem reagiert er etwas seltsam auf ne wiederholte eingabe.
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSGSIZE 100
main(void)
{
int sqid, rqid, key, pid, op1 = 0, op2 = 0, erg;
char opc;
struct msgbuf {
long mtype;
char mtext[MSGSIZE];
} buf;
pid = (long) getpid();
puts("Welcome to mclient");
sqid = msgget((key_t)1111, 0660);
if (sqid == -1)
{
perror("Fehler: ");
exit(1);
}
rqid = msgget((key_t)2222, 0660);
if (rqid == -1)
{
perror("Fehler: ");
exit(1);
}
do
{
printf("Ausgabe: Auftrag eingeben\nEingabe: ");
scanf("%c", &opc);
if (opc == 'x' || opc == 'X') exit(0);
scanf("%d %d", &op1, &op2);
sprintf(buf.mtext,"%d %c %d %d", pid, opc, op1, op2);
buf.mtype = (long)1;
//printf("Zu sendende Nachricht: "); puts(s_buf.mtext);
if (msgsnd(sqid,&buf, strlen(buf.mtext)+1, 0) == -1)
{
printf("Fehler: msgsnd failed\n");
exit(1);
}
//puts("Nachricht gesendet");
if (msgrcv(rqid,&buf, MSGSIZE, (long)pid, 0) == -1)
{
printf("Fehler: msgrcv failed\n");
exit(1);
}
sscanf(buf.mtext, "%d", &erg);
printf("Ausgabe: %d\n", erg);
} while(1);
}
dann bin ich bei dieser lösung gelandet, weil ich das gefühl hab mir machen die whitespaces ein strich durch die rechnung (der code geht auch 1a):
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSGSIZE 100
main(void)
{
int sqid, rqid, key, pid, op1 = 0, op2 = 0, erg;
char opc[1];
struct msgbuf {
long mtype;
char mtext[MSGSIZE];
} buf;
pid = (long) getpid();
puts("Welcome to mclient");
sqid = msgget((key_t)1111, 0660);
if (sqid == -1)
{
perror("Fehler: ");
exit(1);
}
rqid = msgget((key_t)2222, 0660);
if (rqid == -1)
{
perror("Fehler: ");
exit(1);
}
do
{
printf("Ausgabe: Auftrag eingeben\nEingabe: ");
scanf("%s", opc);
if (*opc == 'x' || *opc == 'X') exit(0);
scanf("%d %d", &op1, &op2);
sprintf(buf.mtext,"%d %c %d %d", pid, *opc, op1, op2);
buf.mtype = (long)1;
//printf("Zu sendende Nachricht: "); puts(s_buf.mtext);
if (msgsnd(sqid,&buf, strlen(buf.mtext)+1, 0) == -1)
{
printf("Fehler: msgsnd failed\n");
exit(1);
}
//puts("Nachricht gesendet");
if (msgrcv(rqid,&buf, MSGSIZE, (long)pid, 0) == -1)
{
printf("Fehler: msgrcv failed\n");
exit(1);
}
sscanf(buf.mtext, "%d", &erg);
printf("Ausgabe: %d\n", erg);
} while(1);
}