前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >open函数详解与close函数详解

open函数详解与close函数详解

作者头像
全栈程序员站长
发布2022-09-01 16:31:33
9690
发布2022-09-01 16:31:33
举报

大家好,又见面了,我是你们的朋友全栈君。

open()

代码语言:javascript
复制
头文件:#include<fcntl.h>//在centos6.0中只要此头文件就可以
       #include<sys/types.h>
       #incldue<sys/stat.h>
功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文
     件描述符对指定文件进行读取与写入的操作。)

原型

代码语言:javascript
复制
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
参数说明:
1.pathname
  要打开或创建的目标文件
2.flags
  打开文件时,可以传入多个参数选项,用下面的
  一个或者多个常量进行“或”运算,构成falgs
  参数:
  O_RDONLY:   只读打开
  O_WRONLY:   只写打开
  O_RDWR:     读,写打开
这三个常量,必须制定一个且只能指定一个
  O_CREAT:    若文件不存在,则创建它,需要使
              用mode选项。来指明新文件的访问权限
  O_APPEND:   追加写,如果文件已经有内容,这次打开文件所
              写的数据附加到文件的末尾而不覆盖原来的内容

ps:open函数具体使用那个,和具体应用场景相关,如目标文件存在,使用两个参数的open,如果目标文件不存在,需要open创建,则第三个参数表示创建文件的默认权限

返回值

代码语言:javascript
复制
成功:新打开的文件描述符
失败:-1
open返回的文件描述符一定是最小的而且没有被使用的

fopen与open的区别

以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回

close

代码语言:javascript
复制
头文件:#include<unistd.h>
功能:关闭一个已经打开的文件

原型

代码语言:javascript
复制
int close(int fd)
参数说明:
 fd:是需要关闭的文件描述符

返回值

代码语言:javascript
复制
成功:返回0;
失败:返回-1,并设置errno

打开的文件描述符一定要记得关闭,否则资源会被大量的占用,导致内存不够

open打开的文件存在时: 示例: 1. 代码:

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
 int fd=open("myfile",O_WRONLY);
 if(fd<0)
 {
  perror("open");
  exit(1);
 }
 const char*msg="hello open\n";
 int count = 6;
 while(count--)
 {
  write(fd,msg,strlen(msg));
 }
 close(fd);
 return 0;
}

运行结果:

这里写图片描述
这里写图片描述

2. 代码:

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
int main()
{
 int fd=open("myfile",O_RDWR);
 if(fd<0)
 {
  perror("open");
  exit(1);
 }
 const char*msg="hello hahaha\n";
 int count= 10;
 while(count--)
 {
 write(fd,msg,strlen(msg));
 }
 char buf[1024]={
  
  0};
 int num=10;
 while(num--)
 {
 read(fd,buf,strlen(msg));
 }
 close(fd);
 return 0;
}

运行结果:

这里写图片描述
这里写图片描述

open打开的文件不存在时:

1. 代码:

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<fcntl.h>
int main()
{
 int fd=open("file",O_WRONLY|O_CREAT,0644);
 //file文件不存在,所以在书写第二个参数时,记得把O_CREAT加上,
 //如果不加O_CREAT的话,程序就会报此文件不存在
 if(fd<0)
 {
  perror("open");
  exit(1);
 }
 const char*msg="hello file\n";
 int count=10;
 while(count--)
 {
  write(fd,msg,strlen(msg));
 }
 close(fd);
 return 0;
}

运行结果:

这里写图片描述
这里写图片描述

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141223.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • open()
  • close
  • 打开的文件描述符一定要记得关闭,否则资源会被大量的占用,导致内存不够
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档