Linux--文件操作

1.什么是文件

        对于文件来说,文件=文件内容+文件属性;对于文件来说,只有两种操作,对内容的修改和对文件属性的修改,这就是文件的范畴。

对于存放在磁盘上的文件,我们需要通过进程来进行访问,访问文件:需要先写代码,然后编译,形成可执行文件,然后运行,最后访问文件。

所以,想要文件修改文件的内容,只能是操作系统才可以实现,如果是用户想要实现,就必须使用,操作系统提供的接口函数才能实现。

2.文件操作

        对于操作系统提供的文件接口函数来说,它太过于复杂,我们先来了解语言层级的文件接口,语言级的文件操作处于就是对于将系统级文件接口进行封装,然后展现给用户的,所以语言级的文件操作函数就是一层外壳,其核心本质还是操作系统的文件操作。

为什么要实现语言级的函数呢?

为了实现语言的跨平台性,对于不同的操作系统来说,都有一套对应的文件操作函数,为了在各个平台上都可以打开同一份文件,所以语言对其进行了封装,使其可以在不同的平台上运行。

我们以C语言的文件操作函数为例:

文件操作函数基本用法:

结果:

对于fprintf(),fwrite(),fputs()三个函数来说,都是向文件中写入内容的,只是具体的操作不同而已。我们拿fputs()为例研究。

对于fputs()来说:

结果:

说明我们可以使用文件操作函数直接向显示器打印内容,说明显示器也可以是一个文件,所以,向磁盘中输入和向显示器中打印本质是一样的,所以,它俩本质是没有区别的,向显示器打印也是一种写入。

所以,在Linux下,一切皆是文件!!!

3.系统文件操作

        有时候我们可以不用语言级接口调用,而直接使用系统提供的函数进行文件操作,这样的程序不具有跨平台性,但却依然存在。所以我们依然需要知道系统文件操作函数。

Linux认为,一切皆文件。

什么叫做文件呢?

对于操作系统来讲:只要可以input读取,或者可以output写出的设备就叫文件,狭义的文件:普通的文件,广义的文件:显示器,键盘,网卡,显卡,磁盘等几乎所有的外设,都可以称之为文件。

系统文件操作函数

这里只介绍常见的函数:open、read、wirte和close

open()使用方法:

//头文件
#include <sys/types.h>
#include <sys/stat.h>

#include <fcntl.h>

int open(const char *pathname, int flags);//打开已经存在的文件
int open(const char *pathname, int flags, mode_t mode);//打开没有存在的文件,需要设置权限,具体查看man手册。

第一个参数为文件名,第二个为标志位,第三个为文件权限,标志位可以有个,中间用 或操作符连接 比如: O_RDONLY|O_WRONLY|O_RDWR

第二个参数:O_RDONLY: 只读打开
                      O_WRONLY: 只写打开
                      O_RDWR : 读,写打开
                       这三个常量,必须指定一个且只能指定一个
                       O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件                            的访问权限
                        O_APPEND: 追加写

使用:

打开成功,返回文件描述符,失败返回-1。

文件描述符:就是一个小整数,最小0开始,0,1,2默认为 stdin,stdout,stderr,如果这三个文件没有被关闭,则创建的文件的文件描述符从3开始,如果被关闭,则从最小的被关闭的文件描述符开始;比如:

结果:

read() 函数使用

ssize_t read(int fd, void *buf, size_t count);

将文件找那个的内容读出来,

fd: 在文件描述符为fd的文件中开始读

buf: 把读得内容从buf的位置开始存放

count: 从buf位置开始存放count个字节

成功:返回实际读取数据的字节数

失败:返回-1

write()函数使用

ssize_t write(int fildes, const void *buf, size_t nbyte);

fd: 在文件描述符为fd的文件中进行写入

buf: 从buf位置开始读取数据

nbyte: 从buf位置开始读取nbyte个字节到文件中

成功:返回实际写入数据的字节数

失败:返回-1

close()函数

int close(int fd);

关闭文件

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JQuery-XSS漏洞(CVE-2020-11022/CVE-2020-11023)漏洞复现】

文章目录 一、漏洞描述二、受影响版本三、漏洞复现四、漏洞危害五、修复建议 一、漏洞描述 进行在公司内部用nessus做漏洞扫描时&#xff0c;发现某台服务器报出这个中危漏洞&#xff0c;后面查资料复现。 根据脚本中的自我报告版本&#xff0c;远程web服务器上托管的JQuery版…

