Linux编程 1.2 系统文件IO- 使用

news2024/9/19 23:49:51

系统文件IO使用

1、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);
返回:若成功为文件描述符,若出错为-1
功能:打开或创建一个文件
  • 参数:
  • pathname:要打开或者创建的文件路径
  • flags:用来说明此函数的多个选择项
    • O_RDONLY 只读
    • O_WRONLY 只写
    • O_RDWR 读写
  • mode:新建文件的访问权限,对于open函数而言,仅当创建新文件时才使用第三个参数。

open函数的flags参数(一个或多个常数进行或运算构成)(常数定义在<fcntl.h>)

标识含义
O_RDONLY以只读方式打开文件
O_WRONLY以只写方式打开文件
O_RDWR以读写方式打开文件
O_APPEND以追加模式打开文件,每次写时都加到文件的尾端,但在网络文件系统进行操作时却没有保证。
O_CREAT如果指定的文件不存在,则按照mode参数指定的文件权限来创建文件
O_EXCL如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在。但在网络文件系统进行操作进却没有保证。
O_DIRECTORY如果参数pathname不是一个目录,则open出错
O_TRUNC如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0
O_NONBLOCK如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置非阻塞方式。

2、creat函数

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(const char* pathname,mode_t mode);
返回:若成功为只写打开的文件描述符,若出错为-1
功能:创建一个新文件
  • 此函数等效于:
open(pathname,O_WRONLY|O_CREAT|O_TRUNC,mode);
  • creat的一个不足之处是它以只写方式打开所创建的文件。

3、close函数

#include<unistd.h>
int close(int fd);
返回:若成功为0,若出错为-1
功能:关闭一个打开的文件
  • 参数
    fd:已打开文件的文件描述符
  • 当一个进程终止时,它所有的打开文件都由内核自动关闭

4、read函数

#include<unistd.h>
ssize_t read(int fd,void * buf,size_t count);
返回:读取的字节数,若已到文件尾为0,若出错为-1
功能:从打开文件中读数据
  • 参数
    • fd:读取文件的文件描述符
    • buf:存放读取数据的缓存
    • count:要求读取一次数据的字节数
  • 有多种情况可使实际读取的字节数少于要求读字节数
    • 读取普通文件时,在读到要求字节数之前已到达了文件尾端。
    • 当从终端设备读时,通常一次最多读一行
    • 当从网络读时,网络中的缓冲机构可能造成返回值小于所要求读的字节数。
    • 某些面向记录的设备,例如磁带,一次最多返回一个记录。
    • 进程由于信号造成中断。
  • 读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读得的字节数。
  • 示例:
    ①申请一个字符数据:char buffer[1024];
    ②打开一个文件 fdin=open(文件名,O_RDONLY); //以读的方式打开
    ③调用读 read(fdin,buffer,1024) //从文件中读取数据放入buffer中

5、write函数

#include<unistd.h>
ssize_t write(int fd,const void * buf,size_t count);
返回:若成功则返回已写的字节数,若出错为-1
功能:向打开的文件中写数据
  • 参数

    • fd:写入文件的文件描述符
    • buf:存放待写数据的缓存
    • count:要求写入一次数据的字节数
  • 其返回值通常与参数count的值不同,否则表示出错

  • wtite出错的一个常见原因是:磁盘已写满,或者超过了对一个给定进程的文件长度限制。

  • 对于普通文件,写操作从文件的当前位移量处开始。如果在打开该文件时,指定了O_APPEND选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

  • 示例:
    ①申请一个字符数据:char buffer[1024];
    ②打开一个文件 fdout=open(文件名,O_WRONLY|O_CREAT|O_TRUNC,0777); //以写的方式打开
    ③调用读 read(fdin,buffer,1024) //先从文件中读取数据放入buffer中
    ④调用写 write(fdout,buffer,1024) //将fuffer中的数据写入文件中

6、ISEEK函数

