📄 12.html
字号:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<table width="100%">
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc211></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
access(判断是否具有存取文件的权限) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> stat,open,chmod,chown,setuid,setgid<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int access(const char * pathname,int mode);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合,R_OK,W_OK,X_OK
和F_OK。R_OK,W_OK与X_OK用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 错误代码 </font> </div>
</td>
<td> <font face='宋体' size='2'> EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。<br>
EROFS 欲测试写入权限的文件存在于只读文件系统内。<br>
EFAULT 参数pathname指针超出可存取内存空间。<br>
EINVAL 参数mode 不正确。<br>
ENAMETOOLONG 参数pathname太长。<br>
ENOTDIR 参数pathname为一目录。<br>
ENOMEM 核心内存不足<br>
ELOOP 参数pathname有过多符号连接问题。<br>
EIO I/O 存取错误。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 附加说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> 使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> /* 判断是否允许读取/etc/passwd */<br>
#include<unistd.h><br>
int main()<br>
{<br>
if (access(“/etc/passwd”,R_OK) = =0)<br>
printf(“/etc/passwd can be read\n”);<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 执行 </font> </div>
</td>
<td> <font face='宋体' size='2'> /etc/passwd can be read<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc212></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
alphasort(依字母顺序排序目录结构) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> scandir,qsort<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<dirent.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int alphasort(const struct dirent **a,const
struct dirent **b);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> alphasort()为scandir()最后调用qsort()函数时传给qsort()作为判断的函数,详细说明请参考scandir()及qsort()。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 参考qsort()。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> /* 读取/目录下所有的目录结构,并依字母顺序排列*/<br>
main()<br>
{<br>
struct dirent **namelist;<br>
int i,total;<br>
total = scandir(“/”,&namelist ,0,alphasort);<br>
if(total <0)<br>
perror(“scandir”);<br>
else{<br>
for(i=0;i<total;i++)<br>
printf(“%s\n”,namelist[i]->d_name);<br>
printf(“total = %d\n”,total);<br>
}<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 执行 </font> </div>
</td>
<td> <font face='宋体' size='2'> ..<br>
.gnome<br>
.gnome_private<br>
ErrorLog<br>
Weblog<br>
bin<br>
boot<br>
dev<br>
dosc<br>
dosd<br>
etc<br>
home<br>
lib<br>
lost+found<br>
misc<br>
mnt<br>
opt<br>
proc<br>
root<br>
sbin<br>
tmp<br>
usr<br>
var<br>
total = 24<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc213></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
chdir(改变当前的工作(目录) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> getcwd,chroot<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int chdir(const char * path);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> chdir()用来将当前的工作目录改变成以参数path所指的目录。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 执行成功则返回0,失败返回-1,errno为错误代码。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 范例 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<unistd.h><br>
main()<br>
{<br>
chdir(“/tmp”);<br>
printf(“current working directory: %s\n”,getcwd(NULL,NULL));<br>
}<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 执行 </font> </div>
</td>
<td> <font face='宋体' size='2'> current working directory :/tmp<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><br>
<font face='宋体' size='2'><a name=linuxc214></a></font> </div>
</td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> <br>
</font> </div>
</td>
<td> <font face='宋体' size='2'> <br>
chmod(改变文件的权限) </font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> fchmod,stat,open,chown<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 表头文件 </font> </div>
</td>
<td> <font face='宋体' size='2'> #include<sys/types.h><br>
#include<sys/stat.h><br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 定义函数 </font> </div>
</td>
<td> <font face='宋体' size='2'> int chmod(const char * path,mode_t mode);<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
</td>
<td> <font face='宋体' size='2'> chmod()会依参数mode 权限来更改参数path 指定文件的权限。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 参数 </font> </div>
</td>
<td> <font face='宋体' size='2'> mode 有下列数种组合<br>
S_ISUID 04000 文件的(set user-id on execution)位<br>
S_ISGID 02000 文件的(set group-id on execution)位<br>
S_ISVTX 01000 文件的sticky位<br>
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限<br>
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限<br>
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限<br>
S_IRGRP 00040 用户组具可读取权限<br>
S_IWGRP 00020 用户组具可写入权限<br>
S_IXGRP 00010 用户组具可执行权限<br>
S_IROTH 00004 其他用户具可读取权限<br>
S_IWOTH 00002 其他用户具可写入权限<br>
S_IXOTH 00001 其他用户具可执行权限<br>
只有该文件的所有者或有效用户识别码为0,才可以修改该文件权限。基于系统安全,如果欲将数据写入一执行文件,而该执行文件具有S_ISUID 或S_ISGID
权限,则这两个位会被清除。如果一目录具有S_ISUID 位权限,表示在此目录下只有该文件的所有者或root可以删除该文件。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
</td>
<td> <font face='宋体' size='2'> 权限改变成功返回0,失败返回-1,错误原因存于errno。<br>
</font> </td>
</tr>
<tr>
<td width="80" valign="top">
<div align="right"><font face='宋体' size='2'> 错误代码 </font> </div>
</td>
<td> <font face='宋体' size='2'> EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同,而且也不具root权限。<br>
EACCESS 参数path所指定的文件无法存取。<br>
EROFS 欲写入权限的文件存在于只读文件系统内。<br>
EFAULT 参数path指针超出可存取内存空间。<br>
EINVAL 参数mode不正确<br>
ENAMETOOLONG 参数path太长<br>
ENOENT 指定的文件不存在<br>
ENOTDIR 参数path路径并非一目录<br>
ENOMEM 核心内存不足<br>
ELOOP 参数path有过多符号连接问题。<br>
EIO I/O 存取错误<br>
</font> </td>
</tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -