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

📄 09.htm

📁 Linux系统函数用法的详细介绍
💻 HTM
📖 第 1 页 / 共 3 页
字号:
      fd,int cmd,long arg);<BR>int fcntl(int fd,int cmd,struct flock *       lock);<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>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 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><BR><FONT face=宋体 size=2><A       name=linuxc138></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>flock(锁定文件或解除锁定) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>open,fcntl<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/file.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 flock(int fd,int operation);<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>flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。<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>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 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><BR><FONT face=宋体 size=2><A       name=linuxc139></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>fsync(将缓冲区数据写回磁盘) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>sync<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 fsync(int fd);<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>fsync()负责将参数fd所指的文件数据,由系统缓冲区写回磁盘,以确保数据同步。<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><BR><FONT face=宋体 size=2><A       name=linuxc140></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>lseek(移动文件的读写位置) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>dup,open,fseek<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>    <TD vAlign=top width=80>      <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 vAlign=top width=80>      <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 vAlign=top width=80>      <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 vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-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>Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE。<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></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc141></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>mkstemp(建立唯一的临时文件) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>mktemp<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;stdlib.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 mkstemp(char * template);<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>mkstemp()用来建立唯一的临时文件。参数template       所指的文件名称字符串中最后六个字符必须是XXXXXX。Mkstemp()会以可读写模式和0600       权限来打开该文件,如果该文件不存在则会建立该文件。打开该文件后其文件描述词会返回。文件顺利打开后返回可读写的文件描述词。若果文件打开失败则返回NULL,并把错误代码存在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>EINVAL 参数template 字符串最后六个字符非XXXXXX。EEXIST       无法建立临时文件。<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>参数template所指的文件名称字符串必须声明为数组,如:<BR>char template[       ] =”template-XXXXXX”;<BR>千万不可以使用下列的表达方式<BR>char *template =       “template-XXXXXX”;<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;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 vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>template = template-lgZcbo<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <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 + -