在APUE中有这样一段代码,是用来写文件的。
int main ( int argc, char *argv[] )
{
int n;
char buf[BUFFERSIZE];
while((n = read(STDIN_FILENO, buf, BUFFERSIZE)) > 0)
if (write(STDOUT_FILENO, buf, n) != n )
err_sys("write error");
if (n<0)
err_sys("read error");
exit(0);
return EXIT_SUCCESS;
}
书中写道,这个BUFFERSIZE的大小会影响到文件写的速度。哦晕,以前我怎么没有想到呢。
因为书中的测试机器使用的ext2文件系统的block大小是4096bytes,所以当BUFFERSIZE为4096时,性能达到最佳。
而这个最佳性能可以一直保持到BUFFERSIZE为128K,书上写,这是因为文件系统有read ahead的功能。
另外一个需要注意的是,可以有多个进程同时写一个文件。所以写代码的时候,要记住这个情况,做好保护。