一、open
1.基础知识
(1)man指令
可以通过man指令,了解接口函数所需的头文件
如图:
那么查看open()所需头文件,也用类似指令

man 2 open


man指令的相关博客

(2)open函数的概述:
open有两种使用方式,并且open有返回值

#include<fcntl.h>
int open(constchar *pathname, int flags);
int open(constchar *pathname, int flags, mode_t mode);
返回值:成功则返回文件描述符,否则返回-1

对于open函数来说,第三个参数仅当创建新文件时(即 使用了O_CREAT 时)才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的POSIX路径名(如/home/user/a.cpp);flags 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于fcntl.h)通过逻辑位或逻辑构成。

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

打开/创建文件时,至少得使用上述三个常量中的一个。
以下常量是选用的:

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

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

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

(3)文件权限

可读:r   4
可写:w  2
可指向: x 1

通常使用ls -l来查看文件权限
如图:新建1个文件1.txt
用chmod设置它的权限为666
所以用ls -l查看时,1.txt的权限为-rw -rw -rw (0+4+2 0+4+2 0+4+2)
第1组-rw为6,指文件的拥有者root对文件有读写权限
第2组-rw为6, 指同组用户有读写权限
第3组-rw为6, 指其他用户有读写权限
一般不推荐把文件属性设置为777(很恐怖)

2.自己写一个demo调用open看看效果

如图,创建1个file1文件,并且写一个c文件,在该c文件中调用open(“./file1”,O_RDWR);
即在当前目录下以读写模式打开file1文件。
运行结果为3.
当把file文件删除,再执行编译好的.o文件,运行结果为-1(如果路径下没有file文件,那么fd也等于-1)
为了程序的健壮性(设置一些防御机制进行判断)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{int fd;fd = open("./file1",O_RDWR);if(fd == -1){printf("open file1 failed\n");fd = open("./file1",O_RDWR|O_CREAT,0600);//如果没有file1这个文件就创建1个file1if(fd > 0)printf("open file1 success\n");printf("fd = %d\n",fd);}return 0;
}

2.文件---open相关推荐

  1. MiniGUI开发指南

    MiniGUI 目录 MiniGUI 体系结构 概览 引言 POSIX线程 基于PThread的微客户/服务器结构 多线程通讯的关键数据结构--消息队列 面向对象技术在MiniGUI中的应用 未来考虑 ...

  2. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  3. /var/lib/docker/overlay2/xxxxx no such file or directory docker文件删除引发的问题

    记一次误删引发的服务雪崩 K8s node节点磁盘报警,报警后我找到服务中占用磁盘最多的地方,在overlay2目录下,对下面的文件进行了删除   删除后,有状态服务先出现了问题,服务无法启动.停止. ...

  4. Access to XMLHttpRequest at file from origin ‘null‘ has been blocked by CORS policy谷歌浏览器本地打开项目js文件报错

    Access to XMLHttpRequest at 'file:///xxxxx/PQ.BaseInfo.proto' from origin 'null' has been blocked by ...

  5. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  6. zip压缩多个文件,解压时不包含目录层级

    假设我们有个目录叫 dev,dev中有很多文件,我们想要将dev中的文件打包,名字可能叫dev.zip,但当我们解压的时候,不想要解压生成一个dev目录,想要直接解压在当前目录,这样如何压缩呢? # ...

  7. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多

    Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...

  8. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  9. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

  10. IDEA设置单个文件、单个包、单个项目的编码格式

    IDEA设置单个文件.单个包.单个项目的编码格式 File-> Settings-> File Enclodings 选择编码格式,确定即可. 注意:此处的编码格式设定以后,该包已经存在的 ...

最新文章

  1. python浏览器自动化测试库【2018/7/27-更新】
  2. Java——线程安全的集合
  3. 安装中文VS2008 SP1之后 智能提示是英文的解决办法
  4. 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
  5. 科研人必备的学术导航,不看后悔!
  6. 《天涯明月刀》动作开发负责人:让美术hold住全场,推翻MMO的动作套路化设计
  7. Java 实现三次 for 循环计算水仙花数
  8. SQL Server中通用数据库角色权限的处理详解
  9. 学习:Web安装项目创建桌面快捷方式及重写安装类(转)
  10. ext get id js_Ext.getCmp(“id”) 简单应用 | 学步园
  11. Linux系统:centos7下搭建Rocketmq4.3中间件,和监控台
  12. python访问网页被拒_Python Requests.get访问网页403错误
  13. 假期要如何过才有意义
  14. html实现百度换肤,百度换肤
  15. PHP开发Paypal支付,支付流程和接口实现方案
  16. JAVA之MySQL数据库增删改查【Java入门练手】
  17. 利用qq官方提供的js_sdk实现qq互联登录
  18. 左右值无限分类实现算法
  19. Python快速查找每个站的最近的10个站
  20. ProtoBuf - Arena

热门文章

  1. 数学金字塔C语言原函数,文华转金字塔 ← 金字塔软件问题提交 ← 金字塔客服中心 - 专业程序化交易软件提供商...
  2. LabVIEW 严格类型VI
  3. 【华为OD机试真题 java、python、c++】机房布局【2022 Q4 200分】
  4. CSS display的属性
  5. DHCP option43配置方法
  6. 8000 sentences of Oral English(three)
  7. MySQL常用错误码
  8. AWS ALB ELB
  9. Mac音效增强软件:Boom 3D
  10. 【图像处理】(1)canny图像边缘检测