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];
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.
};
\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.
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}