Linux之open/close/read/write/lseek记录

news2024/11/12 13:46:03

一、文件权限

        这里不做过多描述,只是简单的记录,因为下面的命令会涉及到。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
w
x可执行

另外可以看到三组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权限:可执行

三、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命令

#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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js 滚动鼠标滑轮放大缩小图片

<div><h1>原图</h1><imgsrc"https://so.360tres.com/dmsmty/160_160_100/t01b29734b9604fb7aa.webp"/><h1>可放大缩小的图</h1><div class"imgView"><imgsrc"https://so.360tres.com/dmsmty/160_160_10…

建设一个完整的企业经营管理体系是什么样的

建设一个完整的企业经营管理体系是确保企业高效、可持续发展的基础。该体系包括组织架构、战略规划、运营管理、人力资源管理、财务管理等多个要素&#xff0c;下面将逐一进行详细介绍。 一、组织架构&#xff1a; 组织架构是企业内部各个部门、职能和层级之间的关系和分工。…

代码随想录算法训练营第五十三天 |1143.最长公共子序列、1035.不相交的线、53. 最大子序和动态规划

一、1143.最长公共子序列 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划子序列问题经典题目 | LeetCode&#xff1a;1143.最长公共子序列_哔哩哔哩_bilibili 思考&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]…

关键词搜索天猫商品列表数据,天猫商品列表数据接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取天猫网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;天猫网站…

pytest + yaml 框架 -56. 输出日志优化+allure报告优化

前言 v1.4.8 版本优化接口请求和响应输出日志&#xff0c;生成的allure报告也按步骤优化request和response详情日志 优化日志 用例 test_log1: -name: log1request:url: http://127.0.0.1:8000/api/test/demomethod: GETvalidate:- eq: [status_code, 200]- eq: ["cod…

从 0 到 1 打造企业数字化运营闭环

打造企业数字化运营闭环是现代企业发展的必然趋势。它涉及到信息技术、数据分析、流程优化等多个方面&#xff0c;通过有效整合和运用这些资源&#xff0c;可以实现从0到1的全面数字化转型。 下面是一个详细的介绍&#xff0c;包括步骤、关键要素和实施策略。 一、了解需求和…

吉客云对接打通金蝶云星空销售单查询接口与销售出库新增接口

吉客云对接打通金蝶云星空销售单查询接口与销售出库新增接口 接通系统&#xff1a;吉客云 吉客云是基于“网店管家”十五年电商ERP行业和技术积累基础上顺应产业发展需求&#xff0c;重新定位、全新设计推出的换代产品&#xff0c;从业务数字化和组织数字化两个方向出发&#x…

图扑 HT for Web 风格属性手册教程

图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web&#xff08;以下简称 HT&#xff09;图元的样式由其 Style 属性控制&#xff0c;并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性&#xff0…

第二证券:5.5G时代将至 算力基建迎政策助力

昨日&#xff0c;A股全线低开&#xff0c;三大股指盘中均跌超1%&#xff0c;盘中冲高回落&#xff0c;午后逐渐止跌。到收盘&#xff0c;沪指跌0.44%报3096.92点&#xff0c;深成指微跌0.03%报10106.96点&#xff0c;创业板指跌0.26%报1998.61点&#xff0c;两市算计成交7700元…

腾讯系数藏停摆一年 玩家被甩在维权路上

暴雷、维权、清退是过去一年数藏行业的常态。小平台跑了&#xff0c;腾讯这样的大厂以关停、退款终止运营数藏业务时&#xff0c;吃相也不好看。 在黑猫投诉平台上&#xff0c;幻核被投诉退款缓慢&#xff0c;曾经发行过数字藏品的QQ音乐被投诉违背发行时承诺的“持有356天后可…

嵌入式学习笔记(52)ADC的引入

11.1.1什么是ADC (1)ADC:analog digital converter,AD转换&#xff0c;模数转换&#xff08;也就是模拟转数字&#xff09; (2)CPU本身是数字的&#xff0c;而外部世界变量&#xff08;如电压、温度、高度、压力&#xff09;都是模拟的&#xff0c;所以需要用CPU来处理这些外…

【办公自动化】在Excel中按条件筛选数据并存入新的表2.0(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

多测师肖sir_高级金牌讲师_python之 字符、索引、切片、列表、集合004

python之 字符、索引、切片、列表、集合 一、索引 索引在公司中一般叫下标或角标 定义&#xff1a;我们可以直接使用索引来访问序列中的元素&#xff0c;同时索引可分为正向和负向两种&#xff0c;而切片也会用到索引&#xff0c;下面放上一个图&#xff0c;有助于大 家理解正…

Docker 网络访问原理解密

How Container Networking Works: Practical Explanation 这篇文章讲得非常棒&#xff0c;把docker network讲得非常清晰。 分为三个部分&#xff1a; 1&#xff09;docker 内部容器互联。 2&#xff09;docker 容器 访问 外部root 网络空间。 3&#xff09;外部网络空间…

MySQL数据库技术笔记(6)

新建两张表&#xff0c;班级表和学生表&#xff0c;因为班级表与学生表之间是 1 对多的关系&#xff0c;需要将少的表的主键放置多的 表中称为外键。 添加班级信息 添加学生信息并关联对应的班级 连接查询&#xff0c;表示查询的时候关联多张表进行查询 最终两张表的交叉连接…

面试算法24:反转链表

题目 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。例如&#xff0c;把图4.8&#xff08;a&#xff09;中的链表反转之后得到的链表如图4.8&#xff08;b&#xff09;所示。 分析 由于节点j的next指针指向了它的前一个节…

别用==比较包装类

前两天工作把代码合并到主分支时&#xff0c;被公司的安全监测机制拦截了&#xff0c;一看是因为用了来比较Integer类型。 在阿里开发手册中&#xff0c;有这样一条&#xff1a;在包装类进行比较的时候&#xff0c;要用equals方法&#xff0c;而不是。 具体的原因下面也讲解的…

提升爬虫IP时效:解决被封IP的难题

在进行数据采集时&#xff0c;经常会遇到被目标网站封禁IP的情况&#xff0c;这给爬虫系统带来了困扰。本文将介绍如何提升爬虫IP的时效&#xff0c;解决被封IP的难题&#xff0c;帮助您顺利进行数据采集&#xff0c;不再受限于IP封禁。 第一步&#xff1a;使用爬虫IP 使用爬虫…

飞书应用机器人文件上传

背景&#xff1a; 接上一篇 flask_apscheduler实现定时推送飞书消息&#xff0c;当检查出的异常结果比较多的时候&#xff0c;群里会有很多推送消息&#xff0c;一条条检查工作量会比较大&#xff0c;且容易出现遗漏。   现在需要将定时任务执行的结果记录到文件&#xff0c;…

ESPHome不经过HA设备1直接控制设备2

目录 1.公共配置文件2.设备2:台灯3.控制器(http.post)4.获取状态(http.get) 1.公共配置文件 #wifi.yaml wifi: networks:- ssid: "123"password: "www.123.com"- ssid: "456"password: "www.123.com"# 当连接不上指定wifi,开启热点配…