Linux文件编程

news2025/2/7 22:18:13

目录

1、Linux系统提供的文件编程API

1.1打开文件:open

1.2创建文件creat函数

1.3写入文件write函数

1.4读取文件read函数

1.5文件光标位置lseek函数

2、另外一组文件编程API

 2.1文件打开函数fopen

2.2读文件函数fread

2.3写文件函数fwrite

2.4文件光标位置函数fseek 

2.4文件关闭函数fclose

 2.5fgetc函数

1、Linux系统提供的文件编程API

打开        open

读写        write/read

光标定位        lseek

关闭        close  

1.1打开文件:open

函数原型:

 int open(const char *pathname, int flags);
 int open(const char *pathname, int flags, mode_t mode);

参数一:pathname 要打开的文件名(含路径,缺省为当前路径)

参数二:flags 文件的打开方式,有以下选项

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

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

以上三个常数中应当只选定一个。下列常数是可以选择的(可一个可多个也可以不选择,用|隔开)

O_CREAT  若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的权限

O_EXCL  如果同时指定了O_CREAT,而文件已经存在,则函数值返回-1(可以和O_CREAT配合使用,用来判断文件是否存在)

O_APPEND  每次写时都加到文件的尾端

O_TRUNC  属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或者只写成功打开,则长度截短为0(就是把里面的内容都删掉)

参数三:一定是在flags中使用了O_CREA标志,mode记录待创建的文件的访问权限

返回值:返回新的文件描述符(非负整数),如果发生错误则返回-1

1.2创建文件creat函数

1.3写入文件write函数

函数原型:

ssize_t write(int fd, const void *buf, size_t count);
参数一:文件描述符,由open或者creat函数返回

参数二:需要写入的数据指针

参数三:写入数据的长度

返回值:成功写入的字节数,如果出错则返回-1

1.4读取文件read函数

函数原型:

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

参数一:文件描述符,由open或者creat函数返回

参数二:读取到的数据存放的位置

参数三:读取数据的长度,指针偏移量,从光标的位置开始读buf个字节的数据

返回值:如果成功则返回读取到的字节数,返回0则表示光标位置在文件的尾,发生错误则返回-1

1.5文件光标位置lseek函数

函数原型:

off_t lseek(int fd, off_t offset, int whence);
参数一:文件描述符,由open或者creat函数返回

参数二:偏移量,正数向后偏移,负数向前偏移

参数三:偏移方式

SEEK_SET:光标位置为文件头,偏移量为参数二设置的偏移量

SEEK_CUR:偏移量为光标位置加上参数二设置的偏移量

SEEK_END:光标位置为文件尾,偏移量为文件大小加偏移量字节

返回值:返回光标偏移之后的位置,从文件头开始计算。如果发生错误则返回-1

1.6文件关闭close函数

函数原型:

int close(int fd);

参数一:文件描述符,由open或者creat函数返回

返回值:成功返回0,失败返回-1

标准输入0:读取键盘的输入:read

标准输出1:写到屏幕:write

标准错误输出0

在Linux文件可分为动态文件与静态文件,动态文件是我们打开的文件在缓冲区里面的文件,而静态文件存放在外存当中。调用close时就会将动态文件中的内容保存到磁盘的静态文件中。 

2、另外一组文件编程API

fopen、fread、fwrite、fseek、fclose、fgetc、fputc、feof

作用与上面的都差不多

 2.1文件打开函数fopen

fopen函数原型

FILE *fopen(const char *filename, const char *mode)

参数一:filename -- 字符串,表示要打开的文件名称。

参数二:mode -- 字符串,表示文件的访问模式

返回值:该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误

2.2读文件函数fread

fread函数原型

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数一:ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。读取文件的存放位置

参数二:size -- 这是要读取的每个元素的大小,以字节为单位。

参数三:nmemb -- 这是元素的个数,每个元素的大小为 size 字节。

参数四:stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

返回值:成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

2.3写文件函数fwrite

fwrite函数原型

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

参数一:ptr -- 这是指向要被写入的元素数组的指针。

参数二:size -- 这是要被写入的每个元素的大小,以字节为单位。

