OK - how can I "notify" userspace process? Signals are "weak" - I need
to send some data (filename etc.) to process. One solution is "on this
signal call this syscall and result of this syscall will be data you
need" - but I'd prefer to handle this in one "action".
My first thoughts are to make it a blocking call.
You mean like:
- send signal to user-space process
- wait until user-space process pick ups data (filename etc.), creates copy of file (or whatever) and calls another system call that he's finished
- let kernel to continue syscall I blocked
?
No, more like:
- user-space process calls syscall, which blocks.
- kernel captures a file write event, puts the info in some kind of queue, wakes up the user-space process and then waits for some kind of acknowledgement to be returned so that it may continue.
- user-space process wakes up, the syscall completes, and passes a filename etc. to user-space. Copies the file, and calls a syscall to signify "hey, I'm done with that file". This syscall wakes up the kernel stuff that was waiting for this acknowledgement.
- file write event continues
- repeat from start
OK - I'm thinking of using semaphores to "block" system call - is there something why this is not a good idea?