write()系统调用是否会阻塞进一步的操作,直到包含read()为止,反之亦然?

write()系统调用是否会阻塞进一步的操作,直到包含read()为止,反之亦然?

作为TCP/IP客户端-服务器的一部分编写:

服务器:

代码语言:javascript运行复制write(nfds,data1,sizeof(data1));

usleep(1000);

write(nfds,data2,sizeof(data2));客户端:

代码语言:javascript运行复制read(fds,s,sizeof(s));

printf("%s",s);

read(fds,s,sizeof(s));

printf("%s",s);在对write()的两次调用之间没有usleep(1000)的情况下,客户机将打印data1两次。为什么会这样呢?

背景:

我正在做一个客户机-服务器程序,在这个程序中,服务器必须在获取信息后通过网络(套接字)发送两个连续的信息;nfds是我们从accept()获得的文件描述符。在客户端,我们通过read接收这些信息;这里的fds是通过socket()获得的文件描述符。

我的问题是,当我不在write()函数之间使用usleep(1000)时,客户机只打印data1表示的信息两次,而不是先打印data1,然后打印data2。当我放入usleep()时,它是正常的。究竟为什么会发生这种情况?是write()阻塞操作直到缓冲区被读取,还是read()阻塞操作直到信息被写入缓冲区?还是说我完全偏离主题了?

相关文章

火影忍者手游a忍多长时间换一次
365bet安卓手机客户端

火影忍者手游a忍多长时间换一次

10-25 3680
空调一般一小时用多少电0
365bet安卓手机客户端

空调一般一小时用多少电0

09-27 3651
古人验金子为什么总是用牙咬?原因太聪明了
365bet安卓手机客户端

古人验金子为什么总是用牙咬?原因太聪明了

07-02 2767
如何简单快捷录制游戏内精彩画面?
365bet安卓手机客户端

如何简单快捷录制游戏内精彩画面?

11-02 9302
做3D渲染,选择什么显卡好?
365体育比分官网

做3D渲染,选择什么显卡好?

10-08 5665
坦克连服务器维护中怎么办
365bet安卓手机客户端

坦克连服务器维护中怎么办

09-02 9704
数字联盟
365bet官网是什么

数字联盟

07-26 4678
折纸公众号推文
365bet官网是什么

折纸公众号推文

09-13 1490
费用科目有哪些项目
365bet安卓手机客户端

费用科目有哪些项目

06-27 3884