今天主机频道就和大家分享一下如何使用Linux access函数的相关知识点。内容详实,逻辑清晰。我相信大部分人都太了解这些知识了,所以我把这篇文章分享给大家,供大家参考。希望你看完这篇文章有所收获。让我们一起来看看吧。
linux c access的功能是确定文件的访问权限,该功能的使用语法是“IntAccess (constchar * pathname,int mode);”,其中参数“路径名”表示要检测的文件路径名。
linux C访问
[1]功能
确定文件的访问权限
[2]头文件
# include & ltunistd.h & gt
[3]功能定义
int access(const char * pathname,int模式);
[4]参数描述
路径名:要检测的文件的路径名。
Mode:参数为0时,表示检查文件是否存在。如果文件存在,则返回0;如果不存在,则返回-1。此功能还可以检查其他文件属性:
06检查读写权限
04检查读取权限
02检查写权限
01检查执行权限
00检查文件是否存在。
[5]返回值
如果所有要检查的权限都通过了检查,则返回值0,表示成功;只要有一个权限被禁止,就会返回-1,表示失败。
[6]功能描述
Access()检查现有文件是否可以读/写。
参数模式有几种组合,比如R_OK,W_OK,X_OK,F_OK。
R_OK、W_OK和X_OK用于检查文件是否有读写和执行的权限。F_OK用于判断文件是否存在。
因为access()只检查权限,不考虑文件形式和文件内容,如果一个目录被指示为“可写”,则意味着可以在该目录中创建新文件,但并不意味着该目录可以被当作文件。
比如你会发现DOS中的文件有“可执行”权限,但是用executable()执行时,就会失败。
[7]错误代码
由EACCESS参数pathname指定的文件不符合所需测试的权限。
要在EROFS中测试写权限的文件存在于只读文件系统中。
默认参数路径名指针超出了可访问的内存空间。
EINVAL参数模式不正确。
ENAMETOOLONG参数路径名太长。
ENOTDIR参数pathname是一个目录。
ENOMEM内核内存不足。
ELOOP参数pathname有太多符号连接问题。
EIO I/O访问错误。
[8]补充说明
使用access()进行用户验证,所以要小心。例如,在access()之后创建open()的空文件可能会导致系统安全问题。
[9]例子
//示例1
# include & ltunistd.h & gt
int main()
{
如果(access(& quot;/etc/passwd",R_OK) == 0)
printf(& quot;/etc/passwd可以被读取\ n & quot);
返回0;
}
//示例2
# include & ltstdio.h & gt
# include & ltunistd.h & gt
int file _ exists(char * filename);
int main(void)
{
printf(& quot;不存在。存在文件:% s \ n & quot,
文件存在(& quot不存在。FIL & quot) ?"是的& quot:& quot不& quot);
返回0;
}
int file _ exists(char *文件名)
{
return (access(filename,0)= = 0);
}
[10]相关函数
stat,open,chmod,chown,setuid,setgid
评论前必须登录!
注册