21 标准错误

标准输出重定向关闭无数据

下面的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{close(1);int fd = open("log.txt", O_WRONLY |O_CREAT | O_TRUNC, 0666);printf("hello printf\n");  //stdout数据会暂存在缓冲区//   fflush(stdout);close(fd);  //fd关了,数据无法刷新return 0;
}

关闭了1号文件,打开的文件成了1号,本来是行刷新,变为普通文件后就会全缓冲。将文件关了后数据无法刷新
只有主动刷新后才会出现数据
在这里插入图片描述

标准输出和标准错误

标准输出和标准错误正常情况下都是往显示器打印数据,但他们的区别在哪里?
下面的代码:

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{printf("hello printf 1\n");  //stdout数据会暂存在缓冲区fprintf(stdout, "hello fprintf 1\n");write(1, "hello write\n", 12);std::cout << "cout 1"<<std::endl;   perror("hello perror 2");fprintf(stderr,"hello fprintf 2\n");write(2, "hello write 2\n", 12);std::cerr << "cerr 2" << std::endl;return 0;
}

上面分别向这两个文件输出数据,正常运行没有区别
在这里插入图片描述

但当重定向到文件后就出现了差别
在这里插入图片描述

重定向后只有标准错误的信息打印了出来。1和2都对应的显示器文件,两个是不同的,同一个显示器文件被打开了两次,重定向只是更改了1的位置,2仍然是向显示器打印

一般而言,如果程序运行有问题,使用stderr或者cerr,常规的文本内容,可以用cout,stdout。这样可以将报错和常规输出的分开,单独查看

./test > log.txt 2>err.txt

这样就会将1和2的内容分开重定向到文件

在这里插入图片描述

如果想将两个内容都输出到一个文件可以这样写,将1的内容拷贝给2

./test > log.txt 2>&1

在这里插入图片描述

perror

perror是根据errno的值打印错误信息,上面的默认打印的是成功,errno在它的头文件中

在这里插入图片描述
可以手动修改这个值看看打印变化

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>int main()
{errno = 3;perror("hello perror 2");return 0;
}

在这里插入图片描述

errno会根据设置值打印不同的信息,所以有时候出错系统会设置这个值

自己实现perror

怎么知道每个错误是什么意思,可以参考strerror函数,这函数可以根据不同的错误码显示不同的信息
在这里插入图片描述

void myerror(char* msg)
{fprintf(stderr, "%s:%s\n", msg, strerror(errno));
}int fd = open("log.txt", O_RDONLY);if (fd < 0){myerror("open");return 1;}

当这个文件不存在时,会报错
在这里插入图片描述

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

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

相关文章

Xilinx Zynq UltraScale+ MPSoC无人机控制器

官方术语是无人驾驶飞行器&#xff08;UAV&#xff09;&#xff0c;这显然有点拗口&#xff0c;所以我们更喜欢说无人机。在过去的几十年里&#xff0c;无人机技术有了巨大的进步。我们为一个客户开发了一个无人机的飞行和视频控制器。 客户挑战 客户需要一种混合FPGA/CPU硬件&…

服务器停用,备份服务文件。

文章目录 引言I 文件备份1.1 数据库文件/证书1.2 redis1.3 nacosII JAVA流水线备份2.1 java构建2.2 镜像构建2.3 docker 部署2.4 子模块构建2.5 Dockerfile_prodIII VUE项目流水线备份3.1 Node.js 构建3.2 Dockerfile_prod

SqlServer 远程删除1000万数据需要多久?

删除速度和服务器的性能&#xff0c;删除的表是否有主外键等都有关系。 如果是全表数据删除&#xff1a;truncate table 表名 &#xff08;不管表多大&#xff0c;删除时间基本上是瞬间的&#xff0c;目前删除的最大的表数量级千万级&#xff09; 用delete语句删除&#xff…

是的,本科毕业八年,我考研了

今天&#xff0c;是一篇纯分享文。 是的&#xff0c;本科毕业八年&#xff0c;我考研了。 停更10个月&#xff0c;历时296天&#xff0c;我考研上岸了。 小伙伴们&#xff0c;好久不见。 一 发今年第一篇文章的时候刚处理完后续事宜&#xff0c;就简单说了句&#xff0c;后台…

MoCo v1(CVPR 2020)原理与代码解读

paper&#xff1a;Momentum Contrast for Unsupervised Visual Representation Learning official implementation&#xff1a;https://github.com/facebookresearch/moco 背景 最近的一些研究提出使用对比损失相关的方法进行无监督视觉表征学习并取得了不错的结果。尽管是受…

java算法:两个数字相加

首先看算法题描述&#xff1a; 1、给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 2、请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 3、你可以假设除了数字…

2024年认证杯SPSSPRO杯数学建模A题(第一阶段)保暖纤维的保暖能力全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 A题 保暖纤维的保暖能力 原题再现&#xff1a; 冬装最重要的作用是保暖&#xff0c;也就是阻挡温暖的人体与寒冷环境之间的热量传递。人们在不同款式的棉衣中会填充保暖材料&#xff0c;从古已有之的棉花、羽绒到近年来各种各样的人造纤维。不…

