文件属性及目录相关系统调用

1读取文件属性
1.1读取文件属性函数
Stat 函数
Int stat(const char * _estrict_file,struct stat*_restrict_buf)
第一个参数为欲读取状态的文件(路径字符串),可以使用绝对路径或相对路径(相对路径是相当于当前的工作目录)
第二个参数为文件属性临时存放位置,其类型为struct stat
如果成功将在第二个参数中存储该文件的基本信息,并返回0,否则返回-1,并设置errno全局变量
如果stat函数的第1个参数为符号链接文件,次读取的属性为源文件的属性,因此,要获取链接文件自身的属性,则需要调用lstat函数
Lstat函数
Int lstat(_const char *_restrict_file,struct stat *_restrict_buf)
Strcuct stat 结构体原型

struct stat {
   
mode_t st_mode;		//文件类型及权限  
ino_t     st_ino;    	 //inode值
    dev_t    st_rdev;   	//设备号
    nlink_t   st_nlink;  	//硬链接设备数
    uid_t     st_uid;     //用户ID
    gid_t     st_gid;     //用户组ID
    off_t     st_size;     //文件大小
    time_t   st_atime; 	//最后一次访问时间
    time_t   st_mtime;	//最后一次修改时间
    time_t   st_ctime;  	//最后一次改变属性时间
    long      st_blksize;   //数据块大小
    long      st_blocks;   //数据块数量
};

1.2文件类型宏操作
S_ISREG(mode) 普通文件
S_ISDIR(mode) 目录文件
S_ISCHAR(mode) 字符文件
S_ISBLK() 块文件
S_ISFIFO() fifo
S_ISLNK() 符号链接
S_ISSOCK() socket文件

如果要测试打开的文件是哪种类型,则可以使用isfdtype()函数
Int isfdtype(int _fd,int _fdtype)
第一个参数为文件描述符,
第二个参数为所对应的的文件类型

1.3文件类型的宏定义如下:
#define S_IFSOCK 0140000 //socket文件
#define S_IFLINK 0120000 //链接文件
#define S_IFREG 0100000 //普通文件
#define S_IFBLK 0060000 //块文件
#define S_IFDIR 0040000 //目录文件
#define S_IFCHR 0020000 //字符文件
#define S_IFIFO 0010000 fifo文件

调用isfdtype()函数实例

#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
int main(int argc,char *argv[])
{
   
	int fd=-1;
	fd=open(argv[1],O_RDONLY); //以只读方式打开文件
	if(fd==-1)
	{
   
		perror("open");
		return -1;
	}
	if(isfdtype (fd,S_IFREG)==1) // 判断是否为普通文件
	{
   
		printf("%s:regular file\n",argv[1]);
	}
    close(fd);
	return 0;
}

2修改文件权限
2.1修改文件权限位函数
Chmod()函数
在shell层面上,用户可以使用chmod命令来修改某个文件的权限,在应用编程中,如果要对文件的权限位进行修改,可以使用chmod()函数来实现。
Int Chmod(_const char *file,mode_t mode);
第一个参数 const char * file 为要修改权限的文件名,
第二个参数为修改的权限描述符,mode_t 原型是unsigned int。
如果执行成功,返回0,否则返回-1 并设置errno全局变量;
如果是符号链接文件,chmod修改的是源文件权限,如果要修改其本身的权限,可使用lchmod函数
Int lchmod(const char *file,unsigned int mode);
对于已打开的文件,可以使用fchmod()函数
Int fchmod(int fd,unsigned int mode);
第一个为已打开的文件的文件描述符,
如果成功返回0 否则返回-1;

2.2文件访问权限位
在linux系统的/usr/include/sys/stat.h
在文件权限位的表示为

#define S_IRUSR _S_IREAD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值