我刚刚开始关注(嵌入式)linux上的I2C支持(准确地说是Beaglebone Black)。因为它是linux,所以一切都是文件,因此I2C也就不足为奇了。
int file = open( "/dev/i2c-0", O_RDWR );
然后通过ioctl()
选择该总线上的实际地址。我的问题是 - 在应用程序执行期间缓存file
是安全的,还是 legal ?在我的幼稚眼中,似乎每隔250毫秒打开一个资源的过头就会对内核造成不必要的压力。所以打开是有效的,然后只需使用ioctl()
来切换地址,或者我必须close()
读写之间的描述符?
答案 0 :(得分:4)
在应用程序执行期间缓存
file
是安全的,甚至是合法的?
只要程序需要继续执行,文件描述符(从open()返回)就有效。
/ dev中的设备节点可能类似于文件名,但是一旦看过syscall接口,它们就会与文件系统条目区别对待。设备的文件描述符上的open()或read()将调用设备驱动程序,而对于实际文件,调用其文件系统,最终可能调用存储设备驱动程序。
在我的幼稚眼中,似乎每隔250毫秒打开一个资源的过头就会对内核造成不必要的压力。
是的,因为那些open()和close()系统调用是不必要的。
因此打开是有效的,然后只需使用ioctl()在需要时切换地址,
是的,这是正确的用途。
或者我必须在读写之间关闭()描述符吗?
这没有必要也没有建议。