linux c 编程实战:文件操作总结(三)
来源:互联网 发布:修改网络游戏数据 编辑:程序博客网 时间:2024/05/19 12:13
1.文件属性操作
每个用户有一个对应的uid,当uid为0的时候,此用户具有root权限
2.获取文件属性
- stat,fstat,lstat获取文件属性
#include<stat.h>#include<sys/types.h>#include<unistd.h>int stat(const char * filename, struct stat * buf)int fstat(int fd, struct stat * buf)int lstat(const char * filename, struct stat * buf)//函数执行成功返回0,失败返回-1
参数const char * filename是要获取的文件名,stat保获到的文件的信息,fstat是文件描述符来获取指定的文件名的,lstat是获取符号链接类文件的状态信息,它不像stat那样是获取的链接文件所指向的文件的信息,而是获得链接文件本身的状态信息。
struct stat{ st_dev: 文件的设备编号 st_ino: 文件的i-node st_mode: 文件的类型和存取权限 st_nlink: 连到该文件的硬链接数目 st_uid: 文件所有者的用户id st_gid: 文件所有组的组id st_size: 文件的大小,对于符号链接是连接到的文件名的长度(字节为单位) st_blksize: 文件的I/O缓冲区大小 st_blcoks: 占用文件区块的个数 st_atime: 文件最近一次被访问的时间 st_mtime: 文件最近一次被修改的时间 //内容被修改 st_ctime: 文件最近一次被更改的时间 //存取权限,文件属性被更该}//如果一个目录被设置了粘住位,则此目录下的文件只能有文件所有者,目录所有者,root用户进行删除或改名
st_mode包含的文件类型信息,定义了一系列标准的宏:
S_ISLNK:是否为符号链接S_ISREG:是否为一般文件
S_ISDIR:是否为目录
S_ISCHR:是否为字符设备文件
S_ISBLK:是否为块设备文件
S_ISFIFO:是否为FIFO(先进先出)
S_ISSOCK:是否为socket
3.设置文件属性
- chmod/fchmod函数用来修改文件的存取权限(见文件总结一)
- chown/fchown/lchown函数用于修改文件的用户id和组id
#include<sys/types.h>#include<unistd.h>int chown(const char * path, owner, group)int fchown(int fd, owner, group)int lchown(const char * path, owner, group)//函数执行成功返回0,失败返回-1//文件的所有者只能改变文件的组id为其所属组中的一个,超级用户才能修改文件的所有者id,超级用户可以更改任意用户组id,如果owner,group为-1,那么文件的用户id和组id不会改变
- truncate/ftruncate 函数用来改变文件的大小
#include<unistd.h>#include<sys/types.h>int truncate(const char * path, int size)int ftruncate(int fd, int size)//如果原来文件的大小比参数大,那么超过的部分会被删除,如比参数小,那么文件会被扩展。文件的串st_ctime,st_mtime将会被更新
- utime函数可以改变任何文件的st_mtime,st_ctime域
#include<sys/types.h>#include<utime.h>int utime(const char * filename, struct utimebuf *buf)#include<sys/time.h>int utimes(char * filename, struct timeval *tvp)//函数调用成功返回0,失败返回-1//这个函数的详细用法情大家自行百度,不再赘述
- umask用来设置文件创建时的屏蔽字
#include<sys/stat.h>#include<sys/types.h>int umask(int mask)//当进程创建一个新文件的时候,这个文件的存取权限其实是mode和~umask与运算以后得到的结果//umask的作用就是修改进程的umask
- rename 函数用来进行文件的移动或文件的改名
#include<stdio.h>int rename(const char * oldpath, const char * newpath)//函数调用成功返回0,失败返回-1。//若newpath所指定的文件已经存在,那么这个文件会被删除
- unlink和remove被用来进行文件的删除
#include<unistd.h>int unlink(const char * pathname)int remove(const char * pathname)//函数执行成功返回0,失败返回-1//如果文件正在被进程使用,暂时不删除这个文件,等进程使用完后在进行删除,若文件名是一个符号链接,则只删除这个链接,若文件名为FIFO(命名管道),socket(套接字)则该名字被删除,但已经打开这些文件的进程仍能使用这些文件
0 0
- linux c 编程实战:文件操作总结(三)
- linux c 编程实战:文件操作总结(一)
- linux c 编程实战:文件操作总结(二)
- linux c 编程实战: 文件操作总结(四)
- linux c 编程实战:进程控制总结(三)
- Linux C编程实战——第六章 文件操作
- Linux-C成长之路(三):Linux C编程实战之路 基本IO函数操作
- Linux C文件操作(三)
- Linux下的C编程实战(三)
- linux c 关于文件操作的编程总结
- linux c 编程实战:进程控制总结(一)
- linux c 编程实战:进程控制总结(二)
- linux c 编程实战:进程控制总结(四)
- linux-C编程-文件操作
- linux-C编程-文件操作
- [Linux C编程]文件操作
- [Linux C编程]文件操作
- [Linux C编程]文件操作
- a 标签事件
- 字符串模式匹配——KMP算法(时间复杂度为O(m+n))
- 序列化Serializable
- OpenGL基础教程(2):着色器
- Android SDK Manager无法更新安装或者速度慢
- linux c 编程实战:文件操作总结(三)
- 【坐在马桶上看算法】算法6:只有五行的Floyd最短路算法
- eclipse中本地一个项目引用另一个项目的方法
- 【Light】[1062]Crossed Ladders
- 今天继续讲c/c++的小知识啊
- 【CodeForces】670D2 - Magic Powder - 2(二分)
- Ubuntu14.04下单机、伪分布式配置Hadoop2.7.2
- hdu 5753 Permutation Bo
- POJ1988->并查集