当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > Linux C 函数参考(文件权限控制)

Unix/Linux
Linux crontab定时执行任务 命令格式与详细例子
linux 查看用户及用户组的方法
让Linux系统有效防御ARP攻击的实用技巧
Linux 常用软件列表
linux wget 一个强大的下载命令
linux 常用脚本、命令
linux 磁盘配额 简单介绍
Linux服务器架设笔记 Squid服务器配置
ubuntu intel 集成显卡安装
ubuntu 9.04 X3100 显卡开启3D特效
Ubuntu 8.10 Server Ruby 的安装方法
Ubuntu root帐户密码修改
ubuntu下apt-get 命令参数
Ubuntu Linux下实现QQ的三种方式
Ubuntu 8.04中建立PHP+MySQL环境
Ubuntu常用软件大全
Ubuntu系统下安装Aircrack-ng
Ubuntu实现FTP功能
ubuntu 字体美化实现方法
ubuntu下netbeans汉字显示残缺问题

Unix/Linux 中的 Linux C 函数参考(文件权限控制)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 401 ::
收藏到网摘: n/a

这两天在学如何写个linux下的shell才明白原来dos下的command.COM也是个shell这当然要用到c的很多库函数
access(判断是否具有存取文件的权限) 相关函数 stat,open,chmod,chown,setuid,setgid表头文件 #include定义函数 int access(const char * pathname,int mode);函数说明 access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合,R_OK,W_OK,X_OK和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。返回值 若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。错误代码 EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。EROFS 欲测试写入权限的文件存在于只读文件系统内。EFAULT 参数pathname指针超出可存取内存空间。EINVAL 参数mode 不正确。ENAMETOOLONG 参数pathname太长。ENOTDIR 参数pathname为一目录。ENOMEM 核心内存不足ELOOP 参数pathname有过多符号连接问题。EIO I/O 存取错误。附加说明 使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。范例 /* 判断是否允许读取/etc/passwd */#includeint main(){if (access(“/etc/passwd”,R_OK) = =0)printf(“/etc/passwd can be read\n”);}执行 /etc/passwd can be read alphasort(依字母顺序排序目录结构) 相关函数 scandir,qsort表头文件 #include定义函数 int alphasort(const struct dirent **a,const struct dirent **b);函数说明 alphasort()为scandir()最后调用qsort()函数时传给qsort()作为判断的函数,详细说明请参考scandir()及qsort()。返回值 参考qsort()。范例 /* 读取/目录下所有的目录结构,并依字母顺序排列*/main(){struct dirent **namelist;int i,total;total = scandir(“/”,&namelist ,0,alphasort);if(total <0)perror(“scandir”);else{for(i=0;id_name);printf(“total = %d\n”,total);}}执行 ...gnome.gnome_privateErrorLogWeblogbinbootdevdoscdosdetchomeliblost+foundmiscmntoptprocrootsbintmpusrvartotal = 24 chdir(改变当前的工作(目录) 相关函数 getcwd,chroot表头文件 #include定义函数 int chdir(const char * path);函数说明 chdir()用来将当前的工作目录改变成以参数path所指的目录。返回值 执行成功则返回0,失败返回-1,errno为错误代码。范例 #includemain(){chdir(“/tmp”);printf(“current working directory: %s\n”,getcwd(NULL,NULL));}执行 current working directory :/tmp chmod(改变文件的权限) 相关函数 fchmod,stat,open,chown表头文件 #include#include定义函数 int chmod(const char * path,mode_t mode);函数说明 chmod()会依参数mode 权限来更改参数path 指定文件的权限。参数 mode 有下列数种组合S_ISUID 04000 文件的(set user-id on execution)位S_ISGID 02000 文件的(set group-id on execution)位S_ISVTX 01000 文件的sticky位S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限S_IRGRP 00040 用户组具可读取权限S_IWGRP 00020 用户组具可写入权限S_IXGRP 00010 用户组具可执行权限S_IROTH 00004 其他用户具可读取权限S_IWOTH 00002 其他用户具可写入权限S_IXOTH 00001 其他用户具可执行权限只有该文件的所有者或有效用户识别码为0,才可以修改该文件权限。基于系统安全,如果欲将数据写入一执行文件,而该执行文件具有S_ISUID或S_ISGID 权限,则这两个位会被清除。如果一目录具有S_ISUID 位权限,表示在此目录下只有该文件的所有者或root可以删除该文件。返回值 权限改变成功返回0,失败返回-1,错误原因存于errno。错误代码 EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同,而且也不具root权限。EACCESS 参数path所指定的文件无法存取。EROFS 欲写入权限的文件存在于只读文件系统内。EFAULT 参数path指针超出可存取内存空间。EINVAL 参数mode不正确ENAMETOOLONG 参数path太长ENOENT 指定的文件不存在ENOTDIR 参数path路径并非一目录ENOMEM 核心内存不足ELOOP 参数path有过多符号连接问题。EIO I/O 存取错误范例 /* 将/etc/passwd 文件权限设成S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH */#include#includemain(){chmod(“/etc/passwd”,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);} chown(改变文件的所有者) 相关函数 fchown,lchown,chmod表头文件 #include