【问题标题】:Linux user space and kernel space communicationLinux用户空间和内核空间通信
【发布时间】: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


【解决方案1】:

我发现投票退出我不知道原因。

原因可能是你的字符驱动的file_operations函数poll有问题。如果你展示了这个功能,我们也许可以知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多