定位解决问题/经验/教训(2)-access和errno 问题
1.问题:xxx代码读取不到 access("/var/tmp/dir") 这个目录
- 代码是普通用户权限 普通用户权限无法访问 该目录 故 access 访问失败
2. 定位:通过打印 access 函数结束的 errno
- errno Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,
- 即下一次的错误码会覆盖掉上一次的错误。
- PS: 只有当系统调用或者调用lib函数时出错,才会置位errno!
3. 结果
access 没有权限 问题
打印 errno linux 结束后
(gdb) p errno
$2 = 13
errno: 13 Permission denied
4. 解决
更换用户权限或者跟换普通用户能访问的目录
5. access()函数的用法
- access 函数判断文件夹或者文件是否存在
- 函数原型: int access(const char *filename, int mode);
- 所属头文件:io.h
- filename:可以填写文件夹路径或者文件路径
- mode:0 (F_OK) 只判断是否存在
2 (R_OK) 判断写入权限
4 (W_OK) 判断读取权限
6 (X_OK) 判断执行权限 - 用于判断文件夹是否存在的时候,mode取0,判断文件是否存在的时候,
mode可以取0、2、4、6。 - 返回值: 若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。
参考:
https://blog.csdn.net/Zhanganliu/article/details/87937573