
Linux 系统-编程
jiangfeng999
程序员
展开
-
巨型整数的运算(绝对原创)
// HugeInt.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#include#includeusing namespace std;int ConvetToInt(char ch){ return ch-48;}class HugeInt{private: short *HugeNum;//存储 l原创 2006-04-22 17:50:00 · 2748 阅读 · 0 评论 -
Linux环境进程间通信(二): 信号(上)
一、信号及信号来源信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基转载 2010-05-27 15:55:00 · 1033 阅读 · 0 评论 -
同步/异步与阻塞/非阻塞的区别
<br />先举个从其他博客(http://www.blogjava.net/andyelvis/archive/2009/05/16/271012.html)上摘抄的例子,比如我去银行办理业务,可能选择排队等候,也可能取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了.前者(排队等候)就是同步等待消息,而后者(等待别人通知)就是异步等待消息.在异步消息处理中,等待消息者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人原创 2010-07-26 17:17:00 · 2033 阅读 · 2 评论 -
使用标准IO的误区
不知道大家有没有这种习惯,在使用标准IO库写文件时还喜欢另外开辟一个大的缓存区来缓存要写的数据,待这个大的缓存区满了以后再调用fwrite/fread来进行IO操作,以为这样可以减少IO次数。但实际情况却不是这样的,因为标准IO中已经有一个缓存了,缓存的大小设置为操作系统一次写硬盘的字符数。上述做法,相当于在用户态环境下多做了一次无无谓的内存拷贝操作。原创 2010-08-25 11:42:00 · 1060 阅读 · 0 评论 -
C++中extern “C”含义深层探索
<br />1.引言<br /> C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。<br /><br />2.从标准头文件说起<br /> 某企业曾经给出如原创 2010-10-12 17:23:00 · 617 阅读 · 0 评论 -
C/C++命名规则
<br /><br />在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。<br />在引入细节之前,先说明一下命名规范的整体原则:<br /> <br />同一性<br />在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。<br />标识符组成<br />标识符采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确。<br转载 2011-02-15 11:18:00 · 5875 阅读 · 0 评论 -
inux C 正则表达式
<br /> 下面介绍下如何使用:<br /> 首先,编译正则表达式。<br /> 为了提高效率,在将一个字符串与正则表达式进行比较之前,首先要用regcomp()函数对它进行编译,将其转化为regex_t结构:<br /> <br /> int regcomp(regex_t *preg, const char *regex,int cflags);<br /> <br /> 参数regex是一个字符串,它代表将要被编译的正则表达式;参数preg指向一个声明为regex_t原创 2011-03-08 20:00:00 · 798 阅读 · 0 评论 -
网络地址转换
<br />1.从点分十进制的IP地址转换成sockaddr_in<br />struct sockaddr_in ina;ina.sin_addr.s_addr=inet_addr(”164.112.175.124”);<br />2.sockaddr_in转换成IP地址字符串<br />inet_ntoa(ina.sin_addr)原创 2011-06-01 15:14:00 · 945 阅读 · 0 评论 -
查看linux系统的位数
1.cat /proc/cpuinfo 查找flags 看里面有没有lm字符 ,若有说明支持64位系统 lm的意思是long mode。当然这只是说明CPU是否支持64位,还不能说明操作系统是否是64位。2.file 命令file 任意一个可以执行程序。如果是64位的操作系统则显示为 ELF 64-bit LSB executable, x86-64.32位的操作系统则显原创 2011-12-12 14:40:49 · 749 阅读 · 0 评论 -
UNIX SIGIO信号的使用
windows平台下异步IO可以通过WSAEventSelcet来实现IO读写操作的异步通知,UNIX下也有一个类型的SIGIO信号来实现IO异步通知机制。为了验证该功能,自己做了一个 demo,发帖保存一下。1.首先初始化一个socket(当然也可以用其它的文件描述符);将这个文件描述符设置成异步非阻塞;初始化一个SIGIO信号的处理函数struct sockaddr_in serv_a原创 2012-10-19 17:26:04 · 9710 阅读 · 0 评论 -
CURL 宏定义列表
列表CURL库一共有17个函数 curl_close:关闭CURL会话 curl_copy_handle:复制一个CURL会话句柄,同时3复制其所有参数 curl_errno:返回最后一个错误码 curl_error:返回一个字符串,用以描述当前会话的最后一个错误原创 2014-07-22 19:15:04 · 5627 阅读 · 1 评论 -
nginx_fastcgi_c++ 服务器环境搭建
1.Nginx1.1.安装Nginx 的中文维基 http://wiki.codemongers.com/NginxChs 下载 Nginx 0.6.26(开发版)(请下载最新版本)tar zxvf nginx-0.6.26.tar.gz./configure,注意了类似checking for *** ... not found项,可能是依赖包没有,则需要安装依赖包缺少PCRE,原创 2014-08-06 13:49:56 · 2603 阅读 · 0 评论 -
openldap2.4 的同步&分布式部署方式
1、Syncrepl (全量模式):slave服务器用拉的方式同步master数据,使用该方法最大的缺陷在于:当你修改了一个Entry中的任何一个属性,那么该方法会把所有的条目都同步过来。2、Delta-syncrepl(增量模式):比syncrepl多了一个基于日志的同步功能。每在master修改一条数据后,就会产生一个日志文件,salve通过master的日志进行相应的修改3、N-WA原创 2014-12-26 21:55:20 · 10379 阅读 · 0 评论 -
linux服务器编程--EPOLL
介绍epoll的文章大多都详细介绍了epoll模型和select/poll模型之间的比较,这里就不再详细列举,只总结一下我对这两个模型的看法:1.要监视的文件句柄非常多,而且每次完成操作的句柄非常少,使用epoll模型效率比select/poll模型要高许多;2.取决于文静句柄的响应速度,在LAN环境中这几个模型的效率差不多;WAN环境中epoll的效率最高;1.Linux2.6内核epoll介绍 先介绍2本书《The Linux Networking Architecture--Design and原创 2010-07-01 10:47:00 · 6444 阅读 · 0 评论 -
Kqueue TCP服务端
<br />#include <sys/types.h> /* basic system data types */#include <sys/socket.h> /* basic socket definitions */#include <sys/time.h> /* timeval{} for select() */#include <time.h> /* timespec{} for pselect() */#include <netinet/in.h>原创 2010-07-01 11:19:00 · 1318 阅读 · 0 评论 -
使用DirectShow驱动摄像头
使用DirectShow驱动摄像头对于小摄像头的驱动有几种方法,通过使用DirectShow来驱动摄像头灵活性比较好,有简单的方法也有比较复杂但更有效的方法,本文只介绍简单方法,希望与大家交流! 用DirectShow来使用摄像头,一般要求摄像头的驱动是WDM格式的,当然,一些比较老的驱动格式DirectShow也可支持。DirectShow通过图形过滤管理器(Filter Gra转载 2006-11-30 13:03:00 · 1554 阅读 · 0 评论 -
bcopy(), memccpy(), memcpy(), strcpy(), strncpy()的区别与使用
相关函数: bcopy(), memccpy(), memcpy(), strcpy(), strncpy()表头文件: #include 定义函数: void *memmove(void *dest, const void *src, size_t n);函数说明: memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和de原创 2007-09-03 14:45:00 · 3154 阅读 · 0 评论 -
搜索引擎技术
搜索引擎一直专注于提升用户的体验度,其用户体验度则反映在三个方面:准、全、快。用专业术语讲是:查准率、查全率和搜索速度(即搜索耗时)。其中最易达到的是搜索速度,因为对于搜索耗时在1秒以下的系统来说,访问者很难辨别其快慢了,更何况还有网络速度的影响。因此,对搜索引擎的评价就集中在了前两者:准、全。中文搜索引擎的“准”,需要保证搜索的前几十条结果都和搜索词十分相关,这需由“分词技术”和“排序技术”来决转载 2007-09-11 14:01:00 · 1349 阅读 · 0 评论 -
关于volatile和restrict关键字
volatile 可能我们用的都比较多也比较常见吧,主要就是告诉编译器,每次在使用volatile指定的变量时总是重新去获取他的值,更简单的理解我是这样的,为了计算某个内容地址所存的内容会把他放入CPU寄存器,为了优化,下一次就直接从寄存器里取值了volatile就是为了告诉编译器,不管什么情况你都要去内存里重新获取他的内容原创 2009-05-26 09:17:00 · 987 阅读 · 0 评论 -
使用静态库和动态库
使用和生成库 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。 ln -s libhello.so.1.0 libhell原创 2009-05-26 09:18:00 · 3659 阅读 · 0 评论 -
GCC编译选项
版本] -0.13 [声明] 这篇文档是我的关于gcc参数的笔记,我很怀念dos年代我用小本子,纪录任何的dos 命令的参数.哈哈,下面的东西可能也不是很全面,我参考了很多的书,和gcc的帮助.不全的原因是,有可能我还没有看到这个参数,另一种原因是,我可能还不会用他 但是,我会慢慢的补齐的.哈哈 假如您要转在本文章请保留我email(pianopan@beeship.com)和文章的全面性.转载 2009-05-26 09:21:00 · 2911 阅读 · 2 评论 -
GDB子进程
在子进程中sleep,然后attach上去。gdb --pid=123456ps出子进程的id,gdb attach 进程号.http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html实际上,GDB 没有对多进程程序调试提供直接支持。例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试该进程,子进程会不受干原创 2009-05-26 09:16:00 · 4101 阅读 · 0 评论 -
Linux内存管理
本文首先介绍一下Linux内存管理方式,着重说明一下用户空间的内存管理,包括Linux虚拟映射以及GLIBC中malloc的实现;然后简要介绍单进程多线程的内存管理方式,主要涉及各线程堆栈空间的分配;Linux内存管理Linux采用两级保护机制,隔离内核空间和用户程序空间,使用户程序无法直接访问内核,而只能通过系统调用的方式。对于32位CPU来说,Linux虚拟内存空间大小为4G,其转载 2009-08-19 17:11:00 · 1399 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(static): 全局变量和静态变量的存储原创 2009-08-20 14:23:00 · 991 阅读 · 0 评论 -
getrlimit和setrlimit 获得linux下面的进程可用资源
getrlimit和setrlimit函数 每个进程都有一组资源限制,其中某一些可以用getrlimit和setrlimit函数查询和更改。#include #include int getrlimit(int resource,struct rlimit *rlptr);int setrlimit(int resource,const struct rlimit rlptr);Bo转载 2009-08-19 17:13:00 · 6535 阅读 · 1 评论 -
GNU 起源
在unix平台下开发了一年多,整天埋头写C的代码。某天查资料时发现自己的无知。连GNU,GNOME,GTK+这些名词还不是和了解,于是恶补。在这把网上找的资料整理了一下,当笔记留在博客上。希望老鸟们不要笑。 gnuGNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallm原创 2010-02-04 10:02:00 · 1046 阅读 · 0 评论 -
GNOME
GNOME(GNU)GNOME 即GNU网络对象模型环境 (The GNU Network Object Model Environment),GNU计划的一部分,开放源码运动的一个重要组成部分。 是一种让使用者容易操作和设定电脑环境的工具。 目标是基于自由软件,为Unix或者类Unix操作系统构造一个功能完善、操作简单以及界面友好的桌面环境,他是GNU计划的正式桌面。转载 2010-02-04 10:09:00 · 1015 阅读 · 0 评论 -
6、openldap的OLC配置
一、将配置转换成使用olc1、停止LDAP服务器;2、编辑slapd.conf在第一个数据库配置之前加如下的配置项# before the first database definitiondatabase config# NOTE: the suffix is hardcoded as cn=config and # MUST not have a suffix di原创 2014-12-26 19:12:35 · 4105 阅读 · 0 评论