linux proc文件夹介绍
linux操作系统目录结构详解
linux操作系统目录结构详解linux操作系统目录结构详解为了帮助广大考试新手们更加顺利地复习备考,店铺整理了关于Linux目录结构的备考资料,希望能够对大家有所帮助。
linux 目录结构/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中/bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/boot: 放置linux系统启动时用到的一些文件。
/boot/vmlinuz为linux的内核文件,以及/boot/gurb.建议单独分区,分区大小100M 即可/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt./etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。
注:/etc/X11存放与x windows有关的设置。
/home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。
建议单独分区,并设置较大的磁盘空间,方便用户存放数据/lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules./lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。
如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found/mnt:/media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
Linux中proc目录下文件详解
[root@localhost ~]# cat /proc/loadavg 0.11 0.16 0.14 3/126 3912
-------------------------------------------------------------------------------/proc/locks 文件 这个文件包含在打开的文件上的加锁信息。文件中的每一行描述了特定文件和文档上的加锁信息以及对文 件施加的锁的类型。内核也可以需要时对文件施加强制性锁。 示例: [root@localhost redhat]# cat /proc/locks 1: POSIX ADVISORY READ 3822 03:0a:1067117 0 EOF 2: POSIX ADVISORY READ 3822 03:0a:1067138 0 EOF 3: POSIX ADVISORY WRITE 3326 03:0a:2326540 0 EOF 4: POSIX ADVISORY WRITE 2639 03:0a:2966595 0 EOF 5: FLOCK ADVISORY WRITE 2591 03:0a:2966586 0 EOF 6: POSIX ADVISORY WRITE 2540 03:0a:2966578 0 EOF 7: POSIX ADVISORY WRITE 2530 03:0a:2966579 0 EOF 8: POSIX ADVISORY WRITE 2402 03:0a:2966563 0 EOF 9: POSIX ADVISORY WRITE 2371 03:0a:2966561 0 EOF --------------------------------------------------------------------------------
安卓系统文件夹详细结构及其文件解析
安卓系统文件夹详细结构及其文件解析Android操作系统是一种基于Linux内核的开源操作系统,它的文件系统也是采用的Linux文件系统结构。
下面我将详细介绍安卓系统文件夹的结构及其文件解析。
1. /system- /bin: 该文件夹存放一些包含Android系统所需的可执行文件,如busybox等。
- /etc: 该文件夹存放一些系统配置文件,如/hosts文件、init.d 文件夹等。
- /lib: 该文件夹存放一些系统库文件,如libc.so、libm.so等。
- /usr: 该文件夹存放一些系统资源文件,如fonts文件夹、keylayout文件夹等。
2. /data- /app: 该文件夹存放已安装的应用程序,每个应用程序都会生成一个以包名命名的子文件夹。
- /cache: 该文件夹存放系统缓存文件,如应用程序缓存、系统临时文件等。
- /data: 该文件夹存放应用程序的数据文件,如数据库文件、SharedPreferences文件等。
- /system: 该文件夹存放一些系统级别的数据文件,如系统配置文件、系统数据库文件等。
- /block: 该文件夹存放块设备文件,如硬盘、U盘等。
- /input: 该文件夹存放输入设备文件,如键盘、鼠标等。
- /graphics: 该文件夹存放图形设备文件,如显示器等。
- /net: 该文件夹存放网络设备文件,如网卡等。
4. /proc- 各个进程的文件夹: 在/proc文件夹下,以进程ID命名的文件夹中存放有关该进程的信息,如进程的状态、资源占用情况等。
5. /sys- 各个设备的文件夹: 在/sys文件夹下,存放了系统的各个设备的相关信息,如CPU、内存、磁盘等设备。
6. /mnt- /sdcard: 该文件夹是外部存储的挂载点,通常被映射为手机的SD 卡。
- /usb: 该文件夹是USB存储的挂载点,用于连接USB存储设备。
7. /root- 该文件夹是Android系统的根目录。
proc_create 例子
proc_create 例子乃开源社区被用于Linux 内核的标准的设备驱动模型。
'):def proc_create可创建proc文件,在/proc文件系统下,并允许用户通过读取和写入文件来与驱动进行通信。
进程创建时,通过调用proc_create来创建与其相关的文件。
该文件的创建在文件系统的代码块中执行,并且会触发open()和release()方法。
其格式如下:struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops)下面,我们将详细了解如何使用proc_create函数来创建proc文件。
首先,让我们了解一下proc文件系统。
在Linux内核中,proc文件系统是一个虚拟文件系统,与其他文件系统(如ext4)不同,proc文件系统不存储在磁盘上。
它是在内存中创建的,并且只存在于内核的运行时环境中。
proc 文件系统提供了一种机制,通过读取和写入虚拟文件来与内核进行通信。
这些文件可以被用于访问和调整内核的状态和参数,或者用于获取关于系统和进程的信息。
接下来,让我们看一下如何使用proc_create函数来创建proc文件。
首先,我们需要定义一个file_operations结构体,其中包含了我们要定义的文件的操作。
这个结构体通常包含读取和写入文件的函数指针,以及其他与操作相关的函数指针。
下面是一个简单的示例:cstatic ssize_t myread(struct file *file, char __user *buffer, size_t count, loff_t *ppos){读取文件逻辑的实现}static ssize_t mywrite(struct file *file, const char __user *buffer, size_t count, loff_t *ppos){写入文件逻辑的实现}static const struct file_operations myops = {.owner = THIS_MODULE,.read = myread,.write = mywrite,};在上面的示例中,我们定义了一个名为myops的file_operations结构体,并将myread和mywrite函数分别指定为读取和写入文件的操作。
proc 文件系统
该函数将创建一个目录,父目录为parent。
proc文件系统的编程接口
删除节点(文件或者目录)remove_proc_entry()
void remove_proc_entry ( const char *name, struct proc_dir_entry *parent)
该函数将删除一个proc节点(按文件名删除)。
proc文件系统的编程接口
以上五个创建节点的函数在内核中的实现流程:
通过proc_create为结构申请空间,并进行一些初始化工 作。 proc_register则进一步填写结构中的域。并完成注册工作
删除节点的函数在内核中的实现流程:
则是先调用clear_bit和proc_kill_inodes,注销inode结构 ,如果引用数为0,则调用free_proc_entry释放结构对应 的空间;否则置一个删除标志,不释放空间
proc文件系统的编程接口
创建设备文件proc_mknod()
struct proc_dir_entry *proc_mknod( const char *name, mode_t mode, struct proc_dir_entry *paren建一个名字为name的设 备文件,文件类型和权限为mode,设备号为rdev 。
操作系统 课程设计
proc 文件系统
proc
proc 文件系统是 Linux 中的特殊文件系统,提供 中的特殊文件系统, 给用户一个可以了解内核内部工作过程的可读窗 口,在运行时访问内核内部数据结构、改变内核 在运行时访问内核内部数据结构、 设置的机制。 设置的机制。
保存系统当前工作的特殊数据,但并不存在于任何物 理设备中; 对其进行读写时,才根据系统中的相关信息即时生成 ;或映射到系统中的变量或数据结构; proc 被称为‘伪文件系统’; 其挂接目录点固定为/proc; ‘man proc’ 进行了详细说明。
linux常见文件路径
linux常见文件路径
Linux中的常见文件路径包括以下几种:
1. / :根目录,Linux文件系统的起点。
2. /bin :存放用户二进制文件(可执行文件)的目录。
3. /boot :存放Linux系统引导所需的文件,包括内核文件和引导加载程序。
4. /dev :存放设备文件,包括磁盘、键盘、鼠标等外部设备所对应的文件。
5. /etc :存放系统配置文件,包括系统服务的配置文件和用户账户的配置文件等。
6. /home :存放用户的主目录,每个用户都有一个独立的主目录。
7. /lib :存放系统库文件,包括Linux系统所需的共享库文件。
8. /media :存放可移动媒体设备(如U盘、光盘等)的挂载点。
9. /mnt :存放临时文件系统的挂载点。
10. /opt :存放可选的应用程序软件包的目录。
11. /proc :存放Linux内核的虚拟文件系统,包括系统内核的运行状态信息和进程信息等。
12. /root :超级用户的主目录。
13. /sbin :存放超级用户二进制文件的目录,包括系统管理工具等。
14. /tmp :存放临时文件的目录,保存着Linux系统运行过程中产生的临时文件。
15. /usr :存放用户安装的应用程序、库文件、文档等,是一个较大的目录。
16. /var :存放系统运行过程中产生的变化文件,包括日志文件、临时文件等。
以上是Linux中的常见文件路径,了解这些路径对于日常使用和系统管理都非常有帮助。
Linux文件系统下proc目录详解
Linux中/proc目录下文件详解(2008-7-20 15:54)Linux中/proc目录下文件详解(一)--------------------------------------------------------------------------------/proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。
可以使用的文件随系统配置的变化而变化。
命令procinfo能够显示基于其中某些文件的多种系统信息。
以下详细描述/proc下的文件。
--------------------------------------------------------------------------------/proc/cmdline文件这个文件给出了内核启动的命令行。
它和用于进程的cmdline项非常相似。
示例:[root@localhost proc]# cat cmdlinero root=LABEL=/ rhgb quiet--------------------------------------------------------------------------------/proc/cpuinfo文件这个文件提供了有关系统CPU的多种信息。
这些信息是从内核里对CPU的测试代码中得到的。
文件列出了CPU的普通型号(386,486,586,686等),以及能得到的更多特定信息(制造商,型号和版本)。
文件还包含了以bogomips表示的处理器速度,而且如果检测到CPU的多种特性或者bug,文件还会包含相应的标志。
这个文件的格式为:文件由多行构成,每行包括一个域名称,一个冒号和一个值。
示例:[root@localhost proc]# cat cpuinfoprocessor : 0vendor_id : AuthenticAMDcpu family : 6model : 8model name : AMD Athlon(tm) XP 1800+stepping : 1cpu MHz : 1530.165cache size : 256 KBfdiv_bug : nohlt_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 1wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnowbogomips : 2998.27--------------------------------------------------------------------------------/proc/devices文件这个文件列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。
linux pid 路径
linux pid 路径Linux操作系统中,每个进程都有一个唯一的进程标识符(PID)。
PID是一个数字,用于标识进程在操作系统中的身份。
在Linux系统中,PID路径是指一个进程在文件系统中的路径,可以通过该路径找到对应进程的相关信息。
在Linux系统中,每个进程都有一个对应的进程目录,该目录的路径为/proc/PID。
其中,PID是进程的标识符。
进入该目录后,可以通过查看相应的文件来获取进程的详细信息。
在/proc/PID目录下,有一些重要的文件和目录,如下所示:1. cmdline:该文件保存了进程的启动命令行参数。
通过查看该文件,可以了解进程是如何启动的。
2. environ:该文件保存了进程的环境变量。
通过查看该文件,可以了解进程的运行环境。
3. exe:该文件是进程的可执行文件的链接。
通过查看该文件,可以了解进程的可执行文件路径。
4. fd:该目录保存了进程打开的文件描述符的信息。
通过查看该目录下的文件,可以了解进程打开了哪些文件。
5. status:该文件保存了进程的状态信息,如进程的PID、父进程的PID、进程的运行状态等。
除了以上这些文件外,还有许多其他的文件和目录,保存了进程的其他信息。
通过读取这些文件,可以了解进程的详细信息。
通过PID路径,我们可以对进程进行监控和管理。
比如,我们可以通过读取/proc/PID/status文件获取进程的状态信息,判断进程是否在运行;通过读取/proc/PID/cmdline文件获取进程的启动命令行参数,了解进程是如何启动的;通过读取/proc/PID/fd目录下的文件,了解进程打开了哪些文件。
PID路径在Linux系统中扮演着重要的角色。
通过PID路径,我们可以方便地获取进程的相关信息,进行进程管理和监控。
同时,PID 路径也是Linux系统中进程管理的基础,通过PID路径,操作系统可以对进程进行唯一标识和管理。
PID路径是Linux系统中进程在文件系统中的路径,通过该路径可以找到进程的相关信息。
你不知道的Linux内核中的proc文件系统
你不知道的Linux内核中的proc文件系统简介procfs文件系统是内核中的一个特殊文件系统。
它是一个虚拟文件系统: 它不是实际的存储设备中的文件,而是存在于内存中。
procfs中的文件是用来允许用户空间的程序访问内核中的某些信息(比如进程信息在 /proc/[0-9]+/中),或者用来做调试用途(/proc/ksyms,这个文件列出了已经登记的内核符号,这些符号给出了变量或函数的地址。
每行给出一个符号的地址,符号名称以及登记这个符号的模块。
程序ksyms、insmod和kmod使用这个文件。
它还列出了正在运行的任务数,总任务数和最后分配的PID。
)这个文档描述了内核中procfs文件系统的使用。
它以介绍所有和管理文件系统相关的函数开始。
在函数介绍后,它还展示了怎么和用户空间通信,和一些小技巧。
在文档的最后,还给出了一个完整的例子。
注意/proc/sys中的文件属于sysctl文件,它们不属于procfs文件系统,被另外一套完全不同的api管理。
seq_fileprocfs在处理大文件时有点笨拙。
为了清理procfs文件系统并且使内核编程简单些,引入了seq_file机制。
seq_file机制提供了大量简单的接口去实现大内核虚拟文件。
seq_file机制适用于你利用结构序列去创建一个返回给用户空间的虚拟文件。
要使用seq_file机制,你必须创建一个”iterator”对象,这个对象指向这个序列,并且能逐个指向这个序列中的对象,此外还要能输出这个序列中的任一个对象。
它听起来复杂,实际上,操作过程相当简单。
接下来将用实际的例子展示到底怎么做。
首先,你必须包含头文件。
接下来,你必须创建迭代器方法:start, next, stop, and show。
start方法通常被首先调用。
这个方法的函数原型是:void *start(struct seq_file *sfile, loff_t *pos);sfile没什么作用,通常被忽略。
Linux下各文件夹的结构说明及用途介绍
linux下各文件夹的结构说明及用途介绍:/bin 二进制可执行命令/dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序/tmp 公用的临时文件存储点/root 系统管理员的主目录(呵呵,特权阶级)/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫什么.chk)就在这里/proc 虚拟的目录,是系统内存的映射。
可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
其中包含:/usr/x11r6 存放x window的目录/usr/bin 众多的应用程序/usr/sbin 超级用户的一些管理程序/usr/doc linux文档/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib 常用的动态链接库和软件包的配置文件/usr/man 帮助文档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin 本地增加的命令/usr/local/lib 本地增加的库根文件系统通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。
除了可能的一个叫/ v m l i n u z标准的系统引导映像之外,根目录一般不含任何文件。
所有其他文件在根文件系统的子目录中。
htop原理
htop原理一、引言htop是一款用于监控系统资源使用情况的命令行工具,它提供了实时的CPU、内存、网络和磁盘等信息。
本文将介绍htop的原理及其功能,以及如何使用htop来监控系统资源。
二、htop的原理htop是基于Linux系统的proc文件系统实现的。
proc文件系统是一种虚拟文件系统,它提供了对系统内核和进程信息的访问。
htop 通过读取proc文件系统中的相关信息,实时更新并显示系统资源的使用情况。
具体来说,htop的原理可以概括为以下几个步骤:1. 打开proc文件系统htop首先会打开/proc目录,该目录是proc文件系统的挂载点。
在该目录下,每个进程都对应一个以进程ID为名称的文件夹。
2. 读取进程信息htop会遍历/proc目录下的所有进程文件夹,读取每个进程的相关信息。
这些信息包括进程ID、进程状态、进程所属用户、进程所在的命名空间等。
3. 读取系统资源信息htop会读取/proc目录下的一些特殊文件,如/proc/stat、/proc/meminfo等,来获取系统的整体资源使用情况。
/proc/stat 文件包含了CPU的使用情况,/proc/meminfo文件包含了内存的使用情况。
4. 计算进程资源使用情况htop会根据进程的相关信息和系统资源的使用情况,计算出每个进程的资源使用情况。
这些资源包括CPU的使用情况、内存的使用情况、网络的使用情况和磁盘的使用情况等。
5. 显示资源使用情况htop将计算出的资源使用情况以直观的方式显示在命令行界面上。
它使用不同的颜色和符号来表示不同的资源使用情况,让用户可以快速了解系统的整体状况。
三、htop的功能htop提供了丰富的功能,方便用户监控系统资源的使用情况。
以下是htop的一些主要功能:1. 实时监控htop可以实时更新并显示系统资源的使用情况,让用户可以随时了解系统的状况。
用户可以通过按键或命令来刷新界面,以查看最新的资源使用情况。
Linux中的文件和目录结构详解
Linux中的⽂件和⽬录结构详解 对于每⼀个Linux学习者来说,了解Linux⽂件系统的⽬录结构,是学好Linux的⾄关重要的⼀步.,深⼊了解linux⽂件⽬录结构的标准和每个⽬录的详细功能,对于我们⽤好linux系统只管重要,下⾯我们就开始了解⼀下linux⽬录结构的相关知识。
当在使⽤Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的⽬录,⽐如etc、usr、var、bin ... ... 等⽬录,⽽在这些⽬录中,我们进去看看,发现也有很多的⽬录或⽂件。
⽂件系统在Linux下看上去就象树形结构,所以我们可以把⽂件系统的结构形象的称为树形结构。
⽂件系统的是⽤来组织和排列⽂件存取的,所以它是可见的,在Linux中,我们可以通过ls等⼯具来查看其结构,在Linux系统中,我们见到的都是树形结构;⽐如操作系统安装在⼀个⽂件系统中,它表现为由/ 起始的树形结构。
linux⽂件系统的最顶端是/,我们称/为Linux的root,也就是 Linux操作系统的⽂件系统。
Linux的⽂件系统的⼊⼝就是/,所有的⽬录、⽂件、设备都在/之下,/就是Linux⽂件系统的组织者,也是最上级的领导者。
由于linux是开放源代码,各⼤公司和团体根据linux的核⼼代码做各⾃的操作,编程。
这样就造成在根下的⽬录的不同。
这样就造成个⼈不能使⽤他⼈的linux系统的PC。
因为你根本不知道⼀些基本的配置,⽂件在哪⾥。
这就造成了混乱。
这就是FHS(Filesystem Hierarchy Standard )机构诞⽣的原因。
该机构是linux爱好者⾃发的组成的⼀个团体,主要是是对linux做⼀些基本的要求,不⾄于是操作者换⼀台主机就成了linux的‘⽂盲’。
事实上,FHS是根据过去的经验⼀直再持续的改版的,FHS依据⽂件系统使⽤的频繁与否与是否允许使⽤者随意更动,⽽将⽬录定义成为四种交互作⽤的形态,⽤表格来说有点像底下这样:可分享的(shareable)不可分享的(unshareable)不变的(static)/usr (软件放置处)/etc (配置⽂件)/opt (第三⽅协⼒软件)/boot (开机与核⼼档)可变动的(variable)/var/mail (使⽤者邮件信箱)/var/run (程序相关) /var/spool/news (新闻组)/var/lock (程序相关)四中类型:1.可分享的: 可以分享给其他系统挂载使⽤的⽬录,所以包括执⾏⽂件与⽤户的邮件等数据,是能够分享给⽹络上其他主机挂载⽤的⽬录;2.不可分享的: ⾃⼰机器上⾯运作的装置⽂件或者是与程序有关的socket⽂件等,由于仅与⾃⾝机器有关,所以当然就不适合分享给其他主机了。
Linux下proc文件系统编程
/proc文件系统编程在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。
./proc文件系统在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。
/proc文件系统最初是设计使得容易得到进程的信息(从名字可以看出),现在却被任意一块有内容需要报告的内核使用,比如拥有模块列表的/proc/modules和拥有内存使用统计信息的/proc/meminfo。
使用proc文件系统的方法很象使用设备驱动——你创建一个数据结构,使之包含/proc文件需要的全部信息,包括所有函数的句柄(在我们的例子里只有一个,在试图读取/proc 文件时调用)。
然后,用init_module注册这个结构,用cleanup_module注销。
我们使用proc_register_dynamic(注3.1)的原因是我们不希望决定以后在文件中使用的索引节点数,而是让内核来决定它,为了防止冲突。
标准的文件系统是在磁盘上而不是在内存(/proc的位置在内存),在这种情况下节点数是一个指向文件的索引节点所在磁盘地址的指针。
这个索引节点包含了文件的有关信息比如文件的访问权限以及指向磁盘地址的指真或者文件数据的位置。
因为在文件打开或关闭时我们没有调用,所以在模块里无处可放宏MOD_INC_USE_COUNT和MOD_DEC_USE_COUNT,而且如果文件被打开了或者模块被删除了,就没有办法来避免这个结果。
下一章我们将会看到一个更困难的处理/proc的方法,但是也更加灵活,也能够解决这个问题。
ex procfs.c/* procfs.c - create a "file" in /proc* Copyright (C) 1998-1999 by Ori Pomerantz*//* The necessary header files *//* Standard in kernel modules */#include <linux/kernel.h> /* We're doing kernel work */#include <linux/module.h> /* Specifically, a module *//* Deal with CONFIG_MODVERSIONS */#if CONFIG_MODVERSIONS==1#define MODVERSIONS#include <linux/modversions.h>#endif/* Necessary because we use the proc fs */#include <linux/proc_fs.h>/* In 2.2.3 /usr/include/linux/version.h includes a* macro for this, but 2.0.35 doesn't - so I add it* here if necessary. */#ifndef KERNEL_VERSION#define KERNEL_VERSION(a,b,c) ((a)*65536+(b)*256+(c)) #endif/* Put data into the proc fs file.Arguments=========1. The buffer where the data is to be inserted, ifyou decide to use it.2. A pointer to a pointer to characters. This isuseful if you don't want to use the bufferallocated by the kernel.3. The current position in the file.4. The size of the buffer in the first argument.5. Zero (for future use?).Usage and Return Value======================If you use your own buffer, like I do, put itslocation in the second argument and return the number of bytes used in the buffer.A return value of zero means you have no further information at this time (end of file). A negativereturn value is an error condition.For More Information====================The way I discovered what to do with this function wasn't by reading documentation, but by reading the code which used it. I just looked to see what usesthe get_info field of proc_dir_entry struct (I used a combination of find and grep, if you're interested),and I saw that it is used in /fs/proc/array.c.If something is unknown about the kernel, this is usually the way to go. In Linux we have the great advantage of having the kernel source code for free - use it.*/int procfile_read(char *buffer,char **buffer_location,off_t offset,int buffer_length,int zero){int len; /* The number of bytes actually used *//* This is static so it will still be in memory* when we leave this function */static char my_buffer[80];static int count = 1;/* We give all of our information in one go, so if the * user asks us if we have more information the* answer should always be no.** This is important because the standard read* function from the library would continue to issue * the read system call until the kernel replies* that it has no more information, or until its* buffer is filled.*/if (offset > 0)return 0;/* Fill the buffer and get its length */len = sprintf(my_buffer,"For the %d%s time, go away! ", count,(count % 100 > 10 && count % 100 < 14) ? "th" : (count % 10 == 1) ? "st" :(count % 10 == 2) ? "nd" :(count % 10 == 3) ? "rd" : "th" );count++;/* Tell the function which called us where the* buffer is */*buffer_location = my_buffer;/* Return the length */return len;}struct proc_dir_entry Our_Proc_File ={0, /* Inode number - ignore, it will be filled by* proc_register[_dynamic] */4, /* Length of the file name */"test", /* The file name */S_IFREG | S_IRUGO, /* File mode - this is a regular * file which can be read by its* owner, its group, and everybody* else */1, /* Number of links (directories where the* file is referenced) */0, 0, /* The uid and gid for the file - we give it* to root */80, /* The size of the file reported by ls. */NULL, /* functions which can be done on the inode * (linking, removing, etc.) - we don't* support any. */procfile_read, /* The read function for this file,* the function called when somebody* tries to read something from it. */NULL /* We could have here a function to fill the* file's inode, to enable us to play with* permissions, ownership, etc. */};/* Initialize the module - register the proc file */int init_module(){/* Success if proc_register[_dynamic] is a success,* failure otherwise. */#if LINUX_VERSION_CODE > KERNEL_VERSION(2,2,0) /* In version 2.2, proc_register assign a dynamic* inode number automatically if it is zero in the* structure , so there's no more need for* proc_register_dynamic*/return proc_register(&proc_root, &Our_Proc_File);#elsereturn proc_register_dynamic(&proc_root, &Our_Proc_File); #endif/* proc_root is the root directory for the proc* fs (/proc). This is where we want our file to be* located.*/}/* Cleanup - unregister our file from /proc */void cleanup_module(){proc_unregister(&proc_root, Our_Proc_File.low_ino);}。
c语言linux查看进程名的函数
c语言linux查看进程名的函数在Linux系统中,可以使用多种方法查看进程名。
下面将介绍几种常用的方法和相应的函数。
1.使用命令行工具Linux系统提供了一些命令行工具,可以用于查看进程名。
常用的命令有ps、top和htop。
这些命令行工具可以显示当前运行的进程及其相关信息,包括进程名。
可以通过调用这些命令行工具并解析其输出来获取进程名。
2.使用系统调用函数在C语言中,可以使用系统调用函数来获取进程名。
其中最常用的函数是getpid()和getppid()。
getpid()函数用于获取当前进程的进程ID,而getppid()函数则用于获取父进程的进程ID。
3.使用/proc文件系统在Linux系统中,/proc文件系统提供了一种访问内核数据结构的方法。
每个进程都在/proc目录下有一个相应的目录,以其进程ID为名称。
通过读取/proc目录下的相关文件,可以获取进程的各种信息,包括进程名。
可以使用C语言的文件操作函数来访问/proc目录。
具体的实现方式如下:1.使用命令行工具可以使用popen()函数调用ps命令,并解析命令的输出来获取进程名。
示例代码如下:```c#include <stdio.h>#include <stdlib.h>#define MAX_BUF 1024int main() {FILE* fp;char path[MAX_BUF];fp = popen("ps -ef | awk '{print $8}'", "r");if (fp == NULL) {printf("Failed to run command\n");exit(1);}while (fgets(path, MAX_BUF, fp) != NULL) {printf("%s", path);}pclose(fp);return 0;}```2.使用系统调用函数在C语言中,可以使用系统调用函数sysinfo()来获取系统信息,包括各个进程的详细信息。
proc文件系统下,创建文件和文件夹proc_mkdir()proc_create()
proc⽂件系统下,创建⽂件和⽂件夹proc_mkdir()proc_create()proc_create的使⽤⽅法proc⽂件系统是个有⽤的东东。
创建⼀个proc虚拟⽂件,应⽤层通过读写该⽂件,即可实现与内核的交互。
proc虚拟⽂件是如何创建的呢?先看看⽐较简单的,创建proc⽂件夹。
调⽤以下函数,即可实现proc⽂件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent);name就是要创建的⽂件夹名称。
parent是要创建节点的⽗节点。
也就是要在哪个⽂件夹之下创建新⽂件夹,需要将那个⽂件夹的proc_dir_entry传⼊。
如果是在/proc⽬录下创建⽂件夹,parent为NULL。
例如:struct proc_dir_entry *mytest_dir = proc_mkdir("mytest", NULL);然后来看看proc⽂件的创建。
创建⽅法是调⽤以下函数:static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode,struct proc_dir_entry *parent, const struct file_operations *proc_fops);name就是要创建的⽂件名。
mode是⽂件的访问权限,以UGO的模式表⽰。
parent与proc_mkdir中的parent类似。
也是⽗⽂件夹的proc_dir_entry对象。
proc_fops就是该⽂件的操作函数了。
例如:struct proc_dir_entry *mytest_file = proc_create("mytest", 0x0644, mytest_dir, mytest_proc_fops);还有⼀种⽅式:struct proc_dir_entry *mytest_file = proc_create("mytest/mytest", 0x0644, NULL, mytest_proc_fops);如果⽂件夹名称和⽂件名定义为常量:#define MYTEST_PROC_DIR "mytest"#define MYTEST_PROC_FILE "mytest"第⼆种⽅式为:struct proc_dir_entry *mytest_file = proc_create(MYTEST_PROC_DIR"/"MYTEST_PROC_FILE, 0x0644, NULL, mytest_proc_fops);接下来看看mytest_proc_fops的定义。
Linux系统下各文件目录的含义
随着Linux的不断发展,越来越多的人开始使用Linux,对于那些刚刚接触的人来说,恐怕最先感到困惑的就是那些“不明不白”的目录了。
如果想熟练使用Linux,让Linux听命于自己,就必须掌握这些目录,下面就以Xteam公司的最新产品——XteamLinux 4.0为例,介绍一下在该系统下的目录。
/bin bin是Binary的缩写。
这个目录存放着最经常使用的命令。
/boot这里存放的是启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件。
/dev dev是Device(设备)的缩写。
该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。
几乎所有的应用程序都需要用到这些共享库。
/lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/mnt在这里面中有四个目录,系统提供这些目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/cdrom上,然后进入该目录就可以查看光驱里的内容了。
/proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 >; /proc/sys/net/ipv4/icmp_echo_ignore_all。
/root该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
proc文件系统
10
seq_file操作procfs步骤( seq_open 1)
I. 在proc文件下创建自己的文件 static inline struct proc_dir_entry *proc_create(
const char *name, umode_t mode, struct proc_dir_entry *parent,
create_proc_read_entry 和create_proc_entry接口在新版 本的内核中已经废弃
4
seq_file
内核通过在procfs文件系统下建立文件来向用户空间提供输出信息, 用户空间可以通过任何文本阅读应用查看该文件信息,但是procfs 有 一个缺陷,如果输出内容大于1个内存页,需要多次读,因此处理起来 很难,另外,如果输出太大,速度比较慢,有时会出现一些意想不到 的情况。
6
seq_file操作procfs的方式
single_open方式 此种方式为简单方式对应的释放函数为 single_release seq_open方式 此种方式为复杂方式对应的释放函数为 seq_release
7
seq_file操作procfs步骤( single_open 1)
I. 在proc文件下创建自己的文件
procfs
2
proc文件系统概要
虚拟文件系统
驻留于内存、不占用存储空间
创建和显示内核内部的资源视窗
数据是在内核运行过程中产生的
用于配置内核参数、查看内核结构体、从设备驱 动程序中收集统计信息、获取通用的系统信息 在系统启动过程中挂载在/proc目录
3
proc文件系统操作示例1
糟 糕 的 实 现 方 式
在结束时候被调用,完成一些清理工作
linux根目录下各个文件的作用
linux各文件夹的作用linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令/dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序/tmp 公用的临时文件存储点/root 系统管理员的主目录(呵呵,特权阶级)/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows 下叫什么.chk)就在这里/proc 虚拟的目录,是系统内存的映射。
可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
其中包含:/usr/x11r6 存放x window的目录/usr/bin 众多的应用程序/usr/sbin 超级用户的一些管理程序/usr/doc linux文档/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib 常用的动态链接库和软件包的配置文件/usr/man 帮助文档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin 本地增加的命令/usr/local/lib 本地增加的库通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。
除了可能的一个叫/ v m l i n u z标准的系统引导映像之外,根目录一般不含任何文件。
所有其他文件在根文件系统的子目录中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/proc/stat 所有的CPU活动信息
/proc/sysrq-trigger 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
/proc/irq 中断请求设备信息
/proc/net 网卡设备信息
/proc/scsi scsi设备信息
/proc/tty tty设备信息
/proc/net/dev 显示网络适配器及统计信息
/proc/vmstat 虚拟内存统计信息
/proc/vmcore 内核panic时的内存映像
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
2. 子文件或子文件夹
/proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关
/proc/kcore 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb
/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
/proc/loadavg 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
Linux下/proc目录简介
1. /proc目录
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
/proc/cmdline 启动时传递给kernel的参数信息
/proc/cpuinfo cpu的信息
/proc/crypto 内核使用的所有已安装的加密密码及细节
/proc/devices 已经加载的设备并分类
/proc/dma 已注册使用的ISA DMA频道列表
/proc/execdomains Linux内核当前支持的execution domains
/proc/locks 内核锁住的文件列表
/proc/mdstat 多硬盘,RAID配置信息(md=multiple disks)
/proc/meminfo RAM使用的相关信息
/proc/misc 其他的主要设备(设备号为10)上注册的驱动
/proc/modules 所有加载到内核的模块列表
/proc/N/cwd 链接到进程当前工作目录
/proc/N/environ 进程环境变量列表
/proc/N/exe 链接到进程的执行命令文件
/prቤተ መጻሕፍቲ ባይዱc/N/fd 包含进程相关的所有的文件描述符
/proc/N/maps 与进程相关的内存映射信息
/proc/N/mem 指代进程持有的内存,不可读
/proc/diskstats 取得磁盘信息
/proc/schedstat kernel调度器的统计信息
/proc/zoneinfo 显示内存空间的统计信息,对分析虚拟内存行为很有用
以下是/proc目录中进程N的信息
/proc/N pid为N的进程信息
/proc/N/cmdline 进程启动命令
/proc/fb 帧缓冲设备列表,包括数量和控制它的驱动
/proc/filesystems 内核当前支持的文件系统类型
/proc/interrupts x86架构中的每个IRQ中断数
/proc/iomem 每个物理设备当前在系统内存中的映射
/proc/ioports 一个设备的输入输出所使用的注册端口范围
/proc/N/root 链接到进程的根目录
/proc/N/stat 进程的状态
/proc/N/statm 进程使用的内存的状态
/proc/N/status 进程状态信息,比stat/statm更具可读性
/proc/self 链接到当前正在运行的进程
/proc/uptime 系统已经运行了多久
/proc/swaps 交换空间的使用情况
/proc/version Linux内核版本和gcc版本
/proc/bus 系统总线(Bus)信息,例如pci/usb等
/proc/driver 驱动信息
/proc/fs 文件系统信息
/proc/ide ide设备信息
/proc/mounts 系统中使用的所有挂载
/proc/mtrr 系统使用的Memory Type Range Registers (MTRRs)
/proc/partitions 分区中的块分配信息
/proc/pci 系统中的PCI设备列表
/proc/slabinfo 系统中所有活动的 slab 缓存信息