Portál AbcLinuxu, 19. března 2024 06:09
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?
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)?
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.