分类: LINUX
2011-03-16 21:16:57
在linux编程过程中遇到这么一个问题,即使文件使用强制锁锁住仍然可以用rm删除。
1.fcntl实现的锁只对open,read,write三个系统调用起作用
2.unlink原理
创建一个文件就是分配一个inode,再在磁盘上为此文件分配空间,让inode里的指针指向这些空间,然后再在目录这种特殊的文件里建立一个目录项,内容即为文件名->inode号
创建硬连接,就是在相应的目录再建立目录项,但不创建新inode,inode号就是要指向的
件的inode号
所谓删除就是删掉目录项,就是解除文件名和inode之间的连接,所以叫unlink
到删掉最后一个目录项之后,就没有文件可以访问到这个inode了,这个inode就可以被重新分配了
unlink 系统调用移除掉文件的目录入口以及目录里的链接数(link count)减 1 。如果 unlink 成功就返回0,出错就返回 -1。对于这个调用,你必须在一个目录里,这个文件的目录入口处有写和执行权限。
用法:
#include
int unlink(const char *path);
如果连接数已经为 0 并且没有其它进程打开文件,这个文件就会被删除。事实上,目录入口(directory entry)总是会立即被移除的,但文件空间直到最后一个进程关闭它后才被还原。rm 程序使用这个调用。额外的链接表示一个文件多个可以改变的名字,通常由 ln 程序来创建。你可以通过 link 系统调用创建一个文件的新的链接。
link 系统调用创建一个已经存在文件的一个新的链接(参数path1表示这个文件).新的目录入口由 path2 指定。你可以通过使用 symlink 系统调用来创建一个符号链接。注意,一个文件的符号链接不会增加“文件的参考数”(file's reference count),也不会像普通链接(硬链接)那样阻止文件有效的被删除。