Virtuelle Datei erstellen / simulieren
-
Hallo zusammen,
ich bin neu im Forum und habe schon die erste Frage
ich würde gerne in C / C++ eine "virtuelle" Datei erstellen, sprich meine Code soll folgendens tun:
- erstellen einer datei zb /usr/text.txt
- abfangen der read zugriffe auf diese datei und antwort durch meine software.Schlussendlich soll mein Programm folgendnes machen:
- Originale Datei öffnen FILE.ABC,
- Datei erstellen FILE.DEF
- bei jeder externen Abfrage von FILE.DEF liest mein Programm Daten aus FILE.ABC aber ändert an jedem Antwort-Byte etwas.Da ich an der Software welche die Datei FILE.DEF ausliest nichts änder kann muss ich diesen Umweg gehen. Und komplett kopieren möchte ich nicht, da die Veränderung variabel ist.
Ist soetwas möglich?
-
Möglich: Ja (wenn auch recht umständlich denke ich, könnte mir da was inotify basiertes vorstellen)
Sinnvoll: Ich denke nicht. Erstens wäre so eine Datei recht verwirrend und zweitens wäre es wohl (wiegesagt) recht kompliziertSag am besten mal was du genau machen willst, dann können wir dir vielleicht alternative Lösungen vorschlagen
-
linux_c89 schrieb:
Möglich: Ja (wenn auch recht umständlich denke ich, könnte mir da was inotify basiertes vorstellen)
Sinnvoll: Ich denke nicht. Erstens wäre so eine Datei recht verwirrend und zweitens wäre es wohl (wiegesagt) recht kompliziertSag am besten mal was du genau machen willst, dann können wir dir vielleicht alternative Lösungen vorschlagen
Danke für den Tip mit inotify, werd mich da mal einlesen!
Verwirrend währe die Datei nicht, denn ich möchte folgendes machen:
Auf meinem Android Handy hab ich die Grooveshark Mobile Applikation installiert, als Premium Member kann ich jedes Lied auch Offline verfügbar machen. Dabei wird die Datei heruntergeladen und als xxxxxx.dat gespeichert. Das xxxxxx.dat ist allerdings "verschlüsselt" (jedes Byte mit 0x25 XOR )
Aktuell verwende ich ein selber geschriebenes Tool (Andorid, Java) welches die .dat File zurück"codiert" als MP3 speichert, somit werden sie vom Android Media Scanner erkannt und sie erscheinen auch in meinem normalem Mediaplayer. Allerdings brauche ich halt so immer den doppelten Platz (oder müsste die orig .dat löschen)
Die Idee war nun einen kleinen C/C++ Daemon (oder auch gleich Java, aber eher unmöglich) zu schreiben welcher für jedes .dat File ein .mp3 File erstellt, welches Virtuell ist und beim auslesen einfach mein Daemon antwort gibt mit der 0x25 XOR Wandlung, somit würden sie vom Mediascanner erkannt und ich müsse nicht immer alle dopplet haben...Falls jemand eine andere Idee hat, nur zu
-
Mach mit mkfifo eine named pipe auf und häng einen Konverter hinten dran. Das kann man auch in einem Guss machen, wenn man lustig ist (die Funktion heißt ebenfalls mkfifo, Doku in man 3 mkfifo), aber ich sehe keinen Grund, das zu tun.
Siehe dazu auch https://secure.wikimedia.org/wikipedia/en/wiki/Named_pipe#In_Unix
-
danke seldon,
ich denke so sollte es klappen, werde mich da mal einlesen
und wenn ich erfolg habe gern hier meine Lösung posten, falls interesse
besteht?
-
warum "verschluesselt" das binary die daten ??? so sinnfrei ?
Und vielleicht haben die Urheber als einfachste Umgehung ihres Pseudo Schutzes als erstes auch an diese Möglichkeit gedacht, und lesen als erstes mal die Attribute Ihrer Eingabe-Datei aus ?Versuchen ? klar unbedingt ...
Ciao ...
-
RHBaum schrieb:
Und vielleicht haben die Urheber als einfachste Umgehung ihres Pseudo Schutzes als erstes auch an diese Möglichkeit gedacht, und lesen als erstes mal die Attribute Ihrer Eingabe-Datei aus ?
Wer so etwas als Schutz einsetzt, der denkt nicht viel...
-
LD_PRELOAD um open/read/write zu überschreiben oder, etwas schöner: FUSE fallen mir da als erstes ein.
-
habe mal mit den named pipes experimentiert,
allerdings unterstützen die seek befehle nicht -> sind aber zwingend
notwendig, um zb zu spulen oder auch nur teile (wie id3 tag) auszulesen, so
hab ich das jedenfalls verstanden.
kann zwar das pipe file dann kopiere, was ein funktionsfähigs .mp3 erstellt, das will ja aber nicht. öffne ich das pipe file in vlc spielt es ab, zeig aber keine id3 informationen an und zeigt fehler beim spulen...@Einheitsmatrix
hab mir das mit LD_PRELOAD mal kurz angeschaut und begreiffs noch nicht 100%.
So wie ich das verstanden habe müsste ich den Android Media Scanner / mein MediaPlayer mit dem LD_PRELOAD neu laden? da ich ja dessen read befehle überschreiben müsste?FUSE wird von Android leider nicht von Haus auf unterstüzt (hab jedenfalls nichts anderes gefunden)