日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

/proc 虚拟文件系统(实例)

發布時間:2023/11/30 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 /proc 虚拟文件系统(实例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? Linux下有一個神奇的目錄/proc,經常會運行 cat /proc/cpuinfo 命令查看cpu信息,/proc下的確有cpuinfo文件,但是這個文件不是物理存在的,是軟件虛擬出來的,與普通文件不同,該文件是動態的。通過/proc可以實現用戶態與內核態之間的通信。在內核模式下,可以很方便的創建/proc子目錄,并進行讀寫操作,只不過此時你需要實現文件讀寫接口,因為內核不知道如何處理該文件。

? ?下面創建/proc/test目錄,并新建log文件,進行讀寫操作。

?

一.系統API

extern struct proc_dir_entry proc_mkdir(const char *dir_name,struct proc_dir_entry *parent);

新建/proc子目錄,如parent為NULL,則在/proc根下建立目錄

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

在/proc下新建虛擬文件

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

刪除新建的文件或目錄?

?

二.編碼

C代碼??
  • #ifndef?__KERNEL__??
  • #define?__KERNEL__??
  • #endif??/*?__KERNEL__?*/??
  • ??
  • #include?<linux/module.h>??
  • #include?<linux/kernel.h>??
  • #include?<linux/init.h>??
  • #include?<linux/types.h>??
  • #include?<linux/netdevice.h>??
  • #include?<linux/proc_fs.h>??
  • #include?<linux/inet.h>??
  • #include?<linux/vmalloc.h>??
  • ??
  • #define?MAX_COOKIE_LENGTH?PAGE_SIZE??
  • ??
  • static?struct?proc_dir_entry?*test_proc_dir;??
  • static?struct?proc_dir_entry?*log_proc_dir;??
  • static?char?*cookie_pot;?????//?內核緩沖區,用于寫數據??
  • static?int?tValue?=?12;??????//?顯示值??
  • ??
  • //?讀取日志文件函數??
  • int?ProcLogRead(?char?*buffer,??
  • ????????????????????????char?**start,??
  • ????????????????????????off_t?offset,??
  • ????????????????????????int?length,??
  • ????????????????????????int?*eof,??
  • ????????????????????????void?*data?)??
  • {??
  • ????int?len;??
  • ????if(?offset?>?0?)??
  • ????{??
  • ????????*eof?=?1;??
  • ????????return?0;??
  • ????}??
  • ??
  • ????len?=?sprintf(buffer,?"number:%x\n",tValue);??
  • ????return?len;??
  • }??
  • ??
  • ??
  • //?寫日志文件函數??
  • int?ProcLogWrite(?struct?file?*filp,??
  • ????????????????????????????const?char?__user?*buff,??
  • ????????????????????????????unsigned?long?len,??
  • ????????????????????????????void?*data)??
  • {??
  • ????if(?copy_from_user(?cookie_pot,buff,len?)?)??//?拷貝用戶空間值至內核緩沖區??
  • ????{??
  • ????????return?-EFAULT;??
  • ????}??
  • ??????
  • ????sscanf(cookie_pot,"%d",&tValue);????//?保存至全局變量tValue??
  • ????printk(KERN_ALERT?"%s?len:%lu?vl:%d\n",cookie_pot,len,tValue);??
  • ????return?len;??
  • }??
  • ??
  • ??
  • static?int?__init?testproc_init(void)??
  • {??
  • ????int?ret?=?0;??
  • ??
  • ????printk(KERN_ALERT?"proc?test?init\n");??
  • ??
  • ????cookie_pot?=?(char*)vmalloc(?MAX_COOKIE_LENGTH?);???//?為內核緩沖區分配空間??
  • ????if(!cookie_pot)??
  • ????{??
  • ????????ret?=?-ENOMEM;??
  • ????}??
  • ????else??
  • ????{??
  • ????????memset(cookie_pot,0,MAX_COOKIE_LENGTH);??
  • ??
  • ????????test_proc_dir?=?proc_mkdir("test",init_net.proc_net);???????//?新建/proc/net/test目錄,注:2.6.32以上內核,用init_net.proc_net取代先前的pro_net??
  • ????????log_proc_dir?=?create_proc_entry("log",0644,test_proc_dir);?????//?新建文件?/proc/net/test/log??
  • ??
  • ????????if(test_proc_dir?==?NULL??
  • ????????????||?log_proc_dir?==?NULL)??
  • ????????{??
  • ????????????ret?=?-ENOMEM;??
  • ????????????vfree(cookie_pot);??
  • ????????}??
  • ????????else??
  • ????????{??
  • ????????????//?注冊讀寫函數??
  • ????????????log_proc_dir->read_proc?=?ProcLogRead;??
  • ????????????log_proc_dir->write_proc?=?ProcLogWrite;??
  • ????????}??
  • ????}??
  • ??
  • ????return?0;??
  • }??
  • ??
  • ??
  • static?void?__exit?testproc_exit(void)??
  • {??
  • ????printk(KERN_ALERT?"clean?test?proc\n");??
  • ??
  • ????remove_proc_entry("log",test_proc_dir);?????//?刪除log文件??
  • ????remove_proc_entry("test",init_net.proc_net);????//?刪除test目錄??
  • ??
  • ????vfree(cookie_pot);??
  • }??
  • ??
  • module_init(testproc_init);??
  • module_exit(testproc_exit);??
  • ??
  • MODULE_LICENSE("Dual?BSD/GPL");??
  • MODULE_AUTHOR("kettas");??
  • MODULE_DESCRIPTION("proc?test");??
  • MODULE_VERSION("1.0.0");??
  • MODULE_ALIAS("Proc?01");??
  • ?

    三.編譯運行

    ?

    Shell代碼??
  • [scada@linux?proc_test]$?sudo?insmod?proc_test.ko??
  • [scada@linux?proc_test]$?ll?/proc/net/test/??
  • 總用量?0??
  • -rw-r--r--.?1?root?root?0?1月??11?22:14?log??
  • [scada@linux?proc_test]$?cat?/proc/net/test/log???
  • number:c??
  • ?

    ?

    四.接口操作

    ? ? 上面用cat命令直接查看log文件,既然內核提供了通用的read(),write()文件訪問接口,那試試。

    C代碼??
  • #include?<unistd.h>??
  • #include?<stdio.h>??
  • #include?<sys/types.h>??
  • #include?<sys/stat.h>??
  • #include?<fcntl.h>??
  • #include?<assert.h>??
  • #include?<string.h>??
  • ??
  • int?main(int?argc,char?**argv)??
  • {??
  • ????int?fd?=?open("/proc/net/test/log",O_RDWR,0);??
  • ????assert(fd?!=?-1);??
  • ??
  • ????char?*vl?=?"10";??//?此處為字符串???
  • ??
  • ????//?write??
  • ????int?ret?=?write(fd,vl,strlen(vl));??
  • ????printf("ret:%d\n",ret);??
  • ??
  • ????//?read??
  • ????char?buff[100]?=?{};??
  • ????ret?=?read(fd,buff,100);??
  • ????assert(ret?!=?-1);??
  • ??
  • ????printf("read:%s\n",buff);??
  • ????close(fd);??
  • ??
  • ????return?0;??
  • }??
  • ?

    運行:

    Shell代碼??
  • [scada@linux?proc_test]$?sudo?./write_test??
  • ret:2??
  • read:number:a??
  • ? ?向/proc/net/test/log寫入10后,顯示了16進制結果a,測試OK

    總結

    以上是生活随笔為你收集整理的/proc 虚拟文件系统(实例)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 韩国视频一区 | 91福利社在线观看 | 快射视频在线观看 | 久草小说 | 五月激情综合网 | 欧美a级成人淫片免费看 | 青青草老司机 | 龚玥菲一级淫片 | 久久一级大片 | 极品白嫩丰满美女无套 | 久久一区二 | 51吃瓜网今日吃瓜 | 国产三级网站 | 大香伊人久久 | 久久这里只有精品99 | 三级全黄的视频 | 91波多野结衣 | 日本成人小视频 | 极品少妇视频 | 国产精品黄在线观看 | 在线免费黄色网址 | 亚洲一区二区日韩欧美 | 成人免费毛片日本片视频 | 免费黄色网址在线 | 国产精品久久久精品 | 亚洲综合日韩精品欧美综合区 | 欧美大片18| 粉嫩av渣男av蜜乳av | 国产九色在线播放九色 | 亚洲精久| 一本色道久久综合亚洲精品图片 | 亚洲天堂一区二区 | 欧美精品一二三区 | 成人av色| 尤物网站在线观看 | 国内毛片视频 | 风韵少妇性饥渴推油按摩视频 | 成人羞羞在线观看网站 | 成人深夜福利视频 | 欧美一级片免费在线观看 | 久久精品超碰 | 91精品人妻一区二区三区蜜桃欧美 | 97se亚洲综合 | 天天爽夜夜爽一区二区三区 | 视频一区二区三区精品 | 国产精品久久久久久久久久久久午夜片 | 中文字幕精品久久久 | 真实的国产乱xxxx在线 | 人人爱国产 | 素人av在线| 日女人免费视频 | 尤物av在线| 国产精品久久久久久久久免费桃花 | 亚色视频在线观看 | 狠狠cao日日穞夜夜穞av | 天天天天操| 亚洲成人av网址 | 精品无人区无码乱码毛片国产 | 日本一级三级三级三级 | 一区二区视频在线观看免费 | 亚洲AV无码成人精品区明星换面 | 大陆日韩欧美 | wwwxx日本 | 午夜影院91 | 婷婷国产一区 | 中文在线a√在线8 | 欧美一级淫片免费视频魅影视频 | 特级西西人体wwwww | 一区二区三区四区视频 | 精品深夜av无码一区二区老年 | 欧美自拍偷拍一区二区 | 播放男人添女人下边视频 | 肉色丝袜脚交一区二区 | 久久久噜噜噜www成人 | japan粗暴video蹂躏 | 一区二区三区日 | 在线成人免费观看 | 91免费视频网站 | 国精品一区二区三区 | 国产精品v | 精品日韩一区 | 国产精品久久久久久久久动漫 | 人妻一区二区三区四区 | 一区二区三区日韩在线 | 黑森林av凹凸导航 | 欧美com | 久久精品6| 精品成人无码一区二区三区 | 国产精品成人一区二区三区电影毛片 | 久久黄色一级视频 | 夜夜骚网站 | 一级黄色在线 | 久久黄色片| 日韩中文字幕二区 | 鲁鲁狠狠狠7777一区二区 | 玩偶游戏在线观看免费 | 国产113页 | 一区=区三区乱码 | 风韵丰满熟妇啪啪区老熟熟女 |