linux下标准io缓冲问题
《UNP》上说:
标准IO流是全双工的:只要以r+类型打开流即可。然而在这样的流上,我们必须在调用一个输出函数之后插入一个fflush等调用才能接着调用一个输入函数……
解决上述读写问题的最简单方法是为一个给定套接字打开两个标准IO流:一个用于读一个用于写。
当启动整个服务器程序(没有注释掉的代码),然后启动客户程序在终端输入一行后,不会立刻回显,只有在ctrl+D后才输出全部回显行。
当启动整个服务器程序(改用注释掉的代码),就能每输入一行立刻得到服务器程序的回显结构。
为什么对于一个描述符打开两个流一个用于读一个用于写就是全缓冲,而打开一个进行读和写的流就是行缓冲的?
书上说打开两个流一个用于读一个用于写可以解决读写问题是是什么读写问题?感觉和书上说的完全相反啊
标准IO流是全双工的:只要以r+类型打开流即可。然而在这样的流上,我们必须在调用一个输出函数之后插入一个fflush等调用才能接着调用一个输入函数……
解决上述读写问题的最简单方法是为一个给定套接字打开两个标准IO流:一个用于读一个用于写。
/*服务器用来执行回显IO操作的函数*/
#include "unp.h"
void
str_echo(int sockfd)
{
char line[MAXLINE];
FILE *fpin, *fpout;
fpin = Fdopen(sockfd, "r");
fpout = Fdopen(sockfd, "w");
while (Fgets(line, MAXLINE, fpin) != NULL)
Fputs(line, fpout);
/*
FILE *fstream;
fstream=Fdopen(sockfd,"r+");
while(Fgets(line,MAXLINE,fstream)!=NULL)
Fputs(line,fstream);
*/
}
当启动整个服务器程序(没有注释掉的代码),然后启动客户程序在终端输入一行后,不会立刻回显,只有在ctrl+D后才输出全部回显行。
当启动整个服务器程序(改用注释掉的代码),就能每输入一行立刻得到服务器程序的回显结构。
为什么对于一个描述符打开两个流一个用于读一个用于写就是全缓冲,而打开一个进行读和写的流就是行缓冲的?
书上说打开两个流一个用于读一个用于写可以解决读写问题是是什么读写问题?感觉和书上说的完全相反啊
...全文



