首页 > 代码库 > 文件的属性操作-Linux C
文件的属性操作-Linux C
1.
更改文件权限
#include<sys/types.h>#include<sys/stat.h>int chmod(const char *pathname,mode_t mode);int fchmod(int fd,mode_t mode);
成功返回0,出错返回-1
fchmod在已经打开的文件上进行操作。
在Linux Bash Shell下也可使用chmod命令直接更改
2.
更改文件所有者
#include<sys/types.h>#include<unistd.h>int chown(const char *pathname,uid_t owner,gid_t gruop);int fchown(int fd,uid_t owner,gid_t group);int lchown(const char *pathname,uid_t owner,gid_t owner);
成功返回0,出错返回-1
owner和group表示要赋予该文件的新所有者标识号和组标识号
fchown修改已经打开的文件
lchown修改的是链接符号文件,此时修改的是符号链接文件的所有者而不是被链接文件的所有属性
3.
重命名文件或目录
#include<stdio.h>int rename(const char *oldname,const char *newname)
成功返回0,出错返回-1
只有newname文件夹为空的时候才会被删除并将oldname重命名为name,其余和一般重命名限制一样。
4.
修改文件长度
#include<sys/types.h>#include<unistd.h>int truncate(const char *pathname,off_t len);int ftruncate(int fd,off_t len);
5.
文件信息
#include<sys/types.h>#include<sys/stat.h>int stat(const char *pathname,struct stat *sbuf);int fstat(int fd,struct stat *sbuf); int lstat(const char *pathname,struct stat *sbuf);
fstat针对已经打开的文件,lstat针对链接符合文件本身
6.
UNIX/LInux基本系统数据类型
caddr_t 核心地址。clock_t 表示系统时间(以时钟周期为单位)。comp_t 压缩的时钟滴答。dev_t 用于设备号。fd_set 文件描述集。fpos_t 文件位置。gid_t 数组值ID。ino_t i节点编号。off_t 用于文件大小和偏移量。mode_t 文件类型,文件创建模式。pid_t 进程ID和进程组IDptrdiff_t 是一种带符号整型,用于对两个指针执行减法运算后所得的结果。rlim_t 资源限制;size_t 反映内存中对象的大小(以字节为单位)。ssize_t 供返回字节计数或错误提示的函数使用。time_t 以秒为单位计时。uid_t 数值用户ID。wchar_t 能表示所有不同的字符码。所有这些类型在 ILP32 编译环境中保持为 32 位值,并会在 LP64 编译环境中增长为 64 位值。
-来自百度百科
stat结构体
struct stat{ mode_t st_mode;//文件对应的模式,文件,目录等 ino_t st_ino;//i-node节点号 dev_t st_dev;//设备号码 dev_t st_rdev;//特殊设备号码 nlink_t st_nlink;//文件的连接数 uid_t st_uid;//文件所有者 gid_t st_gid;//文件所有者对应的组 off_t st_size;//普通文件,对应的文件字节数 time_t st_atime;//文件最后被访问的时间 time_t st_mtime;//文件内容最后被修改的时间 time_t st_ctime;//文件状态(属性)改变时间 blksize_t st_blksize;//文件内容对应的块大小 blkcnt_t st_blocks;//文件内容对应的块数量}
-来自百度百科
7.
复制文件描述符
#include<unistd.h>int dup(int fd);int dup2(int fd,int fd2);
dup2的fd2表示自定义要复制的新文件描述符,若已存在,则关闭再重新打开完成复制
8.
#include<sys/types.h>#include<unistd.h>#include<fcntl.h>int fcntl(int fd,int cmd);int fcntl(int fd,int cmd,long arg);
cmd argument:
F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文件描述词,并且复制参数fd的文件描述词。执行成功则返回新复制的文件描述词。新描述符与fd共享同一文件表项,但是新描述符有它自己的一套文件描述符标志,其中FD_CLOEXEC文件描述符标志被清除。请参考dup2()。F_GETFD取得close-on-exec旗标。若此旗标的FD_CLOEXEC位为0,代表在调用exec()相关函数时文件将不会关闭。F_SETFD 设置close-on-exec 旗标。该旗标以参数arg 的FD_CLOEXEC位决定。F_GETFL 取得文件描述词状态旗标,此旗标为open()的参数flags。F_SETFL 设置文件描述词状态旗标,参数arg为新旗标,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变,其他位的改变将不受影响。F_GETLK 取得文件锁定的状态。F_SETLK 设置文件锁定的状态。此时flcok 结构的l_type 值必须是F_RDLCK、F_WRLCK或F_UNLCK。如果无法建立锁定,则返回-1,错误代码为EACCES 或EAGAIN。F_SETLKW 与F_SETLK 作用相同,但是无法建立锁定时,此调用会一直等到锁定动作成功为止。若在等待锁定的过程中被信号中断时,会立即返回-1,错误代码为EINTR。
9.
缓存与文件同步机制
#include<unistd.h>void sync(void);int fsync(int fd);
前者调用自动刷新,将队列中的所有缓存写入对应的文件,系统update一般每30s调用一次此函数。
后者指定要写入的文件,且会立即写入。
文件的属性操作-Linux C
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。