Portál AbcLinuxu, 14. července 2025 11:37


Dotaz: Jak na asynchronní notifikaci z jádra do aplikace

11.5.2014 18:34 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Jak na asynchronní notifikaci z jádra do aplikace
Přečteno: 233×
Odpovědět | Admin

Už několikrát jsem narazil na problém, jak jednoduše notifikovat aplikaci, že se v kernelu něco událo - stačí jednosměrně poslat jeden bajt. Bohužel stále jsem nenašel vhodné a dostatečně jednoduché řešení. Jakoby to nikdo nepotřeboval.

Prozatím to řeším přes poll (s POLLPRI flagem) a ioctl, který ze zásobníku vytáhne nejstarší událost, protože read/write používám pro jiný typ dat. Kvůli budoucím plánům na projektu ale musím mimo jiné nahradit všechny ioctl něčím jiným...

Četl jsem o asynchronních signálech (SIGIO), ale podle všeho nejde přímo posílat vlastní signály bez zásahu do kódu jádra.

Zatím jediné řešení vidím v použití netlinku, ale práce s ním mi nepřijde moc snadná (čti na pár řádků), má šílenou režii (128 bajtů header abych poslal jednobajtový event) a navíc, pokud se nepletu, jako u běžného síťového provozu není zaručeno doručení všech paketů, takže by se mi mohla komunikace lehce rozhodit, zvlášť při vyšší četnosti událostí (potřebuji v řádu tisíců za vteřinu).

Víte někdo o něčem jiném použitelném?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.5.2014 19:03 luky
Rozbalit Rozbalit vše Re: Jak na asynchronní notifikaci z jádra do aplikace
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proc chcete vlastni signaly? S kazdym signalem jde poslat sigval_t (unie pointeru a integeru), coz je vic, nez pozadovany byte. Muzete posilat jeden signal a ten event si ulozit do si_value.
11.5.2014 22:45 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: Jak na asynchronní notifikaci z jádra do aplikace

To zní slibně, zjevně si musím přečíst víc...

Jak jsou na tom signály s rychostí v porovnání s poll/read na dalším file descriptoru (kterému bych se rád vyhnul)?

11.5.2014 22:03 Sten
Rozbalit Rozbalit vše Re: Jak na asynchronní notifikaci z jádra do aplikace
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi nejjednodušší řešení: použijte dva file descriptory. Jeden pro události, druhý pro data.

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.