Linux文件编程

目录

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 以及其他底层的系统调用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive04_DDL操作

Hive DDL操作 1 DDL 数据定义 1.1 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)];[IF NOT EXISTS] :判断是否存在 [COMMENT database_c…

【回溯】n皇后问题Python实现

文章目录 [toc]问题描述问题转换回溯法时间复杂性Python实现 个人主页:丷从心 系列专栏:回溯法 问题描述 有一批共 n n n个集装箱要装上 2 2 2艘载重量分别为 c 1 c_{1} c1​和 c 2 c_{2} c2​的轮船,其中集装箱 i i i的重量为 w i w_{i} w…

多重断言插件之pytest-assume的简单使用

背景: pytest-assume是Pytest框架的一个扩展,它允许在单个测试用例中多次断言。通常情况下,当一个断言失败时,测试会立即停止执行,而pytest-assume允许我 们继续执行剩余的断言,以便查看更多的失败信息。…

C# WPF上位机开发(windows pad上的应用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面,但是windows平台不仅仅是电脑…

【软考中级】网络工程师:8.网络安全

本章考察内容比较广泛,考题对知识点都会有所涉及。 8.1 网络安全的基本概念 8.1.1 网络安全威胁的类型 窃听 这种情况发生在广播式网络系统中,每个节点都可以读取数据,实现搭线窃听、安装通信监视器和读取网上的信息等。 假冒 当一个实体…

nodejs微信小程序+python+PHP的热带野生动物园景点预约订票系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

web前端项目-七彩夜空烟花【附源码】

web前端项目-七彩动态夜空烟花【附源码】 本项目仅使用了HTML,代码简单,实现效果绚丽,且本项目代码直接运行即可实现,无需图片素材,接下来让我们一起实现一场美丽的烟花秀叭 运行效果:鼠标点击和移动可控制…

Navicat误删除生产环境SQLServer2012单表数据后恢复单表数据

背景: 1-后端更新功能部署到客户生产环境时误将测试环境数据保留,项目负责人发现后告知后端。 2-后端登录客户生产数据库使用navicat删除一张表的单表数据时多删了几条数据,判断弄乱了客户生产环境下自己产生的单表数据。 思路&#xff…

基本路径覆盖测试设计-实验九例题

目录 基本路径法 计算环形复杂度需要画出程序的控制流图。控制流图中只有两种图形符号。 实验内容:针对下面的Java语言程序使用基本路径覆盖测试方法设计测试用例。 基本路径法 基本路径法是在程序控制流图的基础上,通过分析控制构造的环路复杂性&#x…

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…

WizFi360-EVB-Pico评估版介绍

文章目录 1 概述2 硬件资源2.1 硬件规格2.2 引脚定义2.3 工作条件 3 参考资料3.1 Datasheet3.2 原理图3.3 尺寸图(单位 : mm) 3.4 参考例程 4 硬件协议栈优势 1 概述 WizFi360-EVB-Pico基于树莓派RP2040,并使用WizFi360增加Wi-Fi连接。它与树莓派Pico板引脚兼容&…

直排轮滑教程8

弧线滑行收腿练习 1,不同于直线,弧线滑行收腿,右腿要越过左脚,左腿收回要靠近右脚。 2,它是个越过动作,是个交叉动作。收腿当中,左右脚是不一样的。 3,收腿的基本理论就是&#x…

使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

1、通用的业务编码规则的管理功能 在前面随笔我们介绍了一个通用的业务编码规则的管理功能,通过代码生成工具Database2Sharp一步步的生成相关的后端和Winform、WPF的界面,进行了整合,通过利用代码生成工具Database2sharp生成节省了常规功能的…

七、Class文件结构及深入字节码指

一、JVM语言的无关性与class类文件 不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础。 Java 虚拟机不和任何语言绑定,它只与“Class 文件”这种特定的二进…

QT foreach

原型:foreach(variable, container) container:容器,即被遍历的对象 variable:当前元素,即遍历container过程中,当前的那个元素 代码: QStringList container { "1", "2&quo…

uni-app pages.json之globalStyle全局页面样式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

电商数据分析-02-电商业务介绍及表结构

参考 电商业务简介 大数据项目之电商数仓、电商业务简介、电商业务流程、电商常识、业务数据介绍、电商业务表、后台管理系统 举个例子:🌰 1.1 电商业务流程 电商的业务流程可以以一个普通用户的浏览足迹为例进行说明,用户点开电商首页开始浏览&…

TYN-02A-Ⅱ 太阳能警示灯

应用范围: 可安装在电线杆,路灯,围挡,交 通护栏及各种杆式固体等场所起警示作用。 产品特点: 采用进口PS材质; 光控无开关,白天不闪,昏暗环境自动闪烁,无需手动操作,省时省事; …

shell 循环遍历的详细用法

简介 在 shell 脚本中,循环结构用于重复执行一组代码块,包括 for 循环、while 循环,可以用于遍历数字、字符串、数组、文件等。这篇文章会详细介绍这两种遍历方式,以及各种实例场景。 文章目录结构如下 1. 循环遍历的特点 2. 循…

VS Code插件开发初步

文章目录 上手入口函数contributes 上手 欲善其事必先利其器,无论做什么开发,第一步肯定是下载工具链。VS Code开发主要用到两个东西,一个是项目的手脚架工具Yeoman,可通过yo来安装;另一个是VS Code的扩展时生成器gen…