【发布时间】:2015-03-04 16:24:29
【问题描述】:
我有一个用户空间应用程序和一个内核字符驱动程序/dev/myfile。用户空间打开/dev/myfile 并将命令写入文件。内核接受命令,执行它,并用响应消息替换文件中的整个命令。
现在在用户空间中,我对文件运行轮询以查看内核是否对文件进行了任何写操作。一旦 poll 方法退出,我读取文件内容并显示在终端上。
现在我的问题是关于 poll 方法:
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN | POLLERR | POLLRDNORM;
fds[0].revents = 0;
n = poll(fds, 1, POLL_TIMEOUT);
我希望在内核将一些数据写入文件之前阻止轮询。请记住,即使我打开文件并在文件上写入命令,我也是用户空间应用程序 但是一旦用户空间应用程序向文件写入内容,poll 方法就不能退出等待条件我希望 poll 方法仅在内核完成向文件写入内容时退出。以便用户空间应用程序可以读取
1) 现在任何人都可以为这种情况提供解决方案。
2) 我想到的一种解决方案是将数据写入文件,然后打开一个 pthread 并
在线程内调用 poll() 方法我尝试了这个方法,但我发现 poll 退出了我
不知道为什么。但是当我从文件中读取数据时,我得到 0 个字节。
【问题讨论】:
-
首先,修复键盘上的
.键。每个句子的末尾应该有一个。 -
@Barmar 解决这个问题实际上让我头疼。
-
我为你的尝试鼓掌......
-
也许使用信号量而不是轮询文件本身?
-
poll() 阻塞,直到其中一个事件发生。在事件字段中指定
标签: linux