【发布时间】:2020-10-03 12:00:12
【问题描述】:
关于 C lib 函数读取,是否有任何定义当读取操作失败时数据会发生什么(计数 = -1)?假设 'data' 仍然保持之前的值;如果当前的读取操作失败,它会被覆盖吗?在我当前的实现中,调试显示旧值仍然存在,但是有什么“官方”定义的吗? 考虑以下代码:
int8_t count = 0;
int fd = open(I2C_BUS, O_RDWR);
if (fd < 0) {
fprintf(stderr, "Failed to open device: %s\n", strerror(errno));
return(-1);
}
...
count = read(fd, data, length);
if (count < 0) {
fprintf(stderr, "Failed to read device(%d): %s\n", devAddr, ::strerror(errno));
close(fd);
return(-1);
【问题讨论】:
-
请提供minimal reproducible example 以证明您所指的内容。我不确定您指的是哪个
read()。据我所知,C 本身并不知道。 -
如果函数读取数据失败,应该用什么新数据覆盖缓冲区?如果函数告诉你没有读取数据,为什么要浪费时间用花哨的新内容填充缓冲区呢?你为什么要关心?
-
@Gerhardh:我想人们可以想象这样一种情况,内核已经将一堆数据复制到你的缓冲区中,但在返回之前,它得到了一些数据无效的指示,所以它返回-1。问题是这种行为是否合法。