文件I/O需要注意的几点...
来源:互联网 发布:淘宝店铺模板图片 编辑:程序博客网 时间:2024/04/28 09:36
首先说说open函数不经常用到,但是又比较重要的一些标志:
o_nonblock:以非阻塞的方式打开文件,当我们对一些比较特殊的文件(fifo,块设备文件,字符特殊文件)进行I/O操作的时候,最好使用这个标志,因为在对这类文件进行I/O操作的时候,属于慢速的系统调用,这类系统调用会使调用进程阻塞于此,如果不希望你的程序执行到这里而停住,那么就请使用这个标志吧!
o_trunc:当是以写或读写的方式打开文件时,会截断文件。
o_excl:这个标志一般用在创建文件的时候,当同时指定o_creat时,首先会判断文件是否存在,如果存在,则此次调用就会返回出错,否则就会创建此文件。
o_noctty:如果打开的文件是与一个终端相关联的,如果指定此标志,则此终端不会成为调用进行的控制终端。
o_sync和o_dsync:这个两个标志其实功能都是一样的,就是当一个文件进行了I/O操作了之后是否同步的更新文件的属性,不过两者肯定还是有不同的地方的,o_sync是进行I/O操作立即的更新文件的属性,o_dsync是只有在需要使用文件的属性的时候才会更新文件的属性!
使用creat可以创建一个新的文件,不过使用creat创建一个文件的时候是有一个缺陷的,当调用creat成功后返回的是以写打开的文件描述符,也就是说当你想在调用creat后希望去读这个文件,你需要调用close关闭这个文件,然后再调用open以读写的方式打开这个文件,oh My lady gaga! 没有人应该愿意这样吧!并且如果这个时候又有另一个进程也调用creat去创建一个同样的文件,此时又会引发一些其他的问题,这个就不作过多的说明,要不然又要扯到很远了。所以,现在如果希望去创建一个新文件,调用open就足矣!
下面我想谈谈dup和dup2这么两个函数,我觉得这个函数还是蛮有用的。这两个函数就是文件描述符的复制函数,当如果你希望去复制一个已经打开的文件描述符,那么dup和dup2就可以让你如愿了,下面是这两个函数的原型。
int dup(int filedes);//成功返回一个新的文件描述符,失败返回-1
使用fcntl也可以实现相同的功能:
int fcntl(int filedes,F_DUPFD,0);
当然你也可以调用dup2使用指定的文件描述符进行复制:
int dup2(int filedes,int filedes2);//成功返回filedes2,失败返回-1
当然这里会存在这个一个问题,filedes2已经打开了,那样又会怎么样呢?首先会关闭filedes2,然后再进行复制嘛!
当然也可以使用fcntl使用相同的功能:
#include <fcntl.h>
int fcntl(int filedes,F_DUPFD,int filedes2);
这样复制出来的文件描述符是共用一个文件表项的,也就是,使用相同的文件状态标志,相同的文件的偏移量!为什么说他们比较有用呢?因为,可以通过调用dup2这个函数改变一个进程的标准输入或标准输出。具体的实现就请读者慢慢的实现去吧!
眼睛开始痛了,今天就写到这里吧!
continue...
- 文件I/O需要注意的几点...
- C++文件操作需要注意的几点
- javascript中JS文件的引用需要注意几点
- android牵引文件需要注意的几点
- strcpy的需要注意的几点
- php中需要注意的几点
- web.xml 需要注意的几点
- 多线程编程需要注意的几点
- 大型软件开发需要注意的几点
- JDBC编程需要注意的几点
- TMS320F2812需要注意的几点
- TMS320F2812需要注意的几点
- 学习编程需要注意的几点
- SEO需要注意的几点
- [java]数据类型需要注意的几点
- 学习编程需要注意的几点
- scanf();需要注意的几点
- 负载过高需要注意的几点
- 分享下转换成大写money
- count字符数
- 浅谈 IE兼容模式
- android笔记,android程序设置标题栏和信息栏
- 笔记
- 文件I/O需要注意的几点...
- jstl <c:forEach> 学习
- DarkGDK库学习笔记(肆)
- 一对一唯一外键关联映射(双向)
- 虚函数的限制及多态性的有效范围
- DarkGDK库学习笔记(伍)
- 统计产生数字个数
- DarkGDK库学习笔记(陆)
- DarkGDK库学习笔记(柒)