image mounten



  • 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



  • 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


Anmelden zum Antworten