标准I/O

news2024/11/19 15:34:08

1.标准I/O介绍

文件基础
概念:
一组相关数据的有序集合

文件类型:
常规文件 r
目录文件 d
字符设备文件 c 键盘,鼠标
块设备文件 b U盘,SD卡等
管道文件 p
套接字文件 s
符号链接文件 l (类似于快捷方式)

系统调用与库函数:
系统调用:是用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的,进入内核后,不同的系统调用会找到相应的内核函数,这些内核函数被称为系统调用的“服务例程”。
库函数:函数库是由系统建立的具有一定功能的函数的集合
在这里插入图片描述

  1. IO的概念
    I input 输入设备 比如键盘鼠标都是Input设备
    O output 输出设备 比如显示器
    优盘,网口,既是输入也是输出

  2. 系统调用和库函数
    系统调用就是操作系统提供的接口函数.
    如果我们把系统调用封装成库函数就可以起到隔离的作用,提供程序的可移植性。
    Printf就是库函数然后调用了系统调用才在显示器上显示字符。

  3. 流的概念
    就是数据的流,在程序中就是一个结构体。
    FILE:标准IO用一个结构体类型来存放打开的的文件的相关信息,标准IO的所有操作都是围绕FILE来进行
    流stream:FILE又被称为流,

  4. Windows 和linux的换行符区别
    Windows是\r\n
    Linux 是\n

  5. 缓冲区的概念
    为了减少操作IO设备的次数,提高运行效率,在内存里面设置的缓冲区,
    全缓冲:缓冲区满才输出
    行缓冲:遇到换行符输出
    无缓冲:数据直接写入文件,流不进行缓
    stdin / stdout / stderr
    stdin/stdout 默认是行缓冲,stderr没有缓冲

三种标准IO :
在这里插入图片描述

标准错误:无缓冲
perror 库函数 头文件stdio.h
strerror 库函数 头文件 errno.h string.h
perror和strerror 功能:打印系统的错误描述(注意:是系统错误,不是你自己代码错误)
代码如下:

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main(int argc,char * argv[]){
	FILE *fp = NULL;
	if((fp = fopen("./1.txt", "r")) == NULL){
		perror("fopen");
		printf("%s",strerror(errno));
	}else{
		printf("fopen success!\n");
	}
	return 0;
}

2.缓存区代码验证

#include <stdio.h>
#include <unistd.h>
int main()
{
//	printf("hello world");
	printf("hello world\n");
	while(1){
		sleep(1);
	}
	return 0;
}


在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <unistd.h>
int main()
{
	int i = 0;
	for(i = 0;i < 1025;i++){
		printf("a");
	}
	while(1){
		sleep(1);
	}
	return 0;
}

在这里插入图片描述

前后两次实验,在没加换行符时不打印,加换行符后打印hello world,说明stdout(标准输出)是行缓冲,而且缓冲区大小是1K

3.文件的打开与关闭

通俗的来说,文件打开就是占用资源,关闭就是释放资源

3.1 文件的打开

  1. 文件的打开函数
    FILE *fopen (const char *path, const char *mode);
    Path: 普通文件当前路径不需要加目录,其他要使用完整的路径
    Mode:r / r+ / w / w+ / a / a+
    返回值:出错返回NULL,所以使用fopen函数必须判断是否为空
    在这里插入图片描述
mode描述
“r” 或 “rb”以只读方式打开文件,文件必须存在。
“r+” 或 ”r+b”以读写方式打开文件,文件必须存在。
“w” 或 “wb”以只写方式打开文件,若文件存在则文件长度清为0。若文件不存在则创建。
“w+” 或 “w+b”以读写方式打开文件,其他同”w”。
“a” 或 “ab”以只写方式打开文件,若文件不存在则创建;向文件写入的数据被追加到文件末尾。
“a+” 或 “a+b”以读写方式打开文件。其他同”a”
#include <stdio.h>
#include <unistd.h>

int main(int argc,char * argv[]){
	FILE *fp = NULL;
	if((fp = fopen("./1.txt", "r")) == NULL){
		perror("fopen");
	}else{
		printf("fopen success!\n");
	}
	return 0;
}

3.2 文件的关闭

