C语言 阻塞读取直到memfd_create中有数据可用



我试图在内存中创建一个文件,其行为就像一个字符设备。我用过memfd_create(path, 0),但我开始觉得这不是我需要的。本质上,我想做的是在打开时通过LD_PRELOAD创建一个钩子,寻找open("/dev/input/event0")并将返回的fd更改为我的memfd。然后,我想创建一种队列,让被钩子的应用程序读取数据,就像它读取设备文件一样。

然而,read()在我的memfd上使用时似乎不会阻塞,即使有0个字节要读。你能给我指个正确的方向吗?

编辑:

根据要求,我提供了代码,但是我不太确定这是否会有任何帮助,因为它实际上是两行…

struct input_event ev;
int kbd = memfd_create("/dev/input/event0", 0);
read(kbd, &ev, sizeof(ev)); //<-- How can I make this block by default?

D'oh。使用管道而不是memfd。然后从一端写入,并在钩子应用程序中读取。

int kbd[2];
struct input_event ev;
pipe(kbd);
read(kbd[0], &ev, sizeof(ev));

相关内容

  • 没有找到相关文章

最新更新