2016-05-23 5 views
2

Ich habe einen virtuellen Dateitreiber erstellt, der Eingaben von einer Datei nimmt. Diese Eingabe wird intern gespeichert (neben anderen Dingen, die passieren) und auf einen Lese-Dateizugriff geschrieben.So schreiben Sie nichts in eine virtuelle Datei

Jetzt, wenn ich einen leeren String oder Datenblock in diese Datei schreiben, scheint es, dass der Schreib-Handler nicht aufgerufen wird. Es macht auf den ersten Blick keinen Sinn, aber auf der zweiten ist es. Betrachten Sie

echo -n "" > somefile 

dies löscht den Inhalt der Datei. Ich brauche das gleiche für eine virtuelle Datei, weil ich dem Treiber sagen will "Hey, jetzt gibt es keine Daten mehr für dich".

Kann ich den Writerhandler mit einer leeren Information aufrufen lassen?

Das Senden einer bestimmten Escape-Sequenz ist keine Option, da Daten binär sind und ich kann keinen Wert angeben, der als "leer" behandelt werden soll.

Antwort

2

Erstens könnte es schlecht sein, binäre Pseudodateien in /proc/ hinzuzufügen. Haben Sie darüber nachgedacht, sie textuell, wie die meisten Pseudo-Dateien in /proc/ sind? Der zusätzliche Aufwand beim Parsen einer textuellen Pseudodatei ist meistens vernachlässigbar (und ein Sysadmin mag sehr gerne textuelle Pseudodateien in /proc/, die lesen könnten ohne viele schädliche Nebenwirkungen).

Dann könnten Sie die ftruncate(2) syscall verwenden (aber ich weiß nicht, ob es auf /proc/ pseudofiles funktioniert). Sie werden dann mit dem truncate(1) Befehl wie:

truncate /proc/your_weird_pseudo_file 

Vielleicht könnte nicht funktionieren (Ich habe keine Ahnung, wenn procfs Dateisystem unterstützt das)

Alternativ (aber das ist hässlich), bieten andere Pseudo-Datei einige Zustand zu löschen, so dass Ihre Benutzer tun würde:

echo 1 > /proc/clear_your_weird_state 
+0

Ja, ich bin mir bewusst, der „Geschmack“. Was ich tue, ist etwas, das aus Anwendungen verwendet werden kann, in die Daten eingefügt werden können. Andere "Dateien" in diesem Verzeichnis geben Informationen im Textformat, aber ich möchte die Nutzdaten nicht dort einschränken. Es ist Android-Kernel, gibt es keine Kürzung. – Droidum

Verwandte Themen