C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

news/2025/1/12 17:09:38/

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。
其教学视频见:[C++高级教程]从零开始开发服务器框架(sylar)

上一篇:C++服务器框架开发4——日志系统logger/.cpp与.cc

C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

  • 目前进度
  • IO类(3种stream)
    • iostream:控制台输入输出。
    • stringstream:string的输入输出
    • fstream:文件相关的输入输出
  • 双感叹号

目前进度

目前学习到第三个视频,视频up对log.h中的logAppender的两个子类进行了定义。
要点:

  1. log.h中的LogAppend类,声明了1个m_formatter成员(因为可能数据格式会有多种,所以定义了这个成员)、1个设置m_formatter的函数setFormatter、1个获得m_formatter的函数getFormatter。

在这里插入图片描述

  1. 导入了两个头文件。
    :这里的#include <stringstream>应该是写错了,应该是#include <sstream>
    在这里插入图片描述

  2. log.h中的输出到控制台的Appender:stdoutLogAppender与输出到文件的Appender:FileLogAppender。其中,后者有成员变量,分别是文件名m_filename、和文件流m_filestream。还有一个reopen函数。
    在这里插入图片描述

  3. log.cc中对几个函数做了定义。其中,从reopen函数的定义可以看到,如果文件被打开了,则先关闭,然后再打开。这个的返回值有双感叹号,下一小节会介绍是什么意思。

在这里插入图片描述

IO类(3种stream)

参考自文章1和文章2

iostream:控制台输入输出。

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include <iostream>
#endif int main() {int a;std::cin >> a;//从控制台接收输入并保存在a中std::cout << a;//把a的值输出到控制台                                   //sp不再持有任何指针(空指针)return 0;
}

输入了1,返回来1
在这里插入图片描述

stringstream:string的输入输出

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include<iostream>
#include<sstream>//上面图片2中up写错了,应该导入sstream而不是stringstream
#include<string>
#endif int main() {std::string b="6789";std::istringstream a(b); //将a和string类型的b相关联std::string c;while (a >> c) //a从b中读取东西并保存在c中(从a往c“扔”东西)std::cout<<a.str(); //调用str()函数将a的内容输出看看std::ostringstream d;d << "abcdefg"; //将字符串保存到d中(“扔”到d里面)std::cout << d.str(); //调用str()函数将d的内容输出看看return 0;
}

在这里插入图片描述

fstream:文件相关的输入输出

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include<iostream>
#include<fstream>
#include<string>
#endif int main() {// writing on a text filestd::ofstream out("out.txt");std::cout << !!out << std::endl;if (out.is_open()){out << "This is a line.\n";out << "This is another line.\n";out.close();std::cout << "Finished writing" << std::endl;}// reading a text filechar buffer[256];std::ifstream in("test.txt");std::cout << !!in << std::endl;if (!in.is_open()){std::cout << "Error opening file"; exit(1);}while (!in.eof()){in.getline(buffer, 100);std::cout << buffer << std::endl;}return 0;
}

在这里插入图片描述

在这里插入图片描述

双感叹号

日志系统中的reopen函数最后将ofstream流加了双感叹号作为返回值,我在上面关于fstream的代码中直接将他输出到控制台,可以看到,正常打开的话,会输出1。

双感叹是为了将变量值转换为逻辑值,因为非零是true,零为false,所以用双感叹号就可以实现这一点。单感叹号和双感叹号的效果如下:

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include<iostream>#endif int main() {//取反std::cout << !(0) << std::endl;std::cout << !(1) << std::endl;//非零为1,零为0std::cout << !!(0) << std::endl;std::cout << !!(2) << std::endl;return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/120917.html

相关文章

LT8668EX,LCD主控芯片,HDMI To 4-Port LVDS/RGB,4K*2K,HDMI to LVDS/RGB

型号&#xff1a;LT8668EX 品牌&#xff1a;Lontium 功能&#xff1a;LCD主控芯片 -输入兼容性&#xff1a;Type C/DP/HDMI/MHL/VGA -输出兼容性&#xff1a;4路LVDS/RGB接口&#xff1a;IIC 分辨率&#xff1a;4K*2K 电源&#xff1a;1.8/3.3V 封装&#xff1a;LQFP128 应用&a…

HDMI1.4转RGB/LVDS/BT656/601/1120 LT8619C 免费提供全套开发资料加技术支持 龙迅Lontium

品牌&#xff1a;龙迅Lontium 型号&#xff1a;LT8619C 功能&#xff1a;HDMI1.4 to RGB/LVDS/BT656/601/1120 分辨率&#xff1a;4K2K 封装&#xff1a;QFN76 描述&#xff1a;LT8619C是一种基于ClearEdge技术的高性能HDMI/双模DP接收芯片&#xff0c;符合HDMI1.4规范。TTL输出…

Gscoolink GSV2015 HDMI接口芯片 可替代IT68051 IT68052

GSV2015是100%纯国产产品 GSV2015 可替代IT68051 IT68052 HDMI2.0 Receiver&#xff0c;音频分离和Downscaling&#xff0c;同时支持LVDS和TTL接口&#xff0c;支持HDMI2.0 HDCP2.2/1.4。 目标应用&#xff1a;音视频采集卡&#xff0c;视频矩阵&#xff0c;及各种视频接入相…

龙梦迷你电脑福珑2.0通过手机USB共享网络联网

当房间里没有有线网络的时候&#xff0c;龙梦迷你电脑怎么联网&#xff1f;今天成功实现联网。方法如下所示。一个有流量的手机&#xff0c;手机具有USB共享网络功能。一根数据线&#xff0c;一端是手机接口&#xff0c;例如type-C接口&#xff0c;微USB接口&#xff0c;另一端…

龙迅LT8618SX,RGB/BT656/BT1120转HDMI,免费提供技术支持

1. 描述 LT8618SX 是炙腾的低功率版本 HDMI 发射器&#xff0c;基于清除边缘TM 技术。它支持 24 位色深 HDMI 1.4&#xff08;高清多媒体接口&#xff09;规范。它们完全向后兼容隆泰的第一代 HDMI 发射器 LT8618EX。 LT8618SX 是一款高性能、低功耗器件&#xff0c;专为高清数…

龙讯|LT8912B MIPI DSI转LVDS/HDMI/MHL

现在很多平台缺少HDMI输出&#xff0c;高通平台多型号只有MIPI信号的输出&#xff0c;终端要接HDMI的设备&#xff0c;LT8912B应运而生。 LT8912B是一颗MIPI DSI转LVDS/HDMI的视频信号转换芯片&#xff0c;应用图如下&#xff1a; ​ 1.概述: Lontium LT8912 MIPIDSI至LVDS和HD…

悦灵犀-全新的智能AI工具

最近一段时间&#xff0c;人工智能再次成为人类创新的焦点&#xff0c;不得不说&#xff0c;人工智能正在以一种全新的方式改变人们的生活&#xff0c;这是一个以大模型为核心的人工智能新时代&#xff0c;大模型的出现让千行百业将迎来新的机遇。 悦享星光作为国内高新技术企…

【STM32】——迷你示波器

前言 目前网上已经有挺多开源STM32示波器的项目&#xff0c;整合了一下网上的资源&#xff0c;自制了一款成本极低的基于STM32F103C8T6&#xff08;某宝二十几RMB&#xff09;示波器&#xff0c;成本控制在40RMB以内&#xff0c;当然&#xff0c;用正版C8T6效果更好&#xff0c…