
Linux开发
tobealv
这个作者很懒,什么都没留下…
展开
-
什么是wall clock time
在一些系统调用中需要指定时间是用CLOCK_MONOTONIC还是CLOCK_REALTIME,以前总是搞不太清楚它们之间的差别,现在终于有所理解了。 CLOCK_MONOTONIC是monotonic time,而CLOCK_REALTIME是wall time。 monotonic time字面意思是单调时间,实际上它指的是系统启动以后流逝的时间,这是由变量ji原创 2016-10-14 09:30:25 · 12179 阅读 · 0 评论 -
spdlog字符串
const。原创 2023-12-06 09:28:23 · 611 阅读 · 0 评论 -
linux查看程序依赖的动态库
明明Proj程序是用Qt5编译出来的,看起来它却找Qt4库。因为Proj用的某so还是用Qt4编译的,这个错误实际上不是针对Proj程序而是这个so报的,将这个so用Qt5编译就可以了。原创 2015-02-07 10:59:04 · 1061 阅读 · 1 评论 -
jsoncpp的使用
include的头文件和链接库文件应当用同一个版本的,否则就可能报这个错误。原创 2023-08-19 08:57:59 · 470 阅读 · 0 评论 -
Linux异步和非阻塞
一般来说使用select和poll结合非阻塞的文件指针可以对应大部分情况,但是某些时候 需要使用异步的文件指针。比如:如果一个函数处理数据,但是处理时间很长,在其处理的时候 我们需要运行这个函数的进程及时响应网络事件或者内核信号,这时就需要将其置为异步。标记,该标记会改变read,write和同类函数的行为,使得在fd还不能IO时立即返回而不是hang住。标记,该标记决定fd可以IO时进程是否会收到SIGIO和SIGPOLL信号。异步: 使得拥有文件指针的进程或者进程组能够立刻收到内核的SIGIO信号。原创 2023-06-08 08:45:41 · 1158 阅读 · 0 评论 -
Linux进程相关常用函数
int GetSelfProcessName(char *name, int len){ char path[1024]; memset(path, 0, sizeof(path)); if(readlink("/proc/self/exe", path, sizeof(path) - 1) <= 0) { return 0; } char *pName = strrchr(path, '/' ); if (pName != NULL && path + s.原创 2022-04-24 14:48:08 · 2264 阅读 · 0 评论 -
Linux读写命名管道
int WriteCommuData(const char *port, const char *data){ int res; char fifoName[64]; static int fifo_fd = -1; static char oldPort[32] = {'\0'}; int len, wrote; if (port == NULL || strlen(port) <= 0 || data == NULL || (len = strlen(data)) <= 0.原创 2022-02-15 16:59:56 · 615 阅读 · 0 评论 -
linux读取ini配置文件
linux读取配置文件(C语言版) - comeby - 博客园原创 2022-01-27 17:36:45 · 3558 阅读 · 0 评论 -
GCC过滤特定类型警告的方法
增加no-例如-Wunused-function是打开了unused-function类型警告。-Wno-unused-function则是关闭了unused-function类型警告。原创 2021-09-28 13:45:11 · 1680 阅读 · 0 评论 -
关于条件变量的理解
一般情况下,如果互斥量保护的对象不呈现多种状态值,那么用互斥量进行保护就足够了。但是,假如保护的对象呈现多种状态值(即条件),而且某线程不仅仅需要等到该对象并且还要检测该对象当前是某个状态值,该线程才继续向下执行,在这种情况下,该线程就不得不周期性的加锁、判断对象状态值、解锁(不能一直加锁,因为总得给其它线程机会以改变对象状态值),这个动作显然是无谓的浪费资源。条件变量就是为解决这个问题设原创 2016-09-09 19:48:28 · 509 阅读 · 0 评论 -
线程特定数据TSD及其实现原理
引言: 单线程C程序有两类基本数据:局部数据和全局数据。对于多线程C程序,添加了第三类数据:线程特定数据 那么为什么要引入线程特定数据呢?试想如果你的一个线程里面嵌套调用了很多函数,而你又想在这些函数之间使用一个 公共的变量,如果在单线程C中,我们是不是就要声明一个全局变量了呢?是的。但是我们想使声明的这个全局变量 只属于我们当前这个实例线程(同一个void *(*start_routine)(void *)可以实例化很多线程),其他的线程访问不到,原创 2021-08-18 16:28:31 · 332 阅读 · 0 评论 -
MODBUS寄存器从40000开始而不从0开始,有什么特别的说法吗,还是仅仅是大家都习惯
(1)、 MODBUS 分为 0X ,1X,3X,4X 四种寄存器。 0X--->离散输出 (可读可写) 对应PLC为:DO 1X--->离散输入(只读) 对应PLC为:DI 3X--->输入寄存器16位(只读) 对应PLC为:AI 4X--->保持寄存器16位(可读可写) 对应PLC为:AO 同时根据上述规约,还可以扩展0X和4X,其中OX不仅可以对应DO,同时还可以对应上位机发送的“按钮” ...原创 2021-05-25 18:06:52 · 15951 阅读 · 1 评论 -
JsonCpp移植到ARM
下载https://github.com/open-source-parsers/jsoncpp解压cd到源码目录的src/lib_json目录下执行arm-linux-g++ -std=c++11 -shared -fPIC *.cpp -I../../include -o libjsoncpp.so将源码目录的include下的json目录添加到工程中包含头文件#inclu...原创 2019-12-11 15:39:59 · 693 阅读 · 0 评论 -
Eclipse调试运行开源代码
1、先常规执行./configure命令生成Makefile2、打开Eclipse,在Project Explorer中直接右键,选择import->c/c++->Existing Code as Makefile Project,下一步,Browse到代码目录,确定即可。3、编译的话,在Eclipse中执行Build即可。...原创 2018-07-27 14:23:36 · 725 阅读 · 0 评论 -
google glog调试模式
参考一些网上资料,了解到glog通过NDEBUG宏控制是否打开调试模式,如果在编译时定义了该宏,则关闭了调试模式,相应的DLOG()等函数就不输出内容了,因为宏是在编译时展开的,所以按道理应该是在编译glog库的时候定义或不定义该宏。但实际上,通过查看Makefile,glog默认是定义了该宏的,即关闭了调试模式,可是在应用程序中调用DLOG()依然输出日志了。后来发现,是需要在应用程序编译的时候...原创 2019-11-21 16:29:52 · 2579 阅读 · 0 评论 -
运行时链接动态库,报symbol lookup error: undefined symbol:错误
在exe里调用了so的函数,运行exe时提示symbol lookup error: undefined symbol:错误,在网上查原因,一般都说是so版本可能与exe不匹配,但是我的exe和so都是新编译的,确定版本没问题,后来怀疑是不是c++编译时函数别名不一致,但是也没问题。百思不得其解,最终发现是so库命名的问题,我把so库命名为util,库编译出来是libutil.so,实际上,操作系...原创 2019-11-21 08:57:50 · 8386 阅读 · 0 评论 -
编译APUE源码
第二版参考:https://blog.youkuaiyun.com/freeking101/article/details/781847571.到www.apuebook.com下载源码2.tar解包,cd apue.2e3.vi Make.defines.linux 修改变量WKDIR,指向你的apue源码的位置, 我的是/home/huangz/code/apue.2e,所以 ...转载 2019-06-08 11:33:21 · 374 阅读 · 0 评论 -
Linux进程同步机制
1. 互斥锁主要用在线程间,虽然通过改变它的属性可以支持进程间,但并非所有平台都支持,所以应当仅在线程间用。2. 条件变量只用在线程间,条件变量更像是一种通知机制(条件满足了通知等待的用户),它所附加的互斥锁既用于保护条件变量本身,也用于保护业务变量,之所以把这个互斥锁交给内核代管是为了操作的原子性。3. 信号量信号量设计为进程间通信机制,所以应当用在进程间。(1)最常...原创 2016-11-26 10:20:32 · 1802 阅读 · 1 评论 -
Linux进程间通信总结
1. pipe(1)pipe是单工的,也就是是单方向的,读只能用fd[0],写只能用fd[1]。书上说是半双工的说法是不准确的,半双工指的是两个方向都可以通信,只不过不能同时罢了,但pipe只能单向通信。(2)如果要使用pipe实现双向通信,则必须创建两个pipe,也就是两对fd,其中一个pipe由A到B,另一个pipe由B到A。即便是用在fork出的父子进程间也是如此,因为管道两端必须被...原创 2019-07-06 10:41:49 · 821 阅读 · 1 评论 -
Linux中exec系列函数的使用说明
原文地址:https://www.cnblogs.com/memset/p/linux_exec_function_family.html函数原型:描述: exec()系列函数使用新的进程映像替换当前进程映像. 工作方式没有什么差别, 只是参数传递的方式不同罢了.说明: 1. 这6个函数可分为两大类: execl()系列 和 execv()系列. ...转载 2019-07-06 11:06:59 · 1413 阅读 · 0 评论 -
编译安装glog
用的GCC是4.8.x的,所以选择glog-0.3.5,glog-0.4.0有些C++新特性用GCC4.8.x编译不过。1. Linux下很简单,直接configure make makeinstall即可。如果要交叉编译安装则:(1)./configure --host=arm-linux --prefix=/usr/local/src/glog/install_for_am335x...原创 2019-07-21 15:21:23 · 1779 阅读 · 1 评论 -
关于sigsuspend函数的备忘
详细可以参考《Unix环境高级编程》关于sigsuspend章节的介绍。其中例子代码:#include "apue.h"static void sig_int(int);intmain(void){ sigset_t newmask, oldmask, waitmask; pr_mask("program start: "); if...原创 2019-06-06 21:15:22 · 207 阅读 · 0 评论