virtualis file ami igazabol dinamikusan egy program general minden megnyitaskor

Fórumok

Hello mindenki

Lehet hogy nagy baromsag de ertek mar jo meglepetesek
a linuxban igy akar ezt is el tudom kepzelni hogy mukodik

Furcsa otletem tamadt egy konfig vagy akarmilyen file
igazabol lehet e dinamikus

vagyis ha megnyitok pl egy txt file - akkor igazabol a hatterben
lefut program es amit az kiir az output ra azt kapom vissza mint a file tartalma

tehat ha pl van egy ido.txt nevu allomany aminek a megyitasara elindul egy ido.sh nevu script
ami kiirja az aktualis idot
akkor akarmikor beolvasom az ido.txt -t olyan mintha mindig a pontos ido lenne beleirva

ennek az lenne az ertelme hogy nem kell allandoan aktualizalni az ido.txt -t hanem csak akkor amikor szukseg van ra akkor fut le az a script 1x

remelem ertheto

elore is koszi

Hozzászólások

>>Named pipe, de attol, hogy a "tartalma" valtozik, a program, ami azt megnyitotta, meg nem fogja automatikusan ujraolvasni!

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

Valami biztos van, próbáld ki a

echo $RANDOM

parancsot :)

[off]
Most elgondolkodtam. Ez a $RANDOM kiíratása hogy működik? Maga a shell nézi, hogy milyen változókra hivatkozik a parancs, és ha azt látja, hogy RANDOM, akkor ő generál egy véletlen értéket, és azt adja vissza? Merthogy itt azt írják, hogy ez egy (belső) függvény.
Esetleg ilyet a felhasználó is kreálhat? Ha már itt vagyunk, akkor egy környezeti változó kiolvasásakor mindig az aktuális dátumot fogja megjeleníteni?
[/off]

Nekem elsőre amúgy az eszközfileok jutottak eszembe... ez nagy baj?

Ennek a problémának olyan "házi feladat"-szaga van... ;)

Ez device file, kernelt kell hozza masszirozni (pl. /dev/random, /dev/urandom ilyesmi).

--
Az emberek azt állítják, hogy múlik az idő, az idő viszont csak mosolyog, mert látja, hogy az emberek múlnak. - tibeti közmondás

Mi alól nyitod meg a fájlt?
Ha valamilyen fájlkezelőből, akkor egy lehetséges megoldás:
A fájlkezelőben megadod, hogy pl. a txt kiterjesztésű fájlokat az akarmi.sh nyissa meg, és természetesen paraméterként megkapja a fájl nevét a script. A scripten belül vizsgálod a fájl nevét. Ha az ido.txt-t akarod megnyitni, akkor lefut az új tartalmat generáló script részlet/függvény, és utána megnyitja a kedvenc editoroddal. Ha nem az ido.txt-t nyitottad meg, akkor nem kell futtatni a generátor függvényt.

-----
"Ember embernek farkasa." Ezért aztán "Holló a hollónak nem vájja ki a szemét."

Úgy látom, hogy a kérdés a "Linux kezdő" címszó alatt jelent meg. Nem vagyok benne biztos, hogy a FUSE-os megoldás a kezdő kategóriába tartozik. Bár az is igaz, hogy nem értek a FUSE-hoz, így nem zárható ki, hogy egyszerűbb, mint egy 6-8 soros shell script.

-----
"Ember embernek farkasa." Ezért aztán "Holló a hollónak nem vájja ki a szemét."

Ez nekem is eszembe jutott, ki is próbáltam, de nem egészen az.
Első blikkre egy

while true; do inotifywait -e open foo && date > foo ; done

jutott eszembe, de az nem jó, mivel kiolvasáskor még a régi tartalmat fogja látni a cat program, tehát az előző date eredményét.

Borzasztó egyszerű... na jó, nem. Szóval írnod kell egy FUSE connectort (Filesystem in Userspace) ami ezt a cuccot kezeli. Na, ezzel egy könyvtárat fölmountolsz és abban lakhat a szuper fájlod. Ha jól látom, van hozzá Python modul is, úgyhogy import Fuse oszt hajrá.

De ahhoz át kéne írnia azt a valamit, ami fájlból szeretne olvasni :)

Ellenben legalább ennyire egyszerű tmpfs-re rakni a fájlt, és írni egy 10 soros C/perl/python daemont, ami másodpercenként kiírja a date kimenetét. :)

Mivel a program folyamatosan fut, és a memóriában van a fájl, ennek a megoldásnak a terhelése kb. 0.00

Értem én a problémát, csak a jelentőségét nem fogom... :)

Konkrét megvalósítás meg nyilván attól is függ(het), hogy mivel nyitja meg a szövegfájlt. (Én sima ASCII fájlhoz a vi-t használom, a ~/.exrc fájlba ":r !date", ez a fájlok megnyitásakor beszúrja a fájl végére a dátumot, gondolom, lehet szofisztikáltabban is.) Esetleg jó lenne tudni, hogy mi a valódi probléma, ha ez az "ido.txt" példa csak az egyszerűség kedvéért van.

Bár tény, hogy mocsokul erőforrás pazarló, de mi lenne, ha a program folyamatosan felülírna a kérdéses file-t? Így bármikor, amikor ráolvasol, mindíg a friss tartalommal szembesülsz. (Tudom, az eredeti feladat arról szólt, hogy akkor generálódjon a file tartalom, amikor épp olvasná valaki - de az pöttyet bonyolultabb ennél. Ezen a ponton tehát az a kérdés, hogy megéri-e a feladat azt a bonyolultságot?) Szépítés: a program csak akkor frissíti a file tartalmat, ha változás van.

Egy abszolút működő megoldást találtam:


$ mkfifo datefile
$ while true; do date > datefile; done&
$ cat date

Meg strace-eltem, amíg nem olvasol nem csinál semmit, semmi erőforrást nem használ.
Csak akkor ír, ha olvasol róla egyet.