使用proc檔案系統

2021-06-21 14:38:39 字數 4691 閱讀 7826

以下是核心提供的幾個重要的proc檔案系統介面:

(1)read_proc

int (*read_proc)(char *page, char **start, off_t offset, int count, int *eof, void *data); 

read_proc是proc檔案輸出資訊介面,page是將要寫入資料的緩衝區指標,start是資料將要寫入的頁面位置,offset是頁面中的偏移量;count是寫入的位元組數,eof是乙個整形數,當沒有更多資料時,必須配置這個引數,data是驅動程式特定的資料指標,可用於內部使用。函式的返回值表示實際放入頁面緩衝區的資料位元組數。

(2)create_proc_entry

struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,struct proc_dir_entry *parent); 

create_proc_entry用來建立proc目錄。其中name為檔名稱;mode為檔案許可權;parent為檔案的父目錄的指標,它為null時代表父目錄為/proc。

(3)remove_proc_entry

void remove_proc_entry(const char *name, struct proc_dir_entry *parent); 

remove_proc_entry用於刪除上面函式建立的proc條目,引數name給出要刪除的proc條目的名稱,引數parent指定建立的proc條目所在的目錄。

(4)proc_mkdir

struct proc_dir_entry *proc_mkdir(const char * name, struct proc_dir_entry *parent); 

該函式用於建立乙個proc目錄,引數name用於指定要建立的proc目錄的名稱,引數parent為該proc目錄所在的目錄。

在驅動程式中使用proc檔案系統,就要了解proc_dir_entry結構:

struct proc_dir_entry ;  

例1.9  proc檔案系統驅動程式例項

下面的例子演示了如何訪問 proc 檔案系統。**見光碟\src\1drivermodel\1-9proc。核心**如下所示:

//結點操作  

static struct inode_operations 

******_inode_operations

= ;  

int init_******_module( void )  

else   

else  

}  return ret;  

}  以下是讀寫操作的框架:

int ******_read( char *page, char **start, off_t off,int count, int *eof, void *data )  

size+=sprintf(page+size,  

"%5d%7d%7d%7d%7c%7d%7d  %s\n",  

(int)p-

>

pid,  

(int)p-

>

uid,  

(int)p-

>

rt_priority,  

(int)p-

>

policy,  

state,  

(int)p-

>

utime,  

(int)p-

>

stime,  

p->

comm);  

}  return (size);  

}  ssize_t ******_write( struct file *filp, const char __user *buff,unsigned long len, void *data )  

******_buffer[len] = 0;  

printk(kern_info "******_write: %s\n",******_buffer);  

return len;  

}

proc檔案的操作許可權控制**:

static int ******_permission(struct inode *inode, int op, struct nameidata *foo)  

return 0;  

}

執行結果如下:

[root@urbetter /home]# insmod demo.ko   

demo: module loaded.  

[root@urbetter /home]# cat /proc/demo  

******_permission op 36  

pid    uid   prio policy  state  utime  stime  command  

1      0      0      0      s      1    398  init  

2      0      0      0      s      0      0  kthreadd  

3      0      0      0      s      0      0  ksoftirqd/0  

4      0     99      1      s      0      0  watchdog/0  

5      0      0      0      s      0      0  events/0  

6      0      0      0      s      0     41  khelper  

145      0      0      0      s      0      0  kblockd/0  

156      0      0      0      s      0      0  khubd  

159      0      0      0      s      0      0  kseriod  

163      0      0      0      s      0      4  kmmcd  

187      0      0      0      s      0      0  pdflush  

188      0      0      0      s      0      0  pdflush  

189      0      0      0      s      0      0  kswapd0  

236      0      0      0      s      0      0  aio/0  

244      0      0      0      s      0     18  nfsiod  

924      0      0      0      s      0      0  mtdblockd  

957      0      0      0      s      0      0  kpsmoused  

1011      0      0      0      s      0     78  rpciod/0  

1042      0      0      0      s      0      0  syslogd  

1045      0      0      0      s      1      7  inetd  

1079      0      0      0      s    707    468  qpe  

1088      0      0      0      s      2     13  sh  

1089      0      0      0      s      0      1  init  

1090      0      0      0      s      0      0  init  

1091      0      0      0      s      0      2  init  

1109      0      0      0      s     41     20  qss  

1110      0      0      0      s    141     42  quicklauncher  

1118      0      0      0      r      0      2  cat  

[root@urbetter /home]# echo "fgj"

>

/proc/demo  

******_permission op 34  

******_write: fgj  

如果將itype配置為34,則遮蔽對/proc/demo的寫操作。

[root@urbetter /home]# insmod demo.ko 

itype=34

[root@urbetter /home]# echo "fgj"

>

/proc/demo  

******_permission op 34  

-/bin/sh: can't create /proc/demo: permission denied  

Proc檔案系統

include static struct proc dir entry proc null int read proc char page,char start,off t off,int count,int eof,void data len sprintf page len,debug mod...

proc檔案系統

linux 將一切事物都看成檔案,硬體裝置在檔案系統中也有相應的條目。我們使用底層系統呼叫這樣一種特殊方式通過 dev目錄中的檔案來訪問硬體。控制硬體的軟體驅動程式通常可以以某種特定方式配置,或者能夠報告相關資訊。用於與裝置驅動程式進行通訊的工具在過去就已經十分常見,近來年,傾向於提供更一致的方式來...

proc檔案系統

proc檔案系統是由核心實現的檔案系統。當使用者態訪問 proc下檔案時,實際上是呼叫核心中和該檔案對應的特定函式。一般用proc檔案來實現核心 驅動的呼叫。大部分proc檔案是唯讀的,用於獲取核心資訊 還有一些proc檔案是可寫的,當使用者態改變了proc檔案的內容時,會呼叫核心的函式,從而改變核...