Chinaunix首页 | 论坛 | 博客
  • 博客访问: 212121
  • 博文数量: 43
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 21:45
文章分类

全部博文(43)

文章存档

2011年(3)

2010年(1)

2009年(21)

2008年(18)

我的朋友

分类: LINUX

2009-07-02 10:23:30

一般来说,UNIX文件操作只需要五个最基本功能就可以了,分别是打开文件open、关闭文件close、文件定位lseek、读文件read和写文件write。下面分别详细描述。

1 文件描述符

文件描述符fd是内核中对文件的表示,是一个int类型的整数,打开文件时返回一个文件描述符fd,其他文件操作都需要文件描述符fd指定对应的文件。

UNIX SHELL往往把文件描述符0、1、2分别对应标准输入、标准输出、标准错误,很多程序都用到这个特点从标准输入中读取数据,向标准输出写数据,这样通过I/O重定向就可以重复使用这样的程序。在POSIX标准中,常量STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO分别对应。标准输入、标准输出、标准错误文件描述符。

文件描述符的范围是[0, OPEN_MAX],而其系统保证每次打开新文件时返回的文件描述符是可能的最小值,这样进程就可以先关闭标准输入输出,然后打开新文件,从而实现标准输入输出重定向。

2 打开文件open(2)

#include
int open(const char *pathname, int oflag, ... /* mode_t mode */ );
Returns: file descriptor if OK, -1 on error

open(2)打开文件,如果成功返回文件描述符,失败返回-1。第一个参数pathname是文件的路径,第二个参数oflag是文件打开参数,第三个参数mode是可选的,在创建文件的时候使用,是文件的权限。

参数oflag是文件打开参数,可以用多个常量通过或操作组合。
下面是三个必选的参数:
  • O_RDONLY 只读
  • O_WRONLY 只写
  • O_RDWR   读写
这三个参数必须且只能选择一个。
下面是可选的参数:
  • O_APPEND 每次write写文件的时候向文件的结尾写数据
  • O_CREAT  如果文件不存在创建文件,这是open(2)需要提供第三个参数mode指定文件权限
  • O_EXCL   如果O_CREAT置位且文件已经存在,产生一个错误
  • O_TRUNC  如果文件存在且以只写或这读写模式成功打开,将文件的长度截为0
  • O_NOCTTY 如果文件时终端设备,不将其分配为进程的控制终端
  • O_NONBLOCK 如果文件时FIFO或字符设备、块设备时,启用非阻塞式IO
  • O_DSYNC  写同步,write写文件等到数据写入磁盘完成
  • O_RSYNC  读同步,read读文件等到同一区间的写文件操作结束
  • O_SYNC   同步,write写文件等到数据和文件属性都写入磁盘完成

#include
int creat(const char *pathname, mode_t mode);
Returns: file descriptor opened for write-only if OK, -1 on error

create(2)创建一个文件,参数mode指定文件权限,等同于open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode)。可以看出,create(2)返回的文件描述符对应文件以只写模式打开,不能读文件。在有些情况,如生成临时文件时,需要创建文件并对其读写,这时用open(pathname, O_RDWR | O_CREAT | O_TRUNC, mode)更好。

创建文件时,如果文件名长度大于NAME_MAX,文件名会被自动截断或产生错误。

3 关闭文件


4 文件定位


5 读写文件


阅读(1252) | 评论(0) | 转发(0) |
0

上一篇:UNIX文件专辑

下一篇:UTC GMT CST时间

给主人留下些什么吧!~~