APUE学习心得

Chapter 3 IO

3.2 文件描述符

文件描述符是一个非负整数。当打开 一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。0 标准输入,1 标准输出, 2 标准错误

3.3 open函数

  1.调用 o p e n函 数 可 以 打 开 或 创 建 一 个 文 件 。

  #include <sys/types.h>

  #include <sys/stat.h>

  #include <fcntl.h>

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

返回:若成功为文件描述符,若出错为- 1

  2.p a t h n a m e是要打开或创建的文件的名字。 o f l a g参 数 可 用 来 说 明 此 函 数 的 多 个 选 择 项 。

  

  • O_RDONLY 只读打开。 • O_WRONLY 只写打开。 • O_RDWR 读、写打开。

在这三个常数中应当只指定一个。下列常数则是可选择的:

  • O _ A P P E N D 每 次 写 时 都 加 到 文 件 的 尾 端 。 3 . 11 节 将 详 细 说 明 此 选 择 项 。

  • O _ C R E A T 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数 m o d e,

    用其说明该新文件的存取许可权位。 ( 4 . 5 节将说明文件的许可权位,那时就能了解如何说明 m o d e,以及如何用进程的 u m a s k值修改它。 )

• O _ E X C L 如果同时指定了 O _ C R E AT , 而 文 件 已 经 存 在 , 则 出 错 。 这 可 测 试 一 个 文 件 是 否 存 在 , 如 果 不 存 在 则 创 建 此 文 件 成 为 一 个 原 子 操 作 。 3 . 11 节 将 较 详 细 地 说 明 原 子 操 作 。

• O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为 0。

• O _ N O C T T Y 如果 p a t h n a m e指的是终端设备,则不将此设备分配作为此进程的控制终端。
9 . 6 节将说明控制终端。

• O _ N O N B L O C K 如果 p a t h n a m e 指的是一个 F I F O 、 一 个 块 特 殊 文 件 或 一 个 字 符 特 殊 文 件 ,
则此选择项为此文件的本次打开操作和后续的 I / O操作设置非阻塞方式。 1 2 . 2 节 将 说 明 此 工 作
方式。

•O _ S Y N C 使每次 w r i t e都等到物理 I / O 操作完成。

3.4 creat函数

也可用 c r e a t 函 数 创 建 一 个 新 文 件 。

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>

i n t c r e a t ( c o n s t c h a r p a t *h n a m e , m o d e _ t m o d e ) ; 返回:若成功为只写打开的文件描述符,若出错为- 1

注意,此函数等效于:

o p e n ( p a t h n a m e , O _ W R O N L |Y O _ C R E A T | O _ T R U N C , m o d e ) ;

 

3.5 close函数

可用 c l o s e 函 数 关 闭 一 个 打 开 文 件 :

#include <unistd.h>

int close ( int filedes ) ;

FIPS 151-1要求返回出错。

S V R 4 对 传 统 的 系 统 V 文件系统 ( S 5 ) 并 不 保 证 返 回 出 错 ( 见表 2 - 6 ) ,但是对 B S D 风格的文件系统 ( U F S ) ,S V R 4 保证返回出错, 4 . 3 + B S D总是返回出错。

在早期的 U N I X 版本中, o p e n 的 第 二 个 参 数 只 能 是 0 、 1 或 2 。 没 有 办 法 打 开 一 个尚未存在的文件,因此需要另一个系统调用 c r e a t 以创建新文件。现在, o p e n 函 数提供了选择项 O _ C R E A T和O _ T R U N C ,于是也就不再需要 c r e a t 函数了。

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

3.6 lseek函数

每个打开文件都有一个与其相关联的“当前文件位移量”。它是一个非负整数,用以度量 从文件开始处计算的字节数。 (本节稍后将对“非负”这一修饰词的某些例外进行说明。 )通常, 读、写操作都从当前文件位移量处开始,并使位移量增加所读或写的字节数。按系统默认,当 打开一个文件时,除非指定 O _ A P P E N D选择项,否则该位移量被设置为 0 。

可以调用 l s e e k显 式 地 定 位 一 个 打 开 文 件 。 #include <sys/types.h>

#include <unistd.h>

o f f _ t l s e e k ( i n t  f i l e d e s , o f f _ t   o f f s e t , i n t  w h e n c e ) ;

返回:若成功为新的文件位移,若出错为- 1

  • 若l s e e k 成 功 执 行 , 则 返 回 新 的 文 件 位 移 量 , 为 此 可 以 用 下 列 方 式 确 定 一 个 打 开 文 件 的 当 前

    位移量:

    off_t currpos;

    currpos = lseek(fd, 0, SEEK_CUR);

read函数

用r e a d 函 数 从 打 开 文 件 中 读 数 据 。

#include <unistd.h>

s s i z e _ t r e a d ( i n t f i l e d e s , v o i d *b u f f , s i z e _ t n b y t e s ) ;

返回:读到的字节数,若已到文件尾为 0,若出错为- 1

3.8 write函数

用w r i t e 函 数 向 打 开 文 件 写 数 据 。 #include <unistd.h>

s s i z e _ t w r i t e ( i n t file i l e d e s , c o n s t v o i d b *u f f , s i z e _ t n b y t e s ) ; 返回:若成功为已写的字节数,若出错为- 1

APUE学习心得的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  3. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  6. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  9. 我的MYSQL学习心得(九) 索引

    我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

随机推荐

  1. Servlet 应用程序事件、监听器

    Web容器管理Servlet/JSP相关的生命周期,若对HttpServletRequest对象.HttpSession对象.ServletContxt对象在生成.销毁或相关属性设置发生的时机点有兴趣 ...

  2. SSM(Maven集成)

    ssm全称:Spring+SpringMVC+Mybatis ssm简介: 1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod J ...

  3. js制作ppt阅读文档类型

    前几天开发中,客户要求在页面中展示一个类似ppt文档的一个东西,用轮播展示,但是有缩略图,和展示的大图,本想找些插件来做,后来想想,自己试下吧.. 有些简陋,但是能用,毕竟一行一行写的,留下来当笔记用 ...

  4. 利用moment为基础,基于DOM实现一个多个倒计时同时进行的js库方便使用

    moment非常强大,提供了很多时间方法的封装,项目需要一个小倒计时的功能,网上找了很多不合适,决定自己写一个,直接上代码 //定义一个立即执行的函数(function () { var Ticts= ...

  5. iOS 图片水印、图片合成文字或图片实现

    这个需求可能有时候会碰到,比如自己的照片加版权,打水印等 网上的方法,有不少感觉不全对,或者需求不是特全,这里我总结了3种场景下的需求: 1.本地图片合成文字 2.本地图片合成图片 3.网络图片先下载 ...

  6. codeforces div2.C

    C. New Year and Rating time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. BOM之history对象(转)

    前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...

  8. 西瓜书概念整理(chapter 1-2)

    括号表示概念出现的其他页码, 如有兴趣协同整理,请到issue中认领章节 完整版见我的github:ahangchen 觉得还不错的话可以点个star ^_^ 第一章 绪论 Page2: 标记(lab ...

  9. java byte【】数组与文件读写

    此文全文参考http://blog.csdn.net/sniffer_wang/article/details/7455701,自己加以改进应用,谢了 import java.io.ByteArray ...

  10. IP查询接口1

    新浪的:http://counter.sina.com.cn/ip?ip=IP地址返回Js数据,感觉不是很精确,可以把问号后面的去掉,直接返回本机对应的IP所在地http://www.yodao.co ...