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”:以文本模式打开文件

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