Chinaunix首页 | 论坛 | 博客
  • 博客访问: 535754
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-11-27 11:20:04

#include
int access(const char *pathname, int mode);
返回值:成功返回0;失败返回-1,设置errno;

access函数中mode参数说明
mode      说明
R_OK      测试读权限
W_OK     测试写权限
X_OK      测试执行权限
F_OK      测试文件是否存在   

open打开一个文件,内核以进程的有效用户ID和有效组ID为基础执行其访问权限测试。
access是以实际用户ID和实际组ID为基础来测试其访问能力。
#include
int open(const char *pathname, int flags, mode_t mode);
返回值:成功,返回文件描述符;失败返回-1,设置errno

点击(此处)折叠或打开

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <fcntl.h>

  5. int main(int argc, char *argv[])
  6. {
  7.     int fd;
  8.     int ret;
  9.     
  10.     if(argv[1] == NULL) {
  11.         printf("Usage:./a.out file_name\n");
  12.         return 0;
  13.     }

  14.     fd = open(argv[1],O_WRONLY);
  15.     if(fd < 0) {
  16.         printf("open error for %s\n",argv[1]);
  17.     }else {
  18.         printf("open for writing OK\n");
  19.     }

  20.     ret = access(argv[1],W_OK);
  21.     if(ret <0) {
  22.         printf("access error for %s\n",argv[1]);
  23.     }else {
  24.         printf("write access ok\n");
  25.     }

  26.     return 0;
  27. }

编译运行:
gwwu@hz-dev2.wgw.com:~/test/file>-rwxrwxr-x  1 gwwu gwwu 8436 Nov 27 10:45 access
以gwwu用户执行程序,程序的有效用户ID为gwwu,有效组ID也为gwwu
gwwu@hz-dev2.aerohive.com:~/test/file>ls -al
total 60
drwxrwxr-x  2 gwwu gwwu 4096 Nov 27 11:15 .
drwxr-xr-x 21 gwwu gwwu 4096 Nov 24 14:44 ..
-rwxrwxr-x  1 gwwu gwwu 8752 Nov 27 11:15 access
-rw-rw-r--  1 gwwu gwwu  643 Nov 27 11:15 access.c
-rwxrwxr-x  1 gwwu gwwu 9843 Nov 24 16:49 lstate
-rw-rw-r--  1 gwwu gwwu 1030 Nov 24 16:49 lstate.c
----------  1 gwwu gwwu    0 Nov 26 14:33 txy
-rwxrwxr-x  1 gwwu gwwu 9575 Nov 26 16:07 umask
-rw-rw-r--  1 gwwu gwwu  919 Nov 26 16:07 umask.c
-rw-rw-rw-  1 gwwu gwwu    8 Nov 26 16:07 wgw
gwwu@hz-dev2.wgw.com:~/test/file>./access access
open error for access:Text file busy-----------------------------------注意此处,由于access正在执行的时候判断文件是否可写会出错。
write access ok
gwwu@hz-dev2.wgw.com:~/test/file>./access access.c
open for writing OK
write access ok
gwwu@hz-dev2.aerohive.com:~/test/file>./access lstate
open for writing OK
write access ok
gwwu@hz-dev2.wgw.com:~/test/file>./access /etc/passwd
open error for /etc/passwd:Permission denied
access error for /etc/passwd:Permission denied
gwwu@hz-dev2.wgw.com:~/test/file>ls -al /etc/passwd
-rw-r--r-- 1 root root 2316 Aug  5 16:05 /etc/passwd
write access ok
su进入超级用户,将access的用户ID改成root
chown root access
chmode u+s access
再退出超级用户,
执行./access /etc/passwd
openopen for writing OK
acess error for /etc/passwdaccess error for /etc/passwd:Permission denied


阅读(1385) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~