【发布时间】:2014-08-25 09:31:26
【问题描述】:
我正在设计一个 Linux 字符设备驱动程序。我想在 ioctl() 系统调用中发生错误时设置 errno。
long my_own_ioctl(struct file *file, unsigned int req, unsigned long arg)
{
long ret = 0;
BOOL isErr = FALSE;
// some operation
// ...
if (isErr) {
// set errno
// ... <--- What should I do?
ret = -1;
}
return ret;
}
我应该怎么做才能做到这一点?提前谢谢你!
请允许我更详细地解释我的申请。
我的设备位于 /dev/myCharDev。我的用户空间应用是这样的:
#define _COMMAND (1)
#define _ERROR_COMMAND_PARAMETER (-1)
int main()
{
int fd = open("/dev/myCharDec", O_RDONLY);
int errnoCopy;
if (fd) {
if (ioctl(fd, _COMMAND, _ERROR_COMMAND_PARAMETER) < 0) { // should cause error in ioctl()
errnoCopy = errno;
printf("Oops, error occurred: %s\n", strerr(errnoCopy)); // I want this "errno" printed correctly
}
close(fd);
}
return 0;
}
正如我在上面的 cmets 中提到的,我应该如何在自己的设备驱动程序代码中设置“errno”并使其被用户空间应用程序读取?
【问题讨论】:
标签: linux driver device-driver ioctl errno