【CSS基础】10.过度动画transition和动画animation

1. transition过度动画 1.1 介绍 CSS trnasition提供了一种在更改CSS属性时控制动画速度的方法。 可以让CSS的属性变化称为一个秩序一段时间的过程&#xff0c;而不是默认的立即生效 比如在基础9中我们学到的trnaslate可以让一个元素移动&#xff0c;但瞬间就完成了 我们可…

Java基础知识总结(52)

&#xff08;1&#xff09;String类部分方法 public class StringDemo2 { public static void main(String[] args) {String domainName "https://www.bytecollege";//trim() 去除字符串前后的空格System.out.println(" xyz ".trim());//xyzSystem.ou…

【DM8】临时表空间

临时表分类 事务级临时表会话级临时表 临时表&#xff0c;可以像普通表一样插入、更新和删除数据临时表的DML操作产生较少的redo日志临时表支持创建索引&#xff0c;以提高查询性能在一个会话或事务结束之后&#xff0c;数据将自动从临时表中删除不同的用户访问相同的临时表&a…

简述框架和函数库的区别

框架和函数库在软件开发中各自扮演着重要的角色&#xff0c;但它们之间也存在明显的区别。以下是它们之间的主要差异&#xff1a; 定义与目的&#xff1a; 函数库&#xff1a;函数库是一组预先编写好的函数的集合&#xff0c;这些函数可以被开发人员在其应用程序中调用&#xf…

正则表达式简介

1. 基础字符 . 任意单个字符除换行* 任意字符包含空字符? 任意单个字符[]括号中的出现一次()模式{n,m}出现n-m次^开头$结尾| 或者\w 匹配任意单词\d 匹配数字\s匹配空白字符 2. BRE vs ERE BRE: basic regex expresion ERE: extended regex expression 两者区别在于一些特…

KDTree和Octree的区别

在PCL&#xff08;PointCloud Library&#xff09;中&#xff0c;KD 树&#xff08;KDTree&#xff09;和 Octree&#xff08;Octree&#xff09;都是用于高效搜索点云数据的数据结构&#xff0c;它们之间的主要区别在于其构建方式和搜索性能&#xff1a; KD 树&#xff08;KD…

吴恩达深度学习 (week3,4)

文章目录 一、神经网络概述二、神经网络的表示三、神经网络的输出四、多个例子的向量化五、向量化实现的解释六、深度学习激活函数七、激活函数导数八、神经网络的梯度下降法九、深度学习随机初始化十、上述学习总结1、第一题2、第二题3、第三题4、第四题5、第五题6、第六题7、…

关于Transformer的面试题

文章目录 前言1、Transformer模型1. 1 基本要点1.2 提升 2、BN和LN的区别和联系2.1 基本要点2.2 扩展 3、PreNorm和PostNorm的区别[链接](https://www.zhihu.com/question/519668254)4、Multi-head self-attention中为什么要用三个不同的矩阵 前言 Transformer大模型的一些问题…

【GEE实践应用】哨兵1号和2号数据叠加

目录 1.数据叠加代码 2.代码逐句解释 1.数据叠加代码 var geometry table; //table是我们提前导入的矢量数据 // 加载Sentinel-2影像 var sentinel2 ee.ImageCollection("COPERNICUS/S2").filterBounds(geometry) // geometry是你感兴趣区域的几何对象.filte…

Redis:发布和订阅

文章目录 一、介绍二、发布订阅命令 一、介绍 Redis的发布和订阅功能是一种消息通信模式&#xff0c;发送者&#xff08;pub&#xff09;发送消息&#xff0c;订阅者&#xff08;sub&#xff09;接收消息。这种功能使得消息发送者和接收者不需要直接建立连接&#xff0c;而是通…

商标没有去注册有哪些不好的影响!

有些商家咨询普推知产老杨&#xff0c;商标没有去注册有哪些不好的影响&#xff0c;其实对企业来说还有许多实际不利的影响&#xff0c;有时代价比注册一个商标要大很多。 想的商标名称没去注册商标&#xff0c;如果别人抢注拿下商标注册证&#xff0c;那就会涉及侵权&#xf…

工厂方法模式:解锁灵活的对象创建策略

在软件设计中&#xff0c;工厂方法模式是一种非常实用的创建型设计模式&#xff0c;它不仅提升了系统的灵活性&#xff0c;还简化了对象的创建过程。本文将详细探讨工厂方法模式的核心概念、实现方式、应用场景以及与其他设计模式的对比&#xff0c;旨在提供一份全面且实用的指…

磁悬浮鼓风机市场规模不断增长 我国行业发展面临挑战

磁悬浮鼓风机市场规模不断增长 我国行业发展面临挑战 磁悬浮鼓风机又称磁悬浮高速离心鼓风机&#xff0c;指基于磁悬浮技术制成的气体输送设备。磁悬浮鼓风机综合性能优良&#xff0c;属于高效节能磁悬浮动力装备&#xff0c;在众多领域需求旺盛。未来随着国家节能环保政策逐渐…