linux下创建proc文件系统,[转载]Linux下的proc文件系统(转载)
3、调用proc_register把ent加入proc文件系统(即proc文件树)中。
4、返回ent;
proc_register函数
这个函数把一个proc文件加入到proc文件树中,其函数原型如下:
static int proc_register(struct proc_dir_entry *parent,struct
proc_dir_entry *ent)
其主要流程如下:
1、使用make_inode_number()函数动态的到一个节点号,并且设置low_ino.注意只是获得inod编号,并不是真的创建inode.该inode的创建会推迟到proc_lookup中。
2、将这个proc_dir_entry结构链接到它的父节点上。
3、根据文件类型(普通文件,目录,symbolic)的不同,设置不同的缺省操作函数集。
删除proc文件remove_proc_entry
这个函数用来删除一个proc文件,注意如果该文件正被使用那么只是设置deleted标志,该函数的原型:
void remove_proc_entry(const char *name,struct proc_dir_entry
*parent);
其中name是待删除的proc文件。parent是该文件的父目录.
其执行流程如下:
1、确定其父目录.乳沟parent有效,则执行2.否则(parent ==
NULL)尝试从name分析出parent,如果分析失败则函数返回失败,否则执行2.
2、在parent中找出待删的文件对应的proc_dir_entry实例ent.
3、把ent从proc文件树中删除,并更新树的状态。
4、如果该文件被使用则设置deleted标识(在其后的恰当时候会被释放),否则调用free_proc_entry
其他proc文件操作函数
struct proc_dir_entry *proc_mkdir(const char *name,struct
proc_dir_entry *parent);
这个函数用来在proc文件系统中创建一个设别文件,因此,在创建proc_dir_entry结构后,没有设置缺省操作,而是使用ent->rdev
= rdev指定了设备。最后,调用proc_registera函数将其注册。
struct proc_dir_entry *proc_symlink(const char *name,struct
proc_dir_entry *parent,const char
*dest)函数,该函数创建了一链接文件,使用ent->mode =
S_IFLNK|S_IRUGO|S_IXUGO来标志,它和其他文件的建立很相似,只是,它将链接的目标文件名放在了ent->data域中。最后,它同样调用proc_register函数将该结构注册。
struct proc_dir_entry *create_proc_read_entry(const char
*name,mode_t mode,struct proc_dir_entry *base,read_proc_t
*read_proc,void *data)
创建只读的proc文件,并且设置其对应的proc_dir_entry中的read_proc成员。
void create_seq_entry(char *name,mode_t mode ,struct
file_operations *f)
在/proc目录下创建一个文件,其文件操作函数由f指定
内核还定义了很多其他的创建proc文件的方式,可以参考源代码
假设现在有一个线程组,其TGID为32182,其包含了两个线程:32182,32255.那么:执行ls
/proc,则能看到有一个32182的目录;执行ls /proc/32182则能看到该线程组的信息;执行ls
/proc/32182/task则能看到两个32182,32255
;执行ls /proc/32182/task/32182则能看到该task实例的信息;但如果我们执行ls
/proc/32255也能得到和执行ls /proc/32182同样的效果
假设有一个线程组,其TGID为32243,其包含一个线程:32243.那么其效果类似上面的情况。
注意:针对/proc/TGID目录下的各个文件,内核定义了一个全局属祖tgid_base_stuff用来约定各个文件的基本信息,这个数据的元素的类型是pid_entry。同样,内核也为/proc/TGID/task/PID目录下的文件定义了全局数组tid_base_stuff.cd
ptg
/proc/tgid目录的创建时机
(/proc/下的进程目录)
当执行ls /proc是并不会创建线程组的相应目录,而只是告诉你这个时刻的线程组的存在。只有当执行ls
/proc/tgid时,才会创建线程组相应的inode。即相应的inode实例是动态创建的
事实上,当执行ls
/proc时会调用proc_root_readdir(通过proc_root_operations)列出/proc目录下的所有文件。针对/proc下的线程组,该函数会查询内核的tgid链表。得到所有的tgid。然后转化成字符串....
而当执行ls
/proc/TGID时最终会调用proc_root_lookup(通过proc_root_inode_operations),这个函数会为该目录创建inode(其实是proc_inode实例),然后设置相应的inode_op,file_op,dentry_op等等信息。然后再调用proc_tgid_base_readdir(通过proc_tgid_base_operations变量)。而该函数又调用proc_pident_readdir来获得/proc/TGID目录下的所有文件的名字。
即相应inode创建时机是:
proc_root_lookup----proc_pid_lookup---proc_pid_make_inode
注意:
proc_fs对进程目录与非进程目录的处理有很大区别。
ini
linux下创建proc文件系统,[转载]Linux下的proc文件系统(转载)相关推荐
- linux oracle 创建表空间2016,Linux下Oracle表空间及用户创建
记录详细过程以备使用 Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 Connected as sys@i ...
- linux在当前目录下创建pic目录,在Linux上创建.SO文件而不使用PIC(与位置无关的代码)(x86 32位)...
据我所知,x86汇编代码在很大程度上受寄存器数量的限制. 当我了解到在Linux上要创建一个.so文件时,必须为gcc指定-fPIC命令行参数才能创建与位置无关的代码,我不敢首先相信它. 据我所知,e ...
- 使用mkiso向服务器传文件,Linux mkisofs 创建光盘镜像文件(Linux指令学习笔记)
mkisofs命令 创建光盘文件的系统的命令是mkisofs.光盘系统有多种格式,利用Linux系统提供的光盘文件系统创建 命令mkisofs,可以创建多种iso9660文件系统. 我们一般不用mki ...
- Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册
这是我从头开始学习Linux的学习笔记,后续还会更新. 记录自己的技术成长,也希望和大家分享交流,欢迎关注~ 本笔记为coursera网站课程<Linux for Developers>的 ...
- Linux中创建组的命令,linux创建用户组命令
Linux 系统是下可以通过命令创建用户,当然也可以创建用户组,下面由学习啦小编为大家整理了linux创建用户组命令的相关知识,希望对大家有帮助! linux下创建用户组命令--groupadd命令 ...
- linux如何创建快捷,如何在Linux的桌面上创建快捷方式或启动器
如果在Linux桌面系统中你经常使用一个程序,你可能想去创建一个"桌面快捷方式",以便于你在桌面只要点击一下快捷方式就可以启动它.虽然不少带有图形界面的程序会在安装时自动在桌面上创 ...
- 如何在linux终端创建txt文件,在Linux中,如何使用 命令行 快速创建一个文本文件...
如果需要创建文本文件,有一些易于使用的方法. 创建文本文件的第一个方法使用"cat"命令,在提示符下键入以下命令并按Enter,cat > sample.txt 按Enter ...
- windows使用.NET CORE下创建MVC,发布到linux运行
1.在有dotnet core 的环境下,打开控制台.创建文件夹demo1 2.创建MVC程序 3.创建完成 4.使用记事本修改一下HomeController 修改端口 5.发布 6.压缩发布的文件 ...
- Windows下创建PXE网络安装Linux[Redhat AS5.5]IBM X3650
IBM x3650 M3服务器未配置DVD光驱,但提供了PXE网络方式安装,我们便通过一台普通PC机搭建PXE网络,安装Linux操作系统.由于M3系列的硬盘采用了最新的SATA方式传输,RedHat ...
- linux为什么创建不了分区,linux下扩容磁盘扩展分区解决因无法创建新分区不能扩容lvm问题...
有一个/dev/sdc的盘,上面划分了3个主分区/dev/sdc1-3,一个扩展分区/dev/sdc4,在扩展分区上划分了一/dev/sdc5.问题来了,想扩容这个/dev/sdc硬盘,怎么新建分区或 ...
最新文章
- 测试打桩_DNF:CEO实测旭旭宝宝红眼,打桩高达2494E,伤害超越狂人剑魂
- Vmware安装提示在关闭以下进程 之前,无法进行安装的解决办法
- Windows Phone 7 学习网址总结
- 转:c# Linq 的分页[转]
- 红帽产品及技术总裁:未来IT趋势预测
- exit、break、continue的区别
- java json clone_再谈java clone 以及 浅/深拷贝
- ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
- linux ubuntu 五笔输入法,ubuntu16.04 安装五笔输入法
- 状态分布函数 详细介绍
- sci国外期刊投稿过程(已完结)
- Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
- 服务器被黑 追寻ip_网站服务器被攻击了如何查找木马(webshell)IP 篡改的痕迹...
- windows 没有应用商店,直接安装所需应用的解决方案
- 一.wireshark界面学习
- SEO高工资,你需要掌握什么能力?
- IOMMU/SMMUV3代码分析(1)SMMU设备的分配
- c语言程序设计实验与案例数组,新书推荐 | C语言程序设计+实验与题解
- 【安全研究】Linux后渗透常见后门驻留方式分析
- “双一流”高校停止专升本招生??