Select() mit normalen Dateien verwenden
-
Ich moechte mit select datei auf auf schreibzugriffe ueberwachen.
Dazu habe ich mit FD_SET ein passendes set erstellt und dann select aufgerufen.
Nun kommt select aber sofort zurueck und meldet mir die entsprechenden FD's im fdset.
(geprueft mit FD_ISSET).wenn ich jedoch einen FD basierend auf einem netzwerksocket ueberwache und dann statt recv(..) ein select verwende, gehts perfekt.
kann es sein, dass select immer zurueckkehrt, wenn ueber den filedescripter gelesen werden kann (und _nicht_ wenn sich etwas geaendert hat)?
falls dem so ist, wie kann ich dann eine datei auf schreibzugriffe ueberpruefen und gleichzeitig auf eingehende netzwerkpaket lauschen?
fnctl(...NOBLOCK...)und dann pollen in einer while schleife finde ich nicht so toll.
-
Belgarad schrieb:
kann es sein, dass select immer zurueckkehrt, wenn ueber den filedescripter gelesen werden kann (und _nicht_ wenn sich etwas geaendert hat)?
Exakt.
-
Na dann weiss ich zumindest erstmal wie es nicht geht
Hat den jemand eine idee wie ich eine datei auf schreibzugriffe ueberwachen kann, in einer art von benachrichtigung?
beispiel: auf text.txt wird durch einen externen prozess schreibend zugegriffen. wie bekomme ich das in meinem prozess mit?
-
Vielleicht ein Strohhalm:
fam - file alteration monitor
fam is a server that tracks changes to the filesystem and
relays these changes to interested applications. Applica�
tions such as fm(1G) and mailbox(1) present an up-to-date
view of the filesystem. In the absence of fam, these
applications and others like them are forced to poll the
filesystem to detect changes. fam is more efficient.
-
Belgarad schrieb:
...
kann es sein, dass select immer zurueckkehrt, wenn ueber den filedescripter gelesen werden kann (und _nicht_ wenn sich etwas geaendert hat)?
...Das haettest du aber auch gewusst, wenn du dir die Manpages durchgelesen
haettestmfg
v R
-
virtuell Realisticer schrieb:
Das haettest du aber auch gewusst, wenn du dir die Manpages durchgelesen
haettestmfg
v Rhatte ich auch - war nur nicht sicher ob ich es richtig verstanden hatte
-
du kannst unter linux auch dnotify verwenden. das ist ein feature des kernels, und du brauchst nur einen kernel, der das kann, und kein zusatzpaket wie fam. fam macht das auch nur über dnotify, soweit ich weiß.
vielleicht schaust du dir aber methoden der interprocess communication an, da die dein problem besser lösen könnten.