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 只读
O_WRONLY 只写

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

#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);ssize_t write(int fd, const void *buf, size_t count);

看代码
第三个参数为创建文件的权限。有一个接口没有第三个参数,那是让文件已经存在的进行的操作。

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<string.h>#define FILE_NAME "log1.txt"int main()
{int fd = open(FILE_NAME,O_WRONLY|O_CREAT|O_TRUNC,0666);if(fd==-1){printf("open error");return -1;}printf("%d\n",fd);const char*msg="hello zzkk\n";int cnt =5;while(cnt--){ssize_t num = write(fd,msg,strlen(msg));}close(fd);return 0;
}

这里我打印了fd,为什么是3.先记住,后面讲
输出结果。
在这里插入图片描述
读文件

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<string.h>#define FILE_NAME "log1.txt"int main()
{int fd = open(FILE_NAME,O_RDONLY);if(fd==-1){printf("open error");return -1;}printf("%d\n",fd);const char*msg="hello zzkk\n";int cnt =5;char buffer[1024];while(1){int n =  read(fd, buffer, sizeof(buffer)-1);buffer[n]=0;printf("%s\n",buffer);if(n==0){break;}}// while(cnt--)// {//     ssize_t num = write(fd,msg,strlen(msg));// }close(fd);return 0;
}

结果

[zk@VM-24-17-centos lesson16]$ ./test 
3
hello zzkk
hello zzkk
hello zzkk
hello zzkk
hello zzkk

这里也有一个3.

这里为什么是3,而不是其他的。还有 0 1 2 去哪里了

C默认会打开三个输入输出流,分别是stdin, stdout, stderr ,这三个分别就是0 1 2
仔细观察发现,这三个流的类型都是FILE*, fopen返回值类型,文件指针

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<string.h>#define FILE_NAME "log1.txt"int main()
{printf("%d\n",stdin->_fileno);printf("%d\n",stdout->_fileno);printf("%d\n",stderr->_fileno);int fd = open(FILE_NAME,O_RDONLY);printf("%d\n",fd);close(fd);return 0;
}
[zk@VM-24-17-centos lesson16]$ ./test 
0
1
2
3

在这里插入图片描述

open函数返回值

上面的 fopen fclose fread fwrite 都是C标准库当中的函数,我们称之为库函数(libc)。而, open close read write lseek 都属于系统提供的接口,称之为系统调用接口。

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

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

相关文章

使用 Docker 部署 Linux-Command 命令搜索工具

1&#xff09;介绍 Linux-Command GitHub&#xff1a;https://github.com/jaywcjlove/linux-command Linux-Command 仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 Web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内…

阿里云服务器企业租用费用价格表

阿里云服务器企业租用费用价格表&#xff0c;企业专享2核4G5M带宽云服务器优惠价格199元一年&#xff0c;配置为阿里云服务器ECS u1实例&#xff0c;2核4G、5M固定带宽、80G ESSD Entry盘&#xff0c;其他的云服务器配置2核2G3M带宽价格99元一年、4核8G服务器955元一年&#xf…

Springboot+vue的粮仓管理系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的粮仓管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&am…

PyCharm Pro 2024:卓越的Python编辑开发工具,适用于Mac与Windows平台

PyCharm Pro 2024是一款专为Python开发者设计的强大编辑开发工具&#xff0c;无论是Mac还是Windows用户&#xff0c;都能从中受益良多。该软件凭借其出色的性能、丰富的功能和卓越的用户体验&#xff0c;成为Python编程界的翘楚。 作为一款高效的Python编辑器&#xff0c;PyCh…

ELK 企业级日志分析 ELFK

一 ELK 简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源 工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 1 ElasticSearch&#xff1a; 是基于Lucene&#xff08;一个全文检索引擎的…

Qt | 信号与槽 原理、连接、断开(面试无忧)

1、信号和槽是用于对象之间的通信的,这是 Qt 的核心。为此 Qt 引入了一些关键字,他们是slots、signals、emit,这些都不是 C++关键字,是 Qt 特有的,这些关键字会被 Qt 的 moc转换为标准的 C++语句。 2、Qt 的部件类中有一些已经定义好了的信号和槽,通常的作法是子类化部件…

每日一题 — 将 x 减到 0 的最小操作数

思路&#xff1a; 题目要求是让我们从数组的最左端和最右端进行操作&#xff0c;这样的话解题的难度大大提升&#xff0c;我们可以用 正难则反 的思想&#xff1a; 题目中要求是减去数组中的数刚好等于X&#xff0c;我们可以转换成 数组中某一段的和等于 数组的总长减去X(sum -…

