Re: Inappropriate ioctl for device

[ Available lists | Index of freebsd-drivers | Month of Dec 2010 | Week of 27 Dec 2010 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
John Baldwin <jhb@FreeBSD.org>
Date
27 Dec 2010 19:29:12
Subject
Re: Inappropriate ioctl for device
Message-ID
4D18E905.1060000@FreeBSD.org

In reply to
References to

[ Hide this part ]
Mohammad Hedayati wrote:
> I'm writing a simple char device. So far everything went so good
> (read/write), but here I'm going to add support for ioctl.
>
> int
> ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags, struct thread *td)
> {
> int error = 0;
> uprintf("Here...\n");
> return(error);
> }
> and I'm calling it here:
>
> len = ioctl(cd, 0);
> perror("ioctl");
>
> but when runnig it says:
>
> ioctl: Inappropriate ioctl for device
>
> where's the problem?

0 is not a valid ioctl code. A valid ioctl code has to have at least
one of IOC_VOID, IOC_IN, or IOC_OUT set. Also, if it has either IOC_IN
or IOC_OUT set, it must have a non-zero size field. You should use one
of the _IO* macros from <sys/iocomm.h> to define a valid ioctl code and
pass that to your driver.

--
John Baldwin

Elapsed time: 0.094 seconds