#include<sys/types.h>
#include<unistd.h>
off_t Iseek(int fd,off_t offset,int whence);
返回:若成功则返回新的文件位移量(绝对偏移量),若出错为-1
功能:定位一个已打开的文件
  • 参数
    • fd:已经打开文件的描述符
    • offset:位移量
    • whence:定位的位置
      • SEEK_SET:将该文件的位移量设置为距文件开始处offset个字节
      • SEEK_CUR:将该文件的位移量设置为其当前值加offset,offset可为正或负
      • SEEK_END:将该文件的位移量设置为文件长度加offset,offset可为正或负(正向前进,负向后移动)
  • ISEEK也可用来确定所涉及的文件是否可以设置位移量。如果文件描述符引用的是一个管道或FIFO,则ISEEK返回-1,并将errno设置为EPIPE.
  • 每个打开文件都有一个与其相关联的“当前文件偏移量”。它是一个非负整数,用度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。按系统默认,当打开一个文件时,除非指定O_APPEND选择,否则该位移量被设置为0.
  • 在这里插入图片描述
    在这里插入图片描述

示例代码:

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

int main(void)
{
	int fd = open("data", O_WRONLY | O_CREAT, 0664);
	if(fd < 0){
		perror("");
		return 1;
	}

	char str[1024] = "";
	while(1){
		int len = read(0, str, 1024);
		write(fd, str, len);
	}

	close(fd);

	return 0;
}

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

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

相关文章

操作系统——处理机调度

