Table of Contents
Instead of reading (or writing) information directly from
kernel memory, procfs works with call back
functions for files: functions that are called when
a specific file is being read or written. Such functions have
to be initialised after the procfs file is created by setting
the read_proc
and/or
write_proc
fields in the
struct proc_dir_entry* that the
function create_proc_entry
returned:
struct proc_dir_entry* entry; entry->read_proc = read_proc_foo; entry->write_proc = write_proc_foo;
If you only want to use a the
read_proc
, the function
create_proc_read_entry
described in the section called “Convenience functions” may be used to create and initialise the
procfs entry in one single call.
The read function is a call back function that allows userland processes to read data from the kernel. The read function should have the following format:
int read_func(
char* page, char** start, off_t off, int count, int* eof, void* data)
;
The read function should write its information into the
page
. For proper use, the function
should start writing at an offset of
off
in page
and
write at most count
bytes, but because
most read functions are quite simple and only return a small
amount of information, these two parameters are usually
ignored (it breaks pagers like more
and
less
, but cat
still
works).
If the off
and
count
parameters are properly used,
eof
should be used to signal that the
end of the file has been reached by writing
1
to the memory location
eof
points to.
The parameter start
doesn't seem to be
used anywhere in the kernel. The data
parameter can be used to create a single call back function for
several files, see the section called “A single call back for many files”.
The read_func
function must return the
number of bytes written into the page
.
Chapter 5, Example shows how to use a read call back function.