Linux 系统编程:文件编程

本篇涉及文件的创建、打开、读和关闭。

文件为操作系统服务和设备提供了一个简单而一致的 接口 。“接口”指的是一种约定或标准,通过提供一个一致的接口,可以为上层隐藏底层硬件和服务的复杂性,上层无需关注它们的具体实现细节。
比如操作系统中的文件系统。文件可以存储在硬盘上,也可以存储在光盘上、磁带上。不同的硬件之间差别很大,文件系统也不相同。但是只需要抽象出 5 个基本的函数:openclosereadwriteioctl,应用程序就可以不用理会文件用的是什么文件系统、存储在哪里,就可以完成文件的操作。这 5 个基本函数的定义就是接口。

在 Linux 中,一切(或几乎一切)都是文件。

操作系统的核心部分,即内核,是一组 设备驱动程序 。它们是一组对系统硬件进行控制的底层 接口

为了向用户提供一个一致的接口,设备驱动程序封装了所有与硬件相关的特性。硬件的特有功能通常可通过 ioctl (用于 I/O 控制) 系统调用来提供。

低层次文件访问

使用 系统调用 函数访问文件,属于低层次文件访问方式。

write 函数

#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{char *test_str = "Here is some data\n";write(1, test_str, strlen(test_str));exit(0);
}
  • 头文件 unistd.h 包含了许多与 POSIX 操作系统 API 相关的定义和函数原型,例如 write 函数。
  • 头文件 stdlib.h 包含 exit 函数
  • 头文件 string.h 包含处理字符串的函数原型,例如 strlen
  • write 函数是系统调用,原型为 size_t write (int __fd, const void *__buf, size_t __n),在本例中,将 test_str 中的内容写入到文件描述符 1 所代表的设备上(标准输入)。
    write 函数返回写入的字节数,出错返回 -1。
  • 调用 exit 函数来结束程序。这里的参数0表示程序正常退出。

read 函数

#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{char error_read_message[] = "Error writing to stdout\n";char buffer[8];int nread;nread = read(0, buffer, 8);if(nread == -1)write(2, error_read_message, strlen(error_read_message));write(1, buffer, nread);exit(0);
}
  • 调用 read 函数从文件描述符 0(即标准输入)读取最多 8 个字节的数据到 buffer 中,并将读取的字节数存储在 nread 中。注意它返回实际读入的字节数,这可能会小于 8 。
  • 读取最多 8 个字节数据,这表示多于 8 个字符时,只会取前 8 个字符,不会导致溢出。
  • 在 shell 中运行这个程序,read 函数从标志输入中读取数据,shell 将标准输入映射到键盘上。当按下回车键时,shell 将输入的内容发送给程序。注意输入的数据包含换行符

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

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

相关文章

Kafka进阶

文章目录 概要应用场景消息队列两种模式kafka的基础架构分区常见问题小结 概要 kafka的传统定义&#xff1a;kafka是一个分布式的基于发布\订阅模式的消息队列&#xff0c;主要用于大数据实时处理领域。 kafka的最新概念&#xff1a;kafka是一个开源的分布式事件流平台&#x…

随机森林模型、模型模拟技术和决策树模型简介

随机森林模型、模型模拟技术和决策树模型简介 随机森林模型 随机森林模型是一种比较新的机器学习模型&#xff0c;它是通过集成学习的方法将多个决策树模型组合起来&#xff0c;形成一个更加强大和稳定的模型。随机森林模型的基本原理是“数据随机”和“特征随机”&#xff0…

10种常见的光伏发电量计算方法

光伏发电是一种将太阳能转化为电能的清洁能源技术。随着环境保护意识的日益增强和能源结构的转型&#xff0c;光伏发电得到了广泛的应用。对于光伏系统来说&#xff0c;发电量的准确计算是评估系统性能、预测长期收益和优化系统运行的关键。以下是常见的光伏发电量计算方法&…

Vista 2.08: The storm chaser

A story about Mathew —— the storm chaser. "He is too young to understand his dream and the Harvard is just others dream put into his mind." "You dont have to chase for the happiness that defined by others. You must define your own happines…

Python3零基础教程之Python解释器与开发环境搭建

大家好&#xff0c;我是千与编程&#xff0c;硕士毕业于北京大学&#xff0c;曾先后就职于字节跳动&#xff0c;京东等互联网大厂&#xff0c;目前在编程导航知识星球担任星球嘉宾&#xff0c;著有《AI算法毕设智囊袋》&#xff0c;《保姆级带你通关秋招教程》两大专栏。 今天开…

从it方面介绍部分好玩的电影

电影推荐 1.《黑客帝国》《The matrix》 仅推荐第一二三部2. 《代码奔腾》《code rush》3 人物传记类 《社交网络》 《硅谷传奇》 《乔布斯》4《模仿游戏》也是传记 但主演是 卷福5 《环形使者》6 《蝴蝶效应》 三部7.《隐私大盗》8.《监视资本主义&#xff1a;智能陷阱》9. 剧…

