C/C++
fly_air
这个作者很懒,什么都没留下…
展开
-
gcc编译过程,函数库相关编译过程
gcc编译过程,函数库相关编译过程转载 2022-02-25 12:23:53 · 172 阅读 · 0 评论 -
sigaction使用(signal siginfo_t)
sigaction使用可以参考的几个manman sigaction man 7 signalSignal Value Action Comment----------------------------------------------------------------------SIGHUP 1 Term H转载 2014-01-18 11:58:42 · 12688 阅读 · 2 评论 -
信号处理:signal和sigaction的区别
signal和sigaction的区别下面所指的signal都是指以前的older signal函数,现在大多系统都用sigaction重新实现了signal函数1、signal在调用handler之前先把信号的handler指针恢复;sigaction调用之后不会恢复handler指针,直到再次调用sigaction修改handler指针。:这样,(1)s转载 2014-01-18 11:41:57 · 1405 阅读 · 0 评论 -
sigaction用法
sigaction(查询或设置信号处理方式)相关函数signal,sigprocmask,sigpending,sigsuspend表头文件#include定义函数int sigaction(int signum,const struct sigaction *act ,struct sigaction *转载 2014-01-18 11:57:15 · 1600 阅读 · 0 评论 -
C++、CORBA版HelloWorld程序
环境:Windows XP, MICO2.3.12, Visual Studio 2003开发步骤:A 编译MICOB 设置VC开发环境C 编写编译IDL接口D 编写编译服务端程序E 编写编译客户端程序F 运行 实现详细:A 编译MICO1 设置VC安装目录下的bin目录至环境变量Path中2 运行vcvars32.bat,该命令增加其他一些VC环境转载 2014-01-23 13:53:16 · 3277 阅读 · 0 评论 -
gcc编译参数-fPIC的一些问题
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。gcc -shared -fPIC -o 1.so 1.c这里有一个-fPIC参数转载 2014-01-12 16:03:41 · 681 阅读 · 0 评论 -
std::map的insert和下标[]访问
在map中插入元素改变map中的条目非常简单,因为map类已经对[]操作符进行了重载enumMap[1] = "One";enumMap[2] = "Two";.....这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two";转载 2014-01-10 08:57:35 · 1357 阅读 · 0 评论 -
200 行 C 代码编写你的第一个垃圾收集器
垃圾收集被认为是有更多编程牛人出没的水域之一,但在这里,我会给你一个漂亮的儿童游泳池去玩耍。可能这里面仍然会有一些能手,但至少这会是一个浅水区。 精简、复用、再复用垃圾收集背后有这样一个基本的观念:编程语言(大多数的)似乎总能访问无限的内存。而开发者可以一直分配、分配再分配——像魔法一样,取之不尽用之不竭。当然,我们从来都没有无限的内存。所以计算机实现收集的方式就是转载 2013-12-21 14:13:37 · 748 阅读 · 0 评论 -
CORBA 常用基本方法解析
CORBA Programming with TAO - 4.Basic Functions(常用基本方法解析)摘要:简要介绍CORBA规范定义的几个常用基本方法的功能及应用中需要注意的问题。正文:idl编译器会为每个在idl中声明的interface生成一个对应的代理基类:class InterfaceName;以及两个对象引用类型:I转载 2014-01-05 12:46:42 · 2361 阅读 · 0 评论 -
c语言宏定义的连接符有哪些
(一)宏定义中的## 连接符与# 符 ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是M转载 2013-12-30 18:24:42 · 884 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用
C语言宏定义##连接符和#符的使用 C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。比如下转载 2013-12-30 18:22:39 · 542 阅读 · 0 评论 -
C++关键字(static/register/atuo/extern/volatile/const)释疑
C++关键字(static/register/atuo/extern/volatile/const)释疑 下面关于C++的几个关键字是经常和我们打交道的而我们又经常对这些含糊不清的, 本文根据自己的学习体会作以总结,以期达到真正理解和活用的目的。static 静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可改变其值。 静态变量或静态函数,即只有本文转载 2013-11-15 10:22:50 · 773 阅读 · 0 评论 -
gcc头文件库文件搜索路径问题
我们编写程序的时候会用到三个东西:头文件,链接时候库文件,运行时动态库文件。对于上面3中,我认为头文件是预处理过程的,应该和编译器有关,而链接时候库文件当然是和链接器有关了,而动态库文件时和动态装载器有关的。制作程序时候:头文件寻找路径问题;1.首先从-I开始,这个是我们在编译的时候指定的2.GCC环境变量C_INCLUDE_PATH,CPLUS_I转载 2013-11-15 09:23:53 · 837 阅读 · 0 评论 -
map与vector,typedef与define
目录1 typedef1.1 typedef的作用---重新定义类型1.2 typedef和define具体的详细区别1.3 typedef例子2 vector Members2.1 定义和初始化2.2 值初始化2.3 vector对象最重要的几种函数2.3.1 v.push转载 2013-11-15 11:08:35 · 1996 阅读 · 0 评论 -
C/C++连接MySql数据库
本文对如何使用MySql的API连接MySql数据库,开发环境为VS2008. 一、VS2008工程设置工作首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE,将连接器->系统->子系统 选择为控制台。由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql转载 2013-11-15 10:41:18 · 798 阅读 · 0 评论 -
共享内存
共享内存主要是通过映射机制实现的。Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同时使用。当调用CreateFileMapping 创建命名的内存映射文件对象时,Windows 即在物理内存申请一块指定大小的内存区域,返回文件映射对象的句柄hMap。为了能够访问这块内存区域必须调用MapViewOfFile 函数,促使Wind原创 2013-11-14 12:49:32 · 713 阅读 · 0 评论 -
#pragma
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。格式 其格式一般为: #Pragma Para常用参数转载 2013-11-14 13:26:09 · 637 阅读 · 0 评论 -
linux setsid函数
setsid命令linux常用的命令setsid命令的一般格式:setsid();说明:当进程是会话的领头进程时setsid()调用失败并返回(-1)。setsid()调用成功后,返回新的会话的ID,调用setsid函数的进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离。由于会话对控制终端的独占性,进程同时与控制终端脱离。pid_t pid =转载 2014-03-18 14:16:11 · 824 阅读 · 0 评论 -
Linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数转载 2014-03-18 13:32:55 · 506 阅读 · 0 评论 -
linux下core dump
linux下core dumpsetrlimitgetrlimit转载 2016-11-19 12:16:43 · 360 阅读 · 0 评论 -
gcc编译生成静态及动态链接库步骤
gcc编译生成静态及动态链接库步骤转载 2016-12-01 11:23:16 · 787 阅读 · 0 评论 -
运维利器:万能的 strace
strace是什么?按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。转载 2016-10-02 15:12:00 · 1177 阅读 · 0 评论 -
运维利器:万能的 strace
strace是什么?按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。转载 2016-06-12 13:22:21 · 2198 阅读 · 0 评论 -
linux core文件设置
在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因。缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要使用ulimit命令更改coredump的设置:ulimit -c unlimited 上面的命令表示在程序异常时产生core dump文件,并且不对core dump文件的大小进行限制。原创 2015-03-24 10:08:17 · 413 阅读 · 0 评论 -
WinDbg调试DMP格式文件
前言:WinDbg是微软开发的免费源代码级的调试工具。WinDbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。本文的讨论是在安装了Debugging Tools for Windows 的前提下进行的,下载地址可以参考我之前的文章。WinDbg对于dump文件的调试可以通过菜单设置Symbol File Path、Source File Path ,并可设置多个路径。1转载 2015-03-07 15:40:47 · 734 阅读 · 0 评论 -
WinDBG 技巧:如何生成Dump 文件(.dump 命令)
程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:1) 打开WinDBG并将之Attach 到crash的程序进程2) 输入产生dump 文件的命令WinDBG产生dump 文件的命令是 .dump ,可以选择不同的参数来生成不同类型的dump文件。选项(1):转载 2015-03-03 10:41:20 · 5712 阅读 · 0 评论 -
VS2008项目移植到Linux
不少人都遇到过这种情况:在Windows下用Visual Studio工具开发的程序需要移植到Linux系统中,做成Linux版本的,但程序比较大,在Linux上又离不开Make,手动编写Makefile文件的工作量又太大.在这里提供一种方法仅供参考.由于VS的解决方案文件“*.sln”和项目文件“*.vcproj”文件中保存了源代码的依赖关系和编译信息,只要把它转换成Makefile文件就行转载 2015-01-06 16:18:02 · 1529 阅读 · 0 评论 -
static C语言
static C语言 C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。 由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次原创 2014-07-05 15:28:09 · 796 阅读 · 0 评论 -
linux SEM_WAIT
名字sem_wait, sem_timedwait, sem_trywait - 锁定一个信号量概要#include int sem_wait(sem_t *sem);int sem_trywait(sem_t *sem);int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);与 -转载 2014-05-08 13:05:26 · 1476 阅读 · 0 评论 -
linux 信号量使用
信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有转载 2014-03-21 09:15:43 · 675 阅读 · 0 评论 -
Linux Socket编程(不限Linux)
本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基本操作3.1、socket()函数3.2、bind()函数3.3、listen()、connect()函数3.4、accept()函数3.5、read()、write()函数等3.6、close()函数4、socke转载 2014-03-18 13:06:55 · 655 阅读 · 0 评论 -
#pragma pack(n)作用
通过#pragma pack(n)改变C编译器的字节对齐方式在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。转载 2013-11-14 13:22:30 · 683 阅读 · 0 评论 -
gcc编译选项
gcc 提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration转载 2013-11-14 13:02:47 · 835 阅读 · 0 评论 -
#pragma 编译器自定义参数
编译器自定义参数 #pragma lexems#pragma命令赋予程序员控制编译器的能力,由于#prama的实现依赖于编译器,使用方法因编译器而异。一个选项可能完全改变程序执行顺序。下边列出一些编译器在所支持的操作系统中实现的一些常用的编译器自定义参数。pragma 也允许程序员设定特定函数,使它在主函数执行之前或者主函数退出时被调用。#pragma start转载 2013-11-14 13:27:56 · 1713 阅读 · 0 评论 -
虚函数与构造函数、析构函数
虚函数与构造函数、析构函数 构造函数:为对象分配存储空间,使一个对象初始化;析构函数:在该对象生命期完结时做相应的扫尾工作并释放由构造函数分配的内存; 构造函数不能是虚函数的原因:转载 2013-11-19 13:33:44 · 933 阅读 · 0 评论 -
实例详解C++友元
在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安转载 2013-11-19 13:19:25 · 706 阅读 · 0 评论 -
关于拷贝构造函数和赋值运算符
重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。以下讨论中将用到的例子:class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} void Init(int n){ pBuffer=new char[n]; nSize=n;}p转载 2013-11-19 13:04:30 · 722 阅读 · 0 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
C 风格(C-style)强制转型如下:(T) exdivssion // cast exdivssion to be of type T函数风格(Function-style)强制转型使用这样的语法:T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式转载 2013-11-19 08:24:54 · 682 阅读 · 0 评论 -
Xerces C++ 学习笔记
1. 初始化平台:XMLPlatformUtils::Initialze()2. 销毁平台:XMLPlatformUtils::Terminate();3. 加载分析报文XercesDOMParser *parser = new XercesDOMParser();Parser->parse( 参数 ); 这个参数可以直接是文件名,也可转载 2013-11-19 08:23:22 · 1167 阅读 · 6 评论 -
Stl vector,map set简单用法
C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。.一. vector1.声明: 一个vector类似于一个动态的一维数组。 vector a; //声明一个元素为int类型的转载 2013-11-19 08:21:49 · 767 阅读 · 0 评论