Linux用户空间和内核空间通信

时间:2014-05-08 22:37:55

标签: linux

我有一个用户空间应用程序和一个内核字符驱动程序/dev/myfile。用户空间打开/dev/myfile并将命令写入文件。内核接受命令,执行它,并用响应消息替换文件中的整个命令。

现在在用户空间中,我对文件运行一个轮询,以查看内核是否对文件进行了任何写操作。一旦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()方法我尝试了这个方法,但我发现轮询退出i
   不知道原因。但是当我从文件中读取数据时,我得到0个字节。

1 个答案:

答案 0 :(得分:0)

  

我发现民意调查退出时我不知道原因。

原因可能是您的角色驱动程序的file_operations函数poll有问题。我们可能会告诉你是否展示了这个功能。