Linux 系统编程 开篇/ 文件的打开/创建

news2024/11/15 4:39:56

从本节开始学习关于Linux系统编程的知识!

学习Linux的系统编程有非常多的知识点,在应用层面,很重要的一点就是学习如何“用代码操作文件来实现文件创建,打开,编辑等自动化执行

那如何自动化实现对文件的创建,打开,编辑等呢?答案就是使用Linux系统提供的一系列API函数(如 open, write/read, lseek,close等等)。

打开/创建文件

需要包含的头文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

相关的API函数: 

int open(const char *pathname, int flags); //pathname是文件路径,flags是权限
int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

open函数

当调用open打开一个文档之后,open函数会返回一个非负整数,这个整数就是文件描述符

如果对一个文档都进行了open,并返回了“2”,之后又想对其进行write,就是write(2)

如果返回为负数,则说明open失败!

参数说明

pathname

  • 要打开的文件名(含路径)

flags : 

  • O_RDONLY 只读打开
  • O_WRONLY 只写打开
  • O_RDWR 可读可写打开

当附带了权限后,打开的文件就只能按照这种权限来操作

以上这三个参数中应当只指定一个。下列参数是可选择的:

  • O_CREAT:若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode.用其说明该新文件的存取许可权限。
  • O_EXCL:以这种属性去打开文件时,如果同时指定了O_CREAT,而文件已经存在,则打开文件失败(也可以说返回值是-1)。
  • O_APPEND:以这种属性去打开文件时,每次写时都加到文件的尾端。(不想写入时文件被覆盖,用这个flag,正常写入没有加其他条件的话,原来文件中的数据内容会被覆盖,注意是覆盖,覆盖本身的字节长度,没有覆盖的会保留,不是删除)
  • O_TRUNC:以这种属性去打开文件时,如果这个文件中本来是有内容的, 而且为只读或只写成功打开,则将其长度截短为0,通俗点的意思就是把原来的文件中的内容干掉,写入你自己要的数据内容
  • Mode:一定是在flags中使用了 O-CREAT 标志, mode 记录待创建的文件的访问权限

关于mode的值和权限的对应关系:

共有三种权限

  • 是否可读(r), 对应数字4
  • 是否可写(w), 对应数字2
  • 是否可执行(x), 对应数字1

共有三个权限分配的对象

  • 主用户(CLC)
  • 同组用户
  • 其他组用户

比如:给的是0600时,则对应权限“-rw-------”,即只给主用户分配可读可写(4+2=6)的权限同组用户(第三位)和其他组用户(第四位)没有任何权限

实操演示

1. 创建一个名为“FILE”的文件夹,将文件部分的学习代码都放进去,并在cmd中cd到FILE:

2. 使用touch指令创建一个新的文件:

关于touch指令,可以参考:

Linux命令之touch命令_touch linux_恒悦sunsite的博客-CSDN博客

3.  使用vi命令创建一个c文件:

关于vi模式下的一些操作,之前接触过,参考:

Linux 系统初识_mjmmm的博客-CSDN博客

4.  使用man命令查看open相关的函数:

man的使用参考:

Linux下的man命令_linux man命令_邓永豪的博客-CSDN博客

简单来说就是 “man + 函数对应的手册号 + 函数名” 其中手册号是1~9,常用前3个,实在不知道可以一个个试

然后就可以看到对于open函数的描述,这样就方便在Linux系统里面直接查阅和复制

5. 编写demo1.c,然后保存退出:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{       
        int fd; // file description
        fd = open("./file1",O_RDWR);
        
        printf("file description = %d\n",fd);
        return 0;
}       

 6. 运行demo1.c:

可见,我创建的文档“file1”被自动打开,并分配了文件描述符“3”

7. 此时,如果将 file1 删除,再执行一遍代码:

可见,返回-1,返回失败

O_CREAT参数的应用

