Archiv verlassen und diese Seite im Standarddesign anzeigen : Device speren
Mein Problem ist folgendes: Ich möchte die serielle Schnittstelle (z.B. ttyS0) für
lese/schreib-Zugriffe öffnen. Bis dahin kein Problem. Wenn jetzt aber jemand versucht diese,
schon offene, Schnittstellen erneut zu öffene, möchte ich das er ein Fehlermeldung
bekommt, dass die Schnittstelle schon verwendet wird.
Wenn ich aber versuche, die Schnittstelle erneut zu öffnen, gelingt mir das auch.
Kann man die, z.B. mit einem Flag, irgendwie vor weiteren zugriffen schützen bzw.
blockieren.
Das ist ja gerade die Fähigkeit von Linux, dass die nicht gesperrt ist. (Unter Win32 währe es genau andersrum) :rolleyes:
Aber ich meine ich könne mich noch daran erinnern, dass es dafür ein FLAG in den Dateioperations-Funktionen der Standard-Library gab. Bin mir aber nicht ganz sicher.
MFG fsd.
anda_skoa
29-07-2002, 20:07
Ich erinnere mich ganz vage an das, was ich mal im Rubini gelesen habe: wie oft ein device open erlaubt, hängt AFAIK vom Treiber ab.
Ciao,
_
Hi,
mit der Funktion "fcntl" kannst du einiges anstellen.
Gibt sogar ne man-page dafür.
Such-Begriffe wären dazu vielleicht :
Record locking, mandatory locking, advisory locking, non-blocking i/o
Buch :
Advanced Programming in the UNIX Environment
W. Richard Stevens
Habe noch was gefunden :
http://www.enteract.com/~mghall/ux/ux.html
Gruss Mario
Original geschrieben von Demonus
Kann man die, z.B. mit einem Flag, irgendwie vor weiteren zugriffen schützen bzw.
blockieren.
Unter Linux erstellt man dafür normalerweise eine Datei
/var/lock/LCK..ttyS0
Öffne halt mal ein device z.B. mit miniterm, das erstellt die Datei. Die kannst du dir ja auch mal mit z.B. cat ansehen, da steht dann u.A. die PID von dem Programm drin, welches das Device benutzt. Halten sich alle Programme daran diese Datei(en) zu erstellen, gibts keine Probleme. Machen auch die meisten.
Sion
comer352l
23-12-2007, 14:51
Ich wärme diesen angestaubten Thread mal wieder auf, da ich exakt das gleiche Problem habe und auch nach längerem Suchen bisher noch keine befriedigende Lösung gefunden habe...
"fcntl" bietet zwar die Möglichkeit, mit F_SETLK und einem struct "flock" Dateien bzw. Dateibereiche gegen Zugriff zu sperren, die Dateien lassen sich dann aber eben immer noch Öffnen...:(
Mit Lock-Files zu arbeiten erscheint mir ehrlich gesagt nicht mehr ganz zeitgemäß und ist mir auch einfach zu unsicher...
Ich habe bisher eigentlich (gerade im Vegleich zum Windows-Pendant) nur positive Erfahrung mit den Unix/Linux-API-Functions gemacht und möchte daher nicht so recht daran glauben, dass es hier keine bessere Lösung gibt !??? :confused:
anda_skoa
24-12-2007, 13:53
Allgemeines Locking könnte man über liblockdev machen http://www-curri.u-strasbg.fr/documentation/calcul/doc/ProPack/3SP1/docs/man_html/man3/lockdev.3.html
Im Falle von Serial Devices kann man zusätzlich auch exklusiven Modus ein- /ausschalten
ioctl(fd, TIOCEXCL, NULL);
bzw
ioctl(fd, TIOCNXCL, NULL);
Wobei "fd" der Filedescription von open() ist, siehe auch die man-page to termio bzw. tty_ioctl
Ciao,
_
comer352l
25-12-2007, 11:34
Autsch... Danke ! Funktioniert perfekt !
Mit IOCTL() bin ich (dachte ich) eigentlich inzwischen sehr vertraut, und dann sowas... Da kann man mal wieder sehen, dass man ab einem gewissen Grad den Wald vor lauter Bäumen nicht mehr sieht...:rolleyes:
LOCKDEV ist mir inzwischen auch begegnet, scheint allerdings keine Standard-Lib zu sein und eine Quelle konnte ich nicht finden ?!
Außerdem gibts noch die Möglichkeit, mit fcntl() Leases zu erwerden:
fcntl(fd, F_SETLEASE, F_WRLCK))
Das funktioniert aber leider nur bei reguläre Dateien...
Nochmals: Danke !
anda_skoa
25-12-2007, 13:34
LOCKDEV ist mir inzwischen auch begegnet, scheint allerdings keine Standard-Lib zu sein und eine Quelle konnte ich nicht finden ?!
Hmm, keine Ahnung, bei mir war sie schon als Abhängigkeit von etwas installiert (Debian/SID).
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.