gpt4 book ai didi

c - ioctl 究竟是如何工作的以及如何使其在 DVD 读取时正常工作?

转载 作者:行者123 更新时间:2023-11-30 18:51:48 25 4
gpt4 key购买 nike

我已经完成了以下代码来测试 ioctl 的使用,但我对结果感到非常困惑。

int main(void)
{
int id;
dvd_struct s;
id=open("/dev/dvd",O_RDONLY);
ioctl(id,DVD_READ_STRUCT,&s);
printf("%d,%s,%s",s.bca.len,s.manufact.value,s.disckey.value);
close(id);
}

首先,在制造商和光盘 key 值中,会出现罕见的符号,但这不会那么重要,如果不是的话,因为每次我运行程序时都会出现一个新值,尽管总是将 DVD 保留在 DVD 播放器中。甚至 bca.len 在每次执行中都会有所不同,尽管它总是给出高于 32000 且低于 33000 的数字。

最后给出了是否有插入的 DVD 的结果,所以我想知道它到底从哪里得到这些结果,即使它正在读取 DVD。

DVD 正在被操作系统识别,因为 cat/dev/dvd 以良好的方式显示其内容。

有人可以解释为什么它会以这种方式工作吗?我是否可以使其正常工作(我的意思是,至少对于制造商和光盘 key 值获得相同的结果,并确保从插入的 DVD 中获取信息?

感谢您的关注。

最佳答案

检查ioctl的返回值。如果失败,s 将不会填充信息。

if (ioctl(id, DVD_READ_STRUCT, &s) < 0) 
{
perror("DVD_READ_STRUCT");
return -1;
}

Man

RETURN VALUE   

Usually, on success zero is returned. A few ioctl() requests use the
return value as an output parameter and return a nonnegative value on
success. On error, -1 is returned, and errno is set appropriately.
ERRORS

EBADF fd is not a valid descriptor.

EFAULT argp references an inaccessible memory area.

EINVAL request or argp is not valid.

ENOTTY fd is not associated with a character special device.

ENOTTY The specified request does not apply to the kind of object
that the descriptor fd references.

顺便说一句,总是检查非 void 函数的返回值。

关于c - ioctl 究竟是如何工作的以及如何使其在 DVD 读取时正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com