linux的io的知识大全

C语言的io操作

写文件

#include<stdio.h>
#include<string.h>#define FILE_NAME "log.txt"
int main()
{FILE * fp = fopen(FILE_NAME, "w");if(fp==NULL){printf("fopen error!\n");}const char* msg = "hello zk\n";int cnt =5;while(cnt--){fwrite(msg,strlen(msg),1,fp);}fclose(fp);return 0;
}

接口介绍

fopen函数,第一个参数是文件的路径,第二个参数是mode 有 r w r+ w+等等.返回值返回的是一个文件指针。
r:只读,不存在文件则会报错。
w:写文件,不存在文件则会创建一个文件
r+:读写文件,不存在文件则会报错
w+::读写文件,不存在文件则会创建一个文件

FILE *fopen(const char *path, const char *mode);

fclose,参数是是一个文件指针

int fclose(FILE *fp);

fwrite
参数的意义,第一个是写的消息,第二个是消息的大小,第三个是每一个字符的大小,最后一个是文件指针。

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

结果
在这里插入图片描述
在这里插入图片描述
读文件

#include<stdio.h>
#include<string.h>#define FILE_NAME "log.txt"
int main()
{FILE * fp = fopen(FILE_NAME, "r");if(fp==NULL){printf("fopen error!\n");}char buffer[1024];//while(cnt--)//{//fwrite(msg,strlen(msg),1,fp);//}while(fgets(buffer, sizeof(buffer), fp) != NULL)  // 使用sizeof并检查返回值{printf("%s", buffer);  // fgets自动添加'\0'和保留换行符,不需额外处理}fclose(fp);return 0;
}

结果

[zk@VM-24-17-centos lesson16]$ ./test
hello zk
hello zk
hello zk
hello zk
hello zk
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);char *fgets(char *s, int size, FILE *stream);

追加文件

#include<stdio.h>
#include<string.h>#define FILE_NAME "log.txt"
int main()
{FILE * fp = fopen(FILE_NAME, "a");if(fp==NULL){printf("fopen error!\n");}//char buffer[1024];const char* msg = "hello zk\n";int cnt=5;while(cnt--){fwrite(msg,strlen(msg),1,fp);}//while(fgets(buffer, sizeof(buffer), fp) != NULL)  // 使用sizeof并检查返回值//{//printf("%s", buffer);  // fgets自动添加'\0'和保留换行符,不需额外处理//}fclose(fp);return 0;
}

结果
在这里插入图片描述

接下来就是操作系统的接口了

open

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

c语言,java语言,python语言。都有io操作,那操作系统只有一个,怎么版本。那就学习操作系统的接口。知其所以然
我们先介绍flag是什么。在C语言中没有bool类型,这时候用bit位来当作标志的判断。

O_CREAT 创建
O_APPEND 追加
O_TRUNC 清空
O_RDONLY 只读

我们先介绍这个东西的原理
看代码

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#define ONE (1<<0) // 0000 0001
#define TWO (1<<1)  // 0000 0010
#define THREE (1<<2)  // 0000 0100
#define FOUR (1<<3)  // 0000 1000void print1(char n)
{if(n&ONE){printf("one");}if(n&TWO){printf("two");}if(n&THREE){printf("three");}if(n&FOUR){printf("four");}printf("\n");
}
int main()
{print1(ONE);print1(ONE|TWO);return 0;
}
[zk@VM-24-17-centos lesson16]$ ./test
one
onetwo

前面的4个宏就相当于这里的define,

现在来看看使用

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

看代码

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

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

相关文章

北邮通报学生联名举报导师事件,导师PUA学生,学生只有压榨它

诸葛亮为激司马懿出战&#xff0c;派使者送给他女人的衣服&#xff0c;司马懿欣然接受后问使者&#xff1a;“你们家丞相都管些什么呀&#xff1f;” 使者回答道&#xff1a;“我们丞相从行军布阵到饮食起居&#xff0c;无一不亲自过问。” 司马懿听到心中大喜&#xff0c;心想…

【ARM Coresight SOC-600 -- ETF Flushin无法接收到 CTI 发出 triggerout 信号问题分析】