可是在实际应用中,我如果不希望如果一个文件不存在就直接返回失败,那么可以在open函数中,添加上面提到的“O_CREAT”参数,就可以“若文件不存在则创建它”,并按要求增加“mode”参数:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
        int fd; // file description
        fd = open("./file1",O_RDWR|O_CREAT, 0600); //0600代表即将创建的文件“可读可写”

        printf("file description = %d\n",fd);
        return 0;
}

此时,在file1不存在的情况下open,依然会返回正常的文件标识符,并创建file1:

O_EXCL参数的应用

O_APPEND参数的应用

O_TRUNC参数的应用

creat函数

参数说明

实操演示

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

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

相关文章

成本控制策略:加强企业安全

我们生活在一个不确定的时代。大多数经济学家预测&#xff0c;今年全球经济将继续放缓&#xff0c;亚太地区当然也不会逆势而上。 在供应链问题、大规模裁员、高通胀和高利率之间&#xff0c;我们毫不奇怪地看到大多数公司和行业采取谨慎态度&#xff0c;战略、增长计划和预算…

使用docker安装wordpress详细教程及出现数据库无法连接问题解决方法

1.获取wordpress镜像 docker pull wordpress 2.创建wordpress 的容器 a.创建wordpress的文件镜像卷文件夹 mkdir wordpress b.创建wordpress镜像 docker run --name wp -p8080:80 -v /home/wordpress/:/var/www/html -d wordpress c.查看容器运行情况 3.在本地或者其他服务器创…

AutoDL从0到1搭建stable-diffusion-webui

前言 AI绘画当前非常的火爆&#xff0c;随着Stable diffusion&#xff0c;Midjourney的出现将AI绘画推到顶端&#xff0c;各大行业均受其影响&#xff0c;离我们最近的AI绘画当属Stable diffusion&#xff0c;可本地化部署&#xff0c;只需电脑配备显卡即可完成AI绘画工作&…

Go语言并发编程(千锋教育)

Go语言并发编程&#xff08;千锋教育&#xff09; 视频地址&#xff1a;https://www.bilibili.com/video/BV1t541147Bc?p14 作者B站&#xff1a;https://space.bilibili.com/353694001 源代码&#xff1a;https://github.com/rubyhan1314/go_goroutine 1、基本概念 1.1、…

宋老板教我做人--背后少说别人

宋老板教我做人——背后少说别人 2000年&#xff5e;2004年间发生的事 让我很难忘&#xff0c;让我长记性 趣讲大白话&#xff1a;是不是传说中的&#xff0c;发自内心的善良&#xff1f; 【趣讲信息科技246期】 **************************** 真实故事1&#xff1a; 2000年5月…

Embedding入门介绍以及为什么Embedding在大语言模型中很重要

Embeddings技术简介及其历史概要 在机器学习和自然语言处理中&#xff0c;embedding是指将高维度的数据&#xff08;例如文字、图片、音频&#xff09;映射到低维度空间的过程。embedding向量通常是一个由实数构成的向量&#xff0c;它将输入的数据表示成一个连续的数值空间中…

【python】绘图代码模板

【python】绘图代码模板 pandas.DataFrame.plot( )画图函数Seaborn绘图 -数据可视化必备导入数据集可视化统计关系使用Seaborn绘制散点图抖动图箱线图小提琴图Pointplot群图 可视化数据集的分布绘制单变量分布柱状图直方图 绘制双变量分布Hex图KDE 图可视化数据集中的成对关系 …

【数据结构与算法】线索化二叉树

线索化二叉树 n 个节点的二叉链表中含有 n 1 【公式 2n - (n - 1) n 1】个空指针域。利用二叉链表中的空指针域&#xff0c;存放指向该节点在某种遍历次序下的前驱和后继节点的指针&#xff08;这种附加的指针称为“线索”&#xff09;。这种加上了线索的二叉链表称为线索链…

Anteater/食蚁兽 V1.0.0 (帮助开发者快速找到项目中敏感信息)

Github>https://github.com/MartinxMax/Anteater 首页 Anteater/食蚁兽 V1.0.0 帮助开发者快速找到项目中存在敏感信息的文件,并且以时间戳为文件名保存日志 Anteater/食蚁兽 使用方法 #python3 anteater.py -h ps:当前目录下存在Windows_install.bat,Linux_install.sh请…

