例如,需要读取一段内容,分别对不同的变量/对象进行赋值。要么一次读取一大块文件,再把缓存的内容拷贝到各个分散的变量里面,要么调用多次read函数。而readv解决了这个问题。
writev相反,一次可以把多个地址的内容,写入磁盘,避免了在"合并缓存"或者多次write调用之间二选一。
那么我的问题就是,windows api里面有没有类似的批处理的文件操作函数呢?
谢谢。
4 个解决方案
#1
自己顶起来一下!
#2
http://www.codeforge.com/read/178401/readv.c__html
看看这个是否对你有所帮助。
看看这个是否对你有所帮助。
#3
据我所知。没有。
但是,可是,可但是。你的需求很容易满足啊。
windows的read和write提供的是原子操作。配合seek使用。
自己简单的封装一下,就是你要求的那种函数了。
但是,可是,可但是。你的需求很容易满足啊。
windows的read和write提供的是原子操作。配合seek使用。
自己简单的封装一下,就是你要求的那种函数了。
#4
看起来这个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使用。
自己简单的封装一下,就是你要求的那种函数了。
但是,可是,可但是。你的需求很容易满足啊。
windows的read和write提供的是原子操作。配合seek使用。
自己简单的封装一下,就是你要求的那种函数了。
#4
看起来这个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]