On Fri, Aug 10, 2012 at 4:22 AM, 马磊 <aware.why@gmail.com>
wrote:> Hi all,
> In src/tools/xenstore/xs.c : get_handle(), it says
>
> /* Watch pipe is allocated on demand in xs_fileno(). */
> h->watch_pipe[0] = h->watch_pipe[1] = -1;
>
>
> but in xs_fileno() function:
>
> 137-int xs_fileno(struct xs_handle *h)
> 138{
> 139 char c = 0;
> 140
> 141 mutex_lock(&h->watch_mutex);
> 142
> 143 if ((h->watch_pipe[0] == -1) &&
(pipe(h->watch_pipe) != -1)) {
> 144 /* Kick things off if the watch list is already
> non-empty. */
> 145 if (!list_empty(&h->watch_list))
> 146 while (write(h->watch_pipe[1], &c, 1) !=
1)
> 147 continue;
> 148 }
> 149
> 150 mutex_unlock(&h->watch_mutex);
> 151
> 152 return h->watch_pipe[0];
> 153}
>
> When did it assign value to watch_pipe[0] and what does watch_pipe[0] and
> watch_pipe[1] stands for respectively?
>
> In addition, the two lines `while (read(h->watch_pipe[0], &c, 1) !=
1)` and
> `while (write(h->watch_pipe[1], &c, 1) != 1)` appears many times,
> it's odd that why always writing to watch_pipe[1] but nobody read from
it
> and why always reading from watch_pipe[0] but nobody write to it?
>
> Grep found no answer and it's difficult to search for the trivial
question
> by goole!
"man pipe" can answer all your questions.
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel