如何在写入操作之前缓存/缓冲数据

时间:2013-06-20 11:29:35

标签: c caching buffer posix

我的目的是减少对内核的文件写操作,从而在POSIX上寻找缓存/缓冲机制。我相信标准C库setbuf可以做到这一点,但在POSIX中有类似的调用吗?

E.g。我想设置一个1K字节的缓冲区大小,并且不希望我的程序在超出缓冲区大小之前启动对磁盘的实际写操作。

fdpipe= open(PIPE_NAME,O_RDONLY);
......

fd = open(filename,O_CREAT|O_WRONLY|O_TRUNC|O_LARGEFILE,S_IREAD|S_IWRITE);
....

while((len = read(fdpipe,buffer,sizeof(buffer))) > 0) {
     ....
     ret = write(fd,buffer,length = strlen(buffer));
}

2 个答案:

答案 0 :(得分:3)

为什么不简单地使用stdio工具?您可以使用fdopen创建将读/写给定文件描述符的FILE*,然后使用setvbuf设置所需的缓冲区大小。

fdpipe = open(PIPE_NAME,O_RDONLY);
......

fd = open(filename,O_CREAT|O_WRONLY|O_TRUNC|O_LARGEFILE,S_IREAD|S_IWRITE);
FILE* outf = fdopen(fd, "wb");
char obuffer[1024];
setvbuf(outf, obuffer, _IOFBF, sizeof(obuffer));
....

while((len = read(fdpipe,buffer,sizeof(buffer))) > 0) {
     ....
     ret = fwrite(buffer,1,length = strlen(buffer),outf);
}

答案 1 :(得分:0)

您只需将数据保存在自己的程序缓冲区中。不要调用write()系统调用,直到你自己的缓冲区达到1K。然后,调用write()和flush()。这对你不好吗?