判断目录或文件是否存在

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无此类型)

posted @ 2020-02-18 19:01  friedCoder  阅读(656)  评论(0)    收藏  举报