Messages in this thread |  | | Date | Tue, 24 Oct 2000 08:42:13 -0700 (PDT) | From | Linus Torvalds <> |
| |
On Tue, 24 Oct 2000, Dan Kegel wrote: > Linus Torvalds wrote: > > Basically, the main loop would boil down to > > for (;;) { > > static struct event ev_list[MAXEV]; > > get_event(ev_list, MAXEV, &tmout); > > .. timeout handling here .. > > } > > > > because get_even() would end up doing all the user-mode calls too (so > > "get_event()" is no longer a system call: it's a system call + a for-loop > > to call all the ID handler functions that were associated with the events > > that triggered). > > Occurs to me that this stuff will be used from other languages > than C, which might prefer to do their own event dispatching, > and would want the system to treat event_fn as another opaque quantity.
Yes and no.
The KERNEL would treat it as just another opaque quantity: after all, it would never ever touch the thing other than get it as part of "bind_event()" and return it as part of "get_events()". So as far as the kernel is concerned, both "event_fn" and "opaque" are just random information.
However, it is very important to have every common user agree about the meaning of the ID's in user space: the whole point of encapsulating "event_fn" as a function pointer is that you can have different parts of the same program use the "bind_event()" interface, and they won't step on each others toes.
So if you program in Fortran, for example, and you expect to link against the C library, and the C library uses events for something, then you'd better make sure that the fortran interfaces end up using the event_fn thing in the same wasy as the C one..
> So I don't object to a function that dispatches events, e.g. > int get_event(&tmout); > as long as there's also > int get_events(ev_list, MAXEV, &tmout) > that treats event_fn as an opaque pointer and *does not* dispatch the events.
That's a user-mode issue, and obviously, if you don't care about compatibility with anything else you can do this. The kernel won't know, or care. But I think it is unlikely that you'd ever use the raw events in any other way - most environments under UNIX tend to have a C library component somewhere, because the low-level stuff is written in C and uses the common code that way even when the programmer isn't aware of it.
Linus
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |