Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534641
  • 博文数量: 64
  • 博客积分: 1591
  • 博客等级: 上尉
  • 技术积分: 736
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-08 14:54
文章分类

全部博文(64)

文章存档

2011年(42)

2010年(22)

分类: LINUX

2011-03-16 21:16:57

unlink与锁的问题

linux编程过程中遇到这么一个问题,即使文件使用强制锁锁住仍然可以用rm删除。

1.fcntl实现的锁只对open,read,write三个系统调用起作用

2.unlink原理

创建一个文件就是分配一个inode,再在磁盘上为此文件分配空间,让inode里的指针指向这些空间,然后再在目录这种特殊的文件里建立一个目录项,内容即为文件名->inode

创建硬连接,就是在相应的目录再建立目录项,但不创建新inodeinode号就是要指向的
件的inode

所谓删除就是删掉目录项,就是解除文件名和inode之间的连接,所以叫unlink

到删掉最后一个目录项之后,就没有文件可以访问到这个inode了,这个inode就可以被重新分配了


unlink 系统调用移除掉文件的目录入口以及目录里的链接数(link count)减 。如果 unlink 成功就返回0,出错就返回 -1。对于这个调用,你必须在一个目录里,这个文件的目录入口处有写和执行权限。

用法:

#include 
int unlink(const char *path);

如果连接数已经为 并且没有其它进程打开文件,这个文件就会被删除。事实上,目录入口(directory entry)总是会立即被移除的,但文件空间直到最后一个进程关闭它后才被还原。rm 程序使用这个调用。额外的链接表示一个文件多个可以改变的名字,通常由 ln 程序来创建。你可以通过 link 系统调用创建一个文件的新的链接。

link 系统调用创建一个已经存在文件的一个新的链接(参数path1表示这个文件).新的目录入口由 path2 指定。你可以通过使用 symlink 系统调用来创建一个符号链接。注意,一个文件的符号链接不会增加文件的参考数”(file's reference count),也不会像普通链接(硬链接)那样阻止文件有效的被删除。



阅读(2384) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~