繁体   English   中英

C read():无效的参数

[英]C read() : Invalid arguments

我正在尝试从具有功能read()的nbd设备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 __,__ LINE__和__FUNCTION__

我收到错误消息:

错误!!! dedup.c:554:主要读取:无效的参数err:0中止

难道我做错了什么?

read返回0,这不是错误,它只是告诉您没有要读取的内容。

您可以在调用read之前使用select / epoll ,以确保有实际数据要读取。

此外,除去MSGDEBUG线,因为它是打印的东西,并最有可能改变errno在同一时间,所以你perror可能给你关于发生了什么信息MSGDEBUG ,而不是在read之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM