Linux I2C 文件句柄 - 缓存安全吗?

标签 linux embedded-linux i2c

我刚刚开始研究(嵌入式)linux(准确地说是 Beaglebone Black)上的 I2C 支持。既然是linux,一切都是文件,所以I2C也是如此也就不足为奇了。

int file = open( "/dev/i2c-0", O_RDWR );

然后通过ioctl()选择该总线上的实际地址。我的问题是 - 在应用程序执行期间缓存文件是否安全,甚至是否合法?在我天真的看来,每 250 毫秒打开一个资源来读取的开销会给内核带来不必要的压力。所以打开是有效的,然后只要需要就使用ioctl()来切换地址,或者我必须在读写之间close()描述符?

最佳答案

is it safe, or even legal, to cache file for the duration of application execution?

只要程序需要继续执行,文件描述符(从 open() 返回的)就有效。

/dev 中的设备节点可能类似于文件名,但一旦您查看系统调用接口(interface),它们的处理方式就与文件系统条目不同。设备文件描述符上的 open() 或 read() 将调用设备驱动程序,而对于实际文件,则调用其文件系统,这最终可能调用存储设备驱动程序。

It would seem to my naive eyes that the overheading of opening a resource to read every 250ms would be an unnecessary strain on the kernel.

是的,因为那些 open() 和 close() 系统调用是不必要的。

So it is valid to open, and then just use ioctl() to switch address whenever I need to,

是的,这是正确的用法。

or must I close() the descriptor between reads and writes?

没有必要也不建议这样做。

关于Linux I2C 文件句柄 - 缓存安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216377/

相关文章:

c - exec 系列函数的工作

linux - Linux中基于管道的程序

c++ - 在英特尔 Galileo 上运行 C++

android - 内核模块未显示在 android 内核中

linux - 如何告诉 Linux 板上的某些引脚用于 SPI/I2C

linux - POSIX 实时信号能否实现软实时?

Android:在启动时挂载不同的用户数据分区

ssh - 不能 SSH/SCP 到基于 Qemu 的 powerpc 虚拟机

c - f3发现: trying to use an lcd screen 1602 with an I2C module

c - STM32F4 作为 I2C 从设备。为什么 "void I2C1_ER_IRQHandler(void)"在 "HAL_I2C_Slave_Transmit_DMA"之后执行?