系统编程 笔记5

link unlink函数

在inode之外有个目录项dentry,这并不多余,这主要是为了实现文件共享,Linux允许多个目录项共享同一个文件,link函数可以为已经存在的文件创建目录项(硬链接)

int link(const char *oldpath,const char *newpath)

成功返回0,失败返回-1 并errno为相应的值。

int unlink(const char *path)

成功返回0,失败返回负值。

对于删除文件,可以说是将文件的硬链接删除完,从而让文件具备被系统释放的条件(可覆盖)。unlink函数的特性:清除文件时,如果文件的硬链接数到0了,没有dentry对应,但该文件不会马上被释放。要等到所有打开文件的进程关闭该文件,系统才会挑时间将该文件释放掉。

隐式回收:当进程结束运行时,所有该进程打开的文件会被关闭,申请的内存空间会被释放。(这是操作系统的特性,最好不要依赖)

目录也是一种文件,可读属性反映在ls tree…可写属性反映在mkdir touch….可执行属性反映在:cd….

关于目录的函数:

opendir函数:打开一个目录,DIR *opendir(const char *name);//类似于FILE *

closedir函数:int closedir(DIR *dirp)//返回值什么的可以通过Man查看

readdir函数:struct dirent *readdir(DIR *dirp)//返回的是一个目录项,所以可以看出是一个结构体,这其中的一个结构体成员就是filename,就是文件名定义是:char d_name[256];所以文件名最大不能超过255字节

dup函数:
函数原型:int dup(int oldfd);
oldfd:已有的文件描述符
返回值:返回一个新的文件描述符

dup2函数:
函数原型:int dup2(int oldfd, int newfd);
此函数可以将旧文件复制给新的文件。
其实质是将PCB结构体复制到了新文件描述符结构体中,这个结构体中有一个指向文件的指针成员,因为旧文件它结构体中的指针和新文件的是一样的,那么指针指向的文件就都是同一个文件,也就是重定向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值