file_operations 資料結構是 Linux character device 的核心,程式呼叫到 kernel moduel 的動作時,實際上都是引用透過這個資料結構所定義的內容。像我們在介紹 /proc 檔案系統中所介紹的 "hello_proc” 程式,裡頭的 file_operations 資料結構是這樣的:
static const struct file_operations hello_proc_fops = {
.owner = THIS_MODULE,
.open = hello_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
在這裡 hello_proc_fops 定義了 5 個動作: owner, open, read, llseek, release。owner 指向擁有該結構的 module 業就是這裡的 hello_proc。open 定義當開啟 module 時要進行的動作,也就是執行 hello_proc_open 函數,在這裡他最終會印出 Hello proc! 而 read 跟 llseek 都是作為讀取 module 時的動作,release 則是在 unload module 要做的動作。