Übung 8 - Aufgabe 2

Mira`
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 27. Okt 2006 20:41

Übung 8 - Aufgabe 2

Beitrag von Mira` »

Geh ich richtig der Annahme, dass wir Windoof User bei der Aufgabe 2 der Hausübung 8 auf die Rechner der RBG angewiesen sind? Kann ja schlecht unter Windows diese Syscalls verwenden, wenn es die nur in Linux gibt oder?

Zudem steh ich gerade auch ein wenig auf dem Schlauch...

was passiert denn genau, wenn ich die Funktion syscall beispielsweise mit den Parametern 5 (sys_open), dateiname.dat, 1, 1 aufrufe?

Der Syscall "sys_open" erwartet ja 3 Parameter...
1. const char* =? Dateiname
2. int =? Modus (z.B. readonly)
3. int =? ???

Unsere Syscall-Funktion erwartet doch aber für alle Parameter ein int...was mit const char* etwas problematisch sein sollte. Oder fängt man dann an nach int zu casten?

Blicke da noch nicht so wirklich durch. Wäre nett wenn mir das mal jmd in verständlicher Form erklären könnte.

Danke.

Thorti
BSc Spammer
BSc Spammer
Beiträge: 1047
Registriert: 1. Dez 2003 11:52
Wohnort: Frankfurt
Kontaktdaten:

Re: Übung 8 - Aufgabe 2

Beitrag von Thorti »

Hallo,
Mira` hat geschrieben:Geh ich richtig der Annahme, dass wir Windoof User bei der Aufgabe 2 der Hausübung 8 auf die Rechner der RBG angewiesen sind? Kann ja schlecht unter Windows diese Syscalls verwenden, wenn es die nur in Linux gibt oder?
Ja, man braucht ein Pinguin-System :wink: . Also entweder Pool oder du nimmst eine bootbare Linux-CD wie etwa Ubuntu.
Die Syntax der Syscalls kenn ich jetzt auch nicht auswendig, mehr dazu später (falls bis dahin nicht jemand anderes schon geantwortet hat).

Gruss Thorti
Assistent zur Vorlesung TGDI im WS 11/12

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Caste einfach den Zeiger auf das char-Array in ein int .

Beim sys_open habe ich einfach als Flags und Modus 0 angegeben.
ich konnte dann auch aus der Datei lesen.

Code: Alles auswählen

sys_open:
ebx = Zeiger auf Dateiname
ecx = 0
edx = 0

sys_read, sys_write:
ebx = Dateizeiger
ecx = Zeiger auf Array
edx = Länge des Arrays

sys_close:
ebx = dateizeiger

Ich hab jetzt nur ein anderes Problem:

Wie erkenne ich ob ich das Dateiende erreicht habe?
Bei mir kommen am Ende die ganze zeit LineFeeds (ASCII 10),
aber ich kann ja nicht unterscheiden ob diese gewollt sind
oder die Datei wirklich zu ende ist :(


%u20AC: nachdem ich das geschrieben habe, ist mir selbst eingefallen.
Einfach den Rückgabewert von sys_read testen, ob er ungleich der
Länge ist die man lesen wollte ^^
Lasst mich Arzt, ich bin durch!

Mira`
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 27. Okt 2006 20:41

Beitrag von Mira` »

Danke schonmal für deine Antwort. Testen kann ich es aber erst wieder am Montag.
Einfach den Rückgabewert von sys_read testen, ob er ungleich der
Länge ist die man lesen wollte ^^
Woher weis ich denn wieviel Zeichen ich überhaupt lesen will/soll? In der Aufgabenstellung ist davon ja keine Rede. Es heist nur "Ausgabe einer Textdatei".
Wenn ich jetzt selbst eine Testdatei erstelle und weis wieviel Zeichen diese enthält, kann ich diese Anzahl ja als Parameter übergeben...aber was ist wenn man die Anzahl der Zeichen eben nicht kennt? Gibt es dafür zufällig auch einen Syscall, der mir die Anzahl liefert?

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

brauchste garnicht ...
einfach mit sys_read immer nur ein Byte aus der Datei lesen
bis sys_read != 1 zurück gibt, dann haste das Ende erreicht ;)


Wenn du es aber gerne wissen willst:
Schau dir fseek und ftell an, damit kann man ganz gut die
Größe ermittel.

sys_lseek gibt es ja
für ftell müsste man sich mal angucken was sys_lseek zurück gibt
Lasst mich Arzt, ich bin durch!

Mira`
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 27. Okt 2006 20:41

