`
灵动的水
  • 浏览: 190897 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Linux access函数功能描述: 检查调用进程是否可以对指定的文件执行某种操作

阅读更多

本文引用自1986fxhaaa《Linux access函数》
Linux access函数功能描述: 检查调用进程是否可以对指定的文件执行某种操作。

Linux access函数用法:
#include
#include
int access(const char *pathname, int mode);

Linux access函数参数:
pathname: 需要测试的文件路径名。
mode: 需要测试的操作模式,可能值是一个或多个R_OK(可读?), W_OK(可写?), X_OK(可执行?) 或 F_OK(文件存在?)组合体。

Linux access函数返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EINVAL: 模式值无效
EACCES: 文件或路径名中包含的目录不可访问
ELOOP : 解释路径名过程中存在太多的符号连接
ENAMETOOLONG:路径名太长
ENOENT:路径名中的目录不存在或是无效的符号连接
ENOTDIR: 路径名中当作目录的组件并非目录
EROFS: 文件系统只读
EFAULT: 路径名指向可访问的空间外
EIO:输入输出错误
ENOMEM: 不能获取足够的内核内存
ETXTBSY:对程序写入出错

Linux access函数例子:
例子:

/* test.c */ /* test.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
   if (argc < 2) {
       printf("Usage: ./test filename\n");
       exit(1);
   }

   if (access(argv[1], F_OK) == -1) {
       puts("File not exists!");
       exit(2);
   }

   if (access(argv[1], R_OK) == -1)
       puts("You can't read the file!");
   else
       if (access(argv[1], R_OK | W_OK) != -1)
           puts("You can read and write the file");
       else
           puts("You can read the file");

  
   exit(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
   if (argc < 2) {
       printf("Usage: ./test filename\n");
       exit(1);
   }

   if (access(argv[1], F_OK) == -1) {
       puts("File not exists!");
       exit(2);
   }

   if (access(argv[1], R_OK) == -1)
       puts("You can't read the file!");
   else
       if (access(argv[1], R_OK | W_OK) != -1)
           puts("You can read and write the file");
       else
           puts("You can read the file");

  
   exit(0);
}
由于Linux Access函数只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve执行时则会失败。

Linux Access函数(判断是否具有存取文件的权限)
相关函数
stat,open,chmod,chown,setuid,setgid
表头文件
#include<unistd.h>
定义函数
int access;
Linux Access函数说明
access会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合, R_OK,W_OK,X_OK 和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。由于access只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve执行时则会失败。
Linux Access函数返回值
若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。
错误代码
EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。
EROFS 欲测试写入权限的文件存在于只读文件系统内。
EFAULT 参数pathname指针超出可存取内存空间。
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为一目录。
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。
Linux Access函数附加说明
使用access作用户认证方面的判断要特别小心,例如在access后再做open的空文件可能会造成系统安全上的问题。
范例
/ 判断是否允许读取/etc/passwd /
#include<unistd.h>
int main

执行
/etc/passwd can be read
分享到:
评论

相关推荐

    ACCESS高级操作函数大全

    ACCESS高级操作 Access函数大全 access中有效性规则的写法 设置表中数据的格式

    ACCESS基本函数大全

    access基本函数介绍。 类型 函数名 函数格式 说明 算 术 函 数 绝对值 Abs(&lt;数值表达式&gt;) 返回数值表达式的绝对值 取整 Int(&lt;数值表达式&gt;) 返回数值表达式的整数部分值,参考为负值时返回大于等于参数值的第一个...

    linux下access函数的用法介绍

    Linux内核总是根据进程的有效用户ID和有效组ID来决定一个进程是否有权访问某个文件。...R_OK 检验调用进程是否有读访问权限W_OK 检验调用进程是否有写访问权限X_OK 检验调用进程是否有执行访问权限F_OK 

    ACCESS 函数

    ACCESS 函数,!

    LINUX平台JAVA直接连接access数据库dbf文件

    JAVA直接连接access数据库dbf文件,同时兼容LINUX、UNIX、WINDOWS操作系统。示例工程代码,导入eclipse即可运行。

    VC++ 使用 _access函数判断文件或文件夹是否存在

    _access函数 int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ...文件或目录路径。...如果文件包含特定模式,每个函数返回 0。...当使用文件,_access 函数确定指定的

    Access函数大全.pdf

    Access函数大全.pdf

    Vb调用Access实例

    vb 练习调用 access 数据库,调用的方式和方法。。

    Access函数汇总.pdf

    Access函数汇总将VBA编程所需的主要函数作了详细的介绍.

    Access程序A调用 AccessB的功能 B

    各位好,目前我写程序用到了通过一个access应用程序 A ,调用另一个Access应用程序 B,并打开B中的一个窗体显示所要查询到的信息。这些功能我都实现了,只是,Access应用程序B这个主窗体不能跑到任何Windows窗体的...

    Linux操作系统性能监测:CPU篇

    CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中断让 CPU 知道拷贝已经完成;科学计算通常...

    access函数大全

    access函数大全access函数大全access函数大全access函数大全access函数大全access函数大全

    小写人民币转大写ACCESS函数

    在ACCESS中通过小写人民币转大写ACCESS函数可以把金额这项数据作为汉字显示或打印。支票、电汇凭证、记账凭证。

    常用access函数集

    在使用ACCESS做本地数据开发的时候,经常会用到的一些access函数

    C#源码 访问ACCESS数据库 通过反射调用命令 清理数据库 执行数据库优化 压缩操作

    C#源码 访问ACCESS数据库 通过反射调用命令 清理数据库 执行数据库优化 压缩操作 非常不错的参考资料

    如何设置Linux系统下的文件权限

    所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。 Linux 是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:...

    ACCESS函数详解

    ACCESS函数详解是一种非常方便查找的小软件

    E语言远程调用函数源码

    可以远程调用,供大家参考 .版本 2 .如果真 (进程ID ≤ 0) 返回 (-1) .如果真结束 进程句柄 = _打开进程 (#PROCESS_ALL_ACCESS, 假, 进程ID) ' PROCESS_ALL_ACCESS=2035711 完全访问 汇编长度 = 取字节集长度 ...

    C语言函数库(o版C语言实现函数调用)

    用C语言命令实现各种函数的调用 例:函数名: open 功 能: 打开一个文件用于读或写 用 法: int open(char *pathname, int access[, int permiss]); 程序例: #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include ...

Global site tag (gtag.js) - Google Analytics