Anmelden

View Full Version : User Space



muadeep
24-10-08, 07:57
Hi *all

kann mir jemand Tipps (am besten an einem Beispiel *fg) geben, wie ich Daten in einen UserSpace schreibe und anschließend wieder auslesen!

das ich dazu die API's QUsPtrUS & QUsChgUS ist mir schon klar, aber wie benutzen muß ?????
meine Internet-Recherche brachte leider auch nicht den gewünschten Erfolg :-(

mein Problem:
a) ich habe ein Pgm mit dem ich Daten in eine UserSpace schreibe. Diese sind max 80 Zeichen lang und es können min. ein Eintrag u. max 70 Einträge erfolgen
b) mit dem anderen Programm möchte ich dann, diese Daten wieder auslesen und in eine SubFile schreiben. D.h. jeder 80 stelliger Eintrag soll eine Zeile in der SubFile werden!

Fuerchau
24-10-08, 08:08
Die API-Beschreibungen findest du hier:
User Space APIs (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/apis/obj5.htm?resultof=%22%71%75%73%63%72%74%75%73%22%2 0%22%71%75%73%63%72%74%75%22%20)

Per QUSCRTUS erstellst du einen USRSPC in der benötigten Größe.
Per QUSPTRUS kannst du im ILE einen Pointer erhalten, so dass du die Daten direkt schreiben/lesen kannst.

D MyPtr s * <= Pointer aus QUSPTRUS
D MyUsDS DS based(MyPtr)
D Daten 80 Dim(70)

muadeep
24-10-08, 08:32
erhalte ich dann mit QusPtrUs alle Daten des UserSpace?
stehen dann meine Daten alle gleich in der DS

das mit dem "direkt schreiben/lesen" versteh ich leider auch noch nicht! :(

(sorry, muß gestehen hab mit API's leider noch nicht viel gemacht!) :mad:

Fuerchau
24-10-08, 08:41
Mit QUSPTRUS erhältst du die direkte Speicheradresse des USRSPC.
"D MyPtr s *" deklariert einen Pointer auf den die DS mittels based verweist.
Du benötigst also keine weiteren API's zum Zugriff.

Erstellst du allerdings den USRSPC zu klein, erhältst du beim Zugriff auf Adressen ausserhalb einen MCH-Fehler.

Dieses Verfahren eignet sich auch besonders gut für die ganzen anderen API's, da man sehr schnell und einfach auf die diversen Bereiche zugreifen kann.
Immerhin lässt sich auch mit Adressen rechnen:

MyPtr = %addr(MyVar) + 100;

muadeep
24-10-08, 08:53
super, vielen dank


eine Frage hab ich aber trotzdem noch! ;-)

das schreiben in den UserSpace erfolgt dass dann immer komplett oder kann ich z.B. auch nur das 5 Elemet der DS in den UserSpace schreiben?

=> kann ich dann auch nur einen bestimmten Bereich des User Space ändern?

Fuerchau
24-10-08, 11:49
Da du direkt den USRSPC adressierst wird dieser mit jedem EVAL/MOVE/Z-ADD verändert.
Die DS belegt keinen eigenen Speicher sondern verweist über den Based(Pointer) direkt auf das Objekt.

wwg
24-10-08, 16:55
Hallo muaddep,

warum willst du unbedingt einen UserSpace benutzen? Für den genannten Fall ist doch eine Dataqueue prädestiniert mit QSNDDTAQ / QRCVDTAQ.

Wie wäre es damit?

Grüße, Werner.