open函数详解与close函数详解

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

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

open()

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

原型

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创建,则第三个参数表示创建文件的默认权限

返回值

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

fopen与open的区别

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

close

头文件:#include<unistd.h>
功能:关闭一个已经打开的文件

原型

int close(int fd)
参数说明:
 fd:是需要关闭的文件描述符

返回值

成功:返回0;
失败:返回-1,并设置errno

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

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

#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.
代码:

#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.
代码:

#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.net/141223.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 八皇后问题详解(四种解法)

    八皇后问题详解(四种解法)如果你去百度百科八皇后这个问题,你会发现人家也是历史上有头有脸的一个问题,最后一句“计算机发明后就有一万种方式解决这个问题”读起来也让程序猿们很快活。闲话少说,开始阐述我的思路:最无脑的解法一定是八个for遍历,浪费了太多的计算资源在各种无用功上面,我们稍微构思一下:首先如何决定下一个皇后能不能放这里可以有两种思路,第一种是尝试维护一个8*8的二维矩阵,每次找到一个空位放下一个皇后就把对应行列对

    2022年6月30日
    21
  • gitHub新手教程

    gitHub新手教程gitHub新手教程

    2022年4月24日
    40
  • python中int是什么类型

    python中int是什么类型python中的基本数据类型1:虽然python中的变量不需要声明,但使用时必须赋值整形变量浮点型变量字符型2:可以一个给多个变量赋值,也可以多个给多个变量赋值3:python3中有6个标准数据类型

    2022年7月5日
    29
  • 快速手工实现软件著作权源码60页制作

    快速手工实现软件著作权源码60页制作软件著作权源码基本要求:(1)前30页,后30页,一共60页。其实前30页还好说,什么叫后30页?实际代码没有绝对的后;(2)每页至少60行,无空行,有一定的注释。快速插入代码先按顺序准备好代码,”插入”-“对象”-“文件中文字”,可快速插入所有代码。每页至少60行首先得知道每页多少行,可通过”页面设置”-“版式”-“行号”,显示出行号:效果如下:设…

    2022年4月19日
    189
  • android调用so文件_android加载大图

    android调用so文件_android加载大图原文地址点击打开链接一、前言Android中有时候为了效率以及平台开发库的支持,难免会用到NDK开发,那么都会产生一个so文件,通过native方法进行调用,开发和调用步骤很简单,这里就不多说了,本文主要来介绍,我们在使用so的时候总是会出现一些常见的问题,而现在插件化开发也很普遍了,有时候插件中也会包含一些so文件,需要加载,这时候也会出现一些问题。本文就来详细总

    2022年9月18日
    2
  • mysql截取数字_mysql 截取字符串中的数字

    mysql截取数字_mysql 截取字符串中的数字展开全部selectREVERSE(right(REVERSE(filename),length(filename)-LEAST(if(Locate(‘0’,REVERSE(filename))>0,Locate(‘0’,REVERSE(filename)),999),if(Locate(‘1’,REVERSE(filename))>0,Locate(‘1’,REVERSE(f…

    2022年6月3日
    90

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号