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()阻塞操作直到信息被写入缓冲区?还是说我完全偏离主题了?

尊享推荐

365彩票网app安卓官方下载 名扬传世·无间社

名扬传世·无间社

📅 09-08 👑 39
365bet安卓中文客户端 北晚在线

北晚在线

📅 09-20 👑 181
365bet安卓中文客户端 捷克隕石功效全攻略:喚醒能量、招財納福的寶石秘訣
365怎么查看投注记录 哪些人能够申诉,申诉人可以向什么地方申诉?