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

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

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


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