当前位置: 首页 > news >正文

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。

另外也可以用数字表示文件的权限类型

r001
w010
x100

只读类型,权限就是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 00007other权限:可读可写可执行
S_IROTH 00004other权限:只读
S_IWOTH 00002other权限:只写
S_IXOTH 00001other权限:可执行

返回值 文件描述符, 返回的描述大小都会高于2,因为 0 、1、2三个描述被系统占用

0stdin
1stdout
2stderr

三、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记录

一、文件权限 这里不做过多描述&#xff0c;只是简单的记录&#xff0c;因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息 drwxrwxrwx 1 root root 0 Oct 10 17:06 open -rwxrwxrwx 1 root roo…...

3D调研-摄像头

参考资料&#xff1a; 来源1&#xff1a;https://leap2.ultraleap.com/leap-motion-controller-2 来源2&#xff1a; Gemini 2 _双目结构光相机_机器人感知-奥比中光官网 来源3&#xff1a; 国内外深度相机大盘点&#xff0c;仅用于学习科普&#xff01;--机器视觉网 来源4&…...

光耦合器继电器与传统继电器:哪种最适合您的项目?

在电子和电气工程领域&#xff0c;继电器的选择可以显着影响项目的性能和安全性。两种常见类型的继电器是光耦合器继电器和传统机电继电器。每个都有其优点和缺点&#xff0c;因此选择过程对于项目的成功结果至关重要。 光耦合器继电器&#xff1a;基础知识 光耦合器继电器&…...

分享关于职场心态

1.解决问题而不是解释原因 2.秉承工匠思维而不是激情思维 什么是工匠思维&#xff1f; 工匠思维&#xff08;The craftsman mindset&#xff09;对待职业生涯的一种方式&#xff1b;是以产出为中心的职业观&#xff0c;关注自己给世界&#xff08;工作&#xff09;带来的价值…...

OK3568 UBUNTU 安装使用I2C-TOOLS

1. 安装 sudo apt-get update sudo apt-get install i2c-tools 使用I2Ctools 参考&#xff1a;https://blog.csdn.net/anyuliuxing/article/details/106382827 i2c-tools 是一组用于在Linux系统中进行I2C&#xff08;Inter-Integrated Circuit&#xff09;总线设备操作和调试…...

mysql面试题53:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录 可以按照以下步骤进行: 确保…...

Docker服务更新与发现

一&#xff0c;docker-consul简介 这是一个基于分布式的服务发现和管理工具&#xff0c;它具有快速构建分布式框架&#xff0c;提供服务发现和服务治理等特点。同时consul还提供了可靠的保证&#xff0c;多数据中心和强大的API以满足高可用&#xff0c;分布式环境下的需求。 …...

【2023集创赛】安谋科技杯二等奖作品: 智能体感游戏机

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;安谋科技杯二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼…...

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

Codeforces Round 903 (Div. 3) C(矩形旋转之后对应的坐标)

题目链接&#xff1a;Codeforces Round 903 (Div. 3) C 题目&#xff1a; 思想&#xff1a; 旋转之后对应的坐标&#xff1a; &#xff08;i&#xff0c;j&#xff09;&#xff08;n1-j&#xff0c;i&#xff09;&#xff08;n1-i&#xff0c;n1-j&#xff09;&#xff08;j…...

月薪过万的Java面试

​ 写了一个月&#xff0c;篇幅太长了&#xff0c;都写不下了&#xff0c;被逼无奈&#xff0c;只能拆分 面试题&#xff1a; HashMap底层实现原理&#xff0c;红黑树&#xff0c;B树&#xff0c;B树的结构原理&#xff0c;volatile关键字&#xff0c;CAS&#xff08;比较与…...

html进阶语法

html进阶 列表、表格、表单 目标&#xff1a;掌握嵌套关系标签的写法&#xff0c;使用列表标签布局网页 01-列表 作用&#xff1a;布局内容排列整齐的区域。 列表分类&#xff1a;无序列表、有序列表、定义列表。 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的…...

博客系统(java,MySQL,HTML)

项目展示&#xff1a; 1.输入 http://127.0.0.1:8080/blog_system/login.html 即可进入登录页面 2.输入正确的用户名和密码后进入博客列表页 要是用户名或密码输入错误&#xff0c;会弹出错误提示框 3.点击查看全文&#xff0c;可以进入博客详情页查看详细信息 4.点击写博客&a…...

Android Studio SDKGradleJDK等工具的正确使用

AS在安装使用过程中可能会占用C盘大量空间&#xff0c;对于C盘容量本来就小的人来说非常不友好&#xff0c;其实我们可以自定义安装路径 SDK默认安装位置 各种版本和NDK也会安装到这个路径 SDK版本选择性安装 通过选择图示的按钮&#xff0c;可以显示SDK的版本详情&#xff0…...

利用Python提取将Excel/PDF文件数据

使用Python来创建一个接口&#xff0c;用于接收Excel文件资源链接&#xff0c;下载文件并执行指定的操作&#xff0c;然后返回处理后的数据。以下是一个基本的示例&#xff0c;展示如何使用Flask来创建这样的接口。请注意&#xff0c;这是一个简化的示例&#xff0c;您可能需要…...

纯 CSS 实现瀑布流布局的方法

纯 CSS 实现瀑布流布局的方法 这种方式兼容性不是很好&#xff0c;全部支持需要些时间&#xff0c;但是目前是可以使用 css 写出来的 display: grid; grid-template-columns: repeat(4, 1fr); grid-gap: 10px; grid-template-rows: masonry;全部的 css .container {display:…...

输入法显示到语言栏_状态栏

设置–时间和语言–语言–最右侧"相关设置"中的"拼写、键入和键盘设置" 最下方的"高级键盘设置"–“使用桌面语言栏(如果可用)” 点击"语言栏选项" 接下来就是不同输入法的设置了 搜狗输入法:右键输入法选择"隐藏状态栏"–…...

[samba]同一个文件夹,分不同权限管理

#问题 有一个文件夹A能让用户1拥有写权限&#xff0c;而让用户2拥有只读权限&#xff0c;而用户3啥权限都没有&#xff0c;该如何设置samba呢&#xff1f; #解决办法 1.首先创建一个linux分组&#xff08;group)&#xff0c;命名为samba groupadd samba 2.创建一个samba默认…...

项目整合管理

项目整合管理概述 概述 项目的复杂性来源于组织的系统行为、人类行为以及组织或环境中的不确定性。在项目整合之前&#xff0c;项目经理需要考虑项目面临的内外部环境因素&#xff0c;检查项目的特征或属性。 作为项目的一种特征或属性&#xff0c;复杂性的含义&#xff1a; …...

基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持本地图片上传与回显的功能实现(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 原先这个基于RuoYi-Flowable-Plus的这个不支持本地图片上传&#xff0c;只支持oss图片上传&#xff0c;所以…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...