判断目录或文件是否存在
access
判断是否具有存取文件的权限
相关函数 stat,open,chmod,chown,setuid,setgid
表头文件 #include<unistd.h>
定义函数 int access(const char * pathname, int mode);
函数说明
access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合, R_OK,W_OK,X_OK 和F_OK。
- R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。
- F_OK则是用来判断该文件是否存在。
由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。
返回值
若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。
错误代码
EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。
EROFS 欲测试写入权限的文件存在于只读文件系统内。
EFAULT 参数pathname指针超出可存取内存空间。
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为一目录。
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。
stat
1 struct stat {
2 mode_t st_mode; // file type & mode(permissions)
3 ino_t st_ino; // i-node number(serial number)
4 dev_t st_dev; // device number(filesystem)
5 dev_t st_rdev; // device number for specials files
6 nlink_t st_nlink; // number of links
7 uid_t st_uid; // user ID of owner
8 gid_t st_gid; // group ID of owner
9 off_t st_size; // size in bytes, for regular files
10 time_t st_atime; // time of last access
11 time_t st_mtime; // time of last modification
12 time_t st_ctime; // time of last file status change
13 long st_blksize; // best I/O block size
14 long st_blocks; // number of 512-byte blocks allocated
15 };
stat.h中有判断是什么文件的宏:
S_ISREG( ) 普通文件
S_ISDIR( ) 目录文件
S_ISCHR( ) 字符特殊文件
S_ISBLK( ) 块特殊文件
S_ISFIFO( ) 管道或F I F O
S_ISLNK( ) 符号连接( P O S I X . 1或S V R 4无此类型)
S_ISSOCK( ) 套接字(P O S I X . 1或S V R 4无此类型)

浙公网安备 33010602011771号