Fcntl

实现socket非阻塞设置

刚开始学习,难免有些疏漏之处,请各位多多指教。 程序亲测可以使用。废话不多说。 网络IO模型分为阻塞IO、非阻塞IO、异步IO、IO复用、信号驱动IO。 阻塞IO: 有数据时,直接读;没有数据时,等待读。 非阻塞IO: 无论内核有没有数据都读。 以下是程序: 1. serevr.c 1 #include <stdio.h> 2 #include...

异步通知机制的总结

要弄明白这个问题,我们得从最基本的原理开始。我们知道,驱动程序运行在内核空间中,应用程序运行 在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时候,我们希望通知用户 程序设备已经ok,用户程序可以读取了,这样应用程序就不需要一直查询该设备的状态,从而节约了资源 ,这就是异步通知。 好,那下一个问题就来了,这个过程如何实现呢?简单,...

Linux网络编程 select/epoll得知socket有数据可读,如何判断数据全部被读取完毕?

补充一点:只有在使用epoll ET(Edge Trigger)模式的时候,才需要关注数据是否读取完毕了。使用select或者epoll的LT模式,其实根本不用关注数据是否读完了,select/epoll检测到有数据可读去读就OK了。 这里有两种做法: 1. 针对TCP,调用recv方法,根据recv方法的返回值,如果返回值小于我们指定的recv buf...

Linux 异步IO(AIO)

目录 1.select和poll 2. BSD异步IO 3. POSIX异步IO(AIO) 3.1 AIO控制块 3.2 aio_read & aio_write 3.3 aio_fsync 3.4 aio_error 3.5 aio_return 3.6 aio_suspend 3.7 aio_cancel 3.8 lio_listio...