APUE学习心得
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学习心得的更多相关文章
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
- 我的MYSQL学习心得(九) 索引
我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
随机推荐
- ZOJ-2343-Robbers
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1398 题意: 输入t 有t个测试用例每个测试用例第一行输入三个数n, ...
- 天兔(Lepus)监控系统快速安装部署
Lepus安装需要Lamp环境,Lamp环境的安装个人认为比较费劲,XAMPP的一键部署LAMP环境省心省力, lepus官网手册也建议采用XAMPP的方式安装,lepus也是在XAMPP上进行研发的 ...
- linux学习笔记----权限与命令之间的关系(极重要)
一.权限与命令之间的关系 二.文件与目录的默认权限与隐藏权限 1)umask为默认的权限(通过umask -S)查看你的系统的默认权限. umask的分数是指该默认值需要减掉的权限,比如说umask= ...
- 在DataTable数据类型最后增加一列,列名为“Column”,内容都为“AAA”
DataTable dt = new DataTable(); dt.Columns.Add("Column", typeof(string)); foreach (DataRow ...
- Boost.Asio技术文档
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...
- MyBatis 源码分析——介绍
笔者第一次接触跟MyBatis框架是在2009年未的时候.不过那个时候的他并不叫MyBatis,而是叫IBatis.2010年的时候改为现在的名字--MyBatis.这几年过去了,对于笔者来讲有一点陌 ...
- [html] 学习笔记--Web存储
HTML5 提供了两种在客户端存储数据的新方法之前,这些都是由 cookie 完成的.但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效 ...
- RESTful_简介
一.概括总结一下什么是RESTful架构: (1)每一个URI代表一种资源: (2)客户端和服务器之间,传递这种资源的某种表现层(Representation): (3)客户端通过四个HTTP动词,对 ...
- 一个想法(续四):IT技术联盟创业众筹进度公示
为了将整个创业过程更加的公开公正透明化,特开此篇用于展示众筹进度. 首轮众筹进度如下:(每天24点更新1次)
- WEB前端性能优化之二——css优化
1.把样式表置于顶部 现把样式表放到文档的< head />内部似乎会加快页面的下载速度.这是因为把样式表放到< head />内会使页面有步骤的加载显示.HTML规范清 楚指 ...