Linux - 文件属性及目录相关系统调用
stat()/fstat()/lstat()系统调用
功能
获取文件状态
头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
函数原型
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
与stat()差别:为符号连接时,lstat()返回连接自身状态
返回值
成功时返回0
否则-1
struct stat结构定义
struct stat {
mode_t st_mode; /*file type & mode*/
ino_t st_ino; /*inode number (serial number)*/
dev_t st_rdev; /*device number (file system)*/
nlink_t st_nlink; /*link count*/
uid_t st_uid; /*user ID of owner*/
gid_t st_gid; /*group ID of owner*/
off_t st_size; /*size of file, in bytes*/
time_t st_atime; /*time of last access*/
time_t st_mtime; /*time of last modification*/
time_t st_ctime; /*time of last file status change*/
long st_blksize; /*Optimal block size for I/O*/
long st_blocks; /*number 512-byte blocks allocated*/
};
access()系统调用
功能
按实际用户ID和实际组ID测试文件存取权限
头文件
#include <unistd.h>
函数原型
int access(const char *pathname, int mode);
返回值
成功时返回0
否则-1
mode参数说明
R_OK
W_OK
X_OK
F_OK
umask()系统调用
功能
为进程设置文件存取权限屏蔽字,并返回以前的值
头文件
#include <sys/types.h>
#include <sys/stat.h>
函数原型
mode_t umask(mode_t mask);
chmod()/fchmod()系统调用
功能
更改文件权限
头文件
#include <sys/types.h>
#include <sys/stat.h>
函数原型
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
返回值
成功时返回0
失败返回-1
chown()/fchown()/lchown()系统调用
功能
变更文件宿主
头文件
#include <sys/types.h>
#include <unistd.h>
函数原型
int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
若path为符号连接, lchown()改变连接本身的所有者或组,chown()则改变连接所指向文件的所有者或组
返回值
成功时返回0
失败返回-1
link()/unlink()系统调用
功能
创建/删除一个硬链接
头文件
#include <unistd.h>
函数原型
int link(const char *oldpath, const char *newpath);
int unlink(const char *pathname);
删除一个文件的目录项并减少它的链接数
返回值
成功时返回0
失败返回-1
symlink()/readlink()系统调用
功能
创建/删除一个符号链接
头文件
#include <unistd.h>
函数原型
int symlink(const char *oldpath, const char *newpath);
返回值
成功时返回0
否则-1
int readlink(const char *path, char *buf, size_t bufsiz);
返回值
成功时返回放置在buffer中的字符数
否则-1
目录处理相关系统调用
创建/删除目录
mkdir()/rmdir()
更改/获取目录
chdir()/fchdir(), getcwd()
读取目录信息
opendir()/closedir()
readdir()
telldir()
seekdir()
mkdir()/rmdir()系统调用
功能
创建/删除一个空目录
头文件
#include <sys/stat.h>
#include <sys/types.h>
函数原型
int mkdir(const char *pathname, mode_t mode);
int rmdir(const char *pathname);
返回值
成功时返回0
失败时返回-1
chdir()/fchdir()系统调用
功能
更改工作目录
头文件
#include <unistd.h>
函数原型
int chdir(const char *path);
int fchdir(int fd);
返回值
成功时返回0
失败时返回-1
说明
当前工作目录是进程的属性,所以该函数只影响调用chdir的进程本身
getcwd()系统调用
功能
获得当前工作目录的绝对路径
头文件
#include <unistd.h>
函数原型
char *getcwd(char *buf, size_t size);
返回值
成功时返回buf
出错则为NULL
读取目录信息
数据结构
DIR, struct dirent
基本操作
opendir()/closedir()
readdir()
telldir()
seekdir()
DIR
目录流对象
头文件
<dirent.h>
定义形式
typedef struct _dirstream DIR;
struct dirent
目录项
头文件
<dirent.h>
定义
ino_t d_ino; /* inode号*/
char d_name[NAME_MAX + 1]; /* 文件名*/
目录基本操作
功能
打开、关闭、读、定位
头文件
#include <sys/types.h>
#include <dirent.h>
函数原型
DIR *opendir(const char *name);
int closedir(DIR *dir);
struct dirent *readdir(DIR *dir);
off_t telldir(DIR *dir); //获取目录流读取位置
void seekdir(DIR *dir, off_t offset);
fopen()函数
功能
打开文件流
头文件
#include <stdio.h>
函数原型
FILE *fopen(const char *filename, const char *mode);
mode参数说明
“r”: 以读方式打开文本文件
“w”: 以写方式创建一个文件,覆盖老文件
“a”: 以追加方式打开文件
“r+”: 以读写方式打开一个现存文件
“w+”:以读写方式打开一个文件
若不存在,将创建之
若存在,将覆盖原文件
“a+”: 以读及追加方式打开文件,若不存在,将创建之
“b”:以二进制模式打开文件
“t”:以文本模式打开文件
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。