mirror of
https://github.com/sysprog21/lkmpg.git
synced 2025-01-22 21:45:01 +08:00
Annotate NULL
This commit is contained in:
parent
cb6267e3b6
commit
b002e43bb8
16
lkmpg.tex
16
lkmpg.tex
|
@ -389,7 +389,7 @@ module_param(myint, int, 0);
|
|||
|
||||
Arrays are supported too, but things are a bit different now than they were in the olden days.
|
||||
To keep track of the number of parameters you need to pass a pointer to a count variable as third parameter.
|
||||
At your option, you could also ignore the count and pass NULL instead. We show both possibilities here:
|
||||
At your option, you could also ignore the count and pass \cpp|NULL| instead. We show both possibilities here:
|
||||
|
||||
\begin{code}
|
||||
int myintarray[2];
|
||||
|
@ -799,7 +799,7 @@ struct file_operations {
|
|||
|
||||
Some operations are not implemented by a driver.
|
||||
For example, a driver that handles a video card will not need to read from a directory structure.
|
||||
The corresponding entries in the \cpp|file_operations| structure should be set to NULL.
|
||||
The corresponding entries in the \cpp|file_operations| structure should be set to \cpp|NULL|.
|
||||
|
||||
There is a gcc extension that makes assigning to this structure more convenient.
|
||||
You will see it in modern drivers, and may catch you by surprise.
|
||||
|
@ -827,9 +827,9 @@ struct file_operations fops = {
|
|||
};
|
||||
\end{code}
|
||||
|
||||
The meaning is clear, and you should be aware that any member of the structure which you do not explicitly assign will be initialized to NULL by gcc.
|
||||
The meaning is clear, and you should be aware that any member of the structure which you do not explicitly assign will be initialized to \cpp|NULL| by gcc.
|
||||
|
||||
An instance of \cpp|struct file_operations| containing pointers to functions that are used to implement read, write, open, \ldots{} syscalls is commonly named fops.
|
||||
An instance of \cpp|struct file_operations| containing pointers to functions that are used to implement \cpp|read|, \cpp|write|, \cpp|open|, \ldots{} system calls is commonly named \cpp|fops|.
|
||||
|
||||
Sin Linux v5.6, the \cpp|proc_ops| structure was introduced to replace the use of the \cpp|file_operations| structure when registering proc handlers.
|
||||
|
||||
|
@ -1032,16 +1032,16 @@ It is based on sequence, which is composed of 3 functions: \cpp|start()|, \cpp|n
|
|||
The \cpp|seq_file| API starts a sequence when a user read the /proc file.
|
||||
|
||||
A sequence begins with the call of the function \cpp|start()|.
|
||||
If the return is a non NULL value, the function \cpp|next()| is called.
|
||||
If the return is a non \cpp|NULL| value, the function \cpp|next()| is called.
|
||||
This function is an iterator, the goal is to go through all the data.
|
||||
Each time \cpp|next()| is called, the function \cpp|show()| is also called.
|
||||
It writes data values in the buffer read by the user.
|
||||
The function \cpp|next()| is called until it returns NULL.
|
||||
The sequence ends when \cpp|next()| returns NULL, then the function \cpp|stop()| is called.
|
||||
The function \cpp|next()| is called until it returns \cpp|NULL|.
|
||||
The sequence ends when \cpp|next()| returns \cpp|NULL|, then the function \cpp|stop()| is called.
|
||||
|
||||
BE CAREFUL: when a sequence is finished, another one starts.
|
||||
That means that at the end of function \cpp|stop()|, the function \cpp|start()| is called again.
|
||||
This loop finishes when the function \cpp|start()| returns NULL.
|
||||
This loop finishes when the function \cpp|start()| returns \cpp|NULL|.
|
||||
You can see a scheme of this in the Figure~\ref{img:seqfile}.
|
||||
|
||||
\begin{figure}
|
||||
|
|
Loading…
Reference in New Issue
Block a user