RMAN备份与恢复

文章目录 一、RMAN介绍二、全量备份三、增量备份0级备份1级增量备份累积性差量备份总结 四、压缩备份压缩备份介绍压缩备份操作压缩备份优缺点 五、异常恢复1、恢复前的准备2、恢复数据库 六、RMAN相关参数 一、RMAN介绍 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

在做了frp的实验室服务器不同端口间传输文件

背景 实验室有两台服务器&#xff0c;使用的是一个IP&#xff0c;两个端口&#xff0c;给人看上去是一台服务器的两个端口&#xff0c;实际是两台服务器。 现在我需要从一个端口传输一个文件夹到另外一个端口&#xff0c;实际上是从一个机器传输到另外一个机器。 操作 在两台…

linux系统消息中间件rabbitmq部署镜像集群

RabbitMQ镜像集群配置 RabbitMQ镜像集群配置创建镜像集群:镜像队列策略设置说明 RabbitMQ镜像集群配置 上面已经完成RabbitMQ默认集群模式&#xff0c;但并不保证队列的高可用性&#xff0c;尽管交换机、绑定这些可以复制到集群里的任何一个节点&#xff0c;但是队列内容不会复…

thonny 使用命令行安装包并且替换源,安装速度嗖嗖的

thonny 使用命令行安装包并且替换源 点击 “工具”->"打开系统shell"替换源下载嘎嘎快 点击 “工具”->“打开系统shell” 替换源 pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliy…

AI Agent几篇不错的概述和介绍

​2023年人工智能体(AI Agent)开发与应用全面调研&#xff1a;概念、原理、开发、应用、挑战、展望 OpenAI的CEO都在谈的 AI Agent&#xff0c;到底是什么&#xff1f; | 人人都是产品经理 AI智能体卷爆大模型&#xff01;4大Agent打擂&#xff0c;西部世界谁将成为软件2.0&am…

快速学习安全框架 Springsecurity最新版(6.2)--用户授权模块

简介 上一节Springsecurity 用户认证 Springsecurity 拥有强大的认证和授权功能并且非常灵活&#xff0c;,一来说我们都i有以下需求 可以帮助应用程序实现以下两种常见的授权需求&#xff1a; 用户-权限-资源&#xff1a;例如张三的权限是添加用户、查看用户列表&#xff0c;李…

康威生命游戏

康威生命游戏 康威生命游戏(Conway’s Game of Life)是康威发明的细胞自动机。 生命游戏有几个简单的规则&#xff1a; 细胞有两种状态&#xff0c;存活或死亡&#xff0c;每个细胞以自身为中心与周围的八格细胞互动。 对于存活的细胞&#xff1a; 当周围的细胞过少(<2)或…

【Linux】:简易实现自动化构建代码make/Makefile

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux自动化构建代码make/makefile的使用&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&…

Leo赠书活动-18期 《高效使用Redis》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

Ubuntu22部署MySQL5.7详细教程

Ubuntu22部署MySQL5.7详细教程 一、下载MySQL安装包二、安装MySQL三、启动MySQL检查状态登录MySQL 四、开启远程访问功能1、允许其他主机通过root访问数据库2、修改配置文件&#xff0c;允许其他IP通过自定义端口访问 五、使用Navicat连接数据库 默认情况下&#xff0c;Ubuntu2…

Android的ViewModel

前言 在Compose的学习中&#xff0c;我们在可组合函数中使用rememberSaveable​​​​​​​保存应用数据&#xff0c;但这可能意味着将逻辑保留在可组合函数中或附近。随着应用体量不断变大&#xff0c;您应将数据和逻辑从可组合函数中移出。 而在之前的应用架构学习中&…

【测试开发项目】个人博客项目测试报告

文章目录 前言 一、项目背景 二、项目功能 三、测试用例设计 3.1 个人博客项目测试用例设计 3.1.1 博客登录页测试用例设计 3.1.2 博客列表页测试用例设计 3.1.3 博客详情页测试用例设计 3.1.4 博客编辑页测试用…

从数据库中读取文件导出为Excel

使用的库&#xff08;org.apache.poi&#xff09; 在poi包中有Apache提供的各种分类文件&#xff0c;如下 结构功能HSSF读写Microsoft Excel XLS文件XSSF读写Microsoft Excel OOXML XLSX文件HWPF读写Microsoft Word DOC文件HSLF读写Microsoft PowerPoint文件 下面以XSSF为例&…

【STM32学习】——续上:软件SPI读写W25Q64SPI通信外设硬件SPI读写W25Q64

四、软件SPI读写W25Q64 工程思路与I2C类似&#xff0c;MySPI.c是通信底层&#xff0c;主要包括通信引脚封装、初始化、SPI通信的三个拼图&#xff08;起始、终止和交换一个字节&#xff09;&#xff1b;基于此文件建立W25Q64.c&#xff0c;调用MySPI三个拼图&#xff0c;拼接成…