winapi有没有类似unix的readv/writev(分散读/会聚写)的功能调用?

时间:2022-05-03 22:03:58
在*nix平台上有readv/writev函数调用。

例如,需要读取一段内容,分别对不同的变量/对象进行赋值。要么一次读取一大块文件,再把缓存的内容拷贝到各个分散的变量里面,要么调用多次read函数。而readv解决了这个问题。
writev相反,一次可以把多个地址的内容,写入磁盘,避免了在"合并缓存"或者多次write调用之间二选一。

那么我的问题就是,windows api里面有没有类似的批处理的文件操作函数呢?
谢谢。

4 个解决方案

#1


自己顶起来一下!

#2


http://www.codeforge.com/read/178401/readv.c__html

看看这个是否对你有所帮助。

#3


据我所知。没有。
但是,可是,可但是。你的需求很容易满足啊。
windows的read和write提供的是原子操作。配合seek使用。

自己简单的封装一下,就是你要求的那种函数了。

#4


引用 2 楼 promaster 的回复:
http://www.codeforge.com/read/178401/readv.c__html

看看这个是否对你有所帮助。

看起来这个cygwin的实现也是很简单的啊:
[code]
readv(int handle, struct iovec *iov, int count)
{
 
  unsigned long r, t=0;
  while (count)
  {
 
    r = read(handle, iov->iov_base, iov->iov_len);
    if (r < 0)
      return r;
    t += r;
    iov++;
    count--;
   
}
[/code]

#1


自己顶起来一下!

#2


http://www.codeforge.com/read/178401/readv.c__html

看看这个是否对你有所帮助。

#3


据我所知。没有。
但是,可是,可但是。你的需求很容易满足啊。
windows的read和write提供的是原子操作。配合seek使用。

自己简单的封装一下,就是你要求的那种函数了。

#4


引用 2 楼 promaster 的回复:
http://www.codeforge.com/read/178401/readv.c__html

看看这个是否对你有所帮助。

看起来这个cygwin的实现也是很简单的啊:
[code]
readv(int handle, struct iovec *iov, int count)
{
 
  unsigned long r, t=0;
  while (count)
  {
 
    r = read(handle, iov->iov_base, iov->iov_len);
    if (r < 0)
      return r;
    t += r;
    iov++;
    count--;
   
}
[/code]