参数三:nmemb -- 这是元素的个数,每个元素的大小为 size 字节。

参数四:stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流

返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

2.4文件光标位置函数fseek 

fseek函数原型

int fseek(FILE *stream, long int offset, int whence)

参数一:stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

参数二:offset -- 这是相对 whence 的偏移量,以字节为单位。

参数三:whence -- 这是表示开始添加偏移 offset 的位置,其参数与lseek函数的whence一样

返回值:如果成功,则该函数返回零,否则返回非零值。

2.4文件关闭函数fclose

fclose函数原型

int fclose(FILE *stream)

stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流。

返回值:如果流成功关闭,则该方法返回零。如果失败,则返回 EOF

 2.5fgetc函数

作用:从指定的流 stream 获取一个字符(一个无符号字符),并把位置标识符往前移动

函数原型:

int fgetc(FILE *stream)

参数一:tream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流

返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或

发生读错误,则返回 EOF。

3、fopen与open的区别

fopen与open的区别

fopen

  • 语言: fopen 是标准C库中的函数,用于在C语言中打开文件。
  • 用途: fopen 主要用于打开文件以供读取或写入。它返回一个指向 FILE 结构的指针,该结构包含有关文件的信息。

open

  • 语言: open 是Unix/Linux系统中的系统调用,用于在低级别(更接近硬件)上打开或创建文件。
  • 用途: open 可以用于在文件系统中打开或创建文件,并返回文件描述符(file descriptor),而不是 FILE 结构。

 总体而言,fopen 更加抽象和易用,适用于C语言中的文件操作;而 open 更底层,直接与文件描述符交互,适用于Unix/Linux系统编程。在一般情况下,如果你在C语言中进行文件操作,推荐使用 fopen。如果你在进行系统级别的编程,可能会使用 open 以及其他底层的系统调用。

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

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

相关文章

jquery Tab切换,CSS3制作发光字

jquery Tab切换&#xff0c;CSS3制作发光字 代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta ht…

App应用如何在应用市场获得更多下载量?

App的转化率至关重要&#xff0c;App如何获得更多用户&#xff0c;提高应用的下载量&#xff1f; 据 Apple 称&#xff0c;每周有 6.5亿访问者访问应用商店&#xff0c;77%的应用下载来自 iOS 应用商店的自然搜索。随着 Apple 默认关闭了IDFA&#xff0c;自然搜索比以往任何时…

Exploring the Limits of Masked Visual Representation Learning at Scale论文笔记

论文名称&#xff1a;EVA: Exploring the Limits of Masked Visual Representation Learning at Scale 发表时间&#xff1a;CVPR2023 作者及组织&#xff1a;北京人工智能研究院&#xff1b;华中科技大学&#xff1b;浙江大学&#xff1b;北京理工大学 GitHub&#xff1a;http…

OpenCV之图像匹配与定位

利用图像特征的keypoints和descriptor来实现图像的匹配与定位。图像匹配算法主要有暴力匹配和FLANN匹配&#xff0c;而图像定位是通过图像匹配结果来反向查询它们在目标图片中的具体坐标位置。 以QQ登录界面为例&#xff0c;将整个QQ登录界面保存为QQ.png文件&#xff0c;QQ登…

百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

Kind创建k8s - JAVA操作控制

kind 简介kind 架构安装 Kind (必备工具)docker官网kubectl官网kind官网校验安装结果 关于kind 命令 安装一个集群查看当前 Kubernetes 集群中的节点信息。查看当前命名空间下中的Pod&#xff08;容器实例&#xff09;的信息。使用 kind create cluster 安装&#xff0c;关于安…

分布式下有哪些好用的监控组件?

在之前的内容中&#xff0c;分析了分布式系统下的线上服务监控的常用指标&#xff0c;那么在实际开发中&#xff0c;如何收集各个监控指标呢&#xff1f;线上出现告警之后&#xff0c;又如何快速处理呢&#xff1f;本文我们就来看下这两个问题。 常用监控组件 目前分布式系统…

深入剖析LinkedList:揭秘底层原理

文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作&#xff08;增删改查&#xff09;2.4 LinkedList的遍历方式 三、 …

