`

unix 环境高级编程-3-文件I/O(3.1~3.9)

 
阅读更多

3.2文件描述符

对内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或者创建一个新文件时,内核向进城返回一个文件描述符。当读或者写一个问一个文件时候,使用open或者create返回文件描述符标识该文件。将其作为参数传递给read或者write。

unix系统shell使用文件描述符0与进城的标准输入相关联。文件描述符1与标准输出有关联。文件描述符2与标准出错输出相关联。

#define 0 STDIN_FILENO
#define 1 STDOUT_FILENO
#define 2 STDERR_FILENO

文件描述符的范围0~OPEN_MAX,目前都将其增至63.

3.3open函数

调用open函数可以打开或者创建一个文件。


...表示仅当创建新文件时候才使用第三个参数。

pathname 表示打开或者创建的文件名字。oflag参数可用来说明此函数的多个选项。有如下常量 O_RDONLY(只读 0),O_WRONLY(只写1),O_RDWR(读写打开 2)。上述三个参数必须指定切只能指定一个

下边的参数是可选的。O_APPEND ,每次写的时候追加到尾端。O_CREATE,创建文件,但是mode要指定访问权限。O_EXCL,判断是否文件存在。。。。。还有许多参数请参考http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_1.html

同步输入输出:O_DSYNC ,O_RSYNC,O_SYNC

由open返回的文件描述符一定是最小的未使用的描述符数值。

3.4create函数

也可以调用create创建一个新文件。

返回值,若成功,则返回为只写打开的文件描述符,若出错,则返回-1;

此函数相当于open(path那么,O_WRONLY|O_CREAT|O_TRUNC,mode);

3.5close 函数

关闭文件,若成功返回0,不成功返回-1;

3.6lseek函数
每打开的文件都有一个与其相关连的“当前文件偏移量”,通常是非负整数。通常读写操作都是从偏移量开始的。系统默认情况下打开文件时,偏移量为0,当设置O_APPEND。

实例


运行结果

lseek 将当前文件的的偏移量记录在内核中,他并不引起任何I/O。然后该偏移量用户下一个读写操作。文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次系将加长该文件。并在文件中构成一个空洞。位于文件中并没有写过的字节都被度为0.


运行结果

空洞文件是存在的。

3.7read 函数

调用read函数从打开的文件中读取数据。


若成功则返回读到的字节数,若以到文件结尾则返回0,若出错则返回-1;

经典定义:首先,void*表示通用指针

其次,返回值必须是带符号整数。ssize_t,已返回字节数,0,-1

第三个参数不带符号,这允许一个16为的实现一次读写数据大65534个字节。

3.8 write函数

调用write函数向打开的文件写数据

成功返回已经写的字节,失败返回-1;

3.9 I/O效率

示例:将标准输入复制到标准输出


书中有对此程序的测试,BUFFSIZE 设置从1到524288,系统CPU时间最小为4096,当逐渐增大,时间又变长了,但变化很小。

分享到:
评论

相关推荐

    UNIX环境高级编程

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

    UNIX环境高级编程第二版

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程.pdf

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程(中文版+英文版+源代码)

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程_第2版.part2

    第3章文件i/o 47 3.1 引言47 3.2 文件描述符47 3.3 open函数48 3.4 creat函数49 3.5 close函数50 3.6 lseek函数50 3.7 read函数53 3.8 write函数54 3.9 i/o的效率54 3.10 文件共享56 3.11 原子操作59 ...

    UNIX环境高级编程_第二版中文

    第3章 文件I/O  3.1 引言  3.2 文件描述符  3.3 open函数  3.4 creat函数  3.5 close函数  3.6 lseek函数  3.7 read函数  3.8 write函数  3.9 I/O的效率  3.10 文件共享  3.11 原子操作  ...

    UNIX环境高级编程(PDF)

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程中文版

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

    Unix环境高级编程电子书

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程(第二版中文)

    UNIX环境高级编程 第1章 UNIX基础知识 1 1.1 引言 1 1.2 UNIX体系结构 1 1.3 登录 1 1.4 文件和目录 3 1.5 输入和输出 6 1.6 程序和进程 8 1.7 出错处理 10 1.8 用户标识 12 1.9 信号 14 1.10 ...

    UNIX环境高级编程和源代码

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程 不扣分哦

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

    UNIX环境高级编程英文第三版+源码

    3.9 I/O Efficiency 72 3.10 File Shar ing 74 3.11 Atomic Operations 77 3.12 dup and dup2 Functions 79 3.13 sync, fsync, and fdatasync Functions 81 3.14 fcntl Function 82 www.it-ebooks.info Contents xi ...

    中文第一版-UNIX环境高级编程

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

    UNIX环境高级编程(第二版中文).pdf

    第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 ...

Global site tag (gtag.js) - Google Analytics