文章目录 进程调度0.概念1.调度分类高级调度低级调度中级调度七状态模型调度对比 2.进程调度进程调度的时机进程调度的方式进程的切换方式调度器/调度程序闲逛进程 3. 调度算法的评价指标CPU利用率系统吞吐量周转时间等待时间响应时间 4. 调度算法先来先服务(FCFS)短作业优先(S…

微服务基础环境搭建

一.创建父工程 用于聚合其他微服务模块 1 新建 Maven 项目 JDK8Maven 项目Web 2 项目设置 编码的选择 UTF8JDK 版本的选择 3 删除 src 目录 4 配置父级 pom.xml SpringBoot&#xff1a;模块探究之spring-boot-dependencies-CSDN博客 子模块能够依赖当前父级 pom.xml 配置 【My…

LDR6020双盲插音频随便插充电听歌随便插

随着智能手机的普及和功能的日益丰富&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。音乐、电影、游戏等娱乐内容更是丰富了手机的使用体验。而在这其中&#xff0c;音频转接器的作用愈发凸显&#xff0c;特别是在边听边充的场景下&#xff0c;一款高效且便捷的手机…

python脚本调用bitcoin-cli接口命令

脚本需求 1、python一个对外接口 2、不同的bitcoin命令通过传不同的参数实现 3、接口及接口的参数依次往后传递 4、日志全部打印到日志文件中并且日志文件按天进行切割 #!/usr/bin/python3from flask import Flask, request, jsonify import subprocess import json import os …

ROS中简单实现讯飞星火大模型API调用

文章目录 前言一、申请试用二、ROS中使用1.配置环境变量2.编写ros功能包总结前言 讯飞星火认知大模型是由科大讯飞自主研发的认知智能大模型,通过学习海量的文本、代码和图像,具备跨领域的知识和语言理解能力,能基于自然对话方式理解和执行任务。目前开放了API接口供用户使…

主数据管理是数字化转型成功的基石——江淮汽车案例分享

汽车行业数字化转型的背景 在新冠疫情导火索的影响下&#xff0c;经济全球化政治基础逐渐动摇。作为全球最大的汽车市场&#xff0c;我国的汽车市场逐渐由增量转为存量市场。 在数字化改革大背景下&#xff0c;随着工业4.0时代的到来&#xff0c;江淮汽车集团力争实现十四五数…

【汽车电子】万字详解汽车标定与XCP协议

XCP协议基础 文章目录 XCP协议基础一、引言1.1 什么是标定1.2 什么时候进行标定1.3 标定的意义 二、XCP协议简介2.1 xcp简介2.2 XCP如何加快开发过程&#xff1f;2.3 XCP的主要作用 三、XCP工作过程3.1 工作过程3.2 通讯模型3.3 测量与标定 四、XCP报文解析4.1 数据包报文格式4…

会分期完成2.3亿元C轮融资,它们都使用了拼音域名

易名科技()1月10日报道&#xff0c;致力于帮助租户缓解资金压力的汇分公司近日宣布完成2.3亿元C轮融资&#xff0c;由联络互动领投。 值得注意的是&#xff0c;它们都使用拼音域名。 他们分别是。 图&#xff1a;接触互动 汇分是汇房房旗下的租房分期平台。 打破了传统的押一付…

如何进行单元测试和集成测试

前端开发&#xff1a;如何进行单元测试和集成测试 在前端开发中&#xff0c;单元测试和集成测试是确保代码质量和稳定性不可或缺的一环。单元测试用于测试代码中的最小单元&#xff0c;而集成测试则是测试各个单元之间的交互和整体功能。通过合理的测试策略和工具&#xff0c;…

芯品荟 | 电动牙刷应用介绍

PART ONE 市场简介 - Market Profile - 电动牙刷个护是小家电最炙手可热的细分赛道之一。 随着居民的消费水平不断提升&#xff0c;口腔保健意识也逐步增强&#xff0c;中国电动牙刷市场迎来高速发展阶段。目前电动牙刷全球年用量在1亿只左右。 PART TWO 产品应用框图 - Bl…

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 文章目录 前言一、脉振高频电压注入法简介&#xff08;注入在旋转坐标系的d轴&#xff09;1.旋转高频电压&#xff08;电流&#xff09;注入法2.脉振高频电压注入法 二、高频注入理论1.永磁同步电机的高频模型2…

【小沐学QT】QT学习之Web控件的使用

文章目录 1、简介1.1 Qt简介1.2 Qt下载和安装1.3 Qt快捷键1.4 Qt帮助 2、QtWeb控件2.1 测试代码1&#xff08;QApplication&#xff09;2.2 测试代码2&#xff08;QApplicationQWidget&#xff09;2.3 测试代码3&#xff08;QApplicationQMainWindow&#xff09;2.4 测试代码4&…

【Flink CDC(一)】实现mysql整表与增量读取

文章目录 一. 运行前准备1. 依赖1.1. Maven dependency1.2. SQL Client JAR&#xff08;推荐&#xff09; 2. 配置 MySQL 服务器&#xff08;必须&#xff09; 二. 功能说明1. 启动模式2. 全量阶段支持 checkpoint3. 关于无主键表Exactly-Once 处理 三. 实战1. 实现mysql整表与…

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…

数据可视化引领智慧工业新时代

在智慧工业的大潮中&#xff0c;数据可视化崭露头角&#xff0c;以其直观、清晰的方式赋能工业生产&#xff0c;为智慧工业的高效运转提供了强有力的支持。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 数据可视化首先在智慧工业的生产监控中大显身手。通过将…

外贸干货|到底跟踪多少次才能拿下客户?

80&#xff05;的销售来源于第4至11次的跟踪&#xff01;这样的调查数据充分说明了深入顾客关系的重要性。而多数情况下&#xff0c;人们只做到了前3层&#xff0c;就放弃了。 作为一名销售&#xff0c;你会对客户坚持跟踪么&#xff1f;在跟踪过程中&#xff0c;该采取什么样…

免费SSL证书申请流程及地址

1&#xff0c;选择证书提供商&#xff1a;有许多机构提供免费的SSL证书&#xff0c;如JoySSL。选择一个可靠的提供商是第一步。 免费SSL证书申请地址https://www.joyssl.com/certificate/select/free.html?nid5 2&#xff0c;验证域名&#xff1a;根据提供商的要求&#xff…

二叉树的链式结构实现

二叉树的链式结构实现 1. 链式存储2. 二叉树的遍历前序遍历中序遍历后序遍历 3. 二叉树遍历的代码实现前序遍历中序遍历后序遍历 4. 二叉树各种相关函数的实现二叉树节点个数二叉树叶子节点个数二叉树的高度二叉树第k层节点个数二叉树查找值为x的节点 5. 代码验证 1. 链式存储 …

Linux系统---nginx(1)

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff0…

Go的CSP并发模型实现M, P, G简介

GMP概念简介 G: goroutine&#xff08;协程&#xff0c;也叫用户态线程&#xff09; M: 工作线程(内核态线程) P: 上下文(也可以认为是cpu&#xff0c;逻辑cpu数量&#xff0c;可以在程序启动的时候设置这个数量&#xff0c;gomaxprocs函数设置) GMP 模型 在 Go 中&#xff…