请阅读【嵌入式开发必备专栏 】 文章目录 问题背景波形分析问题背景 在做验证的时候,准备通过 CTI2 给 SOC 上的 ETF 触发一个 flushin 动作,然后stop住 formatter,结果一致发现没有成功,接下来就是分析的过程了。 首先检查了代码,没有发现代码有什么问题(一般自己写的代…

学习大数据,所需要的java(Maven)基础(1)

文章目录 使用Maven的优势第三方jar包添加第三方jar包获取jar包之间的依赖关系jar包之间的冲突处理将项目拆分成多个工程模块 实现项目的分布式部署Maven是什么自动化构建工具构建的概念构建环节自动化构建 Maven如何使用安装Maven核心程序maven联网问题Maven中的settings配置在…

Linux下批量的批量操作

批量删除docker 镜像 docker images | grep ent-form-web |awk ‘{print $3}’ | xargs docker rmi docker images: 列出所有的docker 镜像 docker images | grep ent-form-web : 选取出结果带 ent-form-web的信息 docker images | grep ent-form-web |awk ‘{print $3}’ 选取…

为什么在学校很难真正学好嵌入式?

10几年前,我是读电气工程专业,学了很多东西,结构,电机、绘图,plc等等.. 其实,都没什么鸟用,出来还是像个废物。 后面我自学转了单片机开发,说句难听点,自己买个开发板都比在学校学得深。 可能是这个专业的问题,主攻不是嵌入式方向,老师用汇编点个流水灯,这门课就…

CMake学习笔记(三)区分macro与function

目录 共同点--形式类似 macro的形式 function的形式 不同点 1 输入参数的替换阶段不同 macro function 2 输入参数作用域不同 macro function 共同点--形式类似 macro的形式 macro(宏名 输入参数名).... endmacro() function的形式 function(函数名 输入参数名).…

20232831 2023-2024-2 《网络攻防实践》第5次作业

目录 20232831 2023-2024-2 《网络攻防实践》第5次作业1.实验内容&#xff08;1&#xff09;防火墙配置&#xff08;具体IP配置参考自己的IP设置&#xff09;&#xff08;2&#xff09;动手实践&#xff1a;Snort&#xff08;3&#xff09;分析配置规则 2.实验过程3.学习中遇到…

基于小程序实现的校园失物招领系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

第十二天--二维数组的彻底解刨--地址

1.二维数组我们用父子的地址来称呼二维数组的地址 比如arr[3][4] 这里的arr是二维数组的首地址&#xff0c;也是父数组的首地址&#xff0c;也是子数组的首地址 arr1父数组的地址偏移1&#xff0c;实际上是偏移了4*416个字节 arr[0]是子数组的首地址&#xff0c;arr[0]1是子数…

langchain txt 文档加载,分割

stuff 策略 加载 arXiv 论文&#xff0c;让模型总结前 2000 字 这里采用的是 stuff 策略&#xff0c;也就是将一大段文本。按字数分割成 N 个文本块&#xff0c;又合并成一个大的文本块。 对超大规模不友好&#xff0c;没有区分文档重要性&#xff0c;适合文档量较少场景 i…

安卓刷机fastboot分段传输

win10 fastboot 无法识别&#xff0c;驱动下载地址GitHub - xushuan/google_latest_usb_driver_windows 把inf文件更新到设备管理器驱动更新即可 问题 archive does not contain super_empty.img Sending vbmeta_a (4 KB) OKAY [ 0.117s] Writing …

Springboot项目的测试类书写(速通)

目录 前言1. 单元测试的测试类2. 框架测试的测试类 前言 在实际开发中&#xff0c;如果只是做一个简单的单元测试&#xff08;不涉及端到端、数据库交互、API调用、消息队列处理等&#xff09;&#xff0c;我为了方便一般都是找块儿地方写一个main方法来跑一下就行了&#xff…

Redis中的集群(六)

集群 ASK错误 在进行重新分片期间&#xff0c;源节点向目标节点迁移一个槽的过程中&#xff0c;可能会出现这样一种情况:属于被迁移槽的一部分键值对保存在源节点里面&#xff0c;而另一部分键值对则保存在目标节点里面。当客户端向源节点发送一个与数据库有关的命令&#xf…

C中自定义类型——结构体

一.前言 在C语言中&#xff0c;不仅有int、char、short、long等内置类型&#xff0c;C语言还有一种特殊的类型——自定义类型。该类型可以由使用者自己定义&#xff0c;可以解决一些复杂的个体。 二.结构体 2.1结构体的声明 我们在利用结构体的时候一般是用于描述一些有多种…

javaweb配置JSTL

首先配置好javaweb项目。 在网上下载好jakarta-taglibs-standard并解压。 在web/WEB-INF目录下创建lib目录。 在jakarta-taglibs-standard目录下lib目录内的两个.jar文件复制到javaweb项目lib目录下。 将这两个.jar包导入库。 在idea菜单栏找到“文件”并打开&#xff0c;点…

nvm更新node版本

1、nvm安装和管理多个 Node.js 版本&#xff1a;NVM 允许用户在计算机上同时安装多个不同版本的 Node.js。这使得开发人员可以轻松地在不同的项目中使用不同的 Node.js 版本&#xff0c;而无需手动安装或卸载。 2、nvm切换 Node.js 版本&#xff1a;通过 NVM&#xff0c;用户可…

好菜每回味道不同--建造者模式

1.1 炒菜没放盐 中餐&#xff0c;老板需要每次炒菜&#xff0c;每次炒出来的味道都有可能不同。麦当劳、肯德基这些不过百年的洋快餐却能在有千年饮食文化的中国发展的那么好呢&#xff1f;是因为你不管何时何地在哪里吃味道都一样&#xff0c;而鱼香肉丝在我们中餐却可以吃出上…

Langchain-Chatchat 从入门到精通(基于本地知识库的问答系统)(更新中)

目录 前言一、Langchain-Chatchat介绍1-1、Langchain-Chatchat介绍1-2、LangChainChatGLM 工作流1-3、文档角度的工作流 二、快速上手2-0、硬件要求2-1、环境配置2-2、模型下载2-3、初始化知识库和配置文件2-4、一键启动 三、配置文件详解&#xff08;config目录下&#xff09;…

MybatisPlus实现数据权限隔离

引言 Mybatis Plus对Mybatis做了无侵入的增强&#xff0c;非常的好用&#xff0c;今天就给大家介绍它的其中一个实用功能&#xff1a;数据权限插件。 数据权限插件的应用场景和多租户的动态拦截拼接SQL一样。建议点赞收藏关注&#xff0c;方便以后复习查阅。 依赖 首先导入M…

【Java集合】面试题汇总

Java 集合Java 集合概览1. List, Set, Queue, Map 四者的区别&#xff1f;2. ArrayList 和 Array&#xff08;数组&#xff09;的区别&#xff1f;3. ArrayList 和 Vector 的区别?4. Vector 和 Stack 的区别?&#xff08;了解即可&#xff09;5. ArrayList 可以添加 null 值吗…