函数原型:int fclose(FILE *stream)
fclose()调用成功返回0,失败返回EOF(-1),并设置errno
流关闭时自动刷新缓冲中的数据并释放缓冲区,比如:常规文件把缓冲区内容写入磁盘
当一个程序正常终止时,所有打开的流都会被关闭
fclose()函数的入参stream必须保证为非空,否则出现断错误。

linux@linux:~/level4$ ./fopen 
fopen: No such file or directory
No such file or directory
linux@linux:~/level4$ touch 1.txt
linux@linux:~/level4$ ./fopen 
fopen success!
close success!
linux@linux:~/level4$ cat fopen.c 
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main(int argc,char * argv[]){
	FILE *fp = NULL;
	if((fp = fopen("./1.txt", "r")) == NULL){
		perror("fopen");
		printf("%s\n",strerror(errno));
	}else{
		printf("fopen success!\n");
		if(fclose(fp)==0){
			printf("close success!\n");
		}
	}
	return 0;
}

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

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

相关文章

【Lua】Lua基础语法

1 Lua 简介 Lua 是一个小巧的脚本语言&#xff0c;用标准C语言编写而成&#xff0c;由巴西里约热内卢天主教大学的 Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 三人于 1993 年开发&#xff0c;设计目的是为了灵活嵌入应用程序&#xff0c;实现灵活…

基础IO——缓冲区

文章目录1. 缓冲区理解1.1 缓冲区在哪里1.2 刷新策略2. 标准输出和标准错误2.1 模拟perror1. 缓冲区理解 什么是缓冲区呢&#xff1f; 缓冲区的本质&#xff1a;就是一段内存 为什么要有缓冲区呢&#xff1f; 大家在日常生活中&#xff0c;如果我们想寄东西给朋友&#xff0c…

ELK集群部署---LogStash,Filebeat的部署

1. 环境规划: 主机名IP地址角色node1192.168.56.111 ElasticSearch(master) Zookeeper Kafka node2192.168.56.112 ElasticSearch(slave) Kibana Zookeeper Kafka node3192.168.56.113 ElasticSearch(slave) Zookeeper Kafka node4192.168.56.114 Logstash Filebeat 2. nod…

vue 实现类似甘特图大屏效果

最近在做大屏展示&#xff0c;其中一个需求是展示生产过程中投料情况&#xff0c;效果类似甘特图。 思路&#xff1a;1.先得到整个过程的开始时间startTime和结束时间endTime。计算出整个过长经历的时长。 2.计算横向坐标的开始时间start和结束时间end&#xff0c;坐标的开始时…

五分钟了解GRE是什么,四信GRE相关应用推荐

随着互联网新技术的发展以及智能化水平的提高&#xff0c;各企业对实时数据传输的需求也在不断提升&#xff0c;企业愈发重视数据中心的建设&#xff0c;各类虚拟网络技术相继被引入。今天&#xff0c;我们重点了解下云端“借道”鼻祖&#xff0c;善于“包装”的GRE&#xff0c…

新品上市|四信LTE Cat.1无线数传终端 推进中低速蜂窝典型应用

当前&#xff0c;物联网作为新型信息基础设施&#xff0c;已成为推动制造业、零售业、金融业、服务业等行业数字转型、智能升级、融合创新的重要支撑。《“十四五”信息通信行业发展规划》提出&#xff0c;要推进移动物联网全面发展&#xff0c;推动存量2G/3G物联网业务向NB-Io…

SSM医院病历

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

CentOS7安装git

CentOS7安装git前言一、git介绍二、使用yum安装git1.安装git2.查看git版本3.移除git三、源码包安装git1.安装依赖2.下载源码包3.解压4.git安装5.查看git版本总结前言 CentOS7安装git&#xff0c;刚开始使用yum安装git&#xff0c;发现安装的版本默认是1.8.3.1&#xff0c;如果…

yaml 资源配置清单使用详解——k8s声明式资源管理

目录 一、kubectl 操作 yaml 文件 1.应用yaml文件指定的资源 2.删除yaml文件指定的资源 3.查看资源的yaml格式信息 4.查看yaml文件字段说明 5.修改yaml文件指定的资源 &#xff08;1&#xff09;离线修改 &#xff08;2&#xff09;在线修改 二、编辑yaml配置清单生成…

Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发?

