c_cpp 使用ioctl()和errno的正确方法。 #linux #c #errno #ioctl
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 使用ioctl()和errno的正确方法。 #linux #c #errno #ioctl相关的知识,希望对你有一定的参考价值。
static unsigned char commit_ioctl()
{
int block_dev = -1;
int error_code = 0;
int retval = 0;
unsigned retry_count = 0;
errno = 0; /* Clear errno - successfull function calls might leave old value. */
block_dev = open(block_dev_name, O_RDWR);
/* Need to save errno as it might be reset by library calls. */
error_code = errno;
if (block_dev == -1) {
LOGE("Failed to open %s with: %s.", block_dev_name, strerror(error_code));
} else {
for(retry_count=0;retry_count<IOCTL_RETRY_MAX;retry_count++) {
retval = ioctl(block_dev, BLKCOMMAND);
error_code = errno;
if (retval != -1 || error_code != EAGAIN) {
break;
}
usleep(IOCTL_DELAY);
}
if (retval == -1) {
LOGE("Ioctl failed on %s with: %s (retry_count %d)",
block_dev_name, strerror(error_code), retry_count);
} else {
/* In case we got an EAGAIN but then ioctl() worked,
* we need to reset return value. */
error_code = 0;
LOGI("Ioctl operation succeeded.");
}
close(block_dev);
}
return error_code;
}
以上是关于c_cpp 使用ioctl()和errno的正确方法。 #linux #c #errno #ioctl的主要内容,如果未能解决你的问题,请参考以下文章
调用 ioctl() 导致 errno 指示“错误地址”
Errno::ENOTTY 通过 SuSe 上的 Net::SSH 连接到远程服务器时设备的 ioctl 不合适(使用 Ruby on Rails 5.2.4)
c_cpp 通过IOCTL获取终端大小
如何在 Mac 插件中使用 ioctl() 设置 RTS?
如何在 Linux 设备驱动程序中设置 errno?
Python 处理 socket.error:[Errno 104] 连接由对等方重置