|
发表于 2007-7-27 08:36:15
|
显示全部楼层
Post by ratcj
我们在写客户-服务器程序时(或者其他程序),经常进行IO操作(如:read、write、fgets、fputs等),看了很多程序,经常有同时使用文件IO(read、write等)和标准IO库(fgets、fputs等),我只知道这两种IO使用上有个很多的区别是缓冲的问题,但是,不太明白什么时候应该选择哪种IO会比较好,比如,下面的一段客户端的程序,为什么要这样选择IO操作呢?- while (fgets(sendline, MAXLINE, fp) != NULL) {
- write(sockfd, sendline, sizeof(sendline));
- if (read(sockfd, recvline, MAXLINE) == 0) {
- perror("read()");
- exit(-1);
- }
- fputs(recvline, stdout);
- }
复制代码
使用标准IO就不需要自己维护缓冲区了,标准IO库会根据stdin/stdout来选择缓冲类型,也就是说当你使用标准IO的时候,要清楚它的stdin/stdou是什么类型以及其默认的缓冲模式,如果不合适,你需要用setvbuf先设置,再使用,例如协同进程的标准输入和输出的类型都是管道,所以其默认的缓冲类型是全缓冲的,如果要使用标准IO,就需要现设置行缓冲
对于文件IO,只要你自己能维护好缓冲区,完全可以不用标准IO |
|