2024年湖北武汉建筑企业三类人员安全员ABC怎么报考

2024年湖北武汉建筑企业三类人员安全员ABC怎么报考 武汉建筑企业报考三类人员&#xff0c;建筑单位归属地在武汉&#xff0c;且有建筑相关的一些资Z&#xff0c;才可以申报一定数量的三类人员、安全员ABC、建筑安全员ABC、专职安全员C证、建设厅安全员ABC证。 建筑企业-报考建…

IDEA 使用技巧

文章目录 语言支持简化编写 有问题&#xff0c;可暂时跳过 个人常用快捷键插件主题插件功能插件 碰到过的问题 除了一些在Linux上用vim开发的大佬&#xff0c;idea算是很友好的集成开发工具了&#xff0c;功能全面&#xff0c;使用也很广泛。 记录一下我的 IDEA 使用技巧&#…

TestCenter测试管理工具

estCenter&#xff08;简称TC&#xff09;一款广受好评的测试管理工具&#xff0c;让测试工作更规范、更有效率&#xff0c;实现测试流程无纸化&#xff0c;测试数据资产化。 产品概述 TC流程图 产品功能 一、案例库 案例库集中化管理&#xff0c;支持对测试用例集中管理&…

Java架构师软件可靠性构建

目录 1 导学2 软件可靠性基本概念3 软件可靠性建模4 软件可靠性管理5 软件可靠性设计6 软件可靠性测试与评价想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 软件可靠性基本概念 软件可靠性是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。软件…

极智AI | 从大模型角度看苹果M3系列芯片

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 从大模型角度看苹果M3系列芯片。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 北京时间今天早上,Apple 发布了…

0代码0侵入的安卓骨架屏框架----二期优化

本文是对自定义骨架屏框架的优化说明。 针对目前对骨架屏的需求及为了实现骨架屏而付出的繁重劳动&#xff0c;而设计的一款0编码0业务侵入的骨架屏框架。感兴趣的可以先去看看这篇文章&#xff1a;一种简单的Android骨架屏实现方案----0侵入0成本 额&#xff0c;如果不看&am…

Linux系统封装ISO镜像(自动安装)

一、准备一个系统 centos7或者centos8都可以;最小化或者桌面版的都可以,自行选择 二、安装自定义镜像工具 yum -y install createrepo mkisofs openssl rsync syslinux三、挂载镜像 创建挂载点 mkdir /mnt/cdrommount /dev/sr0 /mnt/cdrom四、同步 /mnt/cdrom/ 下的文件到 …

【Spring Boot 源码学习】RedisAutoConfiguration 详解

Spring Boot 源码学习系列 RedisAutoConfiguration 详解 引言往期内容主要内容1. Spring Data Redis2. RedisAutoConfiguration2.1 加载自动配置组件2.2 过滤自动配置组件2.2.1 涉及注解2.2.2 redisTemplate 方法2.2.3 stringRedisTemplate 方法 总结 引言 上篇博文&#xff0…

论文阅读 - Detecting Social Bot on the Fly using Contrastive Learning

目录 摘要&#xff1a; 引言 3 问题定义 4 CBD 4.1 框架概述 4.2 Model Learning 4.2.1 通过 GCL 进行模型预训练 4.2.2 通过一致性损失进行模型微调 4.3 在线检测 5 实验 5.1 实验设置 5.2 性能比较 5.5 少量检测研究 6 结论 https://dl.acm.org/doi/pdf/10.1145/358…

行情分析——加密货币市场大盘走势(10.31)

目前大饼依然在33000-36000这个位置震荡&#xff0c;需要等待指标修复&#xff0c;策略就是逢低做多&#xff0c;做短线。最近白天下跌&#xff0c;晚上涨回来&#xff0c;可以小仓位入场多单&#xff0c;晚上离场下车。 以太同样是震荡行情&#xff0c;看下来以太目前在补涨&a…

Android 处理多个TextView, 文案过长时前面文本省略的问题

遇到显示多个TextView&#xff0c;文案过短时&#xff0c;这几个TextView跟随显示&#xff0c;文案过程时&#xff0c;前面TextView省略&#xff0c;后个的TextView全显示。效果如下&#xff1a; 用ConstraintLayout 没有得到解决&#xff0c;采用 RelativeLayout 解决 代码如…