Portál AbcLinuxu, 8. května 2025 15:33

Dotaz: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program

9.9.2008 21:18 Thunder.m | skóre: 35 | blog: e17
Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Přečteno: 387×
Odpovědět | Admin
Píšu menší program pro monitorování signálu TV karty (FM rádia), bohužel se potýkám s problémem. Kartu naladím natrvalo programem fm -d /dev/radio0, ale jakmile otevřu jiným programem v C dané zařízení, tak se tím karta rozladí, nevíte jak mohu kontrolovat, jestli jí někdo otevřel?

Zámky flock jsem zkoušel a nějak mi nefungovaly.

Jak se karta otevírá a zavírá:
fd = open("/dev/radio0");
close(fd);
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

andree avatar 9.9.2008 21:31 andree | skóre: 39 | blog: andreeeeelog
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Odpovědět | | Sbalit | Link | Blokovat | Admin
je to prasacke - ale mozes skusit napr. nieco ako system("lsof|grep /dev/radio0|wc -l").... alebo ak existuje nejaka ekvivalentna library funkcia...
9.9.2008 22:38 Thunder.m | skóre: 35 | blog: e17
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Zatím jsem našel jen jediné funkční řešení a to je hodně prasácké:

Kartu každou hodinu nechat znovu naladit, je to relativně snadné:
unsigned int vt;
ioctl(fd, VIDIOCGFREQ, &vt);
ioctl(fd, VIDIOCSFREQ, &vt);
Tuto část přidám do programu fm, no a monitorovat signál skrze program fm, který by vytvořil soubory buď v /proc, nebo /sys, tím by odpadla potřeba přistupovat k zařízení z jiného programu.
10.9.2008 07:03 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
hm, to radšej prejdi na práva:
/dev/radio rw------- , user fm
binárka fm-tune (owner fm, group gm, práva r-sr-x---)

a žiaden program okrem usera fm a root ten device neotvorí

9.9.2008 22:35 FooBar
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Odpovědět | | Sbalit | Link | Blokovat | Admin
neresi to inotify?
9.9.2008 22:42 Thunder.m | skóre: 35 | blog: e17
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Hmm, asi ano, ale ještě to neumím pouužít, zkusím se na to podívat.
9.9.2008 22:59 Thunder.m | skóre: 35 | blog: e17
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Po delším prozkoumání to vypadá že inotify je opravdu odpověď na mou otázku.
rADOn avatar 10.9.2008 00:57 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Odpovědět | | Sbalit | Link | Blokovat | Admin
a co takhle ten soubor zamknout aby na nej jine procesy nelezly ? (flock ?)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
10.9.2008 07:05 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
je to device, a autor tvrdí, že na rozladenie stačí open, flock rieši len read/write na otvorené súbory
10.9.2008 09:46 Thunder.m | skóre: 35 | blog: e17
Rozbalit Rozbalit vše Re: Jak v C kontrolovat jestli je soubor otevřen jen pro daný program
Ano, to je bohužel pravda, flock jsem zkoušel, ale nefungovalo, myslel sem že stačí zamknout pomocí flock alespoň čtení, ale na rozladění stačí jen open.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.