matlab设置colorbar标题的两种方式

%% 第一种 figure; A rand(3,4,3); A1 A(:,:,1); A2 A(:,:,2); A3 A(:,:,3); contourf(A1,A2,A3,30); colormap(jet);colorbar; my_handlecolorbar; my_handle.Label.String depth/km; my_handle.Label.FontSize 15;%% 第二种 figure; A rand(3,4,3); A1 A(:,:,1); A2 …

排序算法--------计数排序

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【VS】NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。

问题描述 报错 NETSDK1045 严重性代码说明项目文件行禁止显示状态错误NETSDK1045当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标&#xff0c;或使用支持 .NET 6.0 的 .NET SDK 版本。RCSoftDrawMicrosoft.NET.TargetFrameworkInference.ta…

2024年科技盛宴“上海智博会·上海软博会”招商工作接近尾声

2024年上海智博会和上海软博会即将于3月份在上海跨国采购会展中心盛大召开。作为全球科技和软件行业的盛会&#xff0c;这两大展会汇集了业界顶尖的企业、创新技术和前瞻思想&#xff0c;吸引了来自世界各地的专业人士和参展商。 今年的展会将一如既往地为大家呈现最前沿的科技…

TypeScript下载安装,编译运行

TypeScript是拥有类型的JavaScript超集&#xff0c;它可以编译成普通、干净、完整的JavaScript代码。 简单理解&#xff1a;TypeScript就是加强版的JavaScript。 TypeScript最终会被编译成JavaScript代码&#xff0c;那么我们必然需要对应的编译环境 环境搭建前提&#xff1a…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Dispatcher模块的实现思路和定义

&#xff08;四&#xff09;Dispatcher模块的实现思路 关于dispatcher&#xff0c;它应该是反应堆模型里边的核心组成部分&#xff0c;因为如果说这个反应堆模型里边有事件需要处理&#xff0c;或者说有事件需要检测&#xff0c;那么是需要通过这个poll、epoll 或者 select来完…

C# 初识System.IO.Pipelines

写在前面 在进一步了解Socket粘包分包的过程中&#xff0c;了解到了.NET 中的 System.IO.Pipelines&#xff0c;可以更优雅高效的解决这个问题&#xff1b;先跟随官方的示例做个初步的认识。 System.IO.Pipelines 是一个库&#xff0c;旨在使在 .NET 中执行高性能 I/O 更加容…

56.0/DIV+CSS 布局(详细版)

目录 56.1 本章简介 56.2 实例讲解 56.2.1 菜单制作 56.2.2 美化滚动条 56.2.3 DIV+CSS 布局 56.3 综合示例 56.3.1 总体分析 56.3.2 Header 层 56.3.3 最终代码 56.1 本章简介 本章通过几个实例讲解 DIV+CSS 的应用。 采用表格布局的页面内,为了实现设计的布局,制作者往往…

SQL server 数据库练习题及答案(练习3)

一、编程题 公司部门表 department 字段名称 数据类型 约束等 字段描述 id int 主键&#xff0c;自增 部门ID name varchar(32) 非空&#xff0c;唯一 部门名称 description varchar(1024) …

数据库原理及应用·关系数据库标准语言SQL

4.1 SQL概述 4.1.1 SQL的产生和发展 1.产生 1974年&#xff0c;SQL语言的雏形最早由美国IBM公司的Raymond F. Boyce和Donald D. Chamberlin提出 1975-1979年&#xff0c;在System R上首次实现&#xff0c;由IBM的San Jose研究室研制&#xff0c;称为SEQUEL 2.发展 1986年推…

使用 pytest.ini 文件控制输出 log 日志

一、前置说明 pytest.ini 文件中可以配置参数来控制 pytest 的运行行为,其存放路径要求与 conftest.py 一样。 项目根目录project_root/ ├── pytest.ini ├── tests/ │ └── test_demo.py以test开头的测试子目录project_root/ ├── tests/ │ ├── pytest.in…

C# 学习网站

C# 文档 - 入门、教程、参考。 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/csharp/ Browse code samples | Microsoft LearnGet started with Microsoft developer tools and technologies. Explore our samples and discover the things you can build. htt…