这一章的函数很多,为方便记忆,现将大部分(文件截断、读目录、时间相关的函数未总结)总结如下:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#define BUFSIZE
struct stat buf;
uid_t owner;
gid_t group;
stat("pathname", &buf);
fstat(fd, &buf);
lstat("pathname", &buf);
fstatat(fd, "pathname", &buf, AT_SYMLINK_NOFOLLOW);
chmod("pathname", st_mode);
fchmod(fd, st_mode);
fchmodat(fd, "pathname", st_mode, AT_SYMLINK_NOFOLLOW);
chown("pathname", owner, group);
fchown(fd, owner, group);
lchown("pathname", owner, group);
fchownat(fd, "pathname", owner, group, AT_SYMLINK_NOFOLLOW);
access("pathname", R_OK);
faccessat(fd, "pathname", R_OK, E_ACCESS);
umask(0);
umask(st_mode);
link("pathname", "newpath");
linkat(efd, "pathname", nfd, "newpath", AT_SYMLINK_FOLLOW);
unlink("pathname");
unlinkat(fd, "pathname", AT_REMOVEDIR);
remove("pathname");
rename("pathname", "newpath");
renameat(efd, "pathname", nfd, "newpath");
symlink("pathname", "linkpath");
symlinkat("pathname", fd, "linkpath");
readlink("pathname", &buf, BUFSIZE);
readlinkat(fd, "pathname", &buf, BUFSIZE);
mkdir("pathname", st_mode);
mkdirat(fd, "pathname", st_mode);
rmdir("pathname");
chdir("pathname");
fchdir(fd);
getcwd(&buf, BUFSIZE);
规律:
1.返回值:
umask返回之前的文件模式创建屏蔽字,readlink和readlinkat返回已读到的字节数,getcwd失败时返回NULL;剩下的,成功,返回0,失败,返回-1。
2.函数名:
只有umask,remove,rmdir,getcwd,chdir没有带at形式的函数,但chdir有带f形式的函数;剩下的都有带at形式的函数
3.参数:
原始函数名用的都是路径(可以是相对的,也可以是绝对的);函数名前加<strong>f</strong>的,用的是文件描述符<strong>fd</strong>;函数名前加<strong>f</strong>,函数名后又加<strong>at</strong>的,文件描述符和路径名都作为参数
4.常数:
AT_SYMLINK_NOFOLLOW用于:fstatat、fchownat、fchmodat AT_SYMLINK_FOLLOW用于:linkat AT_REMOVEDIR用于:unlinkat E_ACCESS用于:faccessat
5.flag:
要么是第4点的常数,要么是0(代表默认值)