image mounten
-
orientier dich für die Benutzung des Loop-Devices einfach an dem Code http://www.google.com/codesearch?hl=en&q=+loop+ioctl+show:-OkI2HV7xOs:5Akk5Y288Z4:iY4LUUvhF7U&sa=N&cd=3&ct=rc&cs_p=http://gentoo.osuosl.org/distfiles/busybox-0.60.5.tar.bz2&cs_f=busybox-0.60.5/libbb/loop.c#a0
Aber bist du dir wirklich sicher, dass du das alles selbst basteln willst?
-
Ich denke der OP will einfach mit der Linux API arbeiten um das zu lernen? Etwas existierendes nachzuprogrammieren ist da ja eine verbreitete Technik.
-
ich bastel momentan ein bischen an video-ondemand und will dazu einfach was implementieren, dass mir ein image mountet - was ja wohl (gerade unter linux) nicht unschaffbar sein sollte. wo also liegt das problem?
mfg blan
-
Also ich kann blan sehr gut verstehen. Ich verstehe eher die Zweifel nicht. Wenn ich ein Programm schreibe und ich Systemfunktionen, wie z. B. das mounten von images, benötige, sollte ich die API verwenden. Dafür ein Programm aufzurufen, welches dann die API verwendet, ist in der Regel der falsche Ansatz. Es geht nicht nur Geschwindigkeit verloren und Resourcen sinnlos verschwendet, sondern es fehlt auch eine gewisse Kontrolle. Fehlerprüfung ist viel umständlicher, als die Systemaufrufe selbst zu verwenden.
Also - lange Rede kurzer Sinn: verwendet in euren Programmen die Betriebssystem-API, wenn ihr Dienste vom Betriebssystem wollt.
Übrigens ist ein Blick in die Sourcen des mount-Befehls eine Möglichkeit. In der Regel einfacher ist die Verwendung von strace. "strace mount ..." verrät, welche Systemaufrufe gemacht werden. Das hat mir schon oft weiter geholfen.
Gruß
Tntnet
-
open("wordlist.txt.gz", O_RDWR) = 3 open("/dev/loop1", O_RDWR) = 4 mlockall(MCL_CURRENT|MCL_FUTURE) = 0 ioctl(4, 0x4c00, 0x3) = 0 ioctl(4, 0x4c04, 0x7fffa91ed400) = 0 close(3) = 0 close(4) = 0
und
mount("/dev/loop0", "tehmount/", "iso9660", MS_MGC_VAL, "") = 0
Ja, das sind zwei unterschiedliche loop-Devices. Viel Spa beim Entziffern.
-
tntnet schrieb:
Also ich kann blan sehr gut verstehen. Ich verstehe eher die Zweifel nicht. Wenn ich ein Programm schreibe und ich Systemfunktionen, wie z. B. das mounten von images, benötige, sollte ich die API verwenden. Dafür ein Programm aufzurufen, welches dann die API verwendet, ist in der Regel der falsche Ansatz.
Wenn er nur ein simples Tool schreiben will, das Images mountet, dann ist ronnys Ansatz durchaus sinnvoll, das soll dann ja per Definition nur ein Wrapper für mount(8) sein, da möchte man ja nicht wahllos das Rad neu erfinden.
Und wenn der OP zu Lernzwecken oä etwas anderes machen möchte, dann bastelt er eben, kann man natürlich auch machen. Ändert aber nichts daran, dass ich die Benutzung von mount(2) oder ggf. auch von mount(8) für sinnvoller und prolduktiver halte.
-
tntnet schrieb:
Also ich kann blan sehr gut verstehen. Ich verstehe eher die Zweifel nicht. Wenn ich ein Programm schreibe und ich Systemfunktionen, wie z. B. das mounten von images, benötige, sollte ich die API verwenden. Dafür ein Programm aufzurufen, welches dann die API verwendet, ist in der Regel der falsche Ansatz. Es geht nicht nur Geschwindigkeit verloren und Resourcen sinnlos verschwendet, sondern es fehlt auch eine gewisse Kontrolle. Fehlerprüfung ist viel umständlicher, als die Systemaufrufe selbst zu verwenden.
Also - lange Rede kurzer Sinn: verwendet in euren Programmen die Betriebssystem-API, wenn ihr Dienste vom Betriebssystem wollt.
Übrigens ist ein Blick in die Sourcen des mount-Befehls eine Möglichkeit. In der Regel einfacher ist die Verwendung von strace. "strace mount ..." verrät, welche Systemaufrufe gemacht werden. Das hat mir schon oft weiter geholfen.
Gruß
Tntnet
word
btw: was ist ein OP?
mfg blan
-
blan schrieb:
btw: was ist ein OP?
Originalposter.
-
Ohne mount(2) wirds nicht gehen, aber auch das reicht nicht. Erst muss er ein Loop-Device aufsetzen. Hab ich ja oben gezeigt.
-
was bedeutet denn immer die zahl in klammern hinter dem befehl? mount(2); mount(8); ...
mfg blan
-
Das ist die Sektion im manpage-Verzeichnis...
-
-
danke für die links. ich habe jetzt mal den code von Mr. N kompiliert aber bekomme folgenden fehler:
test.iso: File too large
warum kann ich kein 4GB ISO-Image in das loop-device laden?
edit: also mit kleineren ISO-Images klappt das wunderbar.
mfg blan
-
schau mal unter Using LFS http://www.suse.de/~aj/linux_lfs.html
-
rüdiger schrieb:
schau mal unter Using LFS http://www.suse.de/~aj/linux_lfs.html
versteh ich nicht ganz. mein system hat LFS-Support und ist doch auf dem neusten stand?
mfg blan
-
für jeden der das gleiche problem hat ode es mal haben sollte. man muss einfach bevor man überhaupt eine header-datei einbindet folgende zeile einfügen
#define _FILE_OFFSET_BITS 64
damit wird fread() gegen fread64(), fwrite() gegen fwrite64(), usw ... gelinkt.
mfg blan
-
ah, hast du den Abschnitt doch gelesen
:p