爆肝整理,Postman接口测试-参数关联实战(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口测试什么时候…

忘掉MacType吧,TtfAutoHint手工删除ttc、ttf字体的hinting,微软雅黑字体更显平滑

Windows的ClearType渲染字体方式&#xff0c;结合臭名昭著的hinting技术使微软雅黑字体备受争议&#xff0c;正所谓&#xff1a;成也hinting&#xff0c;败也hinting。 首先什么是hinting&#xff1f; Hinting 这个词一直都没有中文名称&#xff0c;我用粤语将它音译为“牵挺”…

javascript 7种继承-- class继承(7)

文章目录 概要继承的进化史class继承1. 类声明与严格模式2. 类的实现3. 类的静态方法4. get,set 存取器5. 类中的公有继承以及私有继承6. 使用 super 调用超类7. Mix-ins / 混入 源码&#xff1a; 类的继承效果图小结 概要 这阵子在整理JS的7种继承方式&#xff0c;发现很多文…

【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 详细建模方案解析及参考文献

【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 详细建模方案解析及参考文献 1 题目 B 题 不透明制品最优配色方案设计 日常生活中五彩缤纷的不透明有色制品是由着色剂染色而成。因此&#xff0c;不透明制品的配色对其外观美观度和市场竞争力起着重要…

GD32F103VE定时器0

本测试程序&#xff0c;配置GD32F103VE定时器0每500ms中断一次&#xff0c;中断时&#xff0c;开关LED灯。 只讲定时器&#xff0c;多了&#xff0c;有点乱。有的人喜欢汇总&#xff0c;Timer的功能太多&#xff0c;放在一起&#xff0c;会搞混&#xff0c;不好移植。即使放一…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 2

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨&#xff0c;在1995年出版的《未来之路》一书中&#xff0c;提及“物物互联”。1998年麻省理工学院提出&#xff0c;当时被称作EPC系统的物联网构想。2005年11月&#xff0c;国际电信联盟发布《ITU互联网…

哪些情况下需要使用爬虫IP

不知道小伙伴们有没有遇到过这种场景&#xff1a;上网闲逛&#xff0c;看一些搞笑的视频或者想下载一些酷炫的文件&#xff0c;正点击呢&#xff0c;结果却发现被网站限制了&#xff0c;无法访问或者下载&#xff1f; 别急&#xff0c;今天我来告诉大家&#xff0c;如何借助使…

IE浏览器,和Edge浏览器

目录 一.IE浏览器&#xff08;前世今生&#xff09; 1.什么是IE浏览器&#xff1f; 2.IE浏览器发展历程 3.IE浏览器在早些年为什么这么流行 4.ie浏览器为什么被停用? 5.IE浏览器无法适应如今的Web发展原因 二.Edge&#xff08;发展&#xff09; 1.什么是Edge浏览器&…

2023年人工智能技术与智慧城市发展白皮书

人工智能与智慧城市是当前热门的话题和概念&#xff0c;通过将人工智能技术应用在城市管理和服务中&#xff0c;利用自动化、智能化和数据化的方式提高城市运行效率和人民生活质量&#xff0c;最终实现城市发展的智慧化&#xff0c;提升城市居民的幸福感。 AI技术在城市中的应…

【修正-高斯拉普拉斯滤波器-用于平滑和去噪】基于修正高斯滤波拉普拉斯地震到达时间自动检测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

iMX6ULL应用移植 | 移植 infoNES 模拟器(重玩经典NES游戏)

没玩过NES游戏的童年&#xff0c;可能不是80后的童年。我们小时候是从玩FC开始接触游戏机的&#xff0c;那时真的是红极一时啊&#xff0c;我上初中时还省吃俭用买了一台小霸王&#xff0c;暑假里把电视机都给打爆了&#xff01;那时任天堂单是FC机的主机的发售收入就超过全美的…