LINUX打开文件

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <style> body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(2n){background-color: #f8f8f8;} </style> </head> <body> <div> <p class="MsoNormal"><strong style="mso-bidi-font-weight:normal"></strong> </p> <h1 style="text-align: center;margin-left: 0cm; text-indent: 0cm; "><strong style="mso-bidi-font-weight:normal"><a name="\_Toc116573634"><span style="font-family: Consolas; font-size: 24pt">基于文件描述符的文件操作<span lang="EN-US">(</span>非缓冲<span lang="EN-US">)</span></span></a><span lang="EN-US" style="font-size: 14pt; font-family: 宋体; "><o:p></o:p></span></strong> </h1> <p> </p> <p class="MsoNormal"><strong style="mso-bidi-font-weight:normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font: minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin"></span></strong> </p> <table style="table-layout: fixed; word-break: break-all; width: 100%; empty-cells: show; margin-left: 0px; background-color:#EAF2D3;"> <tbody> <tr> <td> <div><span style="font-family: Consolas; font-size: 13.5pt"><span style="color: #0000ff"><strong>1、文件描述符</strong></span></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; ">内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0—1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读、写、创建、删除等操作。常用基于文件描述符的函数有</span><span style="font-family: Consolas; font-size: 13.5pt">open(打开)</span><span style="font-family: Consolas; font-size: 13.5pt"><span style="font-weight: normal;">、creat(创建)、</span><span style="background-color: rgb(234, 242, 211);">close(关闭)</span><span style="font-weight: normal;">、</span><span style="background-color: rgb(234, 242, 211);">read(读取)</span><span style="font-weight: normal;">、</span><span style="background-color: rgb(234, 242, 211);">write(写入)</span><span style="font-weight: normal;">、ftruncate(改变文件大小)、lseek(定位)、fsync(同步)、fstat(获取文件状态)、fchmod(权限)、flock(加锁)、fcntl(控制文件属性)、dup(复制)、dup2、select和ioctl。</span><strong><span style="color: #ff0000">基于文件描述符的文件操作并非ANSI C的函数,是LINUX独有的东西。</span></strong></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; "><br /></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; background-color: rgb(0, 255, 255);; color: #ff0000">如果不清楚某个函数的具体实现形式,可以通过下面的方式查询</span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; background-color: rgb(255, 255, 0); "><strong>man&nbsp; 函数名&nbsp; 查看该函数的帮助</strong></span> </div> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt"><strong><span style="color: #0000ff">2、打开、创建和关闭文件</span></strong><br /><br /></span> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">open和creat都能打开和创建函数,原型为</span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;"><br /></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;"><span style="background-color: rgb(255, 255, 0);">#include &lt;sys/types.h&gt;</span> &nbsp; &nbsp; &nbsp;<span style="color: #0000ff">//头文件</span></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; background-color: rgb(255, 255, 0);">#include &lt;sys/stat.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; background-color: rgb(255, 255, 0);">#include &lt;fcntl.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;"><span style="background-color: rgb(255, 255, 0);">int open(const char \*pathname, int flags);</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff; background-color: rgb(248, 248, 248);">//文件名&nbsp; 打开方式</span></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt"><span style="font-weight: normal; background-color: rgb(255, 255, 0); ">int open(const char \*pathname, int flags, mode\_t mode);</span><span style="font-weight: normal;"> &nbsp; &nbsp;</span><span style="color: #0000ff; background-color: rgb(248, 248, 248); "><span style="font-weight: normal;">//文件名&nbsp; 打开方式&nbsp; 权限,</span>open()函数出错时返回-1</span></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;"><span style="background-color: rgb(255, 255, 0);">int creat(const char \*pathname, mode\_t mode);</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff; background-color: rgb(248, 248, 248);">//文件名&nbsp; 权限&nbsp;&nbsp; //现在已经不常用了(因为有上面的函数)</span></span> </div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; background-color: rgb(255, 255, 0);">creat函数等价于→open(pathname,O\_CREAT|O\_TRUNC|O\_WRONLY,mode);</span> </div> <div><br /> </div> <div> <div><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">flags和mode都是一组掩码的合成值,flags表示打开或创建的方式,</span><span style="font-family: Consolas; font-size: 13.5pt; color: #0000ff; background-color: rgb(0, 255, 255);">必须加上打开方式</span><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">,mode表示文件的访问权限。</span> </div> </div> </td> </tr> <tr> <td style="background-color: #999999"><span style="font-family: Consolas; font-size: 13.5pt; color: #ff0000"><strong><br />flags</strong></span><span style="font-family: Consolas; font-size: 13.5pt"><span style="font-weight: normal;">的可选项有:</span> <div> <table border="1" cellpadding="5" cellspacing="0" style="width: 100%"> <tbody> <tr> <td style="background-color: #c0c0c0"><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">掩码</span> </td> <td style="background-color: #c0c0c0"><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">含义</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;; color: #ff0000">O\_RDONLY</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">以<span style="color: #ff0000">只读</span>的方式打开</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; ; color: #ff0000">O\_WRONLY</span> </td> <td><span style="font-weight: normal; "><span style="font-family: Consolas; font-size: 13.5pt; ">以</span><span style="font-size: 13.5pt; font-family: Consolas; color: rgb(255, 0, 0); ">只</span><span style="font-family: Consolas; font-size: 13.5pt; background-color: rgb(153, 153, 153);"><span style="color: #ff0000">写</span>的</span></span><span style="font-weight: normal; font-size: 13.5pt; font-family: Consolas; ">方式打开</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; background-color: rgb(248, 248, 248);; color: #ff0000">O\_RDWR</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">以<span style="color: #ff0000">读写</span>的方式打开</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; ; color: #ff0000">O\_CREAT</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">如果<span style="color: #ff0000">文件不存在</span>,则<span style="color: #ff0000">创建文件</span></span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">O\_EXCL</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">仅与O\_CREAT连用,如果文件已存在,则强制open失败</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; ; color: #ff0000">O\_TRUNC</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">如果<span style="color: #ff0000">文件存在,将文件的长度截至0</span></span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal; ; color: #ff0000">O\_APPEND</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">已<span style="color: #ff0000">追加的方式打开文件</span>,<span style="color: #0000ff">每次调用write时</span>,文件指针自动先移到文件尾,用于多进程写同一个文件的情况。</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;; color: #ff0000">O\_NONBLOCK</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;"><span style="color: #ff0000">非阻塞方式打开</span>,无论有无数据读取或等待,都会立即返回进程之中。</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">O\_NODELAY</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;">非阻塞方式打开</span> </td> </tr> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;; color: #ff0000">O\_SYNC</span> </td> <td><span style="font-family: Consolas; font-size: 13.5pt; font-weight: normal;"><span style="color: #ff0000">同步打开文件</span>,只有在数据被真正写入物理设备设备后才返回</span> </td> </tr> </tbody> </table> </div></span> </td> </tr> <tr> <td><span style="font-family: Consolas"><span style="color: #ff0000; font-size: large; "><strong><br />mode</strong></span><span style="font-size: large; font-weight: normal; ">的可选项有:</span><br /> <div style="font-weight: normal; "><span style="font-size: 12pt"> <table border="1" cellpadding="5" cellspacing="0" style="width: 100%"> <tbody> <tr> <td style="background-color: #999999">S\_IRWXU </td> <td style="background-color: #999999">00700 </td> <td style="background-color: #999999">权限,代表该文件所有者具有可读、可写及可执行的权限。 </td> </tr> <tr> <td style="background-color: #999999">S\_IRUSR </td> <td style="background-color: #999999">或S\_IREAD,00400权限,代表该文件所有者具有可读取的权限。 </td> <td style="background-color: #999999"> </td> </tr> <tr> <td style="background-color: #999999">S\_IWUSR </td> <td style="background-color: #999999">或S\_IWRITE,00200 </td> <td style="background-color: #999999">权限,代表该文件所有者具有可写入的权限。 </td> </tr> <tr> <td style="background-color: #999999">S\_IXUSR </td> <td style="background-color: #999999">或S\_IEXEC,00100 </td> <td style="background-color: #999999">权限,代表该文件所有者具有可执行的权限。 </td> </tr> <tr> <td style="background-color: #999999">S\_IRWXG </td> <td style="background-color: #999999">00070权限,代表该文件用户组具有可读、可写及可执行的权限。 </td> <td style="background-color: #999999"> </td> </tr> <tr> <td style="background-color: #999999">S\_IRGRP </td> <td style="background-color: #999999">00040 </td> <td style="background-color: #999999">权限,代表该文件用户组具有可读的权限。 </td> </tr> <tr> <td style="background-color: #999999">S\_IWGRP </td> <td style="background-color: #999999">00020权限,代表该文件用户组具有可写入的权限。 </td> <td style="background-color: #999999"> </td> </tr> <tr> <td style="background-color: #999999">S\_IXGRP </td> <td style="background-color: #999999">00010 </td> <td style="background-color: #999999">权限,代表该文件用户组具有可执行的权限。 </td> </tr> <tr> <td style="background-color: #999999">S\_IRWXO </td> <td style="background-color: #999999">00007权限,代表其他用户具有可读、可写及可执行的权限。 </td> <td style="background-color: #999999"> </td> </tr> <tr> <td style="background-color: #999999">S\_IROTH </td> <td style="background-color: #999999">00004 </td> <td style="background-color: #999999">权限,代表其他用户具有可读的权限 </td> </tr> <tr> <td style="background-color: #999999">S\_IWOTH </td> <td style="background-color: #999999">00002权限,代表其他用户具有可写入的权限。 </td> <td style="background-color: #999999"> </td> </tr> <tr> <td style="background-color: #999999">S\_IXOTH </td> <td style="background-color: #999999">00001 </td> <td style="background-color: #999999">权限,代表其他用户具有可执行的权限。 </td> </tr> </tbody> </table></span> </div> <div style="font-size: large; "><span style="font-weight: normal; ">但是通常采用</span><span style="color: #ff0000">直接赋数值</span><span style="font-weight: normal;">的形式,如:</span> </div> <div style="font-size: large; font-weight: normal; "><span style="background-color: rgb(255, 255, 0);">int fd=open(argv\[1\],O\_CREAT|O\_RDONLY,0666);</span> </div> <div style="font-size: large; "> <div style="font-weight: normal; "><span style="color: #ff0000">注意:LINUX中基于文件描述符的 open 函数,对于一个不存在的文件,不能通过 O\_WRONLY 的方式打开,必须加上 O\_CREAT 选项。</span> </div> <div style="font-weight: normal; "><br /> </div> <div style="font-weight: normal; ">close用于文件的关闭: </div> <div><span style="font-weight: normal; background-color: rgb(255, 255, 0);">int close(int fd); </span><span style="color: #0000ff">//fd表示文件描述词,是先前由open或creat创建文件时的返回值</span><span style="font-weight: normal;">。</span> </div> <div><span style="font-weight: normal;">文件使用完毕后,应该调用close关闭它,</span><span style="color: #ff0000">一旦调用close,则该进程对文件所加的锁全都被释放,并且使文件的打开引用计数减1,只有文件的打开引用计数变为0以后,文件才会被真正的关闭</span><span style="font-weight: normal;">。</span> </div> </div></span> </td> </tr> </tbody> </table><strong style="mso-bidi-font-weight:normal"><br /></strong> <p> </p> <p class="MsoNormal"> </p> <table style="table-layout: fixed; word-break: break-all; width: 100%; empty-cells: show; margin-left: 0px; background-color:#EAF2D3;"> <tbody> <tr> <td><span style="font-family: Consolas; font-size: 13.5pt"><span style="color: #0000ff"><strong>//o\_creat.c</strong></span><br /></span> <div><span style="font-family: Consolas; font-size: 12pt">#include&lt;stdio.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">#include&lt;sys/types.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">#include&lt;sys/stat.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">#include&lt;fcntl.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">#include&lt;unistd.h&gt;</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">int main(int argc,char \*\* argv)</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">{</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000"><strong>int fd = open(argv\[1\],O\_CREAT|O\_RDONLY,0666);</strong></span></span> </div> <div><span style="font-family: Consolas; font-size: 12pt">&nbsp; &nbsp; &nbsp; &nbsp; printf(&quot;ret = %d\\n&quot;,ret);</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000"><strong>close(fd);</strong></span></span> </div> <div><span style="font-family: Consolas; font-size: 12pt">&nbsp; &nbsp; &nbsp; &nbsp; return 0;</span> </div> <div><span style="font-family: Consolas; font-size: 12pt">}</span> </div> </td> <td><span style="font-family: Consolas; font-size: 13.5pt"><br /><span style="color: #0000ff"><strong>//(创建文件默认减去掩码0002)</strong></span><img src="data:image/png;base64,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" /></span> </td> </tr> </tbody> </table> <p> </p> </div> <div> <p class="MsoNormalIndent" style="margin-left:0cm"> </p> <p class="MsoNormalIndent" style="margin-left:0cm"><span style="font-size: medium; "><span style="color: #0000ff"><span lang="EN-US"><strong>open </strong></span>函数中的</span><span lang="EN-US" style="color: rgb(255, 0, 0);">fiags (O\_RDWR|O\_CREAT|O\_EXCL)</span><span style="color: #0000ff">表示在创建文件时不确定系统有没有人创建过这个文件,就加上<span lang="EN-US">O\_EXCL,</span>表示如果系统存在相应文件就强制失败</span></span> </p> <p class="MsoNormalIndent" style="margin-left:0cm"><span style="font-size: medium; "><br /></span> </p> </div> </body> </html>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

C++面向对象实现封装线程池

<htmlxmlns"http://www.w3.org/1999/xhtml"<head<stylebody,table{fontfamily:微软雅黑;fontsize:13.5pt}table{bordercollapse:collapse;border:solidgray;borderwidth:2px