我在python2.7中使用kqueue构建了一个文件监视器。你知道吗
最初,它一直在输出标志中的0x4000和数据中的0x1,结果是发生了一个错误。然后我找到了一个由LaclefYoshi给出的例子,它是有效的!你知道吗
我的代码,给出错误。你知道吗
import select
from time import sleep
fd = open('test').fileno()
kq = select.kqueue()
flags = select.KQ_EV_ADD | select.KQ_EV_ENABLE | select.KQ_EV_CLEAR
fflags = select.KQ_NOTE_DELETE | select.KQ_NOTE_WRITE | select.KQ_NOTE_EXTEND \
| select.KQ_NOTE_RENAME | select.KQ_NOTE_REVOKE | select.KQ_NOTE_ATTRIB\
| select.KQ_NOTE_LINK
ev = select.kevent(fd, filter=select.KQ_FILTER_VNODE,
flags=flags, fflags=fflags)
evl = kq.control([ev], 1)
print evl
while 1:
revents = kq.control([], 1, None)
print revents
sleep(1)
在他的版本中,将file对象直接赋给kevent函数。你知道吗
fd = open('test')
ev = select.kevent(fd, filter=select.KQ_FILTER_VNODE,
flags=flags, fflags=fflags)
另一个版本,调用kevent中的fileno方法。你知道吗
fd = open('test')
ev = select.kevent(fd.fileno(), filter=select.KQ_FILTER_VNODE,
flags=flags, fflags=fflags)
但现在我真的很困惑,为什么第一个版本不起作用,而第三个版本效果很好。这两个应该是一样的,对吧?你知道吗
我的另一个问题是,在Python中,file对象到底是什么?我看到这里的ident实际上是一个整数,它应该是文件描述符而不是文件对象。这是怎么回事!?你知道吗
谢谢!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