
Linux c/c++
文章平均质量分 71
liwenjia1981
这个作者很懒,什么都没留下…
展开
-
Linux 信号集 浅析
Linux信号有多种说法。一个进程创建一个信号用于发送给另外一个进程叫做发送一个信号,内核创建一个信号叫做生成一个信号,进程自己向自己发送信号叫做唤起一个信号。不过我看也没必要这么学究气。 信号集--signel set,其实就是将多个信号放在集合中进行集中的处理。POSIX.1定义了sigset_t以包涵一个信号集,并且定义了五个处理信号的函数: int sigemptyset(原创 2009-11-21 21:14:00 · 2531 阅读 · 0 评论 -
fork和exec
<br />fork和exec<br />许多朋友对fork和exec调用概念比较模糊,下面我简单描述下这方面的知识。<br />学过C语言的都知道,Unix下某个进程的内存分成三部分:代码段,堆栈段,数据段。代码段用来存放程序运行的代码,堆栈段用来存放子程序的局部变量,数据段用来存放全局变量。这在perl里也是一样的。<br />perl的fork调用,跟C的一样,当发生fork调用时,实际上发生如下事:<br />父进程将代码段,堆栈段,数据段完全复制一份给子进程。也就是说,在子进程运行之初,它拥有父进原创 2010-07-09 16:51:00 · 803 阅读 · 0 评论 -
volatile的例子
<br />讲讲volatile的作用64推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: <br /> 1). 并行设备的硬件寄存器(如:状态寄存器) <br /> 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) <br /> 3).转载 2010-07-09 11:12:00 · 1028 阅读 · 0 评论 -
求数组中任何连续子向量之和
我们有一个数组,里面包含 10个元素:31,-41,59,26,-53,58,97,-93,-23,84 ,如何求出里面最大的连续子向量之和呢? 该程序应该输出下标为X[2,6]之间的和,187为最大。当所有数是正数的时候,问题很容易解决,但是如果包含了负数,可就难了。 有一个迭代算法,采用动态规划的思想: maxsofar=0; for(int原创 2010-05-13 14:35:00 · 571 阅读 · 0 评论 -
一个小小硕士的实习路
转载必须注明出处:哈尔滨工程大学计算机学院李海波 QQ:393699949 一个小小硕士,读了这么多年的书,学而优则仕,目的就是为了找一家可以托付的好公司。今年的火热的实习生招聘,虽然结果还未可知,作为经历丰富的经验,也是值得大书一番的。 1。百度 百度我投的最早,3月份就投了简历。5:30日终于盼来了笔试,传说中的百度笔试极其的BT,而相比之下,其他公司的就相对简单一些。那天的笔试,我做的还不错,有一道题,由于马虎,稍微除了点小错误,当时想改,不知道为什么就忘了改了,可能是由于时间紧张的缘故原创 2010-07-08 20:31:00 · 1519 阅读 · 2 评论 -
C++模板中的分离编译与包含贬义
<br />http://ju-kevin.spaces.live.com/blog/cns!907BD90CD611C0C7!224.entry转载 2010-07-08 21:14:00 · 1289 阅读 · 0 评论 -
1。排列算法 2。大整数划分
<br />#include<iostream><br />using namespace std;<br />int partion(int n,int m)<br />{<br /> if((n<1)||(m<1))<br /> return 0;<br /> if((n==1)||(m==1))<br /> return 1;<br /> if(n<m)<br /> return partion(n,n);<br /> if(n==m)<br /> return 1+partion原创 2010-07-02 10:46:00 · 522 阅读 · 0 评论 -
二叉排序树的C代码
<br />#include <stdio.h><br />#include <stdlib.h><br />typedef struct BiNode{<br /> int data;<br /> BiNode *lchild, *rchild; <br />};<br />bool searchBST(BiNode *T, int key, BiNode **it) {<br /> if(!T) {<br /> //(*it) = NULL;<br /> retu原创 2010-07-01 10:11:00 · 675 阅读 · 0 评论 -
二叉排序树代码
<br />#include<iostream><br />#include<string><br />using namespace std;<br />const int MAX=9999;<br />class BNode<br />{<br /> public:<br /> BNode(){}<br /> BNode(int i):value(i),left(NULL),right(NULL){}<br /> ~BNode(){}<br /> <br /> BNode *left;<原创 2010-07-01 09:24:00 · 541 阅读 · 0 评论 -
广义表建立二叉树
<br />//#ifndef __BITREE_H<br />//#define __BITREE_H<br />#include<iostream><br />#include<string><br />#include<stack><br />#include<assert.h><br />#include<stdlib.h><br />using namespace std;<br />class BiTree;<br />class TreeNode<br />{<br /> public:<br原创 2010-07-11 10:31:00 · 1708 阅读 · 0 评论 -
0-1背包问题
<br />http://blog.youkuaiyun.com/livelylittlefish/archive/2008/03/16/2186206.aspx<br /> <br />本博客(http://blog.youkuaiyun.com/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! 0/1背包问题转载 2010-07-11 14:46:00 · 6396 阅读 · 1 评论 -
memset清空一个结构类型的变量或数组
<br />将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。<br />需要的头文件<br /><memory.h> or <string.h> <br />函数原型 void *memset(void *s, int ch, unsigned n); <br />程序例 #include <string.h> <br /> #include <stdio.h> <br /> #i原创 2011-04-06 14:15:00 · 12056 阅读 · 0 评论 -
linux下ifconfig, DNS以及route配置
<br /><br />原文:http://www.cnitblog.com/201/archive/2009/08/20/60887.html<br />熟悉使用ifconfig 会非常方便。 <br /> ifconfig eth0 新ip<br /> 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip<br /> 一、修改IP地址<br /> [aeolus@db1 network-scripts]$ vi ifcfg-eth0<br /> D转载 2011-03-07 10:34:00 · 1303 阅读 · 0 评论 -
socket 连接建立图
下面是socket建立时的连接转换图:原创 2010-06-11 21:09:00 · 947 阅读 · 0 评论 -
腾讯之星大赛作品展示活动
昨天我们参加了腾讯之星作品展示活动,展示地点在哈工大的正心楼的105教室。那天天气出奇的热,我和同组的同学、一位研一师弟,三个人一起早早的去105教室等候。 我们是第一组展示的,首先,我演讲了ppt,ppt里面主要是作品截图、运行截图等。然后,就打开了系统的详细设计报告,开始讲解作品的设计理念,足足讲了多半个钟头。 虽然我们的作品还有很多缺陷,但是确实已经尽全力了,再做的同学对原创 2010-05-23 19:14:00 · 955 阅读 · 0 评论 -
pthread-join和detached
pthread_join使一个线程等待另一个线程结束。代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可转载 2010-05-18 08:42:00 · 5337 阅读 · 0 评论 -
数组中最长递增子序列
<br />这道题还有优化的解法:保留一个动态规划优化矩阵,里面保留每次最长子序列的终点。<br />#include<iostream><br />#include<vector><br />using namespace std;<br />int Max(int *a, int n)<br />{<br /> int max = a[0];<br /> for(int i = 1; i < n; i++)<br /> if(max < a[i])<br />原创 2010-07-12 10:49:00 · 858 阅读 · 0 评论 -
sigsuspend函数
<br /><br />手册:<br /> #include <signal.h><br /><br /> int sigsuspend(const sigset_t *sigmask);<br /><br />The sigsuspend() function shall replace the current signal mask of the calling thread with the set of signals pointed to by sigmask原创 2010-07-11 21:32:00 · 1113 阅读 · 0 评论 -
sigpromask 应用
<br />C/C++ code【sigprocmask系统调用】功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。用法:#include <signal.h>int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);参数:how:用于指定信号修改的方式,可能选择有三种SIG_BLOCK //加入信号到进程屏蔽。SIG_UNBLOCK //从进程屏蔽里将信号删除。SIG_SE原创 2010-07-11 18:54:00 · 1758 阅读 · 0 评论 -
内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的原创 2010-05-06 10:45:00 · 453 阅读 · 0 评论 -
TCP/IP状态转换图
1.FIN_WAIT_1->CLOSING->TIME_WAIT->CLOSED2.FIN_WAIT_1->TIME_WAIT->CLOSED3.FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED原创 2010-05-05 15:46:00 · 780 阅读 · 0 评论 -
每对顶点间最短路径----Floyd算法 收藏
<br />每对顶点间最短路径----Floyd算法 收藏<br /> 对于一个各边权值均大于零的有向图,对每一对顶点,求出vi与vj之间的最短路径和最短路径长度。<br />以下代码包含有向图的建立,Floyd算法的实现以及输出最短路径和最短路径长度,具体过程请看【动画演示Floyd算法】。<br />代码说明几点:<br />1、A[][]数组初始化为各顶点间的原本距离,最后存储各顶点间的最短距离。<br />2、path[][]数组保存最短路径,与当前迭代的次数有关。初始化都为-1,表示没有中间顶点。转载 2010-06-27 21:12:00 · 2245 阅读 · 0 评论 -
C++中的回调函数
C++中的回调函数,一般用来传递一个函数地址,个人看法,这个回调函数在C语言里,能够做出 面向对象的思想来:多态。因为你可以在同一个母函数里,接受同等数量形参的子函数。下面是一个最简单的回调函数: #include#includeusing namespace std;/*typedef int (*Func)();void callback1(Func fun){原创 2010-04-21 20:56:00 · 697 阅读 · 0 评论 -
C++模板类设计哈希表 程序
/***********************************************************************************作者:李文嘉 如有转帖,请表出处*****CHash.h*****************************************************************************原创 2010-03-31 16:07:00 · 889 阅读 · 0 评论 -
mysql c API 存储过程
/*******************************************************************************Programm Name:mysql.cpp*****Programmer :Li*****Function :mysql数据库存储过程简单示例*****Project :Crawler.src***********原创 2010-03-27 16:51:00 · 1240 阅读 · 0 评论 -
静态类成员
这个是容易让人混淆和遗忘的地方,越是基础的东西,越容易考和出错。类的函数和数据成员都可以是静态的。 1)静态数据成员::C++的静态成员变量能够在构造函数里初始化么? 不能。因为静态成员属于类作用域,而不属于类对象。程序一运行就初始化了,不可能在构造对象的时候再初始化一次。用复制语句最好。 静态成员其实和全局变量地位一样的,只不过编译器将他的使用限制在类作用域内原创 2010-03-06 20:34:00 · 445 阅读 · 0 评论 -
友元的三种最基本使用方式
友元是C++中最基本的运用手段。友元函数可以使非成员函数访问类的所有私有成员和保护乘员。下面介绍三种最基本的友元使用方式: 1)非成员函数友元 #include using namespace std; class myclass{ int a,b; public: X原创 2010-03-06 19:28:00 · 902 阅读 · 0 评论 -
拷贝构造函数
如果函数传递对象时没有拷贝构造函数,将以什么方式产生新的参数对象 ?拷贝构造函数,经常被称作X(X&),是一种特殊的构造函数,他由编译器调用来完成一些基于同一类的其他对象的构件及初始化。它的唯一的一个参数(对象的引用)是不可变的(因为是const型的)。这个函数经常用在函数调用期间于用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用原创 2010-03-06 21:30:00 · 650 阅读 · 0 评论 -
用core dump和错误自动重启技术提高软件可用性
http://blog.chinaunix.net/u/5251/showart_398259.html用core dump和错误自动重启技术提高软件可用性 一些比较关键的应用,我们总是希望它的可用性尽可能高,换句话就是尽量不要让服务中断,或者是中断的时间最短。为了达到这种目的,通常有以下几种解决方案:多机原创 2010-05-04 14:27:00 · 887 阅读 · 0 评论 -
sigsuspend
以下来自chinaunix: 手册: #include int sigsuspend(const sigset_t *sigmask); The sigsuspend() function shall replace the current signal mask of the calling thread with the set of signals point转载 2010-05-04 15:44:00 · 850 阅读 · 2 评论 -
unix信号处理函数 signal (1)
信号是unix处理异步事件的经典方法。产生信号的方法一般有: 用户按中断键、硬件异常信号、软件异常信号、用户的kill命令等。系统也可以有多种方式处理这些异步事件,比如:忽略信号、捕捉信号或者执行默认动作。 大多数unix程序都是用信core文件来检查进程终止时候的状态的。core文件就是对于该文件的进程存储映像进行复制。unix环境高级编程里累赘的提了几种不产生core文件的情况原创 2010-05-02 14:56:00 · 3080 阅读 · 0 评论 -
static用法
static的全部用法 要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们通常声明一个变量: int a; string s; 其实就是: auto int a;原创 2010-05-02 12:46:00 · 474 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别 堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空 间,局部堆就是用户分配的空间。堆在操作系统对进程 初始化的时候分配,运 行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就 是内存泄漏。堆里面一般 放的是静态数据,比如 Static的数据和字符 串常量等,资源加载后一般也放在堆里面。一个进程的所有线程共有这些堆 , 所以对堆的操作要考虑同转载 2010-05-02 21:04:00 · 450 阅读 · 0 评论 -
C++访问控制:转帖
C++中 public和private派生类继承问题和访问权限问题2010-01-30 23:54当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定。1.如果子类从父类继承时使用的继承限定符是public,那么(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;(2)父类的priv原创 2010-05-02 13:01:00 · 2304 阅读 · 0 评论 -
从string对象初始化来看构造函数
C++的复制控制是一个很复杂的东东,又散乱又复杂,很容易记混。下面从最简单的string 类类型,来详细讲解一下类中复制控制的行为: 定义几个string类类型如下: string book1="TCP/IP详解“; string book2(10,"unix环境高级编程"); string book3=string(); string bo原创 2010-05-03 20:39:00 · 1418 阅读 · 1 评论 -
函数调用时参数压栈顺序的问题(转) 收藏
函数调用时参数压栈顺序的问题(转) 收藏 昨天忽然想起来函数压栈顺序的问题,就跟舍友讨论了一下,结果发现在不同的编译器下面出现的结果竟然不一样!于是做了如下分析:【源程序】 #include void print(int a, int b, int c){ printf("%d/t%d/t%d/n", a, b, c);}int main(void){ int原创 2010-05-02 20:43:00 · 3101 阅读 · 0 评论 -
构造函数专栏
说不完的构造函数,呵呵。构造函数一个特殊的成员函数,只要对于一个类,实例化一个对象,那么就必须执行构造函数。构造函数的目的很简单,就是保证 类的对象的每个数据成员,都具有一个合适的初始化值。 构造函数可以是被重载的,而实例化对象的时候,这个对象的实参决定调用哪个构造函数。只要实例化一个对象,此对象的构造函数就自动的开始执行。 构造函数不能够声明为const,因为这个是不原创 2010-05-01 16:35:00 · 666 阅读 · 0 评论 -
C++的作用域
每一种语言,其变量、函数、或者对象、指针等都有其生存期,也就是作用域。这个是语言自身的最基本的一个知识,以C++为例子,说明作用域的范围: typedef string Type; Type initVal( ); class Exercise { public: typedef double Type;原创 2010-05-01 15:24:00 · 7057 阅读 · 2 评论 -
回调函数
一个c回调函数的例子2009年06月18日 星期四 上午 10:57#include// 方法指针的格式为:int (*ptr)(char *p) 即:返回值(指针名)(参数列表)typedef int (*CallBackFun)(cha转载 2011-08-09 16:20:58 · 787 阅读 · 0 评论