欢迎来到天天文库
浏览记录
ID:51437809
大小:39.50 KB
页数:5页
时间:2020-03-24
《Linux下proc文件系统编程.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、/proc文件系统编程在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。./proc文件系统在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。/proc文件系统最初是设计使得容易得到进程的信息(从名字可以看出),现在却被任意一块有内容需要报告的内核使用,比如拥有模块列表的/proc/modules和拥有内存使用统计信息的/proc/meminfo。使用proc文件系统的方法很象使用设备驱动——你创建一个数据结构,使之包含/proc文件需要的全部信息,包括所有函数的句柄(在我
2、们的例子里只有一个,在试图读取/proc文件时调用)。然后,用init_module注册这个结构,用cleanup_module注销。我们使用proc_register_dynamic(注3.1)的原因是我们不希望决定以后在文件中使用的索引节点数,而是让内核来决定它,为了防止冲突。标准的文件系统是在磁盘上而不是在内存(/proc的位置在内存),在这种情况下节点数是一个指向文件的索引节点所在磁盘地址的指针。这个索引节点包含了文件的有关信息比如文件的访问权限以及指向磁盘地址的指真或者文件数据的位置。因为在文件打开或关闭时我们没有调用,所以在模块里无
3、处可放宏MOD_INC_USE_COUNT和MOD_DEC_USE_COUNT,而且如果文件被打开了或者模块被删除了,就没有办法来避免这个结果。下一章我们将会看到一个更困难的处理/proc的方法,但是也更加灵活,也能够解决这个问题。exprocfs.c/*procfs.c-createa"file"in/proc*Copyright(C)1998-1999byOriPomerantz*//*Thenecessaryheaderfiles*//*Standardinkernelmodules*/#include/*
4、We'redoingkernelwork*/#include/*Specifically,amodule*//*DealwithCONFIG_MODVERSIONS*/#ifCONFIG_MODVERSIONS==1#defineMODVERSIONS#include#endif/*Necessarybecauseweusetheprocfs*/#include/*In2.2.3/usr/include/linux/version.hin
5、cludesa*macroforthis,but2.0.35doesn't-soIaddit*hereifnecessary.*/#ifndefKERNEL_VERSION#defineKERNEL_VERSION(a,b,c)((a)*65536+(b)*256+(c))#endif/*Putdataintotheprocfsfile.Arguments=========1.Thebufferwherethedataistobeinserted,ifyoudecidetouseit.2.Apointertoapointertocharacte
6、rs.Thisisusefulifyoudon'twanttousethebufferallocatedbythekernel.3.Thecurrentpositioninthefile.4.Thesizeofthebufferinthefirstargument.5.Zero(forfutureuse?).UsageandReturnValue======================Ifyouuseyourownbuffer,likeIdo,putitslocationinthesecondargumentandreturnthenumb
7、erofbytesusedinthebuffer.Areturnvalueofzeromeansyouhavenofurtherinformationatthistime(endoffile).Anegativereturnvalueisanerrorcondition.ForMoreInformation====================ThewayIdiscoveredwhattodowiththisfunctionwasn'tbyreadingdocumentation,butbyreadingthecodewhichusedit.
8、Ijustlookedtoseewhatusestheget_infofieldofproc_dir_entrystruct(Iusedacombin
此文档下载收益归作者所有