首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

资料操作的一些函数open()、close()、read()函数

2012-07-31 
文件操作的一些函数open()、close()、read()函数不带缓存的文件I/O操作主要有5个函数open、read、write、lseek

文件操作的一些函数open()、close()、read()函数

不带缓存的文件I/O操作主要有5个函数open、read、write、lseek和close。这几个不带缓存的操作是指每一个函数都只调用系统中的一个函数。这些函数不是ANSIC组成部分,但属于POSIX的组成部分。

1.open函数

open 函数用于打开和创建文件。

所需都文件

#include<sys/types.h>//提供pid_t类型的定义

#include<sys/stat.h>

#include<fcntl.h>

函数原型 int open(const char *pathname, int flags, ... /* mode_t mode */);

返回值:成功则返回文件描述符,否则返回 -1

pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp);

第三个参数 (...)仅当创建新文件时才使用,用于指定文件的访问权限位(access permission bits)。

flags 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。

        O_RDONLY      只读模式 
        O_WRONLY      只写模式 
        O_RDWR        读写模式

打开/创建文件时,用且只能用三个常量中的一个。以下常量是选用的:

        O_APPEND       每次写操作都写入文件的末尾 
        O_CREAT        如果指定文件不存在,则创建这个文件 
        O_EXCL         如果要创建的文件已存在,则返回 -1,并且修改 errno 的值,用于测试文件是否存在
        O_TRUNC        如果文件存在,并且以只写/读写方式打开,则清空文件全部内容 
        O_NOCTTY       如果路径名指向终端设备,不要把这个设备用作控制终端。
        O_NONBLOCK     如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O
                   设置为非阻塞模式(nonblocking mode)

以下三个常量同样是选用的,它们用于同步输入输出

        O_DSYNC        等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。 
        O_RSYNC        read 等待所有写入同一区域的写操作完成后再进行
        O_SYNC         等待物理 I/O 结束后再 write,包括更新文件属性的 I/O

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

2. close 函数

用于关闭已打开的文件。

头文件:   #include <unistd.h>

函数原型: int close(int fd);

返回值: 0(成功)或者 -1(出错)

fd:     是要关闭的文件描述符。

进程结束时,该进程打开的所有文件都会自动被内核(kernel)关闭。

//文件打开与关闭2008.12.06
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>

int main(void)
{
int fd;
//调用open,以可读写方式打开
if((fd=open("/tmp/hello1.c",O_CREAT|O_TRUNC|O_RDWR,0700))<0){
   perror("open:");
   exit(1);
}
else{
   printf("open file:hello1.c %d\n",fd);
}
//close
if(close(fd)<0){
   perror("close:");
   exit(1);
}
else{
   printf("close hello1.c\n");
}
   exit(0);
}

(3)read函数(读取文件)
read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。
使用格式如下:
number = read(handle, buffer ,n) ;
上述read调用函数中,各个参数的定义如下:
l handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。
l buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。
l n: 表示调用一次read操作,应该读多少数量的字符。
l number:表示系统实际所读取的字符数量。
假设某个文件的长度是600字符,而n的值是512,则在第1次调用读这个文件时,系统可以正常地读取512个字符地内容,并将这些字符数量传给number变量,因此number的值将变为88。要第2次读取这个文件时,因为文件已经没有内容可供读取了,此时系统会返回0给number。另外,如果读取文件失败,系统将返回-1给number。

热点排行