open,create:
fcntl.h
sys/types.h
sys/stat.h
int open(const char* pathname, int flags, [mode_t mode]);
flags:O_RDONLY O_WRONLY O_RDWR
O_CREAT O_EXCL O_TRUNC O_APPEND //根据[mode_t mode]中给出的权限使用
int creat(const char *pathname, mode_t mode); //mode为赋予文件的访问权限
write,read:
unistd.h
ssize_t write(int fd, const void *buffer, size_t n); //把buffer写入fd,返回实际写入的字节数
ssize_t read(int fd, void *buffer, size_t nbytes); //nbytes是从fd中读取的字节数,把fd写入buffer,返回世界写入的字节数
stat:
sys/stat.h
int stat(const char *pathname, struct stat *infobuf);
int stat(const char *path, struct stat *infobuf);
int fstat(int fd, struct stat *infobuf);
功能:获取文件属性
stat:通过文件路径获取
fstat:通过文件描述符获取
lstat:通过文件路径获取,若查询符号链接文件,仅查其本身属性而不是所链接文件属性。
参数:
infobuf:返回的文件属性(结构体)
返回值:成功返回0,否则返回-1
st_mode:
解释st_mode标志的掩码包括:
S_IFMT 文件类型
S_IRWXU 所属者的读/写/执行权限
S_IRWXG 所属组的读/写/执行权限
S_IRWXO 其他用户的读/写/执行权限
#define S_IFBLK 0060000 文件是一个特殊块设备
#define S_IFDIR 0040000 文件是一个目录
#define S_IFCHR 0020000 文件是一个特殊的字符设备
#define S_IFIFO 0010000 文件是一个FIFO设备
#define S_IFREG 0100000 文件是一个普通文件
#define S_FLNK 0120000 文件是一个符号链接
if ((infobuf.st_mode & S_IFMT) == S_IFDIR)
辅助确定文件类型的宏定义
S_ISBLK 测试是否是特殊的块设备文件
S_ISCHR 测试是否是特殊的字符设备文件
S_ISDIR 测试是否是目录
S_ISFIFO 测试是否是FIFO设备
S_ISREG 测试是否是普通文件
S_ISLNK 测试是否是符号链接文件
lseek:
unistd.h
sys/types.h
off_t lseek(int fd, off_t offset, int start_flags); //改变已打开文件的位置
offset标识新位置相对起始位置的字节数
start_flags参数含义:SEEK_SET offset是从文件的起始位置开始算,通常值为0
SEEK_CUR offset相对文件读写的当前位置开始算,通常值为1
SEEK_END offset相对文件尾而言,通常值为2
通过用户ID得到用户信息:
pwd.h
struct passwd *getpwuid(uid_t uid); //成功返回passwd结构体指针,否则返回NULL
struct passwd
{
char *pw_name; //用户名
char *pw_passwd; //用户密码
uid_t pw_uid; //用户ID
gid_t pw_gid; //用户所在组ID
char *pw_gecos; //真实名字
char *pw_dir; //用户主目录
char *pw_shell //用户所用Shell
};
通过用户组ID得到用户组信息
grp.h
struct group *getgrgid(gid_t gid); //成功返回结构体指针,否则返回NULL
struct group
{
char *gr_name; //组名
char *gr_passwd; //组密码
gid_t gr_gid; //组ID
char **gr_mem; //组成员列表
};
chmod:
sys/stat.h
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
chown:
unistd.h
int chown(const char *path, uid_t owner, gid_t group); \\改变文件或目录的所有者或组
link:
unistd.h
int unlink(const char *pathname);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
int readlink(char *pathname,char *buf, int bufsize);
fcntl.h
sys/types.h
sys/stat.h
int open(const char* pathname, int flags, [mode_t mode]);
flags:O_RDONLY O_WRONLY O_RDWR
O_CREAT O_EXCL O_TRUNC O_APPEND //根据[mode_t mode]中给出的权限使用
int creat(const char *pathname, mode_t mode); //mode为赋予文件的访问权限
write,read:
unistd.h
ssize_t write(int fd, const void *buffer, size_t n); //把buffer写入fd,返回实际写入的字节数
ssize_t read(int fd, void *buffer, size_t nbytes); //nbytes是从fd中读取的字节数,把fd写入buffer,返回世界写入的字节数
stat:
sys/stat.h
int stat(const char *pathname, struct stat *infobuf);
int stat(const char *path, struct stat *infobuf);
int fstat(int fd, struct stat *infobuf);
功能:获取文件属性
stat:通过文件路径获取
fstat:通过文件描述符获取
lstat:通过文件路径获取,若查询符号链接文件,仅查其本身属性而不是所链接文件属性。
参数:
infobuf:返回的文件属性(结构体)
返回值:成功返回0,否则返回-1
st_mode:
解释st_mode标志的掩码包括:
S_IFMT 文件类型
S_IRWXU 所属者的读/写/执行权限
S_IRWXG 所属组的读/写/执行权限
S_IRWXO 其他用户的读/写/执行权限
#define S_IFBLK 0060000 文件是一个特殊块设备
#define S_IFDIR 0040000 文件是一个目录
#define S_IFCHR 0020000 文件是一个特殊的字符设备
#define S_IFIFO 0010000 文件是一个FIFO设备
#define S_IFREG 0100000 文件是一个普通文件
#define S_FLNK 0120000 文件是一个符号链接
if ((infobuf.st_mode & S_IFMT) == S_IFDIR)
辅助确定文件类型的宏定义
S_ISBLK 测试是否是特殊的块设备文件
S_ISCHR 测试是否是特殊的字符设备文件
S_ISDIR 测试是否是目录
S_ISFIFO 测试是否是FIFO设备
S_ISREG 测试是否是普通文件
S_ISLNK 测试是否是符号链接文件
lseek:
unistd.h
sys/types.h
off_t lseek(int fd, off_t offset, int start_flags); //改变已打开文件的位置
offset标识新位置相对起始位置的字节数
start_flags参数含义:SEEK_SET offset是从文件的起始位置开始算,通常值为0
SEEK_CUR offset相对文件读写的当前位置开始算,通常值为1
SEEK_END offset相对文件尾而言,通常值为2
通过用户ID得到用户信息:
pwd.h
struct passwd *getpwuid(uid_t uid); //成功返回passwd结构体指针,否则返回NULL
struct passwd
{
char *pw_name; //用户名
char *pw_passwd; //用户密码
uid_t pw_uid; //用户ID
gid_t pw_gid; //用户所在组ID
char *pw_gecos; //真实名字
char *pw_dir; //用户主目录
char *pw_shell //用户所用Shell
};
通过用户组ID得到用户组信息
grp.h
struct group *getgrgid(gid_t gid); //成功返回结构体指针,否则返回NULL
struct group
{
char *gr_name; //组名
char *gr_passwd; //组密码
gid_t gr_gid; //组ID
char **gr_mem; //组成员列表
};
chmod:
sys/stat.h
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
chown:
unistd.h
int chown(const char *path, uid_t owner, gid_t group); \\改变文件或目录的所有者或组
link:
unistd.h
int unlink(const char *pathname);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
int readlink(char *pathname,char *buf, int bufsize);