close() 可以阻塞吗?

Bri*_* Bi 4 pipe files socket fifo

例如,如果您关闭一个管道或套接字,该管道或套接字的写入缓冲区中仍有尚未被另一端进程读取的数据,那么 close() 是否会阻塞,直到读取数据或其他进程死亡?

Mic*_*mer 5

是的,close可以阻止

如果未设置 O_NONBLOCK 并且没有为 STREAM 发布信号,并且模块的写入队列中有数据,则 close() 应等待未指定的时间(对于每个模块和驱动程序),以便任何输出在拆除之前耗尽流。

和:

如果 fildes 引用一个套接字,close() 将导致该套接字被销毁。如果套接字处于连接模式,并且为具有非零逗留时间的套接字设置了 SO_LINGER 选项,并且套接字有未传输的数据,则 close() 应阻塞直到当前的逗留间隔,直到所有数据都传输完毕.