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. AngularJS指令进阶 – ngModelController详解

    AngularJS指令进阶 – ngModelController详解 在自定义Angular指令时,其中有一个叫做require的字段,这个字段的作用是用于指令之间的相互交流.举个简单的例子,假如我 ...

  2. http的Max-Forwards头的作用(转)

    请求头的Max-Forwards用来请求特定代理.当代理收到一个允许URI转发的OPTIONS请求,则检查Max-Forwards.如果Max-Forwards值为0,则不能转发该消息:相反,代理会将 ...

  3. 关于P,NP,NPC和NP-hard的通俗解释

    这些概念以前老是犯糊涂,今天整清楚.摘要:P: Polynomial SolvableNP: Non-determinstic Polynomial Solvable 0)词语解释:Polynomia ...

  4. Java:网络编程

    一.因特网地址 InetAddress类:实现主机名和因特网地址之间的转换. InetAddress address=InetAddress.getByName(String);返回一个InetAdd ...

  5. JSP EL表达式使用

    JSP EL表达式使用: Servlet: package com.stono.servlet; import java.io.IOException; import java.util.HashMa ...

  6. Android系列一、创建项目

    本文是在MAC下的Android Studio操作的. 一.Android入门 1.打开Android Studio,界面如下: 几个选项的意思: 创建一个新的项目 打开一个已经存在的项目 从版本管理 ...

  7. POJ1556(割点)

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8114   Accepted: 3716 Description C ...

  8. HDU 2585 [Hotel]字符串递归处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2585 题目大意:马克思要找个曾经去过的很好的旅馆,可惜他记不完整旅馆的名字.他有已知的部分信息和可能的 ...

  9. Spring之IOC讲解

    一.SpringIOC的好处: ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处. 1.资源集中管理,实现资源的可配置和易管理. 2.降低了使用 ...

  10. 2月22日 《从Paxos到Zookeeper 分布式一致性原理与实践》读后感

    zk的特点: 分布式一致性的解决方案,包括:顺序一致性,原子性,单一视图,可靠性,实时性 zk的基本概念: 集群角色:not Master/Slave,is Leader/Follower/Obser ...