Dynamische Dateien wie in /dev/ selbst schreiben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
g-henna
Beiträge: 733
Registriert: 03.11.2003 14:59:56
Wohnort: Berlin

Dynamische Dateien wie in /dev/ selbst schreiben

Beitrag von g-henna » 11.11.2004 18:17:25

Hi!

Es gibt in /dev/ ja einige "Dateien", die bei Anfrage (und nur dann) einen bestimmten Output ausgeben, so z.B. /dev/random oder /dev/zero. Ich möchte sowas ähnliches selbst machen, also man öffnet z.B. ~/.sig und wenn man die öffnet, wird ein Programm ausgeführt, das dann dynamisch einen gewissen Content in diese Datei schreibt und an denjenigen leitet, der die Datei geöffnet hat. Zum Schluss wird dann ein EOF-Character geschickt und damit signalisiert, dass die Datei zu Ende ist.
Geht sowas? Wie lässt sich so etwas realisieren? Geht das nur auf Kernel-Ebene?

Bye
g-henna
follow the penguin...

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 11.11.2004 19:58:40

Klar, mit FIFOs (named pipes) geht das.

Gruesse

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Beitrag von hupfdule » 11.11.2004 21:06:00

Wenn es dir dabei um eine Signatur geht, dafür gibt es das Programm signify. Ansonsten ist das ein gutes Beispiel für das was du willst.

Benutzeravatar
g-henna
Beiträge: 733
Registriert: 03.11.2003 14:59:56
Wohnort: Berlin

Beitrag von g-henna » 12.11.2004 19:09:42

Hi!
godsmacker hat geschrieben:Klar, mit FIFOs (named pipes) geht das.
Und wie wird dann sichergestellt, dass mein Script genau dann gestartet wird, wenn ein anderes Programm auf die Datei zugreift? Oder muss es die ganze Zeit im Hintergrund laufen? Und woran merke ich, dass ein Prozess jetzt den aktuellen Inhalt gelesen hat und ich was neues reinschreiben muss? Wie läuft das?

Bye
g-henna
follow the penguin...

Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Beitrag von weedy » 15.11.2004 16:58:34

g-henna hat geschrieben:Hi!
godsmacker hat geschrieben:Klar, mit FIFOs (named pipes) geht das.
Und wie wird dann sichergestellt, dass mein Script genau dann gestartet wird, wenn ein anderes Programm auf die Datei zugreift? Oder muss es die ganze Zeit im Hintergrund laufen? Und woran merke ich, dass ein Prozess jetzt den aktuellen Inhalt gelesen hat und ich was neues reinschreiben muss? Wie läuft das?

Bye
g-henna
Es müsste dann immer ein Programm im Hintergrund laufen. Leg Dir mal ein Testdir an, gehe mit 2 Konsolen da drauf und probier folgendes:

Konsole 1:

Code: Alles auswählen

mkfifo ox
while sleep 1; do date >ox && echo ok; done
Konsole 2:

Code: Alles auswählen

cat ox
cat ox
cat ox
So. Das, was Du jetzt in Konsole 1 stehen hast, kanst Du auch in ein Script schreiben und dieses asynchron mit nohup und '&' starten. Das läuft dann im Hintergrund. Aber schreibe das Prigramm so, daß es ein Pidfile ablegt, denn mit ps ist das Programm unter den vielen bash-Prozessen nicht herauszufischen. Nimm am besten für das Programm und seine Files ein extra Directory in Deinem Homeverzeichnis.

weedy.

Antworten