[linux] tail和poll无关
不知道是我听错了还是别人说错了,我一直以为 tail -f 是通过poll实现的,而每个ext2(或ext3)文件都支持poll。当文件有新数据时,针对此文件的poll会返回结果。
昨天想参考kernel是怎么让设备实现poll的,看了ext2文件系统,发现它没提供poll接口。于是自己写了个程序来试试,对着一个ext2文件epoll,结果,即使文件里的数据增加了,epoll_wait也没有任何反应。就socket支持poll,硬盘文件不支持的。那tail -f是怎么实现的?下了coreutils一看,喔,其实是每1秒检查一遍文件,看大小有否变化,如果有,则异步的read该文件,取得新数据,打印到终端......
昨天想参考kernel是怎么让设备实现poll的,看了ext2文件系统,发现它没提供poll接口。于是自己写了个程序来试试,对着一个ext2文件epoll,结果,即使文件里的数据增加了,epoll_wait也没有任何反应。就socket支持poll,硬盘文件不支持的。那tail -f是怎么实现的?下了coreutils一看,喔,其实是每1秒检查一遍文件,看大小有否变化,如果有,则异步的read该文件,取得新数据,打印到终端......
想想也对,tail命令出现的很早,那时候说不定还没有poll呢,它就用这个简单办法不也解决了问题么。
相关文章
- [kernel] epoll里的EPOLLET标记 - 05 14, 2010
- fedora 9 小集 - 01 05, 2009
- 多线程调试 - 12 17, 2008
留言: