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 1000


void 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);

看代码

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

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

相关文章

如何准确测量电源噪声

目录 电源噪声的特点 影响噪声测试的因素 总结 电源噪声的特点 以往电源噪声的幅度规范一般在几十mV&#xff0c;但是随着芯片电源电压的降低&#xff0c;很多芯片的电源噪声的规范已经低至mV的量级&#xff0c;某些对电源噪声敏感的芯片要求甚至到了百uV的量级。 电源上的…

基于Android studio 实现外卖(点)订餐系统-编程乐学最新原创

&#x1f345;文章末尾有获取完整项目源码方式&#x1f345; 目录 一、实现介绍 视频演示 1.1 启动页 1.2登录页 1.3注册页 1.4商家主页 1.5商家发布商品页面 1.6商家我的页面 1.7商家个人信息修改页 1.8商家商品信息修改页 1.9用户首页 1.10用户我的订单页面 1.1…

C++学习进阶:二进制与位运算

目录 1.进制与原反补码 2.位运算 2.1.按位与 2.2.按位或 2.3.异或 2.4.取反 2.5.移位 3.部分面试题 3.1.不创建新的变量&#xff0c;实现两个变量的交换 3.2.求一个整数存储在内存中二进制中1的个数 这一部分本来是C语言的内容&#xff0c;当学习位图时&#xff0c…

期货分账户软件|程序化软件|风控软件|资产管理软件开发用到哪些技术?

期货/股票资管分仓软件分账户系统APP的开发涉及多个技术领域&#xff0c;以确保软件的功能性、安全性和易用性。以下是一些在开发过程中可能需要用到的关键技术&#xff1a; 前端开发技术&#xff1a;前端部分主要负责用户界面的设计和实现。通常使用HTML、CSS和JavaScript等技…

YARN-Client 与 YARN-Cluster 区别

YARN-Client 与 YARN-Cluster 区别 理解YARN-Client和YARN-Cluster深层次的区别之前先清楚一个概念&#xff1a;Application Master。在YARN中&#xff0c;每个Application实例都有一个ApplicationMaster进程&#xff0c;它是Application启动的第一个容器。它负责和ResourceMa…

【HTML】制作一个简单的实时字体时钟

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建一个文本文档&#xff0c;两个文件夹&#xff0c;其中HTML的文件名改为[index.html]&am…

Jmeter杂记:测试计划参数详解

测试计划各参数详解 1&#xff0c;用户自定义变量&#xff0c;是全局变量&#xff0c;供所有线程组使用&#xff0c;可用配置元件&#xff1a;用户自定义变量替代 2&#xff0c;连续的运行线程组&#xff0c;默认不勾选&#xff0c;则随机的运行多个线程组中的取样器&#xff…

在隐私计算应用中和数链具备哪些技术特点?

在加速“可信数字化”进程的背景下&#xff0c;我国区块链产业将在打造新型平台经济&#xff0c;开启共享经济新时代的同时&#xff0c;带动数字经济“脱虚向实”服务实体经济。 和数软件在加速数字化进程的同时&#xff0c;进一步服务实体经济&#xff0c;提高实体经济的活力…

VS2019 VS2022 LNK2019 无法解析的外部符号sprintf

解决方案&#xff1a; 项目属性》配置属性》链接接-》输入》附加依赖项&#xff0c;增加 legacy_stdio_definitions.lib legacy_stdio_definitions.lib 是一个库文件&#xff0c;通常与使用 Visual Studio 编译的 C/C 项目相关。它的作用是解决在使用新版本的 Visual Studio 编…

IIS中部署netcore程序出现500错误如何处理?

500错误在IIS部署中经常出现&#xff0c;但是解决非常耗时 官方也有给出一些指引&#xff0c;但是无法解决根本问题 建议检查netcore相关组件是否正确安装&#xff0c;如下&#xff1a; aspnetcore-runtime-3.1.32-win-x64 dotnet-hosting-3.1.32-win dotnet-runtime-3.1.…

两数相加(leetcode)

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

Intel VAAPI/QSV/oneVPL区别简介

一、常用视频加速接口汇总 libmfx就是Intel QSV. 二、VAAPI VAAPI (视频加速API&#xff0c;Video Acceleration API)包含一套开源的库(LibVA) 以及API规范, 用于硬件加速下的视频编解码以及处理&#xff0c;只有Linux上的驱动提供支持。由Intel主导&#xff0c;但是AMD&…

51单片机上面的IIC协议

1、什么是IIC协议 2、模拟IIC协议 51单片机上面是没有与IIC协议相关的寄存器的&#xff08;没有相关的硬件&#xff09;&#xff0c;不像串口可以配置对应的寄存器达到目的&#xff08;比如修改波特率9600 or 115200&#xff09;&#xff0c;要配置IIC只能够根据用户手册里面的…

未来课堂革命:OpenAI 发布 ChatGPT 使用指南,探索生成式 AI 如何重塑教育景观

随着新学期的来临&#xff0c;众多初登教师舞台的 00 后们&#xff0c;也完成了他们的第一个教师身份下的暑期生活。 对于开学的抵触情绪&#xff0c;不仅学生们普遍存在&#xff0c;许多 00 后的新晋教师们也同样感同身受。某种程度上&#xff0c;这些抗拒上班的年轻教师群体…

Java日期正则表达式(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于正则匹配&#xff0c;在项目实战中运用比较广泛 原先写过一版Python相关的&#xff1a;ip和端口号的正则表达式 1. 基本知识 对于日期的正则相对比较简单 以下是一些常见的日期格式及其对应的正则表达式示例&#xff1a; 年-月-日&a…

亚马逊的核心壁垒:物流

物流为美国电商市场渗透及格局的核心影响因素&#xff0c;也是亚马逊的核心壁垒所在。 从行业规模来看&#xff0c;美国电商渗透率低于中国&#xff0c;主要由于 两国地理及人口密度差异导致美国物流履约难度更大&#xff0c;此外美国更发达的实 体零售业和更为严苛的电商政策…

弹簧、质量的bode、nyquist与根轨迹图

在控制系统分析中&#xff0c;Bode图、Nyquist图和根轨迹图都是重要的工具&#xff0c;用于评估和分析系统的性能。这些系统的Nyquist图提供了最大的旋转&#xff0c;即它们在频率变化时表现出最大的相位变化。当Nyquist图完全位于虚轴上时&#xff0c;意味着系统的增益&#x…

代码解读:使用Stable Diffusion完成相似图像生成任务

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;作为内容生产重要的一部分&#xff0c;生成相似图像是一项有意义的工作&#xff0c;例如很多内容创作分享平台单纯依赖用户贡献的图片已经不够了&#xff0c;最省力的方法就是利用已有的图片生成相似的图片作为…

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

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

代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和

系列文章目录 目录 系列文章目录455.分发饼干贪心算法大饼干喂胃口大的&#xff08;先遍历胃口&#xff09;胃口大的先吃大饼干(先遍历饼干&#xff09;小饼干先喂胃口小的&#xff08;先遍历胃口&#xff09;胃口小的先吃小饼干&#xff08;先遍历饼干&#xff09; 376. 摆动序…