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

📄 09.html

📁 linux下一些常用的C函数的说明和例子
💻 HTML
📖 第 1 页 / 共 3 页
字号:
    <td> <font face='宋体' size='2'> fcntl()用来操作文件描述词的一些特性。参数fd代表欲设置的文件描述词,参数cmd代表欲操作的指令。<br>
      有以下几种情况:<br>
      F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文件描述词,并且复制参数fd的文件描述词。执行成功则返回新复制的文件描述词。请参考dup2()。F_GETFD取得close-on-exec旗标。若此旗标的FD_CLOEXEC位为0,代表在调用exec()相关函数时文件将不会关闭。<br>
      F_SETFD 设置close-on-exec 旗标。该旗标以参数arg 的FD_CLOEXEC位决定。<br>
      F_GETFL 取得文件描述词状态旗标,此旗标为open()的参数flags。<br>
      F_SETFL 设置文件描述词状态旗标,参数arg为新旗标,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变,其他位的改变将不受影响。<br>
      F_GETLK 取得文件锁定的状态。<br>
      F_SETLK 设置文件锁定的状态。此时flcok 结构的l_type 值必须是F_RDLCK、F_WRLCK或F_UNLCK。如果无法建立锁定,则返回-1,错误代码为EACCES 
      或EAGAIN。<br>
      F_SETLKW F_SETLK 作用相同,但是无法建立锁定时,此调用会一直等到锁定动作成功为止。若在等待锁定的过程中被信号中断时,会立即返回-1,错误代码为EINTR。参数lock指针为flock 
      结构指针,定义如下<br>
      struct flcok<br>
      {<br>
      short int l_type; /* 锁定的状态*/<br>
      short int l_whence;/*决定l_start位置*/<br>
      off_t l_start; /*锁定区域的开头位置*/<br>
      off_t l_len; /*锁定区域的大小*/<br>
      pid_t l_pid; /*锁定动作的进程*/<br>
      };<br>
      l_type 有三种状态:<br>
      F_RDLCK 建立一个供读取用的锁定<br>
      F_WRLCK 建立一个供写入用的锁定<br>
      F_UNLCK 删除之前建立的锁定<br>
      l_whence 也有三种方式:<br>
      SEEK_SET 以文件开头为锁定的起始位置。<br>
      SEEK_CUR 以目前文件读写位置为锁定的起始位置<br>
      SEEK_END 以文件结尾为锁定的起始位置。<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"><br>
        <font face='宋体' size='2'><a name=linuxc138></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>
      flock(锁定文件或解除锁定) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> open,fcntl<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&lt;sys/file.h&gt;<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 flock(int fd,int operation);<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'> flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。<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'> operation有下列四种情况:<br>
      LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。<br>
      LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。<br>
      LOCK_UN 解除文件锁定状态。<br>
      LOCK_NB 无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX 做OR(|)组合。<br>
      单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定。<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"><br>
        <font face='宋体' size='2'><a name=linuxc139></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>
      fsync(将缓冲区数据写回磁盘) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> sync<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&lt;unistd.h&gt;<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 fsync(int fd);<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'> fsync()负责将参数fd所指的文件数据,由系统缓冲区写回磁盘,以确保数据同步。<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"><br>
        <font face='宋体' size='2'><a name=linuxc140></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>
      lseek(移动文件的读写位置) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> dup,open,fseek<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&lt;sys/types.h&gt;<br>
      #include&lt;unistd.h&gt;<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'> off_t lseek(int fildes,off_t offset ,int whence);<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'> 每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。当read()或write()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。参数fildes 
      为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。<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'> whence为下列其中一种:<br>
      SEEK_SET 参数offset即为新的读写位置。<br>
      SEEK_CUR 以目前的读写位置往后增加offset个位移量。<br>
      SEEK_END 将读写位置指向文件尾后再增加offset个位移量。<br>
      当whence 值为SEEK_CUR 或SEEK_END时,参数offet允许负值的出现。<br>
      下列是教特别的使用方式:<br>
      1) 欲将读写位置移到文件开头时:lseek(int fildes,0,SEEK_SET);<br>
      2) 欲将读写位置移到文件尾时:lseek(int fildes,0,SEEK_END);<br>
      3) 想要取得目前文件位置时:lseek(int fildes,0,SEEK_CUR);<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'> 当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-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'> Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE。<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>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc141></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>
      mkstemp(建立唯一的临时文件) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> mktemp<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&lt;stdlib.h&gt;<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 mkstemp(char * template);<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'> mkstemp()用来建立唯一的临时文件。参数template 所指的文件名称字符串中最后六个字符必须是XXXXXX。Mkstemp()会以可读写模式和0600 
      权限来打开该文件,如果该文件不存在则会建立该文件。打开该文件后其文件描述词会返回。文件顺利打开后返回可读写的文件描述词。若果文件打开失败则返回NULL,并把错误代码存在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'> EINVAL 参数template 字符串最后六个字符非XXXXXX。EEXIST 无法建立临时文件。<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'> 参数template所指的文件名称字符串必须声明为数组,如:<br>
      char template[ ] =”template-XXXXXX”;<br>
      千万不可以使用下列的表达方式<br>
      char *template = “template-XXXXXX”;<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&lt;stdlib.h&gt;<br>
      main( )<br>
      {<br>
      int fd;<br>
      char template[ ]=”template-XXXXXX”;<br>
      fd=mkstemp(template);<br>
      printf(“template = %s\n”,template);<br>
      close(fd);<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'> template = template-lgZcbo<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc142></a></font> </div>
    </td>
  </tr>

⌨️ 快捷键说明

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