Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103631647
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 23:00:39

第三章 低级输入/输出

3.1 概述 与第二章内容相对应,本章介绍UNIX系统中通过系统调用来实现的输入/输出,通常称之为低级输入/输出。这些系统调用能够直接实现对设备(如磁带驱动器等)的输入和输出,程序员能够决定要使用的缓冲区的大小,而不象标准输入/输出库函数那样透明设定缓冲区大小。

在标准输入/输出库中,一个文件是由一个文件指针来对应的。当使用低级界面时,则用一个文件描述字对应一个文件。文件描述字是一个小的整数。有3个事先定义的文件描述字0、1和2,分别对应标准输入、标准输出和标准错误输出。一般说来,文件描述字都是作为系统调用的第一个参数给出的。

3.2 相关系统调用介绍

·文件创建和关闭 open()用于为读写而打开一个文件,或用它来创建新文件。

 int open (const char *path, int oflag, ... /* mode_t mode */);

open使用三个参数:一个字符串path包含要打开的文件名;

一个整数oflag指明文件将被如何打开;

整数mode在创建文件时使用。

常用的oflag包括:

 O_RDONLY 打开文件仅用于读。

O_WRONLY 打开文件仅用于写。

 O_RDWR 打开文件用于读写。

 O_CREAT 如果文件不存在,则创建,此时mode作为第三个参数给出。

 close()用于关闭一个已经打开的文件。

·文件读写 read()用于读文件,格式为: read(int fildes, void *buf, size_t nbyte);

三个参数说明如下:

filedes是文件描述字;

指针buf指向一个数据将被读入的缓冲区;

整数nbytes指明要读的字节个数。

成功时返回实际读入的字节数,出错则返回-1。

write()用于写文件,与read类似,格式为: write(int fildes, void *buf, size_t nbyte);

三个参数说明如下:

filedes是文件描述字;

指针buf指向一个数据将被写入的缓冲区;

整数nbytes指明要写的字节个数。

成功时返回实际写入的字节数,出错则返回-1。

 ·文件移动定位用于在文件中移动的低级输入/输出系统调用是lseek(),

与fseek()类似,它也接收三个参数:

一个文件描述字对应一个打开的文件;

一个整数指明要移动的字节数,称为offset;

一个整数指明从文件中什么位置移动。

·复制文件描述字有时候有不只一个文件描述字对应一个文件。

当创建子进程时(参加后面关于进程开发的章节),这一点很常用。

为了获得一个新的文件描述字,并保证其与fd对应同一个文件,应调用 fd2 = dup(fd) fd2现在和fd对应同一个文件,并且和fd一样在文件中有相同的位置。

阅读(286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~