Need Suggestions

Himanshu Jha himanshujha199640 at gmail.com
Thu Aug 2 00:36:12 EDT 2018


On Wed, Aug 01, 2018 at 05:29:53PM -0400, Ruben Safir wrote:
> > 
> > And the K&R book on C does successive trimming of an strcpy(),
> > and finishes with
> > 
> > void strcpy(char *a, *b) { while (*a++ = *b++); }
> > 
> > The thing that's actually used a lot in the Linux kernel that gives
> > a lot of C newcomers heartburn is the widespread use of
> > structures of function pointers.. For example, this from include/linux/fs.h:
> > 
> > struct lock_manager_operations {
> > 	int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
> > 	unsigned long (*lm_owner_key)(struct file_lock *);
> > 	fl_owner_t (*lm_get_owner)(fl_owner_t);
> > 	void (*lm_put_owner)(fl_owner_t);
> > 	void (*lm_notify)(struct file_lock *);	/* unblock callback */
> > 	int (*lm_grant)(struct file_lock *, int);
> > 	bool (*lm_break)(struct file_lock *);
> > 	int (*lm_change)(struct file_lock *, int, struct list_head *);
> > 	void (*lm_setup)(struct file_lock *, void **);
> > };
> > 
> > That's the structure definition.  Novice challenge: Find one or more places
> > where this structure is initialized, and understand how and why that works.
> 
> 
> That kind of stuff is not taught in C programming.  An answer can be
> very educating.

https://en.cppreference.com/w/c/language/pointer#Pointers_to_functions

If you wish to see its use: refer iio drivers and grep for 
read_raw and write_raw.

Hope this helps.
-- 
Himanshu Jha
Undergraduate Student
Department of Electronics & Communication
Guru Tegh Bahadur Institute of Technology



More information about the Kernelnewbies mailing list