linux C access
【1】作用
确定文件的访问权限
【2】头文件
#include <unistd.h>
【3】函数定义
int access(const char * pathname, int mode);
【4】参数说明
pathname: 需要检测的文件路径名
mode: 参数为0时,表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。 这个函数还可以检查其它文件属性:
06 检查读写权限
04 检查读权限
02 检查写权限
01 检查执行权限
00 检查文件的存在性
【5】返回值
若所有欲查核的权限都通过了检查则返回0值,表示成功;只要有一权限被禁止则返回-1,表示失败。
【6】函数说明
access()会检查是否可以读/写某一已存在的文件。
参数mode有几种情况组合, R_OK,W_OK,X_OK 和F_OK。
R_OK,W_OK与X_OK分别用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。
由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。
例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。
【7】错误代码
EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。
EROFS 欲测试写入权限的文件存在于只读文件系统内。
EFAULT 参数pathname指针超出可存取内存空间。
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为一目录。
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。
【8】附加说明
使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。
【9】范例
// 范例1
#include <unistd.h>
int main()
{
if (access("/etc/passwd", R_OK) == )
printf("/etc/passwd can be read\n");
return ;
} // 范例2
#include <stdio.h>
#include <unistd.h> int file_exists(char *filename); int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ? "YES" : "NO");
return ;
} int file_exists(char *filename)
{
return (access(filename, ) == );
}
【10】相关函数
stat,open,chmod,chown,setuid,setgid
Good Good Study, Day Day Up.
顺序 选择 循环 总结
linux C access的更多相关文章
- linux下access函数
Linux内核总是根据进程的有效用户ID和有效组ID来决定一个进程是否有权访问某个文件. 因此,在编写调整用户ID的程序时,在读写一个文件之前必须明确检查其用户是否原本就有对此文件的访问权限. 为了实 ...
- linux之access函数解析
[lingyun@localhost access_1]$ ls access.c 实例一: [lingyun@localhost access_1]$ cat access.c /******** ...
- Linux C:access()时间条件竞争漏洞
access()函数用来检查调用进程是否可以对指定的文件执行某种操作. ================================================================ ...
- linux mysql access denied for user ‘root’@’localhost'(using password:YES)
linux安装完mysql后,使用程序连接报以上错误解决方法,重新设置密码,步骤如下 1.先停掉原来的服务 service mysqld stop 2.使用安全模式登陆,跳过密码验证 mysqld_s ...
- linux添加新LUN,无需重启
linux添加新LUN,无需重启 在给存储增加新的Lun时,在linux下一般是: A.重启操作系统B.重启HBA卡驱动 1. kudzu添加完新硬盘后,运行命令kudzu重新扫描新的硬件设备,类似a ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- 2016年 Delphi Roadmap
2016年delphi Roadmap 发布,这也是新公司的第一次发布路线图. 虽然稍微晚点( 原来说是1月份发布路线图),至少比过去积极点.喧嚣多年的靴子终于落地. Linux 的支持终于正式公布. ...
- Rhel6-lanmp架构配置文档
l--操作系统:windows linux unix mac OS a--网页发布软件:apache nginx iis m--数据库:mysql pgsql oracle... p--网页 ...
- RabbitMQ安装与初始配置
[TOC] 本文只讨论linux下的Rabbitmq安装. Erlang安装 rabbitmq依赖于Erlang,需先安装,推荐安装rabbitmq/erlang-rpm: #clone源码 git ...
随机推荐
- Kubernetes集群部署之四Master节点部署
Kubernetes Master节点部署三个服务:kube-apiserver.kube-controller-manager.kube-scheduler和一个命令工具kubectl. Maste ...
- vs2017离线安装且安装包不占用C盘空间
[参考]vs2017离线安装且安装包不占用C盘空间 第一步:下载离线安装包 https://www.visualstudio.com/zh-hans/downloads/ 在官方地址下载vs_prof ...
- SwipeToLoadLayout
SwipeToLoadLayout SwipeToLoadLayout is a reusable pull-to-refresh and pull-to-load-more widget. Supp ...
- Java中excel转换为jpg/png图片 采用aspose-cells-18.6.jar
一 Java中excel转换为jpg/png图片 package com.thinkgem.jeesite.modules.task.util; import com.aspose.cells.Im ...
- Spring data Jpa 分页从1开始,查询方法兼容 Mybatis,分页参数兼容Jqgrid
废话少说 有参数可以设置 在org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties 中 /** * Whethe ...
- LeetCode - 767. Reorganize String
Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...
- kaggle竞赛-保险转化-homesite
时间格式的转化 查看数据类型 查看DataFrame的详细信息 填充缺失值 category 数据类型转化 模型参数设定 结论 该项目是针对kaggle中的homesite进行的算法预测,使用xgbo ...
- share drive 无效
docker设置的share dirve怎么按都无效 试了几遍都不行,想想刚才电脑系统更新了,然后查了下百度,发现是电脑策略的问题,设置成经典的就可以了
- 6.2 Pandora 实操 - 数据展示
具体每个图可以到蛋蛋团仪表盘里,查看配置即可.过程中没有截图记下来. 配置方法,建议参考已存在的图表参数,照样配,会比较快. 配置网站访问量 配图结果 参考 报表说明
- mui 普通新闻文字列表 图文新闻列表
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...