首页 > 代码库 > 文件的属性操作-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