Embedded Freaks..

June 15, 2010

How to be a read_proc function

Filed under: linux-device-driver — kunilkuda @ 3:44 pm

From comments on fs/proc/generic.c:73

/*
 * How to be a proc read function
 * ------------------------------
 * Prototype:
 *    int f(char *buffer, char **start, off_t offset, int count, int *peof, void *dat)
 *
 * Assume that the buffer is "count" bytes in size.
 *
 * If you know you have supplied all the data you have, set *peof.
 *
 * You have three ways to return data:
 * 0) Leave *start = NULL.  (This is the default.)
 *    Put the data of the requested offset at that offset within the buffer.  Return the number (n)
 *    of bytes there are from the beginning of the buffer up to the last byte of data.  If the
 *    number of supplied bytes (= n - offset) is greater than zero and you didn't signal eof
 *    and the reader is prepared to take more data you will be called again with the requested
 *    offset advanced by the number of bytes absorbed.  This interface is useful for files
 *    no larger than the buffer.
 *
 * 1) Set *start = an unsigned long value less than  the buffer address but greater than zero.
 *    Put the data of the requested offset at the beginning of the buffer.  Return the number of
 *    bytes of data placed there.  If this number is greater than zero and you didn't signal eof
 *    and the reader is prepared to take more data you will be called again with the requested
 *    offset advanced by *start.  This interface is useful when you have a large file consisting
 *    of a series of blocks which you want to count and return as wholes.
 *    (Hack by Paul.Russell@rustcorp.com.au)
 *
 * 2) Set *start = an address within the buffer.
 *    Put the data of the requested offset at *start. Return the number of bytes of data placed there.
 *    If this number is greater than zero and you didn't signal eof and the reader is prepared to
 *    take more data you will be called again with the requested offset advanced by the number of bytes
 *    absorbed.
 */
Advertisements

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: