Linux之open/close/read/write/lseek记录
一、文件权限
这里不做过多描述,只是简单的记录,因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息
drwxrwxrwx 1 root root 0 Oct 10 17:06 open
-rwxrwxrwx 1 root root 293 Oct 8 05:25 open10.c
-rwxrwxrwx 1 root root 839 Oct 10 03:36 open14.c
其中 r w x 含义是
| r | 读(read) |
| w | 写(write) |
| x | 可执行(executable) |
另外可以看到三组rwx,分别是对owner、group、other三组进行配置的。

最前面的d 代表的是文件夹,- 表示的是一个文件。
上面代表的意思是对于三个文件,owner、group, other的权限都是rwx。
另外也可以用数字表示文件的权限类型
| r | 001 |
| w | 010 |
| x | 100 |
只读类型,权限就是r(1,001), 可读可写就是rw(3, 011),可读可写可执行就是rwx(7, 111)。
二、open
open 有两个原型,一个带有文件权限参数,不带文件权限参数,不带权限的open如果是通过O_CREAT创建出来的文件,默认权限是rwx。
//通过 man open,发现open所需头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
// open的两个原型,返回文件描述符
int open(const char *pathname, int flags);//只是打开或创建文件, 默认权限rwx
int open(const char *pathname, int flags, mode_t mode);//打开或创建文件,并指定文件权限
open参数描述
| pathname | 文件路径 |
| flags | 标识,其中必须包含O_RDONLY(只读), O_WRONLY(只写), O_RDWR(读写)三个中的一个,更多flags下面会展示 |
| mode | 模式,设置权限 |
flags
标识主要用来说明对文件如何进行操作。,
| O_RDONLY | 只读方式打开文件 |
| O_WDONLY | 只写方式打开文件 |
| O_RDWR | 读写方式打开文件 |
| O_CREAT | 文件不存在就创建 |
| O_EXCL | 与O_CREAT一起使用,判断文件是否存在。文件存在返回错误信息 |
| O_APPEND | 添加方式打开文件,打开文件时,文件指针指向文件末尾,将写入数据添加到文末 |
| O_TRUNC | 文件清0,若文件存在则文件内的内容将被清空,trunc 有截断之意 |
| O_DSYNC | 提供同步的I/O数据完整性 |
| O_ SYNC | 同步方式写入文件 |
| O_ ASYNC | 当I/O操作可行,产生信号通知进程 |
| O_ DIRECT | 无缓冲输入输出 |
| 。。。 | 其它不再罗列,自行查看手册 |
mode
模式主要是针对owner,group,other三个组进行权限配置,包括以下12个。
| S_IRWXU 00700 | 所有者(用户)权限:可读可写可执行 |
| S_IRUSR 00400 | 所有者(用户)权限:只读 |
| S_IWUSR 00200 | 所有者(用户)权限:只写 |
| S_IXUSR 00100 | 所有者(用户)权限:可执行 |
| S_IRWXG 00070 | 文件所在组权限:可读可写可执行 |
| S_IRGRP 00040 | 文件所在组权限:只读 |
| S_IWGRP 00020 | 文件所在组权限:只写 |
| S_IXGRP 00010 | 文件所在组权限:可执行 |
| S_IRWXO 00007 | other权限:可读可写可执行 |
| S_IROTH 00004 | other权限:只读 |
| S_IWOTH 00002 | other权限:只写 |
| S_IXOTH 00001 | other权限:可执行 |
返回值 文件描述符, 返回的描述大小都会高于2,因为 0 、1、2三个描述被系统占用
| 0 | stdin |
| 1 | stdout |
| 2 | stderr |
三、close
close 比较简单,参数只一个打开的文件的描述符。
//使用的头文件
#include <unistd.h>int close(int fd);
四、read
read函数尝试从描述符为fd的文件内读取count字符到buf缓存区内,当然可能会读取错误。成功会返回读取的count,不成功会返回-1
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
五、write
write函数尝试向描述符为fd的文件内将写buf缓存区内的count字符写入数据,当然可能会写入错误。成功会返回写入的count,不成功会返回-1
include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
六、lseek
重定位光标的位置。根据设置whence 来进行offset偏移,offset为负代码左偏移,为正代表右偏移。返回值代表当前光标在文件中的偏移量,比如设置SEEK_END,返回值就代表文件的大小。
#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);
常用 whence
| SEEK_SET | 定位到文件起始位置 |
| SEEK_CUR | 定位到当前位置 |
| SEEK_END | 定位到文件结束位置 |
七、自定cp命令
argc: 代表参数数量 argument count
argv :代表argument vector ,是一个指针数组(数组元素类型是char *),或者说是一个二级指针(char **argv)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char *argv[]) {int fdSrc, fdDes;char *readBuf = NULL;if(argc != 3) {printf("paramer error\n");exit(-1);}fdSrc = open(argv[1], O_RDWR);//获取文件大小 int size = lseek(fdSrc, 0, SEEK_END);// 重新将光标定位到文件起始lseek(fdSrc, 0, SEEK_SET);readBuf = (char *)malloc(sizeof(char) * size + 1);int readCount = read(fdSrc, readBuf, size);fdDes = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0600);write(fdDes, readBuf, strlen(readBuf));close(fdSrc);close(fdDes);return 0;
}
相关文章:
Linux之open/close/read/write/lseek记录
一、文件权限 这里不做过多描述,只是简单的记录,因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息 drwxrwxrwx 1 root root 0 Oct 10 17:06 open -rwxrwxrwx 1 root roo…...
3D调研-摄像头
参考资料: 来源1:https://leap2.ultraleap.com/leap-motion-controller-2 来源2: Gemini 2 _双目结构光相机_机器人感知-奥比中光官网 来源3: 国内外深度相机大盘点,仅用于学习科普!--机器视觉网 来源4&…...
光耦合器继电器与传统继电器:哪种最适合您的项目?
在电子和电气工程领域,继电器的选择可以显着影响项目的性能和安全性。两种常见类型的继电器是光耦合器继电器和传统机电继电器。每个都有其优点和缺点,因此选择过程对于项目的成功结果至关重要。 光耦合器继电器:基础知识 光耦合器继电器&…...
分享关于职场心态
1.解决问题而不是解释原因 2.秉承工匠思维而不是激情思维 什么是工匠思维? 工匠思维(The craftsman mindset)对待职业生涯的一种方式;是以产出为中心的职业观,关注自己给世界(工作)带来的价值…...
OK3568 UBUNTU 安装使用I2C-TOOLS
1. 安装 sudo apt-get update sudo apt-get install i2c-tools 使用I2Ctools 参考:https://blog.csdn.net/anyuliuxing/article/details/106382827 i2c-tools 是一组用于在Linux系统中进行I2C(Inter-Integrated Circuit)总线设备操作和调试…...
mysql面试题53:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录 可以按照以下步骤进行: 确保…...
Docker服务更新与发现
一,docker-consul简介 这是一个基于分布式的服务发现和管理工具,它具有快速构建分布式框架,提供服务发现和服务治理等特点。同时consul还提供了可靠的保证,多数据中心和强大的API以满足高可用,分布式环境下的需求。 …...
【2023集创赛】安谋科技杯二等奖作品: 智能体感游戏机
本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)安谋科技杯二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼…...
如何使用前端包管理器(如npm、Yarn)?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
Codeforces Round 903 (Div. 3) C(矩形旋转之后对应的坐标)
题目链接:Codeforces Round 903 (Div. 3) C 题目: 思想: 旋转之后对应的坐标: (i,j)(n1-j,i)(n1-i,n1-j)(j…...
月薪过万的Java面试
写了一个月,篇幅太长了,都写不下了,被逼无奈,只能拆分 面试题: HashMap底层实现原理,红黑树,B树,B树的结构原理,volatile关键字,CAS(比较与…...
html进阶语法
html进阶 列表、表格、表单 目标:掌握嵌套关系标签的写法,使用列表标签布局网页 01-列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表、定义列表。 无序列表 作用:布局排列整齐的不需要规定顺序的…...
博客系统(java,MySQL,HTML)
项目展示: 1.输入 http://127.0.0.1:8080/blog_system/login.html 即可进入登录页面 2.输入正确的用户名和密码后进入博客列表页 要是用户名或密码输入错误,会弹出错误提示框 3.点击查看全文,可以进入博客详情页查看详细信息 4.点击写博客&a…...
Android Studio SDKGradleJDK等工具的正确使用
AS在安装使用过程中可能会占用C盘大量空间,对于C盘容量本来就小的人来说非常不友好,其实我们可以自定义安装路径 SDK默认安装位置 各种版本和NDK也会安装到这个路径 SDK版本选择性安装 通过选择图示的按钮,可以显示SDK的版本详情࿰…...
利用Python提取将Excel/PDF文件数据
使用Python来创建一个接口,用于接收Excel文件资源链接,下载文件并执行指定的操作,然后返回处理后的数据。以下是一个基本的示例,展示如何使用Flask来创建这样的接口。请注意,这是一个简化的示例,您可能需要…...
纯 CSS 实现瀑布流布局的方法
纯 CSS 实现瀑布流布局的方法 这种方式兼容性不是很好,全部支持需要些时间,但是目前是可以使用 css 写出来的 display: grid; grid-template-columns: repeat(4, 1fr); grid-gap: 10px; grid-template-rows: masonry;全部的 css .container {display:…...
输入法显示到语言栏_状态栏
设置–时间和语言–语言–最右侧"相关设置"中的"拼写、键入和键盘设置" 最下方的"高级键盘设置"–“使用桌面语言栏(如果可用)” 点击"语言栏选项" 接下来就是不同输入法的设置了 搜狗输入法:右键输入法选择"隐藏状态栏"–…...
[samba]同一个文件夹,分不同权限管理
#问题 有一个文件夹A能让用户1拥有写权限,而让用户2拥有只读权限,而用户3啥权限都没有,该如何设置samba呢? #解决办法 1.首先创建一个linux分组(group),命名为samba groupadd samba 2.创建一个samba默认…...
项目整合管理
项目整合管理概述 概述 项目的复杂性来源于组织的系统行为、人类行为以及组织或环境中的不确定性。在项目整合之前,项目经理需要考虑项目面临的内外部环境因素,检查项目的特征或属性。 作为项目的一种特征或属性,复杂性的含义: …...
基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持本地图片上传与回显的功能实现(一)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 原先这个基于RuoYi-Flowable-Plus的这个不支持本地图片上传,只支持oss图片上传,所以…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
