我使用了以下图例:
http://hipstercircuits.com/capture-input-events-via-gpio-on-beaglebone-black/
这段Python代码通过读取事件文件来工作,文件读取调用是一个阻塞调用,直到事件发生。
让它工作后,我创建了一个模仿python代码的c实现,并产生了好奇,当在python中读取文件:“/dev/input/event1”时,使用了以下命令:
evt_file = open("/dev/input/event1", "rb")
while True:
evt = evt_file.read(16)
evt_file.read(16)
#Do stuff
正如之前所说,这段代码是一个阻塞调用,直到发生一个事件,然后这段代码读取1个事件的内容,在做了C实现之后,我发现我需要下面的代码来实现工作:
unsigned char *buffer[8];
fp = fopen("/dev/input/event1", "r");
while(1)
{
fread(&buffer, sizeof(*buffer), 8, fp);
//Do stuff
}
可以看出,在 python 实现中我读取了 32 个字符,在 C 实现中我读取了 8 个字符,但我发现它们都从文件中读取了相同数量的信息,因为它们每个事件都会准确地 react 一次我生成,有人知道为什么吗?
最佳答案
unsigned char buffer[8];
fp = fopen("/dev/input/event1", "r");
while(1)
{
fread(buffer, 1, sizeof(buffer), fp);
//Do stuff
}
此外,请检查您的返回值。
关于python - 在 beaglebone black 上读取事件文件 C 和 python 时观察到的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590137/