image mounten
-
hallo,
ich möchte gern ein tool schreiben welches mir images mountet. ich hab die funktion mount() zwar schon gefunden aber ich weiss nicht wie ich damit images mounte. hat jemand eine idee?
mfg blan
-
Wieso ein Tool?!
mount -tiso9660 -oloop <image> <mountpoint>
macht doch genau das.
-
das ich nur das mouten auch mit dem mount-befehl machen kann ist mir klar. aber ich brauch für ein etwas komplexeres programm die funktion um ein image zu mounten und ambesten nicht mit einem aufruf à la "mount -o loop ...". weiss jemand wie das geht?
mfg blan
-
blan: Warum willst Du dafür nicht einfach mount mit Loop-Device verwenden? Verstehe Deine Antwort nicht so ganz.
-
nman schrieb:
blan: Warum willst Du dafür nicht einfach mount mit Loop-Device verwenden? Verstehe Deine Antwort nicht so ganz.
ich will keine system-calls à la system("mount -o loop..."); verweden.
ich will wissen wie ich in C mit der API vom Kernel oder was auch immer ein image mounten kann.
mfg blan
-
blan schrieb:
ich will keine system-calls à la system("mount -o loop..."); verweden.
Habe ich vernommen. Die Motivation hierfür bleibst Du schuldig.
ich will wissen wie ich in C mit der API vom Kernel oder was auch immer ein image mounten kann.
Schau Dir die Sourcen von mount(1) ein. Kenne aber keinen vernünftigen Grund, sowas selbst zu implementieren.
-
eigentlich stellt sich eher die frage - warum kein shell script
ich denke mal des problem ist da recht flott mit ein paar shell funktionen gelöst
-
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