Linux C 函数参考(文件权限控制)

sheo1314

sheo1314

2016-01-29 18:48

Linux C 函数参考(文件权限控制),Linux C 函数参考(文件权限控制)
这两天在学如何写个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 readn”);}执行 /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 = %dn”,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: %sn”,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
展开更多 50%)
分享

猜你喜欢

Linux C 函数参考(文件权限控制)

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux C 函数参考(文件权限控制)

Linux C 函数参考(环境变量 终端控制)

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux C 函数参考(环境变量 终端控制)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux C 函数参考(数据结构及算法)

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux C 函数参考(数据结构及算法)

共享文件夹权限设置方法 共享文件访问权限控制

文件夹
共享文件夹权限设置方法 共享文件访问权限控制

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux 系统中的超级权限的控制

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux 系统中的超级权限的控制

解读Linux文件权限的设置方法

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
解读Linux文件权限的设置方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

红旗使用中必须注意的

红旗使用中必须注意的

Excel:自动录入学生的基本情况信息表

Excel:自动录入学生的基本情况信息表
下拉加载更多内容 ↓