Beitrag von Mira` »

Vielen Dank. Der Rest dürfte dann ja ein Kinderspiel werden.
Mitlerweile hab ich mir auch mal ein Ubuntu Live-CD Image geladen und es gebrannt...dann muss ich net in den Pool rennen und kann bequem zu Hause mal ein bissel Linux-Luft schnuppern.

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Noch ein kleiner tipp für Windowsuser -> http://de.wikipedia.org/wiki/Virtual_Box

Brach man auch net den PC neu starten ^^
Lasst mich Arzt, ich bin durch!

Mira`
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 27. Okt 2006 20:41

Beitrag von Mira` »

Ich benutze für die Virtuelle Umgebung "VM Ware". Und boote das Ubuntu direkt vom Image.

mwmedia
Neuling
Neuling
Beiträge: 8
Registriert: 17. Mai 2007 12:37

Ausführen und Compilieren über SSH

Beitrag von mwmedia »

Hallo!

Ich möchte mein Code über SSH auf den RBG-Pool-Rechnern compilieren und ausführen.

Nach der Ausführung über SSH von gcc -o file file.c erscheint jedoch folgende Fehlermeldung:

In function 'syscall':
impossible constraint in 'asm'

Er hat also Probleme mit der folgenden Zeile aus der Aufgabenstellung:
asm ("int $0x80" : "=a" (result) : "a" (eax), "b" (ebx), "c" (ecx), "d" (edx));

Die habe ich jedoch exakt so übernommen.
Was ist das für ein Fehler? Wie werd ich den los?

Vermutlich ist es eh wieder total simple und ich steht nur aufm Schlauch.

Danke!

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Auf den Ultras, per SSH, bekomme ich den selben Fehler.
In meiner VM funktioniert das einwandfrei.
Lasst mich Arzt, ich bin durch!

Thorti
BSc Spammer
BSc Spammer
Beiträge: 1047
Registriert: 1. Dez 2003 11:52
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Thorti »

Hallo,

auf den Ultras läuft SunOS. Deshalb wird der Code dort wahrscheinlich nicht korrekt ausgeführt, sondern ihr müsst euch vor die Terminals setzen.

Gruss Thorti
Assistent zur Vorlesung TGDI im WS 11/12

mwmedia
Neuling
Neuling
Beiträge: 8
Registriert: 17. Mai 2007 12:37

Beitrag von mwmedia »

Danke schön!

Dann kann ich mir ja die Mühe sparen.

Gruss mwmedia

hcdenton
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 21. Dez 2006 17:15

Beitrag von hcdenton »

Thorti hat geschrieben:auf den Ultras läuft SunOS. Deshalb wird der Code dort wahrscheinlich nicht korrekt ausgeführt, sondern ihr müsst euch vor die Terminals setzen.
Vom HRZ gibts nen paar linux Kisten, die man ueber ssh benutzen kann.

Code: Alles auswählen

ssh HRZ_LOGIN@sub1.hrz.tu-darmstadt.de
Bild

neffs
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 16. Okt 2006 19:07
Kontaktdaten:

Beitrag von neffs »

...recht gut ausgestattete kisten sogar

geht aber nur wenn man sich in der hrz kontoverwaltung den unix account freigeschaltet hat

Antworten

Zurück zu „Archiv“