Moin zusammen.
Ich bearbeite gerade eine Aufgabe und benötige Unterstützung.
Es soll ein Programm erstellt werden welches mit 3 Argumenten (Zahlen) gestartet wird. Das Programm erzeugt einen Shared Memory Bereich und legt die 3 Werte darin ab. Erzeugt daraufhin einen Kind-Prozess welcher diese Werte aus dem Shared Memory ausliest und Berechnungen anstellt.
Bis dato sieht meine Lösung so aus:
#include
#include
#include
#include
#include
main(int argc, char \*argv[]){
printf("char=%i\n",sizeof(char));
printf("int=%i\n\n",sizeof(int));
int shmsize=3\*(sizeof(char));
printf("Programmbegin. PID: %d\n",getpid());
int shmid1=shmget(1110,shmsize,IPC\_CREAT|0666);
printf("Die SHMID lautet: %i\n",shmid1);
char \*shm[3];
shm[0]=shmat(shmid1,NULL,0);
shm[1]=shm[0]+sizeof(char)+1;
shm[2]=shm[1]+sizeof(char)+1;
printf("Pointer in SHM[0]: %p\n",shm[0]);
printf("Pointer in SHM[1]: %p\n",shm[1]);
printf("Pointer in SHM[2]: %p\n",shm[2]);
strcpy(shm[0],argv[1]);
strcpy(shm[1],argv[2]);
strcpy(shm[2],argv[3]);
printf("SHM[0] verweist auf Inhalt: %s\n",shm[0]);
printf("SHM[1] verweist auf Inhalt: %s\n",shm[1]);
printf("SHM[2] verweist auf Inhalt: %s\n",shm[2]);
if(!fork()){
printf("Kind erzeugt: %d\n",getpid());
//Hier erfolgt der Zugriff des Kind-Prozesses auf
//Shared Memory und Berechnung
}
printf("Ende %d\n",getpid());
}
Die Ausgabe:
ubuntu@ubuntu:~/Desktop$ gcc pm11.c -o pm11.o
ubuntu@ubuntu:~/Desktop$ ./pm11.o 3 4 5
char=1
int=4
Programmbegin. PID: 10480
Die SHMID lautet: 655369
Pointer in SHM[0]: 0xb78a8000
Pointer in SHM[1]: 0xb78a8002
Pointer in SHM[2]: 0xb78a8004
SHM[0] verweist auf Inhalt: 3
SHM[1] verweist auf Inhalt: 4
SHM[2] verweist auf Inhalt: 5
Ende 10480
Kind erzeugt: 10481
Ende 10481
Ich störe mich aber an Folgendem:
-
Da berchnet werden soll, sollte ich mit Integer und nicht mit Character arbeiten. Wie stelle ich es an: einfach char durch int ersetzen?
-
Der shmget() Aufruf scheitert wenn ich statt shmsize einen Wert eingebe: z.B. 6
-
Warum darf ich in
printf(„SHM[0] verweist auf Inhalt: %s\n“,shm[0]);
nicht shm statt shm[0] eingeben?
4)Angenommen es ist erwünscht mit char zu arbeiten. Wäre mein Programm dann i.O. oder gäbe es etwas zu verbessern?
Bin für jeden Hinweis dankbar.
Vitali