jixuduxing

linux学习笔记(4)

1、link创建一个指向现有文件的链接,该文件的内容跟原文件完全一致,并且当其中一个文件内容改变时,对应的文件打开随之改变,其中一个删除,另一个还可继续访问,文件内容没有随之删除,只有当所有的链接都删除掉之后该文件内容才会被删除;需要注意的是:两个文件占用的空间只是一个文件的空间,文件内容只有一份,并没有被复制
2、unlink(const char *pathname),删除目录项,并将pathname所引用文件的链接计数器减一,其他指向该文件的链接,还可以被利用来访问该文件的数据,如果出错,不对该文件做任何更改;
只有当链接计数达到0时,该文件内容才可能被删除;另外,当进程打开该文件的时候,该文件内容也不能被删除;(这一特性常被用来确保程序崩溃时,程序所创建的临时文件也不会遗留下来,程序打开时调用unlink,程序退出或者文件关闭时该临时文件会被删除)
以上所述是建立硬链接的方式以及相应的特性,硬链接直接指向文件的i节点(文件系统这块理解还是很吃力)
明日学习间接链接--符号链接
关于符号链接:
1、硬链接通常要求链接和文件位于同一文件系统中;
2、只有超级用户才有创建指向目录的硬链接的权限;
3、硬链接直接指向文件的i节点,符号链接则不然,文件的属性是普通文件,符号链接是连接文件;
各个函数对于符号链接的处理:
函数 不跟随符号链接 跟随符号链接
access   no yes
chdir no yes
chmod no yes
chown yes yes
creat no yes
exec no yes
lchown yes no
link no yes
lstat yes no
open no yes
opendir no yes
pathconf no yes
readlink yes no
remove yes no
rename yes no
stat no yes
truncate no yes
unlink yes no

注:一个例外:
同时用O_CREAT和O_EXCL两者调用open函数,在此情况下,若路径名引用符号链接,open会出错返回,将errno设置为EEXIST,这种处理方式是堵塞一个安全性漏洞,使具有特权的进程不会被诱骗对不适当的文件进行写操作;
两个函数:
int symlink(const char *actualpath,const char *sympath)函数创建一个符号链接;
ssize_t readlink(const char* restrict pathname,char *restrict buf,size_t bufsize);(因为open函数跟随符号链接,所以需要一个方法打开链接本身,并读该链接的名字)

posted on 2010-05-05 09:39 高磊 阅读(195) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