( apal | 2007. 01. 10., sze – 15:11 )

Hm, az a furcsa, hogy nem forditva mukodnek ezek az eszkozok (hogy mindenki olvashatja, viszont csak egyvalaki irhatja: az, aki eloszor irasra nyitja meg).

A kernel is tudja ezt, lehet hogy csak meg kell peccselni a megfelelo modult (/usr/src/linux/drivers/media/video/videodev.c), pl:


...
static int is_device_open=0;
...
static int device_open(struct inode *inode, struct file *file)
{
 static int counter = 0;

 if ( is_device_open ) return(-EBUSY);         /*********/

 MOD_INC_USE_COUNT;

 is_device_open++;
 ...
}
...

(ez kicsit nagypofaju beszolas, mert nem nagyon csinaltam ilyeneket, csak ja'te'k-szinten, pl. amibol ezt a fenti izet kikopiztam <- a lenyeg a /****/ sor, ahol az is_device_open egy modulszintu" belso" statikus valtozo; de a lenyeg, hogy elvileg relative egyszeruen meg /lehetne/ csinalni)

De hogy erdemben is probaljak hozzaszolni: a fenti megoldasnal talan egy fokkal kulturaltabb ga'nyola's, hogy valami pollozo ize'vel (pl. select()) figyeled a /proc/video/dev/ konyvta'r tartalma't, illetve ebben a /dev/video*-nak megfelelo" file-t (/proc/video/dev/video*). Ha a procfs olyan es szerencsenk van, akkor a /dev/video* megnyita'sakor ezen konyvtar es/vagy file megvaltozik, amit a select()-tel tudsz figyelni, es rogton le lehet reagalni.

A.