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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux root密码修改命令_centos7修改root用户密码

    linux root密码修改命令_centos7修改root用户密码作者:技术工程师–陈锐锐前言:最近遇到有将自己root密码忘记的情况,这里总结一下root密码修改的几种方法,仅供参考。一、Linux6.x以及以下版本1.重启系统,按e进入如下模式再次按e进入如图模式(选中kernel)2.按e进入编辑(空格+/init1或空格+singe或空格+1),三种选一种就行。3.修改完成后,按回车,退回上一界面,按b保存重启4.完成以上操作,即可进入单用户模式,passwd直接修改,然后重启即可二、Linu…

    2025年9月2日
    8
  • TF-IDF算法介绍及实现「建议收藏」

    TF-IDF算法介绍及实现「建议收藏」目录1、TF-IDF算法介绍(1)TF是词频(TermFrequency)(2)IDF是逆向文件频率(InverseDocumentFrequency)(3)TF-IDF实际上是:TF*IDF2、TF-IDF应用3、Python3实现TF-IDF算法4、NLTK实现TF-IDF算法5、Sklearn实现TF-IDF算法6、Jieba实现TF-IDF算…

    2022年6月12日
    62
  • stun client java实现_STUN Client

    stun client java实现_STUN ClientIsyouremailaddressOK?Youaresignedupforournewslettersbutyouremailaddressiseitherunconfirmed,orhasnotbeenreconfirmedinalongtime.Pleaseclickheretohaveaconfirmationemail…

    2022年7月17日
    12
  • python中for循环语句例子_for循环语句格式

    python中for循环语句例子_for循环语句格式有时候我们在使用python进行编程的时候,想使用for语句,下面来介绍一下for语句的使用方法工具/原料pythonfor语句的使用方法和实例方法/步骤1第一步我们首先需要知道python中for语句主要用于迭代遍历字符串,列表,元组等,首先输入“foriin”abcdefg”:print(i)”遍历字符串,如下图所示:2第二步运行py文件之后,可以看到将字符串abcdefg中的元素全部遍…

    2022年8月12日
    5
  • 网页w3c标准_让行为成为标准

    网页w3c标准_让行为成为标准转自:http://一杯白开水w.iteye.com/blog/1122618什么是W3C标准    作为网站技术开发人员而言,往往是站在自己的开发角度来实施网站布署(读取数据及开发的方便性等等),而不是站在网站访问者与搜索引擎角度。因此大部分的网站在浏览方面不够直观或是方便,特别是现在w3c的规范,更是在大部分的网站开发人员脑里一片空白。何况百度、google、msn、yahoo

    2025年11月24日
    3
  • Tp-link路由器怎么设置端口映射 内网端口映射听语音

    Tp-link路由器怎么设置端口映射 内网端口映射听语音

    2021年9月25日
    53

发表回复

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

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