
linux编程
工程师WWW
R
展开
-
面试 C++ 后台开发会考察哪些问题?
今天晚上群里面一名叫“成都-go-戒炸鸡”的群友提出了他最近面试的一些面试题,面试题内容个人觉得非常典型、也非常有代表性和针对性,故拿出来与大家分享一下,也感谢他的分享。成都-go-戒炸鸡说:“今天面试,我没答出来的有 redis 持久化机制,redis 销毁方式机制,mq 实现原理,c++虚函数,hash 冲突的解决,memcached 一致性哈希,socket 函数 select 的缺陷...原创 2019-10-12 19:50:32 · 4979 阅读 · 0 评论 -
gdb如何保存和读取断点
刚开始在linux下学编程使用gdb的同学可能会发现,每次用gdb设置断点调试程序,但下次打开的时候所有断点都没有了,很不方便。下面介绍保存和读取断点的方法。 1. 保存断点 先用info b 查看一下目前设置的断点,使用save breakpoint命令保存到指定的文件,这里我使用了和进程名字后面加bp后缀,你可以按你的喜好取名字。 我使用的是save原创 2015-05-07 10:50:03 · 5930 阅读 · 2 评论 -
GDB中查看STL容器类的内容
使用GDB的"p variable-name"查看STL容器类,只会显示该容器的一些信息,并不能很友好的显示该容器的内容。使用stl-views.gdb这个脚本可以很好地解决这一问题。下载stl-veiws.gdb文件,将其放到~/目录下,直接将其改名为~/.gdbinit,或者在你已有的.gdbinit文件中用source ~/.stl-views.gdb命令将其包含。这样你就可以用下面的命原创 2015-04-01 11:39:05 · 6142 阅读 · 0 评论 -
详解coredump
一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。 通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函原创 2015-01-22 11:51:07 · 1308 阅读 · 0 评论 -
Linux常用C函数-日期时间篇
日期时间篇asctimectimegettimeofdaygmtimelocaltimemktimesettimeofdaytimeasctime(将时间和日期以字符串格式表示)相关函数time,ctime,gmtime,localtime表头文件#include原创 2014-04-10 14:04:52 · 1520 阅读 · 0 评论 -
Linux下关于时间概念的C语言编程
Abstract 在程序中,经常需要输出系统的当前时间、计算程序的执行时间、使用计时器等。Introduction一、时间的类型1.格林威治标准时间 coordinated universal time(UTC)是世界标准时间,即常说的格林威治标准时间(greenwich mean time,GMT).2.日历时间 日历时间(calendar ti原创 2014-04-08 18:40:44 · 1497 阅读 · 0 评论 -
c++跨平台开发经验
这些是一些自己在开发过程中与移植程序过程中碰到的linux编程与windows编程的差异之处,以及从网上总结了一些解决办法和经验。 1. 文件与目录的大小写以及路径分隔符的差别。 windows下不区分大小写,路径分隔符一般使用"\";linux下区分大小写,路径分隔符使用"/"。 2. itoa()函数在linux下并不存在。 所原创 2014-04-03 22:57:55 · 1793 阅读 · 0 评论 -
Ldd命令介绍及使用方法
1、首先ldd不是一个可执行程序,而只是一个shell脚本 2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时原创 2014-02-27 13:58:26 · 5422 阅读 · 0 评论 -
Makefile 自动生成头文件的依赖关系
最近在看一本书《Windows游戏编程大师技巧》 (Tricks of Windows Game Programming Gurus). 第一章给出了一个打砖块小游戏的示例程序. 包括三个文件: blackbox.h, blackbox.cpp和freakout.cpp (600行代码, 对于Windows C++程序来说还好, 没有让我freak out…). blackbox.cpp封装了部分原创 2014-01-26 18:09:49 · 4253 阅读 · 0 评论 -
Makefile基础 4. 自动处理头文件的依赖关系
现在我们的Makefile写成这样:all: mainmain: main.o stack.o maze.o gcc $^ -o $@main.o: main.h stack.h maze.hstack.o: stack.h main.hmaze.o: maze.h main.hclean: -rm main *.o.PHONY: clean按照惯例,用all做缺省原创 2014-01-26 18:09:13 · 1554 阅读 · 0 评论 -
Makefile之大型工程项目子目录Makefile的一种通用写法
管理Linux环境下的大型项目,能够有一个智能的Build子系统会起到事半功倍的效果,本文描述Linux环境下大型工程项目子目录Makefile的一种通用写法,使用该方法,当该子目录内的文件有增删时无需对Makefile进行改动,可以说相当的智能。下面先贴代码(为了减少篇幅,一些非关键的代码被去掉):ROOTDIR = . EXE_DI原创 2014-01-02 17:55:50 · 4591 阅读 · 0 评论 -
Linux IPC总结(全)
IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法。Linux IPC基本上都是从Unix平台上继承而来的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。一、System V, BSD, POSIX System V是Unix操作原创 2013-12-17 17:15:15 · 1828 阅读 · 0 评论 -
Linux IPC 和IO模型
主要内容: 第一部分 信号 第二部分 PIPE 和 FIFO 第三部分 消息队列 第四部分 信号量 第五部分 共享内存 第六部分 I/O模型 概念: 在先了解Linux进程间通讯时,需要首先了解几个概念: 1)随进程持续:IPC一直存在,直到打开IPC的最后一个进程关闭 2)随内核持续:IPC一直存在,直到系统重启或删除该对象为止 3)随文件系统原创 2011-11-05 17:23:46 · 2731 阅读 · 0 评论 -
Pre-defined C/C++ Compiler Macros
The macros are found here:StandardsCompilersLibrariesOperating systemsArchitecturesGeneral guidelines are found here:Version normalizationFeature macrosEndiannessPlease原创 2013-12-05 10:45:10 · 1849 阅读 · 0 评论 -
关于gcc,libc,glibc等相关概念的理解
1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超原创 2013-11-27 18:10:12 · 8089 阅读 · 0 评论 -
gcc编译参数-fPIC的一些问题
ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不原创 2013-12-04 14:20:02 · 1093 阅读 · 0 评论 -
AIO 简介
Linux的I/O机制经历了一下几个阶段的演进:1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等原创 2015-05-08 10:32:59 · 1033 阅读 · 0 评论 -
编写Shell脚本的最佳实践
前言 由于工作需要,最近重新开始拾掇shell脚本。虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看。而且当我在看其他人写的脚本的时候,总觉得难以阅读。毕竟shell脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用。因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的main函数,不忍直视。同时,由于历史原因,shell原创 2017-08-21 16:50:28 · 2578 阅读 · 0 评论 -
块存储、文件存储、对象存储
【块存储】典型设备:磁盘阵列,硬盘块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘、做Raid、或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘。(假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经于原来的5个物理硬盘意义完全不同了。例如第一个逻辑硬盘A里面,可能第一个200M是来自原创 2017-08-08 15:31:05 · 2692 阅读 · 0 评论 -
系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下:一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间 QPS(TPS):每秒钟reque原创 2016-04-20 10:29:07 · 3215 阅读 · 0 评论 -
透过 Linux 内核看无锁编程
非阻塞型同步 (Non-blocking Synchronization) 简介如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。阻塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据原创 2016-05-24 19:48:15 · 3780 阅读 · 0 评论 -
linux下检查内存泄露的工具--mtrace
最令linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。 下面是它的用法[cpp] view plaincopy#include原创 2016-01-12 17:53:47 · 1407 阅读 · 0 评论 -
linux和STL 常用头文件及说明
1、 Linux中一些头文件的作用::ANSI C。提供断言,assert(表达式):GCC。GTK,GNOME的基础库,提供很多有用的函数,如有数据结构操作函数。使用glib只需要包含:GCC。文件夹操作函数。struct dirent,struct DIR,opendir(),closedir(),readdir(),readdir64()等 :ANSI C。字符测试函原创 2016-01-08 17:43:12 · 3137 阅读 · 0 评论 -
Linux 下hash_map的使用
Linux下使用hash_map 问题1:头文件 #if __GNUC__>2 #include #include using namespace __gnu_cxx; #else #include #include using namespace stdext; #endif 2:不支持string或char *为k原创 2016-01-07 20:23:11 · 3268 阅读 · 0 评论 -
多线程死锁调试小技巧
据说再高的高手在写多线程程序的时候都难确保不会产生死锁,死锁的调试也就成为一个比较常见的问题,假设有下面这样一个问题: 一个正在生产环境下运行的进程死锁了,或者你只是在跑一个程序,并没有在调试器里面打开它,然后发现没有响应,日志输出也停止了。由于你是一个有经验的程序员,会想到“我刚刚加上了新的锁策略,不一定稳定,这可能是死锁了“。但是你不想就这么杀掉进程,因为多线程的 bug 不容易重现原创 2016-01-07 18:10:29 · 2835 阅读 · 0 评论 -
dup和dup2函数的不同和使用
在unix高级编程中有介绍dup和dup2,但是没有实例说明, 笔者自己结合实例进行了测试了解。在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的节点指针会指向节点表。看下图:打开文件的内核数据结构dup和dup2两个函数都可以用来复制打开的文件描述符,复制成功后和复制源共享同一个文件表。看下图:执行d原创 2015-06-05 14:48:21 · 1842 阅读 · 0 评论 -
在gdb中显示源码(gdbtui使用方法)
gdb调试一直是一个让人头疼的问题,我这个多年的linux用户也一直不习惯gdb,主要是因为gdb在调试的时候不能很好的展示源码。gdb里面可以用list命令显示源码,但是list显示没有代码高亮,我忍了,可是list这种显示代码的方式,使得我总不能一眼定位到正在执行的那行代码。可以毫不夸张的说,这个问题是阻止我长期使用gdb的最大的障碍。这是如此的不便,以至于GNU都想办法解决了————原创 2015-05-07 17:52:08 · 5314 阅读 · 0 评论 -
GDB十分钟教程
本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 命令 解释 示例file 加载被调试的原创 2012-08-07 00:13:00 · 1239 阅读 · 0 评论 -
cgdb的介绍和使用
cgdb,可以看成是gdb的终端界面增强版,相比windows下的visual studio而言,它的功能显得十分轻量级而没有太多繁杂,但最吸引我的地方还是cgdb能在终端里运行,如果它需要KDE或GNOME,我自然不会写这篇总结。cgdb开放源代码,官网为:http://cgdb.sourceforge.net/,关于它的内部细节暂且不说,这里先介绍它的使用方法,贴示例图,所谓一图胜千文,即在如原创 2015-03-31 18:08:36 · 14202 阅读 · 0 评论 -
GDB用法及命令大全
一:列文件清单 1. list(l) (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run(r)命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给原创 2013-09-21 23:45:08 · 6029 阅读 · 0 评论 -
使用 GDB 调试多进程程序
GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大。对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统:进程Proc2 是 Proc1 的子进程,Proc3 又是 Proc2 的子进程。如何使用 GDB 调试 proc2 或者 proc3 呢?实际上,GDB 没有对多进程程序调试提供直接支持。例如,使用GDB调试某原创 2015-05-13 18:19:48 · 1093 阅读 · 0 评论 -
掌握 Linux 调试技术
本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们。在第 2 种情况中,我们使用了 Linux 中的 strace 实用程序,它能够跟踪系统调用和信号,从而找出程序发生错误的地方。在第 3 种情况中,我们使用 Linux 内核的 Oops原创 2013-12-04 17:59:27 · 1372 阅读 · 0 评论 -
Linux下使用nm命令排查和解决“undefined reference to ”
一、案例 编译出一个动态库.libXXXEngine.so。然后直接在另一个工程中,把头文件include进来,并link到该库:-lXXXEngine.尝试编译,出错:.//libXXXEngine.so:undefined reference to`CHttpParser::GetCurrentHttpMethod(http_method_t&)'原创 2013-12-04 00:22:43 · 2727 阅读 · 0 评论 -
GDB中应该知道的几个调试方法
七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。一、多线程调试多线程调试可能是问得最多的。其实,重要就是下面几个命令:原创 2013-10-15 23:43:14 · 1568 阅读 · 0 评论 -
linux下安装protobuf教程+示例
1 在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。安装步骤如下所示: tar -xzf protobuf-2.1.0.tar.gz cd protobuf-2.1.0 ./configure --prefix=/usr/local/p原创 2013-10-23 15:38:13 · 1498 阅读 · 0 评论 -
C/C++ Linux 程序员必须了解的 10 个工具
想成为 Linux 下专业的 C/C++ 程序员,下面工具都是必须要了解的。1. 基本命令http://mally.stanford.edu/~sr/computing/basic-unix.htmlhttp://pangea.stanford.edu/computing/unix/shell/commands.phphttp://infohost.nmt.edu/tcc/he原创 2013-10-21 15:48:09 · 1371 阅读 · 0 评论 -
Linux下利用Valgrind工具进行内存泄露检测和性能分析
Valgrind通常用来成分析程序性能及程序中的内存泄露错误一 Valgrind工具集简绍Valgrind包含下列工具: 1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。 2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。 3、cachegrind:分析CPU的cache命中率、丢失率原创 2013-10-21 00:08:22 · 2198 阅读 · 0 评论 -
应用 Valgrind 发现 Linux 程序的内存问题
Valgrind 概述体系结构Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构原创 2013-10-20 23:57:35 · 1521 阅读 · 0 评论 -
如何在linux下检测内存泄漏
简介: 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类。1.开发背景在 windows原创 2013-10-20 23:50:50 · 1074 阅读 · 0 评论 -
聊一下我在LINUX环境下用过的C/C++编辑器(或IDE)
昨天有个朋友问我想在LINUX环境下学习C++,用什么IDE好?想想我也玩LINUX几年了,就总结一下我在LINUX环境下用过的C/C++编辑器(或IDE)吧。在Windows上,肯定是Visual Studio一家独大,在LINUX上,可以选择的IDE就大多了。。1:gedit 虽然这只是一个普通的本文编辑器(外加关键字高亮),但却是我初学LINUX时所用的C++编辑器。不过,原创 2013-10-13 17:10:09 · 6433 阅读 · 1 评论