文件和目录

文章详细介绍了Linux系统中用于文件和目录操作的相关函数,如stat和lstat用于获取文件属性,opendir、readdir和closedir用于目录的打开、读取和关闭。此外,还讨论了dup和dup2函数如何复制文件描述符,以及fcntl函数在改变文件描述符属性时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件通常有两部分组成:内容 + 属性,属性即管理信息:包括文件的创建修改日期和访问权限等。

1.文件操作相关函数

1.1 stat/lstat

函数描述:获取文件属性
函数原型:
Int stat(const char* pathname, struct stat* buf);
Int lstat(const char* pathname,struct stat *buf );
返回值:
成功返回0,失败返回-1
参数:
Pathname 为待解析文件的路径名,可以为绝对路径,也可以为相对路径
Buf 为传出值,传出文件的解析结果。

1.2 目录操作相关函数

Opendir :
函数描述:打开一个目录
函数原型:
DIR* opendir(const char* name);
返回值:指向目录的指针
参数:要遍历的目录(相对路径或绝对路径)

Readdir 函数:
函数描述:读取目录内容--目录项
函数原型:
Struct dirent* readdir(DIR* dirp);
返回值:读取的目录项指针
参数:opendir 的返回值

Closedir 函数:
函数描述:关闭目录

函数原型:
Int closedir(DIR* dirp);
返回值:成功为0,失败为-1
参数:opendir 的返回值

1.3读取目录的一般操作步骤

DIR *pDIR = opendir("dir");//打开目录
while (p = readdir(pDIR) != NULL) 
{
   ....
}//循环获取文件
closedir(pDIR);//关闭目录

1.4 dup/dup2/fcntl

图解dup 和 dup2 的功能

Dup 函数:
函数描述:复制文件描述符

函数原型:
Int dup(int oldfd);
参数:oldfd 要复制的文件描述符
返回值:
成功:返回最小没被占用的文件描述符
失败:返回-1,设置error 值



Dup2 函数:
函数描述:复制文件描述符

函数原型:
Int dup2(int oldfd,int newfd);

参数:
Oldfd : 原来的文件描述符
Newfd : 复制成的新文件描述符
返回值:
成功:将oldfd 复制给newfd,两个文件描述符指向同一个文件
失败:-1 ,设置error 值


假设newfd 已经指向一个文件:
首先close 原来的文件,然后newfd 指向oldfd 指向的文件
若newfd 没有被战役,newfd 指向oldfd 指向的文件。



Fcntl 函数:
函数描述:改变已经打开的文件的属性

函数原型:
Int fcntl(int fd,int cmd,…/*arg*/);

Cmd 值:
若cmd 为F_DUPFD,复制文件描述符,与dup 相同
若cmd 为F_GETEL ,获取文件描述符的flag 属性值
若cmd 为 F_SETFL ,设置文件描述符的 flag 属性
函数返回值:返回值取决于cmd
成功:
若cmd为F_DUPFD,返回一个文件描述符
若cmd为F_GETFL,返回文件描述符的flag值
若cmd为F_SETFL,返回0
失败返回-1,并设置errorno值


fcntl函数常用的操作:
复制一个新的文件描述符
int newfd=fcntl(fd,F_FUPFD,0)
获取文件的属性标志
设置文件状态
常用的属性标志

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值