yaa,thank you, I agree with you but,here we are specifying the value for quantum to be set with. I thing here instead of _IO we have to use _IOW() and we have to specify the lat parameter as int? Am i right? Wht is wrong with me? thanks in advance raja On Sat, 2005-10-01 at 00:29 -0300, Ribamar Santarosa de Sousa wrote: > On 9/30/05, raja <vnagaraju@xxxxxxxxxxxx> wrote: > > Hi, > > I am writing a character device driver similar to that in the book LDD3 > > by rubini.While undersatnding the code I have got some doubt regarding > > the ioctl implemtntation. > > In scull.h file it is defined SCULL_IOCTQUANTUM as > > #define SCULL_IOCTQUANTUM _IO(SCULL_IOC_MAGIC, 3) > > here while defining there is no arguments for this call. > > But while implementing that in the ioctl call > > > > case SCULL_IOCTQUANTUM: /* Tell: arg is the value */ > > if (! capable (CAP_SYS_ADMIN)) > > return -EPERM; > > scull_quantum = arg; > > break; > > > > but here arg is assigned to scull_quantum.is it the correct?I > > Why not? : - ) Using the logic, do you think it need or doesn't need > the arg? Of course it need, or it'd have no functionality! > > See: for the line > #define SCULL_IOCTQUANTUM _IO(SCULL_IOC_MAGIC, 3) > the macro (do you understand well what is a macro?) _IO (defined in > <asm/ioctl.h> ) will operate the parameters SCULL_IOC_MAGIC and 3 to > create -- in compilation time, not in run time -- a unique ioctl > number N. This number N is, so, associated to SCULL_IOCTQUANTUM, as > it was 'SCULL_IOCTQUANTUM = N'. Maybe I didn't understand you, but, > SCULL_IOCTQUANTUM is not a call (neither a macro); it's only a single > value that is assinged to a functionality in the ioctl system call for > the scull module. > > So, when a user-space application ioctls the device: > > #include <scull.h> > ioctl (dev, SCULL_IOCTQUANTUM, some_number); > > it's done: > scull_quantum = some_number > > > > > And wht is the use of capable (CAP_SYS_ADMIN)? > > It's a better way to manipulate permissions by the linux. Imagine a > case where users must have read/write access to device, but they > mustn't change control parameters of a device. Read the section > "Capabilities and Restricted Operations", page 144 ldd 3rd edition. > > Regards, > Riba > > -- > Kernelnewbies: Help each other learn about the Linux kernel. > Archive: http://mail.nl.linux.org/kernelnewbies/ > FAQ: http://kernelnewbies.org/faq/ > -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/