码迷,mamicode.com
首页 > 其他好文 > 详细

APUE学习心得

时间:2017-03-12 20:00:35      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:apt   打开   type   include   文件描述符   否则   风格   style   pat   

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学习心得

标签:apt   打开   type   include   文件描述符   否则   风格   style   pat   

原文地址:http://www.cnblogs.com/liangbo706/p/6538684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!