UNIX环境高级编程学习

今天开始学习《UNIX环境高级编程》的第三章文件I/O的学习,本章包括了打开文件、读文件、写文件等等。下面是系统的介绍这些函数。

1.open函数



#include <fcntl.h>
int open(const char *pathname, int oflag, .../*mode_t mode*/);
Return filedescriptor if OK, -1on error

第三个参数通常用于新文件被创建时候的。
pathname参数是要打开或者要创建文件的名字,oflag参数的选项详见下面的选项。

O_RDONLY      只读打开。

O_WRONLY      只写打开。

O_RDWR           读写打开。

有且仅有一个这三个参数之中的一个被指定。下面的参数则是可选的。

O_APPEND       每次写的时候追加到文件的结尾。详见3.11

O_CREAT          如果文件不存在在创建一个文件,这个选项需要第三个open函数的第三个参数----mode,指定新文件得到的允许位。详见4.5

O_EXCL             如果O_CREAT被指定而且文件已经存在则产生一个错误。详见3.11

O_TRUNC         如果文件存在而且已只读或者读写的方式打开,则文件截断为0。
O_NOCTTY        如果pathname指定的是一个终端设备,不为此进程分配此设备的控制终端。详见9.6

O_NONBLOCK  如果parhname指定的是一个FIFO,一个块设备,或者一个特殊字节设备,此选项为本次打开文件和后续的非阻塞I/O操作。

下面的三个参数也是可选的,他们是有关同步输出和输入的选项。

D_DSYNC        使每次write等待物理I/O操作完成,但是如果写操作并不影响读取刚写入的数据,则不等待文件属性被更新。

O_RSYNC        使每一个以文件描述符作为参数的read操作等待,直至任何文件同一部分进行的未写操作都完成

O_SYNC           使每次write都等待物理I/O操作完成,包括write操作引起的文件属性更新所需的I/O

2.creat函数

也可调用creat函数创建一个新文件。

	#include <fcntl.h>
	int creat(const char *pathname, mode_t mode);
		//Return:file descriptor opened for write-only if OK,-1 on error#include <fcntl.h>
	int creat(const char *pathname, mode_t mode);
		//Return:file descriptor opened for write-only if OK,-1 on error

这个函数等价于

	open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);

creat函数只能创建一个只写的文件,如果要创建一个临时文件,先读后写然后再调用creat,close,最后在open,最好的方式是调用open函数如下所示

	open(pthname, O_RDWR | O_CREAT | O_TRUNC, mode);open(pthname, O_RDWR | O_CREAT | O_TRUNC, mode);


3.close 函数

文件调用close函数结束

	#include <unistd.h>
	int close(int filedes);
    		//Return:0 if OK,-1 on error#include <unistd.h>
	int close(int filedes);
    		//Return:0 if OK,-1 on error

4.lseek 函数

	#include <unistd.h>
	off_t lseek(int filedes, off_t offset, int whence);
		// Return:new file offset if OK, -1 on error#include <unistd.h>
	off_t lseek(int filedes, off_t offset, int whence);
		// Return:new file offset if OK, -1 on error

对offset参数的解释和whence有关

若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节

若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可正也可为负。

若whence是SEEK_END,则将文件的偏移量设置为文件长度加offset,offset可为正或负。

若lseek成功执行,则返回文件的偏移量,可以用下列方式查看当前打开文件的偏移量。

off_t currpos;
currpos = lseek(fd, 0, SEEK_CUR);

本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库, PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。 本书内容丰富权威, 概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第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 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值