文件的属性操作-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和进程组ID ptrdiff_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调用一次此函数。
后者指定要写入的文件,且会立即写入。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。