zlog 是一个高性能、线程安全、灵活、概念清晰的纯 C 日志函数库。 干货福利,第一时间送达!...*c; rc = zlog_init("/etc/zlog.conf"); if (rc) { printf("init failed\n"); return...-1; } c = zlog_get_category("my_cat"); if (!...(c, "hello, zlog"); zlog_fini(); return 0; } 4.编译、然后运行!...$ gcc -c -o test_hello.o test_hello.c -I/usr/local/include $ gcc -o test_hello test_hello.o -L/usr/local
注意:下面的步骤都是要基于服务端&客户端已经能实现内网穿透,如果没有,请移步:Linux环境搭建frp实现内网穿透 ---- 准备工作: 使用electron-vue框架,跑起来项目, 参考地址: https...://simulatedgreg.gitbooks.io/electron-vue/content/cn/ 跑起来长这样 image-8ce1b4df8d9d46dd8423c075c3d301cc.png.../frpc -c ./frpc.ini 这个命令应该自动完成。 实现方法 需要读写frp/frpc.ini文件里的内容 用到nodejs里的ini, fs, path模块。...child_process文档 ---- 具体代码 把解压后的frp文件夹放在electron-vue项目里 image-3e97466ba52748a8874c5397eff67487.png 在主进程里.../frpc -c .
z-log 地址 https://github.com/HardySimpson/zlog z-log是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 ...由难易编写 zlog有这些特性: syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见为什么log4j的概念模型是错误的。 ...用户自定义等级 多线程和多进程环境下保证安全转档 精确到微秒 简单调用包装dzlog(一个程序默认只用一个分类) MDC,线程键-值对的表,可以扩展用户自定义的字段 自诊断,可以在运行时输出zlog...github.com/bmanojlovic/zlog cmake版本:https://github.com/lisongmin/zlog windows版本: https://github.com/...特性: 非常快只包含头文件无需依赖第三方库支持跨平台 - Linux / Windows on 32/64 bits支持多线程可对日志文件进行循环输出可每日生成日志文件支持控制台日志输出可选的异步日志支持日志输出级别可自定义日志格式
,指定 c++ 的编译工具 ;CMAKE_STAGING_PREFIX ,交叉编译变量,指定安装到主机上的路径 ;CMAKE_PREFIX_PATH,交叉编译变量,指定要编译的文件所在的安装位置;zlog...在 install 目录下,执行以下指令安装 zlog 依赖库。...$ git clone -b 1.2.15 https://github.com/HardySimpson/zlog.git$ cd zlog $ make CC=arm-linux-gnueabihf-gcc...-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_STAGING_PREFIX...-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_STAGING_PREFIX
= false; global.zlog = zlog; 然后在我们的主线程加入以下代码: zlog.info('这是个提示日志'); zlog.warn('这是个警告日志'); zlog.error...如果想禁止Console中输出可以设置对应项为false zlog.transports.file.level = true; zlog.transports.console.level = false...('zlog'); const isDevelopment = !...app.isPackaged; window.zlog = zlog; function get_log_func(m_args) { let temp_arr = []; for (...(...args) } }, error: function (...args) { if (zlog) { zlog.error
日志简述 C/CPP的日志工具也很多,在之前的项目中用过的有以下几个:zlog、spdlog、log4cpp等。...; zlog使用是挺方便,也很快,就是有上面两个问题,所以后来考虑换掉。...相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。....); 日志内容可包含级别、时间戳、线程信息、进程信息等; 日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式; 支持多种操作系统(RT-Thread、UCOS、Linux、Windows...使日志可以更加容易的存储在 非文件系统中,并具有历史日志检索的功能; [ ] 配置文件:文件系统下的配置文件; [x] 文件转档:文件系统下支持文件按容量转档,按时间区分; [ ] 日志助手:开发跨平台的日志助手,兼容Linux
自定义日志(推荐) 这里实现了控制台和文件日志 /utils/zlog/zlog.go package zlog import ( "fmt" "os" "path/filepath" "runtime...= nil { return } return } 调用 //先调用这个方法 可以不调用 zlog.Init() //设置日志的输出类型 可以不调用 zlog.SetLogType(zlog.Console...) //打印日志的地方这样调用 zlog.LogDebug("测试日志") zlog.LogDebug("insert success, last id:%d\n", 123) 和Gin结合 基本封装...gin.DefaultWriter = io.MultiWriter(file) 效果是一样的 router := gin.Default() router.GET("/test", func(c...*gin.Context) { c.String(200, "test") }) _ = router.Run(":8080") } 运行后上面的程序,会在程序所在目录创建
} q str}}DHC-APP>w ##class(Util.BitUtil).LogicalToDisplay(101000)00010001010100011查找设置位此方法使用$Zlog...ClassMethod FindSetBits(bitint As %Integer){ s bits = "" while (bitint '= 0) { s bit = $zlog...(bitint) \ $zlog(2) s bits = bit _ " " _ bits s bitint = bitint - (2 ** bit) }...= $zboolean(a, b, 7)do ##class(User.BitInt).LogicalToDisplay(c)101110111使用 $zboolean 函数的选项 1 对位执行逻辑与:...User.BitInt).FindSetBits(bitint)2 5 10set bitstring = $factor(bitint)zwrite bitstring bitstring=$zwc(128,4)_$c(
创建C++编译环境 安装VIM PLUS 为什么安装VIM PLUS: 可以为我们提供良好的编译环境,高亮代码,智能提示等等~ git clone https://github.com/chxuan...LLDBLLDB(Low Level Debug)是Apple正在迁移的LLVM工具套件(包括Clang)的一部分具有REPL (Read-Eval-Print Loop,交互式解释器)、C++ 和 Python...,int *b); VimPlus如图所示: g++ -g main.cpp func.cpp -o out 我们详细描述一下这条指令的执行过程 g++ main.cpp 相当于g++ -c
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171788.html原文链接:https://javaforall.cn
Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C进行一系列扩展,以增强标准C的功能。...open: generic_file_open, release: ext2_release_file, fsync: ext2_sync_file, }; 但是,Linux...C99已经支持__func__宏,因此建议在Linux编程中不再使用__FUNCTION__,而转而使用__func__: void example(void) { printf("This...Linux内核编程时常用的likely()和unlikely()底层调用的likely_notrace()、unlikely_notrace()就是基于 __builtin_expect(EXP,C)实现的...: gcc -c test.c 如果使用“-ansi–pedantic”编译选项,编译会报警: gcc -ansi -pedantic -c test.c test.c:3: warning: ISO
---恢复内容开始--- 今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去。。。...3、IDE(集成开发环境:集编辑、编译、调试等功能于一身的工具) Kylix:号称Linux下的dephi; Kdevelop RHIDE:类似与Turbo C++ 4、编译器:gcc...假如用户在安装过程中少装了这些包,就无法编译c源程序,这时候可以通过rpm包来迅速安装Linux的C开发语言环境的。...7、Linux下C程序开发过程: (1)使用vi工具编辑写源程序; (2)保存为*.c; (3)使用gcc编译成二进制可执行文件; (4)....**argv) { printf("Hello Linux\n"); return 0; } 9、c程序组成 对于一个c程序,安装完成后可以分成三个部分
今天开始根据Linux C编程相关视频的学习所做的笔记,希望能一直坚持下去。。。...1、开发环境的构成 编辑器:VI; 编译器:选择GNU C/C++编译器gcc; 调试器:应用广泛的gdb; 函数库:glibc ; 系统头文件:glibc_header; 2、在安装Linux时需要注意事项...假如用户在安装过程中少装了这些包,就无法编译c源程序,这时候可以通过rpm包来迅速安装Linux的C开发语言环境的。...7、Linux下C程序开发过程: (1)使用vi工具编辑写源程序; (2)保存为*.c; (3)使用gcc编译成二进制可执行文件; (4)....{ printf(“Hello Linux\n”); return 0; } 9、c程序组成 对于一个c程序,安装完成后可以分成三个部分: 可执行文件;包含文件;库文件 比如用rpm安装的MySQL
在上一篇笔记中有分享Linux下的vi/vim编辑器的使用方法(【Linux笔记】Vi/Vim编辑器),现在我们就可以使用vi/vim编辑器编写C代码了。那么写完代码该怎么进行编译呢?...首先,使用命令gcc -v查看当前的Linux发行版是否有安装gcc编译器(PS:本文使用的Linux发行版是红帽6): ? 使用vi/vim编辑器写代码并保存为hello.c: ?...以上就是在Linux下编译C程序的基本方法,适用于源文件不多的情况。后续的笔记中还会分享其他编译方法,欢迎持续关注!如果你觉得对你有用的话,麻烦帮忙点个赞。...在Linux下进行C语言编程的学习可能会增加学习的成本,但是从长远来看仍然是有必要的。...若不想安装Linux系统,也想适应一下Linux环境,则可参考往期笔记:【C语言笔记】Windows下体验Linux环境。
1、线程创建 在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。...在Linux中,通过函数pthread_create()函数实现线程的创建: int pthread_create(pthread_t *thread, const pthread_attr_t *attr...2、线程挂起 在上述的实现过程中,为了使得主线程能够等待每一个子线程执行完成后再退出,使用了free()函数,在Linux的多线程中,也可以使用pthread_join()函数用于等待其他线程,函数的具体形式为
套接字描述符 首先会先到的是文件描述符,对Linux一切皆文件的哲学又多懂了一点儿点儿。 套接字是通信端点的抽象。与应用程序使用文件描述符一样,访问套接字需要使用套接字描述符。...Linux系统是小端字节序。 2.2 地址格式 地址确定了特定通信域中的套接字端点,地址格式与特定的通信域相关。...Linux中,sockaddr_in定义如下: struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct...注意:linux的man命令可以查看api的详细说明,而且还有例子,也挺不错的。 4....Linux Socket Server 与 Client 例子 个人觉得这只是套接字的入门,如果一个服务器要连接多个客户端呢?以后有机会和大家一起分享下select的套接字用法。
今日主要来阐述一下最近比较火的《C++那些事》开源项目,这个项目是我在研一下,研二上那个阶段整出来的,当时目标就是为了满足自己找工作的需求而写的,所以大家如果找工作看我的C++那些事,是非常有帮助的!...本文呢,就是对C++那些事的详细阐述以及阐述每一块怎么学,我是怎么学的,C++那些事未来要做什么,以及面试重难点,职业发展等。...经常会被问到,这一块的内容对应于我的《C++那些事》当中的C++2.0新特性,这一块的学习我是根据侯捷老师的b站课程(仓库上学习资料可见)以及后面推荐的书籍学习的。 强烈推荐下面这本书的英文原版!...4.基础素质 上述4大部分是你去学习C++入门及进阶的必走之路,cpp学习是一条苦海之路,你需要一些过硬的基础素质,这些在上述是没有提到的,下面一一列举。此处对应于Linux C++后台开发人员。...Linux基础 基础命令:例如:ls,cd等 vim使用:查找、替换、删除等 网络故障排查及抓包:例如:netstat、tcpdump等 Gdb调试、Gcc/G++ 操作系统 进程 线程 锁 数据库(
都是LINUX下的一个打开的设备描述符。内核通过这个描述符进行I/O操作。进行I/O操作就有一个性能问题,这个性能问题在于两个条件,一个条件是对同一个FD,有多个客户进行操作时如何更好的排队。...但是LINUX比较搞,它是上层用SELECT,实际上底层还是用的POLL....在LINUX下实际上POLL性能比SELECT要高一点,POLL也是监视FD集合,不过将这个FD集合单独使用一个数据结构pollfd. struct pollfd { int...是LINUX内核在2.6之后为处理大量客户端的socketFd而改进的poll,它也可以称之为select/poll的增强版本。...这里有两个关键改进,一个相对于select时FD_SETSIZE无限制,它实际上就是LINUX能够打开的FD的最大数量,通常可以cat /porc/sys/fs/file-max来设制或用ulimit
/a.out 多个文件分而治之 //声明 # include “max.c” # 不声明,会发生警告信息 $ gcc max.c hello.c -o main.out # 声明 $ gcc hello.c...头文件与函数定义分离 不经常变动的函数 生成静态库 $ gcc -c max.c -o max.o # hello.c 声明去掉 $ gcc max.o hello.c # 可以将文件写为 头文件 $...gcc max.o min.o hello.c Makefile # 注释 hello.out:max.o min.o hello.c gcc max.o min.o hello.c...-o hello.out max.o:max.c gcc -c max.c min.o:min.c gcc -c min.c 指针与内存 gdb 工具 $ gcc -g...main.c -o main.out $ gdb .
change_comm_n=0 new_comm="" change_comm="" [ -f ${file_name} ] || touch ${file_name} for i in $(compgen -c)
领取专属 10元无门槛券
手把手带您无忧上云