这是指 C 套接字。假设我已经向套接字写入了一些数据,然后我调用read,read系统调用会读取缓冲区大小(例如4096等)
信息并删除套接字中的所有信息吗?基本上 read 只是将查找指针向前移动到它读取的那些字节,或者它会读取并删除套接字中的所有信息,以便下次调用 read 时,它从第 0 个索引读取?
或者说我写入套接字而不从其他地方调用读取?数据会被替换或附加吗?
最佳答案
如果套接字上的可用数据多于您read()
的数量,则多余的数据将保留在套接字的缓冲区中,直到您读取它。短时间读取期间不会丢失任何数据。
写作的原理与此类似。如果多次调用write()
,则每次写入都会将数据追加到远程主机上的缓冲区中。同样,没有数据丢失。
(最终,远程主机上的缓冲区将填满。当发生这种情况时,write()
将阻塞——本地主机将等待缓冲区清空,然后再发送更多数据。)
从概念上讲,套接字对中的每个方向的行为就像两个对等方之间的管道。无论一次读取/写入多少数据,发送的整个数据流都将按照发送的顺序接收。
关于c - 当使用读写系统调用时,套接字中的数据会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750515/