摘要&#xff1a;为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求&#xff0c;华为IoT边缘提供ModuleSDK&#xff0c;用户可通过集成SDK让设备以及设备数据快速上云。本文分享自华为云社区《【华为云IoTEdge开发实战】Java开发如何通过IoT边缘ModuleSDK进…

字符串函数剖析(2)

最慢的步伐不是跬步&#xff0c;而是徘徊&#xff1b;最快的脚步不是冲刺&#xff0c;而是坚持。——《人民日报》 字符串函数的重点&#xff1a; 文章不长&#xff0c;是为了让你一点点消化所有内容&#xff1a; 1.strncpy函数的脾气 1.1模拟实现strncpy函数 2.strncmp函数…

马化腾说视频号是全公司希望

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 这应该是&#xff0c;腾讯这家公司创办以来&#xff0c;马化腾最焦虑也最外露的一次讲话了&#xff0c;对于腾讯内部的大会&#xff0c;马化腾先生作了重要发言&#xff0c;因其在内部员工大会的讲…

边界网关协议BGP(计算机网络-网络层)

目录 因特网分层路由 分层路由和自治系统 边界网关协议 BGP BGP 的设计目标 BGP 发言人 路径向量算法 BGP 协议的要点 因特网分层路由 规模问题 路由选择算法将很难收敛 交换的路由信息会占用大量的带宽 管理问题 许多单位不愿意外界了解自己单位网络的具体细节 希望采用…

新能源汽车补贴即将取消,汽车金融的促进作用逐渐显现

中国新能源汽车产业发展强劲。自2015年起&#xff0c;新能源汽车销量连续7年位居世界第一。特别是2021年以来&#xff0c;在政策支持、技术驱动、消费者接受度提升等多重因素共同影响下&#xff0c;中国新能源汽车市场实现了超越式的发展。2022年1-10月&#xff0c;新能源汽车批…

这份京东T8级程序员整理的新版Spring Cloud手抄本,把微服务讲透了

近几年&#xff0c;微服务可谓是红的发紫&#xff0c;仿佛一时间所有系统无不以拆分为荣&#xff0c;以构建烟囱型应用为耻。最近&#xff0c;一位朋友刚好赶上公司基础服务的微服务化项目&#xff0c;加上之前又主动学习了不少微服务的内容&#xff0c;便主动请缨参与到项目里…

前端实现网站悼念【灰色效果】几行代码轻松解决

博主介绍 &#x1f4e2;点击下列内容可跳转对应的界面&#xff0c;查看更多精彩内容&#xff01; &#x1f34e;主页&#xff1a;水香木鱼 &#x1f34d;专栏&#xff1a;CSS3 文章目录 简介&#xff1a;这是一篇有关【前端实现网站悼念【灰色效果】几行代码轻松搞定】的文章&…

遗传编程(Genetic Programming, GP)

1. 绪言 1.1 遗传编程概述 \quad\quad自计算机出现以来&#xff0c;计算机科学的一个重要目标是让计算机自动进行程序设计&#xff0c;即只要明确地告诉计算机要解决的问题&#xff0c;而不需要告诉它如何去做&#xff0c;遗传规划便是在该领域内的一种尝试。它采用遗传算法的…

IDEA反编译Jar包

一.安装Java Bytecode Decomplier插件 (1) File–>Settings–>Plugins &#xff0c;搜索 Java Bytecode Decomplier 插件 (2) 查看安装插件的路径 File->Import Setting 注意&#xff1a;如果你的插件里面搜不到 Java Bytecode Decomplier&#xff0c;但是能搜到…

spring之Bean的生命周期

文章目录一、Bean的生命周期之五步1、准备User类2、spring配置文件3、测试类4、运行结果二、Bean的生命周期之七步1、实现BeanPostProcessor类2、配置文件3、运行结果&#xff1a;三、Bean的生命周期之十步1、点位12、点位23、点位3四、Bean的作用域一、Bean的生命周期之五步 …

Coinbase或在不久使用Zebec发放工资,并对Web3支付赛道发展寄予厚望

流支付协议Zebec Protocol目前已经完成了生态向BNB Chian上的迁移&#xff0c;目前得到了以PancakeSwap为代表的头部生态的支持。在12月20日Zebec生态在PancakeSwap官方的支持下&#xff0c;经过社区投票&#xff0c;ZBC通证上线了糖浆池&#xff0c;并有望继续上线Binance。而…