HarmonyOS实战开发-图片编辑、使用 TextArea 实现多文本输入

介绍 本示例使用 TextArea 实现多文本输入&#xff0c;使用 ohos.app.ability.common 依赖系统的图库引用&#xff0c;实现在相册中获取图片&#xff0c;使用 ohos.multimedia.image 生成pixelMap&#xff0c;使用pixelMap的scale()&#xff0c;crop()&#xff0c;rotate()接口…

rust wasm入门

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

连续6年!九州未来获评2024中国边缘计算企业20强

4月9日&#xff0c;由国内中立边缘计算领域研究平台——边缘计算社区策划发起的“2024中国边缘计算企业20强”榜单正式揭晓&#xff0c;九州未来凭借在边缘计算领域的深厚积累以及创新实践&#xff0c;从众多参评企业中脱颖而出&#xff0c;连续6年入选中国边缘计算企业20强&am…

vue3第十八节(diff算法)

引言&#xff1a; 上一节说了key的用途&#xff0c;而这个key属性&#xff0c;在vue的vnode 中至关重要&#xff0c;直接影响了虚拟DOM的更新机制&#xff1b; 什么场景中会用到diff算法 如&#xff1a;修改响应式属性需要重新渲染页面&#xff0c;会重新执行render渲染函数返…

智慧之旅不止步!凌恩生物3月客户文章累计IF>314.8!

2024年3月&#xff0c;凌恩生物助力客户发表文章63篇&#xff0c;累计影响因子314.8分&#xff0c;其中包括Science of the Total Environment、Journal of Hazardous Materials、Carbohydrate Polymers、Genome Biology、Chemical Engineering Journal、Bioresource Technolog…

从 SQLite 3.5.9 迁移到 3.6.0(二十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​SQLite 版本 3.6.0 &#xff08;2008-07-16&#xff09; 包含许多更改。按照惯例 SQLite项目&#xff…

关于centos8自带的apache2.4开启https后,XP系统的IE8无法显示网页的问题

经检验&#xff0c;是因为系统的apache和openssl版本太高导致的。 禁用系统默认的apache2.4&#xff0c;自己重新源码编译安装一套openssl-1.0.1fapache2.2.23php7.1.2即可。跟update-crypto-policies没有关系&#xff0c;可保持默认的DEFAULT状态。 关于centos8自带的apache2…

故障诊断 | 基于LSTM的滚动轴承故障诊断

效果 概述 基于LSTM(长短期记忆网络)的滚动轴承故障诊断是一种利用深度学习技术来预测滚动轴承是否存在故障的方法。下面是一个基本的滚动轴承故障诊断的流程: 数据收集:首先,需要收集与滚动轴承相关的振动信号数据。这些数据可以通过传感器或振动监测系统获取。收集的数…

Redis入门到通关之Redis介绍

文章目录 1.Redis简单介绍1.1 非关系型数据库介绍 2.本文介绍如下内容3.初始Redis3.1.认识NoSQL3.1.3.查询方式3.1.4.事务3.1.5.总结 3.2.认识Redis3.3 安装Redis 1.Redis简单介绍 Redis是一种键值型的 NoSql 数据库&#xff0c;这里有两个关键字&#xff1a; 键值型NoSql 其…

不通过command,通过idea配置启动项

有同学问&#xff0c;不通过npm run dev这几个字母输入在控制台如何运行呢&#xff1f; 哦&#xff0c;还真有&#xff0c;不过原理是一样的&#xff0c;下面来看看叭 点击左上角的编辑配置Edit Configurations 进来之后点击左上角的加号 点击npm&#xff0c;package.json选择…

Python八股文:基础知识Part1

1. 不用中间变量交换 a 和 b 这是python非常方便的一个功能可以这样直接交换两个值 2. 可变数据类型字典在for 循环中进行修改 这道题在这里就是让我们去回答输出的内容&#xff0c;这里看似我们是在for循环中每一次加入了都在list中加入了一个字典&#xff0c;然后字典的键值…

Python机器学习学习线路

随着人工智能技术的飞速发展&#xff0c;机器学习已经成为计算机科学领域的热门话题。Python&#xff0c;作为一门功能强大且易于上手的编程语言&#xff0c;成为学习机器学习的理想选择。本文将为您介绍一条Python机器学习的学习线路&#xff0c;帮助您逐步掌握机器学习的基础…

嵌入式学习53-ARM2

知识零碎&#xff1a; 跳转指令b&#xff1a; b 指令类似c语言的goto语句&#xff0c;能够实现无条件跳转。跳…