Frage

ich eine kleine Kommandozeilen-Anwendung in C geschrieben, die als Wrapper / Launcher für andere Programme handelt (man denke: xargs). Die Anwendung wird geschrieben auf FreeBSD / Linux (über fork () / exec ()) und Windows (Createprocess ()) zu kompilieren. Neben abfangen zu können, spritzen oder auf andere Weise die Befehlszeilenargumente für das Kind Anwendung zu manipulieren, ich frage mich, ob es eine einfache Möglichkeit ist das Kind Programms Dateisystem-Aktivität abzufangen (oder es ist Kinder und so weiter). Ich bin in erster Linie daran interessiert, nur die für entweder zugegriffen Dateinamen lesen oder schreiben, aber nicht der Inhalt der Dateien, und würde das Abfangen wie so leicht wie möglich sein.

In einigen relevanten Keywords von oben googeln scheint es, gibt es viele Möglichkeiten, dies in Win32 zu tun. Von Dateisystem-Filtertreiber mit PE Import Tabellenköpfen für Manipulationen. Keiner von ihnen scheint trivial oder etwas, was ich konnte in meinem Wrapper-Programm ausführbaren selbst enthalten (zB die meisten würde neben dem Hauptprogramm zusätzliche DLLs oder Treiber-Dateien benötigen.) Auch ich würde dies gerne auf Windows XP bis 7 arbeiten, wenn möglich, , ohne um UAC oder andere Plattform Deltas hacken zu müssen. Es ist mein Kind-Prozess, so dass ich spielen soll, ich in der Lage sein, um sicher seine Aktivität zu überwachen:)

Unter Linux gibt es inotify (), aber es überwacht allgemeines Dateisystem Zugriff ohne Rücksicht auf nur mein Kind-Prozess / es. Das Gleiche gilt für FreeBSD kqueue (). Diese auch brechen in SMP Fällen, in denen mehrere Instanzen des Wrapper möglicherweise unterschiedliche Programme laufen, und jeder muss ihr eigenes Kind Dateisystem-Aktivität disambiguate voneinander.

Ich würde sicherlich zu schätzen irgendwelche Vorschläge, dass die SO-Community zu bieten haben könnte.

War es hilfreich?

Lösung

Schreiben Sie eine „Interposer“ Bibliothek, die Ihre fopen und stellen für alle untergeordneten Prozesse LD_PRELOAD-Umgebungsvariable hakt. Dies funktioniert mit dynamisch verknüpften Bibliotheken mich.

: http: // Entwickler

Beispiel dafür, wie dies zu tun, finden Sie hier. sun.com/solaris/articles/lib_interposers.html und http://lists.debian.org/debian-powerpc/2004/11/msg00039.html zeigt eine teilweise Umsetzung für fopen () Einfügestück ..

Andere Tipps

Der einzige Vorschlag, den ich machen würde, ist strace (Trace-System Anrufe und Signale) zu verwenden, obwohl dies eher ein Debugging-Tool ist, und die Leistung des Verfahrens nicht beeinträchtigt wird verfolgt

strace -f -e trace=file -o <output-file> <cmd-line>

-f - follow forks
-e trace=file - will output system calls related to the file-system
-o <output-file>

IMHO -., Wenn Sie mit strace vertraut, es ist immer ein nützliches Werkzeug im Arsenal haben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top