⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12.htm

📁 Linux 常用C函数(中文版) html 格式
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://net.pku.edu.cn/~yhf/linux_c/function/12.html -->
<HTML><HEAD><TITLE>Untitled Document</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
<BODY>
<TABLE width="100%">
  <TBODY>
  <TR>
    <TD vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc211></A></FONT></DIV></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>
    <TD><FONT face=宋体 size=2><BR>access(判断是否具有存取文件的权限) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>
    <TD><FONT face=宋体 
      size=2>若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD>
    <TD><FONT face=宋体 
      size=2>使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>/* 判断是否允许读取/etc/passwd 
      */<BR>#include&lt;unistd.h&gt;<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 vAlign=top width=80>
      <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 vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc212></A></FONT></DIV></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>
    <TD><FONT face=宋体 size=2><BR>alphasort(依字母顺序排序目录结构) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>scandir,qsort<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>#include&lt;dirent.h&gt;<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>参考qsort()。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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(“/”,&amp;namelist 
      ,0,alphasort);<BR>if(total 
      &lt;0)<BR>perror(“scandir”);<BR>else{<BR>for(i=0;i&lt;total;i++)<BR>printf(“%s\n”,namelist[i]-&gt;d_name);<BR>printf(“total 
      = %d\n”,total);<BR>}<BR>}<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc213></A></FONT></DIV></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>
    <TD><FONT face=宋体 size=2><BR>chdir(改变当前的工作(目录) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>getcwd,chroot<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>
    <TD><FONT face=宋体 
size=2>chdir()用来将当前的工作目录改变成以参数path所指的目录。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>执行成功则返回0,失败返回-1,errno为错误代码。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>
    <TD><FONT face=宋体 
      size=2>#include&lt;unistd.h&gt;<BR>main()<BR>{<BR>chdir(“/tmp”);<BR>printf(“current 
      working directory: %s\n”,getcwd(NULL,NULL));<BR>}<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc214></A></FONT></DIV></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>
    <TD><FONT face=宋体 size=2><BR>chmod(改变文件的权限) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>
    <TD><FONT face=宋体 
      size=2>#include&lt;sys/types.h&gt;<BR>#include&lt;sys/stat.h&gt;<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>chmod()会依参数mode 权限来更改参数path 
  指定文件的权限。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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 vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>权限改变成功返回0,失败返回-1,错误原因存于errno。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <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>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>/* 将/etc/passwd 
      文件权限设成S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH 
      */<BR>#include&lt;sys/types.h&gt;<BR>#include&lt;sys/stat.h&gt;<BR>main()<BR>{<BR>chmod(“/etc/passwd”,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);<BR>}<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc215></A></FONT></DIV></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>
    <TD><FONT face=宋体 size=2><BR>chown(改变文件的所有者) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>fchown,lchown,chmod<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>
    <TD><FONT face=宋体 
      size=2>#include&lt;sys/types.h&gt;<BR>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>
  <TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -