打开或创建一个文件

#include <fcntl.h>

int open(const char *pathname, int oflag, .../*mode_t mode*/);

    返回值:若成功则返回文件描写叙述符,若出错则返回-1



oflag选项:

O_RDONLY

O_WRONLY

O_RDWR



以上三个常量中必须指定一个,且仅仅能指定一个。

下面常量都是可选的:

O_APPED     每次写时追加到文件尾

O_CREAT     若文件不存在,则创建

O_EXCL      若同一时候指定了O_CREAT。而文件已经存在,则出错;否则创建文件

O_TRUNC     若文件存在且为仅仅写或读写打开成功。则讲文件截断为0

O_NOCTTY    

O_NONBLOCK  若pathname指定的是一个FIFO、一个快特殊文件或者一个字符特殊文件,则此选项为文件的本次打开操作和兴许的I/O操作设置非组赛模式。



O_DSYNC     每次write都等待物理I/O完毕。但不等待文件属性更新

O_RSYNC

O_SYNC      每次write都等待物理I/O完毕。包含write引起的文件属性更新所需的I/O







#include <fcntl.h>

int create(const char *pathname, mode_t mode);

    返回值:若成功则返回为仅仅写打开的文件描写叙述符。若出错则返回-1

    

该函数等效于:

    open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode)

关闭一个打开的文件

#include <unistd.h>

int close(int filedes);

    返回值:若成功则返回0,若出错则返回-1



关闭一个文件时还会释放该进程在该文件上的全部加锁。

当一个进程结束时,内核会自己主动关闭它全部打开的文件。

为一个打开的文件设置偏移量

#include <fcntl.h>

off_t lseek(int filedes, off_t offset, int whence);

    返回值:若成功则返回新的文件偏移量,若出错则返回-1



whence取值:

SEEK_SET    将文件偏移设置为距文件開始处offset个字节

SEEK_CUR    将文件偏移设置为当前值加offset。offset可为正或负

SEEK_END    将文件偏移设置为文件长度加offset。offset可为正或负



管道、FIFO和网络套接字不可设置偏移量

文件读写

#include <unistd.h>

ssize_t read(int filedes, void *buf, size_t nbytes);

    返回值:若成功则返回读到的字节数,若已到文件尾则返回0。若出错则返回-1



#include <unistd.h>

ssize_t write(int filedes, void *buf, size_t nbytes);

    返回值:若成功则返回已写的字节数。若出错则返回-1

文件共享

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3l1bGluZzEyMzQ1Njc4OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

拷贝文件描写叙述符

#include <unistd.h>

int dup(int filedes);

int dup2(int filedes, filedes2);

    返回值:若成功返回新的文件描写叙述符。若失败返回-1



dup返回的是当前可用的最小的文件描写叙述符

dup2则返回filedes2所指定的文件描写叙述符,若filedes2已经存在,则先将其关闭

文件同步

#include <unistd.h>

int fsync(int filedes);

int fdatasync(int filedes);

void sync();



sync    该函数仅仅是将全部改动过的块缓存增加写队列。并不等真正的写磁盘结束就返回,系统update守护进程会定期(30秒)调用该函数

fsync   仅仅针对filedes描写叙述符起作用。而且等待写磁盘操作结束然后返回

fdatasync   类似于fsync,但它仅仅影响文件的数据部分。不同步更新文件属性



#include <fcntl.h>

int fcntl(int filedes, int cmd, .../* arg */);

    返回值:若成功则依赖于cmd,若失败则返回-1

文件控制

fcntl的5种功能:

复制一个现有的描写叙述符  cmd = F_DUPFD

获得/设置文件描写叙述符标记    cmd = F_GETFD / F_SETFD

    眼下仅仅有一个标志:FD_CLOEXEC

获得/设置文件状态标记 cmd = F_GETFL / F_SETFL

    文件状态标志:O_RDONLY  仅仅读打开

                  O_WRONLY  仅仅写打开

                  O_RDWR    读写打开

                  O_APPEND  *每次写时追加

                  O_NONBLOCK    *非堵塞模式

                  O_SYNC    *等待写完毕(数据和属性)

                  O_DSYNC   *等待写完毕(仅数据)

                  O_RSYNC   *同步读、写

                  O_FSYNC   *

                  O_ASYNC   *

                加*号的为F_SETFL所能改动的

获得/设置异步I/O全部权   cmd = F_GETOWN / F_SETOWN

获得/设置记录锁    cmd = F_GETLK / F_SETLK / F_SETLKW



#include <unistd.h>

int ioctl(int filedes, int request, ...);

    返回值:若出错返回-1,成功返回其它返回值

《UNIX环境高级编程》读书笔记 —— 文件 I/O的更多相关文章

  1. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  2. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  3. [置顶] 文件io(一)--unix环境高级编程读书笔记

    unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...

  4. unix 环境高级编程-读书笔记与习题解答-第二篇

    第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...

  5. unix 环境高级编程 读书笔记与习题解答第四篇

    第一章 第六节 第一小节 这一章没有程序设计和API方面的深入学习,而是注重介绍了unix操作系统中的原始数据类型和系统原型函数,错误处理方面的知识. ____unistd.h____ 该文件包含了u ...

  6. 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权

    1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...

  7. unix进程的环境--unix环境高级编程读书笔记

    http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937

  8. unix环境高级编程 读书笔记

    1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!

  9. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  10. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. C#Qrcode生成二维码支持中文,带图片,带文字

    C#Qrcode生成二维码支持中文带图片的操作请看二楼的帖子,当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/2057 ...

  2. 线程之间通信 等待(wait)和通知(notify)

    线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必用方式之一.当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同 ...

  3. 转载——C# 6.0可能的新特性及C#发展历程

    据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...

  4. HDU 1241.Oil Deposits-求连通块DFS or BFS

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  5. Sprak RDD简单应用

    来自:http://my.oschina.net/scipio/blog/284957#OSC_h5_11 目录[-] 1.准备文件 2.加载文件 3.显示一行 4.函数运用 (1)map (2)co ...

  6. JMeter进行http接口测试

    Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对Http接口的测试. 一.开发接口测试案例的整体方案: 第一步:我们要 ...

  7. codevs——2841 愤怒的LJF(背包)

    样例有误!  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description LJF发现ZPC的积分比他高,他很愤怒. 他挤出T ...

  8. commons-lang3-StringUtils

    字符串工具类   abbreviate(String str, int maxWidth) 返回一个指定长度加省略号的字符串,maxWidth必须大于3 StringUtils.abbreviate( ...

  9. Delphi通过管道执行外部命令行程序(cmd)并获取返回结果

    该代码片段来自于: http://www.sharejs.com/codes/delphi/8999,发现好多代码,想用的时候找不到,记录一下备用 function RunDosCommand(Com ...

  10. Weblogic多数据源(Multi Data Sources)应用实践

    原创 2012年03月29日 10:55:28 标签: weblogic / 数据库 / 负载均衡 / 数据中心 / jdbc / 应用服务器   大型系统在进行数据库部署时,常常会分为主数据应用中心 ...