1
sampeng 2012-10-20 00:28:00 +08:00
搜索最大的问题是各种碎片信息。你很难找到一个系统的知识。。个人建议。。买本unix高级编程。。上面的文件io描述了文件如何存储和系统调用时发生的行为。
文件信息是存在v节点指针上的。 |
2
Mooooon 2012-10-20 09:18:31 +08:00
不知道你是要哪个层面的信息,我是做底层驱动的,就我的理解引用计数是在对应文件的kobject里。
|
3
ssword 2012-10-20 09:27:45 +08:00
楼主提到的这个引用计数是指inode对象在内存中的引用计数,它会在文件关闭时减少。
(但楼主的问题是什么? |
4
quake0day 2012-10-20 11:35:37 +08:00 1
|
5
tsuibin OP |
6
tsuibin OP |
7
ssword 2012-10-20 19:04:09 +08:00
page cache似乎也会给inode对象的引用计数+1的样子...
而且inode对象的引用计数判断为0是不可能的情况,因为那时候inode对象就没了... 将文件移动到其它目录,直接移动就好的,它还是同一个inode。 |
8
tsuibin OP @ssword 需要判断写操作是否完成,因为在移动之前需要将内容转储
“inode对象的引用计数判断为0是不可能的情况,因为那时候inode对象就没了” 检测程序会打开文件,这个时候内核中应该会有该文件的inode结构,理论上应该可以 |
9
cabbala 2012-10-21 11:03:59 +08:00
既然你都知道了lsof和fuser,不如参考下它们的实现。下面是fuser的简单实现(busybox)
http://code.google.com/codesearch#gufiwQeQ0iA/trunk/apps/busybox-1.14.2/procps/fuser.c&ct=rc&cd=2&q=fuser.c&sq= /* fuser [options] FILEs or PORT/PROTOs Find processes which use FILEs or PORTs -m Find processes which use same fs as FILEs -4 Search only IPv4 space -6 Search only IPv6 space -s Silent: just exit with 0 if any processes are found -k Kill found processes (otherwise display PIDs) -SIGNAL Signal to send (default: TERM) */ 我大概扫了下,应该是通过扫描/proc来实现的。。。 |
10
tsuibin OP 嗯 是通过遍历proc实现的 我想从内核实现 提供一个新 api给用户进程 现在就是怎么获取文件在内核中的 structure inode结构体这里卡住了
|