文件的属性操作-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调用一次此函数。

后者指定要写入的文件,且会立即写入。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。