• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux內核模塊開發(筆記)(3)

    發表于:2013-10-14來源:IT博客大學習作者:扶凱點擊數: 標簽:linux
    例如 讀 cat /proc/cpuinfo 寫 echo fukei-name /proc/sys/kernel/hostname proc 的功能實現 proc 在 c 中是一個結構體來實現的,是 struct proc_dir_entry 。它可以給讀寫綁定到特

      例如

      讀

    cat /proc/cpuinfo

      寫

    echo fukei-name > /proc/sys/kernel/hostname

      proc 的功能實現

      proc 在 c 中是一個結構體來實現的,是 struct proc_dir_entry 。它可以給讀寫綁定到特定的函數上。然后通過別人對 proc 中文件的操作來觸發和回調相應的綁定的函數。

      read_proc 和 write_proc 是這個結構體的成員,也是一種結構體。函數就注冊在這個上面。有興趣的同學可以看看 include/linux/proc_fs.h 中的 read_proc_t 和 write_proc_t 的定義。

      實現起來也簡單。

    struct proc_dir_entry *proc_entry = create_proc_entery(....);
    int my_read_proc()
    {
    }
    proc_entry->read_proc = my_read_proc();

      在這的 create_proc_entery 會返回一個 proc_dir_entry 的結構體的引用。失敗就是 NULL 。

      這樣,當用戶空間進行 read 的系統調用時,如使用 cat proc 中的內容時。內核會調用注冊到 read_proc 上的這個 my_read_proc 來實現的.

    #include <linux/module.h>
    #include <linux/proc_fs.h>
    #include <linux/sched.h>
    #include <linux/mm.h>
     
    #define MODULE_NAME "Memory"
     
    int my_read_proc(char *page,char **start, off_t off,int count,  int *eof,void *data)
    {
            struct task_struct *tsk = current;
            int len;
            len = sprintf( page, "This module info: task %s pid %d\n",tsk->comm, tsk->pid );
            return  len;
    }
     
    struct proc_dir_entry *proc_entry;
    int init_module(void)
    {
            proc_entry = create_proc_entry(MODULE_NAME, 0644, NULL);
            if (proc_entry==NULL){
                    remove_proc_entry(MODULE_NAME, NULL);
            }
            proc_entry->read_proc = my_read_proc;
            return  0;
    }
     
    void cleanup_module(void)
    {
            remove_proc_entry(MODULE_NAME, NULL); // 退出和出錯記的刪除
    }
     
    MODULE_LICENSE("GPL");

    原文轉自:http://blogread.cn/it/article/4630

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>