On Thu, 2012-08-09 at 10:50 +0100, 马磊 wrote:
>
>
> On Thu, Aug 9, 2012 at 4:21 PM, Ian Campbell <
Ian.Campbell@xxxxxxxxxx>
> wrote:
> On Thu, 2012-08-09 at 08:07 +0100, 马磊 wrote:
> >
> >
> > On Wed, Aug 8, 2012 at 4:32 PM, 马磊 <
aware.why@xxxxxxxxx>
> wrote:
> > Hi all,
> >
> > In xen-4.1.2 src/tools/xenstore/xs.c: xs_talkv
> function,
> > there are several lines as follow:
> >
> >
> > 437 mutex_lock(&h->request_mutex);
> >
> >
> >
> > 438
> >
> >
> >
> > 439 if (!xs_write_all(h->fd, &msg,
> sizeof(msg)))
> >
> >
> >
> > 440 goto fail;
> >
> >
> >
> > 441
> >
> >
> >
> > 442 for (i = 0; i < num_vecs; i++)
> >
> >
> >
> > 443 if (!xs_write_all(h->fd,
> > iovec[i].iov_base, iovec[i].iov_len))
> >
> >
> >
> > 444 goto fail;
> >
> >
> >
> > 445
> >
> >
> >
> > 446 ret = read_reply(h, &msg.type, len);
> >
> >
> >
> > 447 if (!ret)
> >
> >
> >
> > 448 goto fail;
> >
> >
> >
> > 449
> >
> >
> >
> > 450 mutex_unlock(&h->request_mutex);
> >
> >
> >
> >
> > The above seems to tell me that after writing to
> h->fd , the
> > read_reply invoking read_message which immediatelly
> read from
> > hd->fd?
> > What did it mean by this?
> >
> >
> >
> >
> > Thanks
> >
> > If hd->fd refers to a socket descriptor, it's understandable
> that
> > writing and then imediatelly reading, in which case the fd
> is returned
> > by get_handle(xs_daemon_socket(), flags).
> >
> >
> > But when fd is retrived by get_handle(xs_domain_dev(),
> flags), it
> > means to write to a file and then read from the same file
> imediatelly.
> > Dose it have something to do with the internal communication
> > protocol?!
>
>
> Yes, the xenstore protocol involves both writing messages and
> reading
> replies, but that seems trivially obvious so I'm afraid I
> really have no
> idea what your question is nor what is confusing you. Perhaps
> describing
> in more detail what you are trying to achieve will help?
>
> Reading
http://wiki.xen.org/wiki/Asking_Xen_Devel_Questions
> might also
> help you consider what it is you are asking.
>
>
> >
> >
> > Thanks for replying.
> >
> >
> >
> >
> >
> >
> The final read and write operations are achieved by:
> read(fd, data, len);
> write(fd, data, len);
>
>
> Maybe my confusing lies in this point that what's the distinction
> between the read and write operations on a socket file,
> the /proc/xen/xenbus, a regular file?