Linux系统编程.NO6——文件属性与链接文件

4.文件属性管理

4.1.获取文件属性函数

**1. int stat(const char file_name,struct stat buf);
函数用于获取指定文件的属性并且放入buf中,返回值为-1表示函数执行错误,第一个参数是字符串,也就是文件名,第二个参数必须要是一个struct stat类型的值,然后取其地址就可以了,如:
struct stat buf;
stat(“/etc/passwd”,&buf);得到的buf就是该文件的属性,使用buf.st_mode即可得到该文件的mode值。
头文件是<sys/stat.h><sys/types.h><unistd.h>
2. int fstat(int filedes,struct stat * buf);
函数第一个参数是文件描述符,该函数和stat函数唯一的区别就是第一个参数必须要是文件描述符,所以使用这个函数之前要先打开(open)文件。
头文件是<sys/stat.h><sys/types.h><unistd.h>
*3.int lstat(const char file_name,sturct stat * buf);
该函数和stat函数唯一的区别就是该函数的对象是一个符号链接文件,返回结果也是这个链接文件本身的属性,如果用stat函数作用于一个链接文件,那么得到的结果是链接文件源文件的属性。
头文件是<sys/stat.h><sys/types.h><unistd.h>

2.用户/组ID与名字的转换函数

1. struct passwd * getpwuid(uid_t uid);
该函数作用是根据文件的uid查找文件的其他用户属性,比如文件所有者之类的信息,参数是文件的uid,需要先得到(stat())文件uid,再使用,需要定义一个struct passwd 类型的指针来接收函数返回值。指针指向的即是该文件的passwd属性。
头文件是<sys/types.h><pwd.h>
*2. struct group getgrgid(gid_t gid);
函数作用是根据文件gid查找文件的组信息,如组员、组名、组ID等,同样要先得到(stat())文件的gid用作参数,定义一个struct group 类型的指针去接受返回值,操作成功则指针指向这个文件的组信息结构体。
头文件是<sys/types.h><grp.h>

3. 时间格式化函数

***size_t strftime(char strDest,size_t maxsize,const char format,const struct tm timeptr);
第一个参数应该是一个事先定义好的一个字符数组名;第二个参数是输出字符个数上限,这个数字应该小于等于定义好的字符数组最大值;第三个参数是限定输出内容,格式如“%d %H :%C”,双引号内%是转义符,转义内容有很多,多个转义符之间也可以添加空格冒号之内任意需要的符号,最后一个参数是一个struct tm *类型的值,最后就可以将需要的内容放在strDest字符串中,然后输出字符串,就可以得到结果。
%a 星期几的简写;%A 星期几的全称;%b 月分的简写;%B 月份的全称;%c 标准的日期的时间串;%C 年份的后两位数字;%d 十进制表示的每月的第几天;%D 月/天/年;%e 在两字符域中,十进制表示的每月的第几天;%F 年-月-日;%g 年份的后两位数字,使用基于周的年;%G 年分,使用基于周的年;%h 简写的月份名;%H 24小时制的小时;%I 12小时制的小时;%j 十进制表示的每年的第几天;%m 十进制表示的月份;%M 十时制表示的分钟数;%n 新行符;%p 本地的AM或PM的等价显示;%r 12小时的时间;%R 显示小时和分钟:hh:mm;%S 十进制的秒数。

4. 硬链接和软连接相关函数

**1. int link(char pathname1,char pathname2);
功能是创建一个硬链接文件,第一个参数是原文件,第二个参数是硬链接文件名字。返回值是0,-1对错码。
头文件是<unistd.h>
*2. int unlink(char pathname);
函数用于删除一个文件,但是如果该文件有多个硬链接,那么执行一次仅仅是删除一个硬链接,直到最后才会删除原文件。返回值是0,-1对错码。
头文件是<unistd.h>
*3. int symlink(char actualpath,char * sympath);
功能是创建一个符号链接(软链接),第一个参数表示原文件,第二个参数表示符号链接名。返回值是0,-1对错码。
头文件是
4. int readlink(char * pathname,char * buf,int bufsize);
功能是读取一个软链接的原文件,第一个参数是符号链接名,第二个参数是存原文件名的缓存区域,应该事先定义好,第三个参数是缓存区大小,应该要小于等于定义时的大小,返回值错误返回0,成功返回实际写入缓冲区的字节数。
头文件是<unistd.h>

5. 复制文件描述符

1. int dup(int oldfd);
一个文件描述符,返回值就是这个复制得到的文件描述符。
头文件是<unistd.h>
2. int dup2(int oldfd,int newfd);
复制一个文件描述符,第一个参数是文件的原描述符,第二个参数是希望得到的新的文件描述符,但是两个函数实际上都是复制一个描述符指向同一个文件。
头文件是<unistd.h>

6. 修改文件属性函数

1. int chown(const char * path,uid_t owner,gid_t group);
函数用于改变指定文件的主人和组,第一个参数是指定的文件路径名称,第二个参数是新的文件主ID,第三个参数是新的组ID。返回值是0,-1对错码。
头文件是<sys/types.h><unistd.h>
2. int fchown(int fd,uid_t owner,gid_t group);
也是用于修改指定文件的主人和所在组,不过第一个参数要使用文件描述符,所以需要先打开文件获得文件描述符。
头文件是<sys/types.h><unistd.h>
*3. int lchown(const char path,uid_t owner,gid_t group);
函数任然是用于修改指定文件的主人和所在组,不过文件对象是符号链接文件才可以。
头文件是<sys/types.h><unistd.h>
*4. int chmod(const char path,mode_t mode);
函数用于改变指定文件的访问权限,第一个参数是指定文件的文件路径名,第二个参数是新的访问权限。
头文件是<sys/types.h><stat.h>
5. int fchmod (int fd,mode_t mode);
函数用于改变指定文件的访问权限,第一个参数是指定文件文件描述符,所以需要先打开文件,第二个参数是新的访问权限。
头文件是<sys/types.h><stat.h>
6. int utime(const char * filename,struct utimebuf * buf);
用于改变指定文件的访问时间和修改时间。第一个参数是要修改文件的文件名字,第二个参数是新的访问时间和修改时间。
头文件是<sys/types.h><utime.h>
*7. int truncate(const char path,off_t length);
用于改变文件的长度,第一个参数是文件的路径名,第二个参数是文件的指定长度。
头文件是<sys/types.h><unistd.h>
8. int ftruncate(int fd,off_t length);
用于改变文件的长度,第一个参数是文件的文件描述符,第二个参数是文件的指定长度。
头文件是<sys/types.h><unistd.h>

在实际应用中,这篇博客的内容实际上很少使用,应为一般实现这些函数功能都会选择使用命令来实现,所以这也告诉我们,在使用Linux的时候,要合理地使用命令和程序两种控制控制方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值