双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

linux下标准io缓冲问题

Henryinferno Henryinferno 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
《UNP》上说:
标准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后才输出全部回显行。
当启动整个服务器程序(改用注释掉的代码),就能每输入一行立刻得到服务器程序的回显结构。

为什么对于一个描述符打开两个流一个用于读一个用于写就是全缓冲,而打开一个进行读和写的流就是行缓冲的?
书上说打开两个流一个用于读一个用于写可以解决读写问题是是什么读写问题?感觉和书上说的完全相反啊
...全文
评论 8
收藏 已收藏
分享
返回顶部
Henryinferno
C语言 70,039 成员 243,237 内容