M Michael Kerrisk (man-pages) #
Message details and related content
On Fri, Feb 8, 2013 at 8:10 PM, Oleg Nesterov [off-list ref] wrote:
On 02/08, Andrey Wagin wrote:quoted
2013/2/7 Oleg Nesterov [off-list ref]:quoted
Andrey, sorry for delay. As for API, I leave this to you and Michael. Not that I like these new flags, but I agree that pread() hack was not pretty too. On 01/29, Andrey Vagin wrote:quoted
+static ssize_t signalfd_peek(struct signalfd_ctx *ctx, + siginfo_t *info, loff_t *ppos, int queue_mask) +{ + loff_t seq = *ppos / sizeof(struct signalfd_siginfo); + int signr = 0; + + if (queue_mask & SIGQUEUE_PRIVATE) + signr = peek_signal(¤t->pending, + &ctx->sigmask, info, &seq); + else if (queue_mask & SIGQUEUE_SHARED) + signr = peek_signal(¤t->signal->shared_pending, + &ctx->sigmask, info, &seq); + (*ppos) += sizeof(struct signalfd_siginfo);Now that this can work even with normal read(), we will actually change f_pos. Then perhaps signalfd_fops->llseek() should work too. But this is minor...lseek works only if FMODE_LSEEK is set. You have explained why read&lseek have strange semantics for SIGNALFD_PEEK.quoted
Damn. But after I wrote this email I realized that llseek() probably can't work. Because peek_offset/f_pos/whatever has to be shared with all processes which have this file opened.Yes. but I thought you decided to ignore this oddity ;)quoted
So I want to suggest a way how to forbid read() for SIGNALFD_PEEK. file->f_pos can be initialized to -1. read() returns EINVAL in this case. In a man page we will write that signals can be dumped only with
It surely is no beauty. The hope is at least to make it less ugly than it was.
Seriously, perhaps we should simply add signalfd_fops->ioctl() for PEEK.
Or add PTRACE_{PEEK,POKE}_SIGNAL which looks even logical and useful...
And much simpler/straightforward.
But I am not going to argue.I suppose I had wondered along similar lines, but in a slightly different direction: would the use of a /proc interface to get the queued signals make some sense? Cheers, Michael -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Author of "The Linux Programming Interface"; http://man7.org/tlpi/