Энциклопедия разработчика модулей ядра Linux | страница 35
>* we place pointers to all the functions called when
>* somebody tries to do something to our file. NULL
>* means we don't want to deal with something. */
>static struct file_operations File_Ops_4_Our_Proc_File = {
> NULL, /* lseek */
> module_output, /* "read" from the file */
> module_input, /* "write" to the file */
> NULL, /* readdir */
> NULL, /* select */
> NULL, /* ioctl */
> NULL, /* mmap */
> module_open,/* called when the /proc file is opened */
>#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
> NULL, /* flush */
>#endif
> module_close /* called when it's classed */
>};
>/* Inode operations for our proc file. We need it so
>* we'll have somewhere to specify the file operations
>* structure we want to use, and the function we use for
>* permissions. It's also possible to specify functions
>* to be called for anything else which could be done to an
>* inode (although we don't bother, we just put NULL). */
>static struct inode_operations Inode_Ops_4_Our_Proc_File = {
> &File_Ops_4_Our_Proc_File,
> NULL, /* create */
> NULL, /* lookup */
> NULL, /* link */
> NULL, /* unlink */
> NULL, /* symlink */
> NULL, /* mkdir */
> NULL, /* rmdir */
> NULL, /* mknod */
> NULL, /* rename */
> NULL, /* readlink */
> NULL, /* follow_link */
> NULL, /* readpage */
> NULL, /* writepage */
> NULL, /* bmap */
> NULL, /* truncate */
> module_permission /* check for permissions */
>};
>/* Directory entry */
>static struct proc_dir_entry Our_Proc_File = {
> 0, /* Inode number - ignore, it will be filled by proc_register[_dynamic] */
> 5, /* Length of the file name */
> "sleep", /* The file name */
> S_IFREG | S_IRUGO | S_IWUSR,
> /* File mode - this is a regular file which
> * can be read by its owner, its group, and everybody
> * else. Also, its owner can write to it.
> *
> * Actually, this field is just for reference, it's
> * module_permission that does the actual check. It
> * could use this field, but in our implementation it
> * doesn't, for simplicity. */
> 1, /* Number of links (directories where the file is referenced) */
> 0, 0, /* The uid and gid for the file - we give it to root */
> 80, /* The size of the file reported by ls. */
> &Inode_Ops_4_Our_Proc_File,
> /* A pointer to the inode structure for
> * the file, if we need it. In our case we
> * do, because we need a write function. */
> NULL
> /* The read function for the file.
> * Irrelevant, because we put it
> * in the inode structure above */
>};
> /* Module initialization and cleanup **************** */
>/* Initialize the module - register the proc file */