Open和close
时间:2010-11-03 来源:1987hanen
Open和close
(1) Open和close函数说明
Open函数是用于打开或创建文件,打开或创建文件时可以指定文件属性及用户的权限等到各种参数。
close函数是用于关闭一个打开文件。当一个进程终止时,它所有已打开的文件都由内核
自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。
(2)open和close函数格式
open函数的语法格式如表6.1 所示。
open函数语法要点
所需头文件
#include <sys/types.h> // 提供类型pid_t的定义
#include <sys/stat.h>
#include <fcntl.h>
函数原型int open(const char *pathname,flags,int perms)
pathname 被打开的文件名(可包括路径名)
O_RDONLY:只读方式打开文件
O_WRONLY:可写方式打开文件
O_RDWR:读写方式打开文件
O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参
数为其设置权限
O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息。这一
参数可测试文件是否存在
O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调
用open()系统调用的那个进程的控制终端
O_TRUNC:如文件已经存在,并且以只读或只写成功打开,那么会先
全部删除文件中原有数据
flag:文件
打开的方
式
O+APPEND:以添加方式打开文件,在打开文件的同时,文件指针指
向文件的末尾
函数传入值
perms 被打开文件的存取权限,为8进制表示法
函数返回值
成功:返回文件描述符
失败:-1
在 open函数中,flag参数可通过“|”组合构成,但前3 个函数不能相互组合。perms 是
文件的存取权限,采用8 进制表示法,相关内容读者可参见第2章。
close函数的语法格式如下
close函数语法要点
所需头文件#include <unistd.h>
函数原型int close(int fd)
函数输入值fd:文件描述符
函数返回值0:成功
-1:出错
(3)open和close函数使用实例
下面实例中的open 函数带有3 个flag 参数:O_CREAT、O_TRUNC 和O_WRONLY,
这样就可以对不同的情况指定相应的处理方法。另外,这里对该文件的权限设置为0600。其
源码如下所示:
/*open.c*/
#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("/home/laohan/hello.c", O_CREAT | O_TRUNC | O_WRONLY , 0600 ))<0)
{
perror("open:");
exit(1);
}
Else
{
printf("Open file: hello.c %d\n",fd);
}
if( close(fd) < 0 )
{
perror("close:");
exit(1);
}
else
printf("Close hello.c\n");
exit(0);
}
注:open函数返回的文件描述符一定是最小的未用文件描述符。由于一个进程在启动时自动打开了
0、1、2 三个文件描述符,因此,该文件运行结果中返回的文件描述符为3。读者可以尝试在
调用open函数之前,加依据close(0),则此后在open函数时返回的文件描述符为0(若关闭文
件描述符1,则在执行时会由于没有标准输出文件而无法输出)。