在Linux进行IO的正确姿势
很多C/C++程序员在做网络编程时,习惯使用封装好的库,却可能忽略了底层IO操作的一个常见陷阱。这篇文章指出,许多人对read()/write()函数的错误处理并不到位。 作者从一个典型的错误代码示例出发:检查返回值为-1或0就认为完成了处理。但这忽略了关键的errno判断,尤其是EINTR(系统中断)和EAGAIN(非阻塞IO暂无数据)这两种情况。文章进一步展示了,仅仅判断errno还不够,正确的姿势是将IO操作放在一个while循环中,以便在发生可恢复的中断时进行重试,而非直接退出。 文中强调,一个完善的IO处理逻辑必须能应对操作系统的瞬时状况,并结合了select/epoll等IO多路复用机制。最后,文章建议读者参考sim框架的开源代码,学习成熟的IO处理模式。