proc文件系统 国防科大操作系统课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 每个文件都规定了严格的权限
– 是否可读?是否可写? – 哪个用户可读?哪个用户可写?
• 可以由任何文本编辑程序读取(more命令,cat 命令,vi程序,自己编的读文件程序,等等)
• 不仅可以有文件,还可以有子目录(文件夹)。 • 可以自己写程序添加一个/proc目录下的文件。
一个例子
• 编译这个模块。
上次写的内容前面加两句话。
分析这个程序
• 总体结构——五个函数
init_module (创建所有的proc文件) cleanup_module (清除所有创建的内容) proc_read_current (当需要读current文
件的内容时,由内核调用这个函数)
proc_read_hello (和上面类似) proc_write_hello (和上面类似)
proc文件和用户的交互
• 当用户(用户态程序)写proc文件时,内核调 用预先设定的写函数。(回调)
• 写函数的例子,请看例子程序里面的 proc_write_hello函数。
• 参数2,3对我们有用,分别表示要写什么东西 进去,要写多少字节。
• 注意要用copy_from_user函数。 • global_buffer是我们用来保存数据的缓冲区。
操作系统课程实验 创建proc文件
2005.12
其他的proc文件
子目录/文件名 apm bus
devices driver interrupts ioports version
内容描述 高级电源管理信息 总线以及总线上的设备
可用的设备信息 已经启用的驱动程序
中断信息 端口使用信息
内核版本
proc文件系统的特点
我要加可个载以叫模加he载块llo,的不pr过oc要文给件我,创到建时一候
程序p工roc作_如t流e果s读t程写这(1个)文件,你就找 hello_read和hello_write
用户要 加载你 们这个 模块了
内核
hello_ hello_
init_module read write
好吧, 我同意 创建文 件。
表示所有用户都可以访问。
– 参数3:在哪个目录下创建,可以用NULL 表示在/proc下创建。
– 创建之后,还要设定读函数和写函数。
创建proc文件
• proc_symlink函数:创建一个链接文件。
– 参数1:字符串型,要创建的链接文件名。 – 参数2:在哪个目录下创建,可以用NULL表
示在/proc下创建。 – 参数3:字符串型,要链接到哪个文件。
gcc -c -I/usr/src/linux-2.4.208/include proc_test.c
• 加载这个模块。
insmod
proc_test.o
• 用lsmod命令检查是否已经加载成功。
• 如果加载不成功,请找我检查。
一个例子
• 看看是不是多了一个/proc/proc_test目 录。(输入以下两行命令)
创建proc文件
• 在上面的例子中,我们看到,通过编写一段 程序,在/proc目录下创建了如下内容:
一个名叫proc_test的子目录。 一个名叫current的文件,只读,读出的内容是
读它的进程的情况。
一个名叫current_too的链接,指向current。 一个名叫hello的文件,可读可写。读出的内容是
Βιβλιοθήκη Baidu
我要写文件
程序h工ell作o 流程 (2)
用户要写文
件了,要写
的内容是 12345。怎 么办?
内核
知道了,我已 经记下来了。
hello_write
12345
程序我 h工e要ll作o读流文件这 出 h程el个 的lo(文 内m3e件 容)ss可是ag以:e:读。读
More write: 12345
cd /proc ls
• 看看有没有三个文件,名字叫current, current_too和hello。
cd /proc/proc_test ls
一个例子
• 看看current文件的内容:
more current
• 看看current_too文件的内容:
可以看出这个文件的内容和current差不多, 其实这个文件是一个链接,指向current。
的时候应该找谁处理。
– 参数5:告诉内核在找读函数的时候,顺便给它一 个指针,一般不用的话(或者你看不懂的话)就置 NULL。
创建proc文件
• create_proc_entry函数:创建一个普 通的proc文件。
– 参数1:字符串型,要创建的文件名。 – 参数2:整数型,文件的访问权限。0666
• 请参照课件,读懂这个示例程序。 • 请注意理解上面所说的几个函数,不过
不必记住具体的格式。 • 可以自己试试再加一个proc文件,多练
习有助于你的理解。
• 看看hello文件的内容。
一个例子
• 试试写一下hello这个文件。
打开任意文本编辑器,如gedit,用编辑器打开 /proc/proc_test/hello这个文件,然后清除 里面的全部内容,再随便写一句话,保存。
• 再次看看hello文件的内容:
more hello
• 卸载模块: rmmod proc_test
proc文件和用户的交互
• 当用户(用户态程序)读proc文件时,内核调 用预先设定的读函数。
• 读函数的例子,请看例子程序里面的 proc_read_hello函数。
• 参数1,3,4对我们有用,分别表示读到哪里 去、从什么位置开始读、以及要读多少个字节 。
• 返回值:实际读出的字节数。
更多的任务?
用户要读文 件了,老大, 赶快准备一 下撒!
内核
hello_read
12345
就把我上次读 到的内容前面 加两句话,然 后交给他。
创建proc文件
• proc_mkdir函数:创建一个目录。
– 参数1:字符串,要创建的目录名。 – 参数2:在哪个目录下创建,一般用NULL
表示在/proc下创建。 – 返回值:一个指向proc_dir_entry结构的
指针。
– 注意,以下几个函数都要在调用后,对返 回的proc_dir_entry结构进行设置。
创建proc文件
• create_proc_read_entry函数:创建一个只 读的proc文件。
– 参数1:字符串型,要创建的文件名。 – 参数2:整数型,文件的访问权限。 – 参数3:在哪个目录下创建。 – 参数4:读函数。告诉内核如果用户要读这个文件
– 是否可读?是否可写? – 哪个用户可读?哪个用户可写?
• 可以由任何文本编辑程序读取(more命令,cat 命令,vi程序,自己编的读文件程序,等等)
• 不仅可以有文件,还可以有子目录(文件夹)。 • 可以自己写程序添加一个/proc目录下的文件。
一个例子
• 编译这个模块。
上次写的内容前面加两句话。
分析这个程序
• 总体结构——五个函数
init_module (创建所有的proc文件) cleanup_module (清除所有创建的内容) proc_read_current (当需要读current文
件的内容时,由内核调用这个函数)
proc_read_hello (和上面类似) proc_write_hello (和上面类似)
proc文件和用户的交互
• 当用户(用户态程序)写proc文件时,内核调 用预先设定的写函数。(回调)
• 写函数的例子,请看例子程序里面的 proc_write_hello函数。
• 参数2,3对我们有用,分别表示要写什么东西 进去,要写多少字节。
• 注意要用copy_from_user函数。 • global_buffer是我们用来保存数据的缓冲区。
操作系统课程实验 创建proc文件
2005.12
其他的proc文件
子目录/文件名 apm bus
devices driver interrupts ioports version
内容描述 高级电源管理信息 总线以及总线上的设备
可用的设备信息 已经启用的驱动程序
中断信息 端口使用信息
内核版本
proc文件系统的特点
我要加可个载以叫模加he载块llo,的不pr过oc要文给件我,创到建时一候
程序p工roc作_如t流e果s读t程写这(1个)文件,你就找 hello_read和hello_write
用户要 加载你 们这个 模块了
内核
hello_ hello_
init_module read write
好吧, 我同意 创建文 件。
表示所有用户都可以访问。
– 参数3:在哪个目录下创建,可以用NULL 表示在/proc下创建。
– 创建之后,还要设定读函数和写函数。
创建proc文件
• proc_symlink函数:创建一个链接文件。
– 参数1:字符串型,要创建的链接文件名。 – 参数2:在哪个目录下创建,可以用NULL表
示在/proc下创建。 – 参数3:字符串型,要链接到哪个文件。
gcc -c -I/usr/src/linux-2.4.208/include proc_test.c
• 加载这个模块。
insmod
proc_test.o
• 用lsmod命令检查是否已经加载成功。
• 如果加载不成功,请找我检查。
一个例子
• 看看是不是多了一个/proc/proc_test目 录。(输入以下两行命令)
创建proc文件
• 在上面的例子中,我们看到,通过编写一段 程序,在/proc目录下创建了如下内容:
一个名叫proc_test的子目录。 一个名叫current的文件,只读,读出的内容是
读它的进程的情况。
一个名叫current_too的链接,指向current。 一个名叫hello的文件,可读可写。读出的内容是
Βιβλιοθήκη Baidu
我要写文件
程序h工ell作o 流程 (2)
用户要写文
件了,要写
的内容是 12345。怎 么办?
内核
知道了,我已 经记下来了。
hello_write
12345
程序我 h工e要ll作o读流文件这 出 h程el个 的lo(文 内m3e件 容)ss可是ag以:e:读。读
More write: 12345
cd /proc ls
• 看看有没有三个文件,名字叫current, current_too和hello。
cd /proc/proc_test ls
一个例子
• 看看current文件的内容:
more current
• 看看current_too文件的内容:
可以看出这个文件的内容和current差不多, 其实这个文件是一个链接,指向current。
的时候应该找谁处理。
– 参数5:告诉内核在找读函数的时候,顺便给它一 个指针,一般不用的话(或者你看不懂的话)就置 NULL。
创建proc文件
• create_proc_entry函数:创建一个普 通的proc文件。
– 参数1:字符串型,要创建的文件名。 – 参数2:整数型,文件的访问权限。0666
• 请参照课件,读懂这个示例程序。 • 请注意理解上面所说的几个函数,不过
不必记住具体的格式。 • 可以自己试试再加一个proc文件,多练
习有助于你的理解。
• 看看hello文件的内容。
一个例子
• 试试写一下hello这个文件。
打开任意文本编辑器,如gedit,用编辑器打开 /proc/proc_test/hello这个文件,然后清除 里面的全部内容,再随便写一句话,保存。
• 再次看看hello文件的内容:
more hello
• 卸载模块: rmmod proc_test
proc文件和用户的交互
• 当用户(用户态程序)读proc文件时,内核调 用预先设定的读函数。
• 读函数的例子,请看例子程序里面的 proc_read_hello函数。
• 参数1,3,4对我们有用,分别表示读到哪里 去、从什么位置开始读、以及要读多少个字节 。
• 返回值:实际读出的字节数。
更多的任务?
用户要读文 件了,老大, 赶快准备一 下撒!
内核
hello_read
12345
就把我上次读 到的内容前面 加两句话,然 后交给他。
创建proc文件
• proc_mkdir函数:创建一个目录。
– 参数1:字符串,要创建的目录名。 – 参数2:在哪个目录下创建,一般用NULL
表示在/proc下创建。 – 返回值:一个指向proc_dir_entry结构的
指针。
– 注意,以下几个函数都要在调用后,对返 回的proc_dir_entry结构进行设置。
创建proc文件
• create_proc_read_entry函数:创建一个只 读的proc文件。
– 参数1:字符串型,要创建的文件名。 – 参数2:整数型,文件的访问权限。 – 参数3:在哪个目录下创建。 – 参数4:读函数。告诉内核如果用户要读这个文件