我正在尝试从功能read()
以下是代码:
static uint64_t hash_log_free_list;
int fd = open(argv[2], O_RDWR|O_LARGEFILE);
assert(fd != -1);
int err = read(fd, &hash_log_free_list, sizeof(uint64_t));
if (err != sizeof(uint64_t))
{
MSGDEBUG
perror("read");
printf("err: %d\n", err);
abort();
}
argv [2]是一个nbd设备:/ dev / nbd0
MSGDEBUG 定义为打印__FILE __,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 我收到错误消息:
错误!!! dedup.c:554:主读:无效参数错误:0 中止
我做错了吗?
答案 0 :(得分:1)
read
返回0,这不是错误,它只是告诉您没有什么可读的。
您可以在致电MSGDEBUG
之前使用errno
/ perror
,以确保其中包含实际数据。
另外,删除MSGDEBUG
行,因为它打印的内容很可能同时更改read
,因此您的setState({'i':i})
可能会向您提供有关内容的信息。 {{1}},而不是之前的{{1}}。