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

Unix/Linux
Linux 备份 恢复方法
Linux玩CS反恐精英的方法
在一个ISO镜像中集成多个不同的linux发行版,可刻盘,可引导
Linux 快捷键使用
Linux DHCP 服务器配置方法介绍
Linux 22端口的修改方法
Linux 记录会话过程的命令
Linux 后台执行程序如何操作?
linux Wget命令来浏览网页的方法
Linux tail命令的巧妙应用
Wine 中文存在很多的乱码怎么解决方法
linux 新手教程之创建锁文件的方法
配置Linux 保证其系统的安全
Linux DHCP协议实现过程
Linux系统下破解SAM密码
linux/unix vi 编辑器用法详解
Linux 误删文件的解决方法
Linux系统下的历史记录删除方法
Red Hat Linux 安全设置指南
Linux基本命令-注销、关机、重启

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 273 ::
收藏到网摘: 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