2.文件---open
一、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相关推荐
- MiniGUI开发指南
MiniGUI 目录 MiniGUI 体系结构 概览 引言 POSIX线程 基于PThread的微客户/服务器结构 多线程通讯的关键数据结构--消息队列 面向对象技术在MiniGUI中的应用 未来考虑 ...
- golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...
- /var/lib/docker/overlay2/xxxxx no such file or directory docker文件删除引发的问题
记一次误删引发的服务雪崩 K8s node节点磁盘报警,报警后我找到服务中占用磁盘最多的地方,在overlay2目录下,对下面的文件进行了删除 删除后,有状态服务先出现了问题,服务无法启动.停止. ...
- 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 ...
- 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件
过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...
- zip压缩多个文件,解压时不包含目录层级
假设我们有个目录叫 dev,dev中有很多文件,我们想要将dev中的文件打包,名字可能叫dev.zip,但当我们解压的时候,不想要解压生成一个dev目录,想要直接解压在当前目录,这样如何压缩呢? # ...
- Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...
- springboot设置文件上传大小(tomcat默认1M)
application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...
- 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录
将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...
- IDEA设置单个文件、单个包、单个项目的编码格式
IDEA设置单个文件.单个包.单个项目的编码格式 File-> Settings-> File Enclodings 选择编码格式,确定即可. 注意:此处的编码格式设定以后,该包已经存在的 ...
最新文章
- python浏览器自动化测试库【2018/7/27-更新】
- Java——线程安全的集合
- 安装中文VS2008 SP1之后 智能提示是英文的解决办法
- 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
- 科研人必备的学术导航,不看后悔!
- 《天涯明月刀》动作开发负责人:让美术hold住全场,推翻MMO的动作套路化设计
- Java 实现三次 for 循环计算水仙花数
- SQL Server中通用数据库角色权限的处理详解
- 学习:Web安装项目创建桌面快捷方式及重写安装类(转)
- ext get id js_Ext.getCmp(“id”) 简单应用 | 学步园
- Linux系统:centos7下搭建Rocketmq4.3中间件,和监控台
- python访问网页被拒_Python Requests.get访问网页403错误
- 假期要如何过才有意义
- html实现百度换肤,百度换肤
- PHP开发Paypal支付,支付流程和接口实现方案
- JAVA之MySQL数据库增删改查【Java入门练手】
- 利用qq官方提供的js_sdk实现qq互联登录
- 左右值无限分类实现算法
- Python快速查找每个站的最近的10个站
- ProtoBuf - Arena
热门文章
- 数学金字塔C语言原函数,文华转金字塔 ← 金字塔软件问题提交 ← 金字塔客服中心 - 专业程序化交易软件提供商...
- LabVIEW 严格类型VI
- 【华为OD机试真题 java、python、c++】机房布局【2022 Q4 200分】
- CSS display的属性
- DHCP option43配置方法
- 8000 sentences of Oral English(three)
- MySQL常用错误码
- AWS ALB ELB
- Mac音效增强软件:Boom 3D
- 【图像处理】(1)canny图像边缘检测