On Wed, Mar 17, 2010 at 05:17:52PM +0000, Christos Zoulas wrote:
> In article <20100317131044.f26d5d99.cryintotheblue...@googlemail.com>,
> Sad Clouds  <cryintotheblue...@googlemail.com> wrote:
> >On Wed, 17 Mar 2010 12:50:51 +0000
> >Sad Clouds <cryintotheblue...@googlemail.com> wrote:
> >
> >> Hi is there some undocumented system call that allows a user process
> >> to write to multiple descriptors in one go?
> >> 
> >> What I'm looking for is a variation of writev() system call, e.g.:
> >> 
> >> size_t write2v(int *d, int dcnt, const struct iovec *iov, int iovcnt);
> >> 
> >> So the application builds an array of file descriptors and an array of
> >> iovec structures. It then calls write2v(), which goes through each
> >> file descriptor and writes buffers from iovec structures.
> >> 
> >
> >On second thoughts, there needs to be a way to handle partial writes
> >
> >struct fdvec
> >{
> >     int fd;
> >     size_t nwritten;
> >};
> >
> >int write2v(
> >     struct fdvec *fdv, int fdvcnt, const struct iovec *iov, int iovcnt);
> >
> >For each file descriptor, the function sets nwritten to the number of
> >bytes written. It returns 0 when all buffers in iovec structures were
> >written to all file descriptors, otherwise it returns >0 for each file
> >descriptor that was partially written.
> 
> if you are going to build that, then it is probably easier to include
> all the info in the iovec:

I think you missed his point here, which is to write the *same* data to
all fds, and not to match a vector to a fd.  It could work too, but then
instead of having 5000 struct fdvec and two struct iovec, you'd end up
with 10000 struct iovec2.

-- 
Quentin Garnier - c...@cubidou.net - c...@netbsd.org
"See the look on my face from staying too long in one place
[...] every time the morning breaks I know I'm closer to falling"
KT Tunstall, Saving My Face, Drastic Fantastic, 2007.

Attachment: pgpesVotJdP0M.pgp
Description: PGP signature

Reply via email to