
C/C++
文章平均质量分 73
voipmaker
nnn
展开
-
buffer overflow
{ char buf[8]; sprintf(buf,"AAAA%3s","XXXXXXXX"); printf("%s/n",buf); } <br />what will happen?<br />The buffer have 8 characters space and only 3 free characters left, however, "XXXXXXXX" is 8 characters long.<br /> <br />It mak原创 2010-11-26 15:45:00 · 1022 阅读 · 0 评论 -
IPC:Interrupts and Signals
<br />In this section will look at ways in which two processes can communicate. When a process terminates abnormally it usually tries to send a signal indicating what went wrong. C programs (and UNIX) can trap these for diagnostics. Also user specified com原创 2010-11-29 18:06:00 · 1205 阅读 · 0 评论 -
多线程服务器的适用场合
<br />“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget 不是长期运行的,httpd 是长期运行的。<br />正名<br />与前文相同,本文的“进程”指的是 fork() 系统调用的产物。“线程”指的是 pthread_create() 的产物,而且我指的 pthr原创 2010-11-30 12:00:00 · 1257 阅读 · 0 评论 -
Low Level Operators and Bit Fields
Low Level Operators and Bit Fields<br /> We have seen how pointers give us control over low level memory operations. <br />Many programs (e.g. systems type applications) must actually operate at a low level where individual bytes must be operated on. <br原创 2010-11-30 22:26:00 · 937 阅读 · 0 评论 -
Basic String Handling Functions
All the string handling functions are prototyped in: #include The common functions are described below: char *stpcpy (const char *dest,const char *src) -- Copy one string into another. int strcmp(const char *string1,const char *string2) - Compare string1 a原创 2010-11-30 23:18:00 · 1081 阅读 · 0 评论 -
标准C++库string及STL相关函数
一.标准C++库字符串类std::string的用法#include<string>std::string s1;std::string s3(s2);std::string s2("this is a string");begin 得到指向字符串开头的Iteratorend 得到指向字符串结尾的Iteratorrbegin 得到指向反向字符串开头的Iteratorrend 得到指向反向字符串结尾的Iteratorsize 得到字符串的大小leng原创 2010-12-01 17:26:00 · 838 阅读 · 0 评论 -
对于可重入、线程安全、异步信号安全几个概念的理解
<br /> 可重入与异步信号安全<br />一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误。<br />《多线程编程指南》中定义,可以被信号控制器安全调用的函数被称为"异步信号安全"函数。<br />因此,我认为可重入与异步信号安全是一个概念。<br /><br />有人将可重入函数与线程安全函数混为一谈,我认为是不正确的。<br /><br />这里引用CSAPP中的描述来说明一下:<br />-原创 2010-12-01 16:57:00 · 871 阅读 · 0 评论 -
GDB调试精粹
<br /><br />该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点 <br />(gdb) delete breakpoint <br />3.禁止使用某个断点 <br />(gdb) disable breakpoint 1 <br />该命令将禁止断点 1,同时断点信息的 (Enb)域将变为 n <br />4.允许使用某个断点 <br />(gdb) enable breakpoint 1 <br />该命令将允许断点 1,同时断点信息的 (Enb)域将变为 y <br />5.原创 2010-12-01 17:06:00 · 916 阅读 · 0 评论 -
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
<br />一. 虚析构函数<br />我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。<br /><br />如:<br /><br />class Base<br />{<br />public:<br /> Base(){}<br /> virtual~Base(){}<br />};<br /><br />class Derived: public Base<br />原创 2010-12-01 17:45:00 · 808 阅读 · 0 评论 -
各大IT公司笔试真题汇总
<br />巨人网络java笔试基础题分享<br />http://www.coderarea.net/bbs/read.php?tid=834<br /><br />百度笔试题<br />http://www.coderarea.net/bbs/read.php?tid=811<br /><br />百度2010校招运维部门笔试<br />http://www.coderarea.net/bbs/read.php?tid=779<br /><br />百度2010年校园招聘软件测试笔试题<br />htt原创 2010-10-13 21:46:00 · 1539 阅读 · 0 评论 -
C and C++ signal handling and C++ signal classes and examples
Signals:<br />Description: Signals are software interrupts delivered to a process by the operating system. Signals can also be issued by the operating system based on system or error conditions. There is a default behavior for some (i.e. a process is termi原创 2010-10-17 01:26:00 · 1642 阅读 · 0 评论 -
Remote Procedure Calls (RPC)
<br />SubsectionsWhat Is RPCHow RPC WorksRPC Application DevelopmentDefining the ProtocolDefining Client and Server Application CodeCompliling and running the applicationOverview of Interface RoutinesSimplified Level Routine FunctionTop Level RoutinesInter原创 2010-10-17 01:41:00 · 1409 阅读 · 0 评论 -
便利的开发工具-log4cpp快速使用指南
<br />简介: log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内的C++语言开发人员却使用的不多。这里从开发人员使用的角度介绍这个库,使开发人员用最少的代价尽快掌握这种技术。下面先简单介绍一下这个项目的优点(也是log4j的优点),然后分原理,手动使用步骤,配置文件驱动方式使用步骤,其他考虑等方面进行讨论。以下讨论基于log4cpp0.3.4b。<br /> 标记本原创 2010-10-18 00:11:00 · 1518 阅读 · 0 评论 -
MySQL 数据库中使用 C 执行 SQL语句
<br />与 PostgreSQL 相似,可使用许多不同的语言来访问 MySQL,包括 C、C++、Java 和 Perl。从 Professional Linux Programming 中第 5 章有关 MySQL 的下列章节中,Neil Matthew 和 Richard Stones 使用详尽的 MySQL C 接口向我们介绍了如何在 MySQL 数据库中执行 SQL 语句。他们将讨论返回数据的语句,例如 INSERT 以及不返回数据的语句,例如 UPDATE 和 DELETE。然后,他们将编写从原创 2010-10-18 00:15:00 · 1145 阅读 · 0 评论 -
高阶函数
<br />函数是计算机程序功能强大的构建块。使用函数可以将代码划分为更简单、更容易管理的代码段,还可以将程序划分为可重用的单元--这些单元既可以在本程序中使用,也可以在其他程序中使用。在本文中,我们将介绍如何基于一些模板在运行时创建新函数,如何创建一些在运行时可以使用参数配置的函数,以及在函数中 Scheme 语言如何成为一个有价值的工具。<br /> <br />在计算机程序中,函数构成了功能强大的代码段,这让开发人员可以将代码划分成更简单、更容易管理的代码段,同时还让程序员可以将自己的程序划分成可重用原创 2010-10-18 00:20:00 · 1171 阅读 · 0 评论 -
The Function Pointer Tutorials
The Function Pointer Tutorials 1. Introduction to Function Pointers 1.1 What is a Function Pointer ? 1.2 Introductory Example or How to Replace a Switch-Statement 2. The Syntax of C and C++ Function Pointers 2.1 Define a Function Pointer 2.2原创 2010-10-18 00:23:00 · 732 阅读 · 0 评论 -
C and C++ Links
My other Projects Learning C and C++ C/C++ Newsgroups Programming Misc<br />The links on Function Pointers and Callbacks can now be found as chapter 5 of the Function Pointer Tutorials.<br /> My other ProjectsSource to HTML Converter Freeware tool that c原创 2010-10-18 00:27:00 · 902 阅读 · 0 评论 -
内存管理内幕
本文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必原创 2010-10-18 00:33:00 · 804 阅读 · 0 评论 -
C字符串常用处理函数
<br />本章集中讨论字符串操作,包括拷贝字符串,拷贝字符串的一部分,比较字符串,字符串右对齐,删去字符串前后的空格,转换字符串,等等。C语言提供了许多用来处理字符串的标准库函数,本章将介绍其中的一部分函数。<br /> 在编写C程序时,经常要用到处理字符串的技巧,本章提供的例子将帮助你快速学会一些常用函数的使用方法,其中的许多例子还能有效地帮助你节省编写程序的时间。<br /> 6.1 串拷贝(strcpy)和内存拷贝(memcpy)有什么不同?它们适合于在哪种情况下使用?<br />原创 2010-10-18 18:09:00 · 1043 阅读 · 0 评论 -
memmove和memcpy
<br />1.memmove<br />函数原型:void *memmove(void *dest, const void *source, size_t count)<br />返回值说明:返回指向dest的void *指针<br />参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数<br />函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标原创 2010-10-18 18:06:00 · 858 阅读 · 0 评论 -
C++知识点辨析
1, c语言中,结构体struct中不能包括函数的,而在C++中struct中可以包括函数。 <br />2,C++中结构体和类可以通用,区别主要表现在访问控制方面:struct中默认是public,而 class中默认的是private。 <br />3,构造函数最重要的作用是创建对象的本身,C++中每个类可以拥有多个构造函数,但必须至少有一个构造函数,当一个类中没有显式提供任何构造函数,C++编辑器自动提供一个默认的不带参数的构造函数,这个默认的构造函数只负责构造对象,不做任何初始化工作。但在一个类中只原创 2010-10-19 13:45:00 · 856 阅读 · 0 评论 -
C语言中产生随机数
<br />问:<br /> C语言中产生随机数的函数是什么?<br /> C语言中产生随机数的函数是什么?(好象有两个)以及这两个函数的头文件是什么?问题补充:rand和srand有什么区别没?<br /> <br />答:<br />#include <stdio.h> <br />#include <stdlib.h> <br />#include <time.h> <br />void main() <br />{ <br /> int i; <br /> sran原创 2010-10-19 13:47:00 · 1205 阅读 · 0 评论 -
c++(字符串处理函数)
<br /> <br />#include <iostream.h><br />#include <string.h><br />void main(void)<br />{<br /> char str1[10] = {"Tsinghua "};<br /> char str2[10] = {"Computer"};<br /> cout<<strncpy(str1,str2,3)<<endl;<br />}<br />运行结果:Comnghua<br />注意:字符串source中前numchars个字原创 2010-10-18 18:07:00 · 831 阅读 · 0 评论 -
Linux C函数之时间函数
<br />函数分类:<br />1. 设置时间: settimeofday, tzset<br />2. 获取时间: time, ftime, gettimeofday<br />3. 时间格式转换: mktime, strftime; gmtime, localtime; asctime, ctime<br />4. 其他: clock, difftime<br />asctime: 将时间和日期以字符串格式表示<br />头文件: time.h<br />函数定义: char *asctime(con原创 2010-10-19 12:20:00 · 1313 阅读 · 0 评论 -
linux 信号
<br />linux信号机制远远比想象的复杂,本文力争用最短的篇幅,对该机制做了深入细致的分析。信号应用实例将在信号(下)中给出。 <br />一、信号及信号来源 <br />信号本质 <br />信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 <br />信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情原创 2010-10-19 13:59:00 · 954 阅读 · 0 评论 -
GDB Command Line Arguments
<br />Starting GDB: gdb name-of-executablegdb -e name-of-executable -c name-of-core-filegdb name-of-executable -pid process-id<br />(Use ps -auxw to list process id's.) <br />Command line options: (version 6. Older versions use a single "-") OptionDescript原创 2010-10-20 09:43:00 · 1847 阅读 · 0 评论 -
GNU C 扩展之__attribute__ 机制简介
<br />GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。<br />__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。<br />__attribute__语法格式为:<br />__attrib原创 2010-10-25 23:10:00 · 934 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐?<br /> 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。<br /> 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误原创 2010-10-25 23:05:00 · 874 阅读 · 0 评论 -
常用时间函数说明
<br />asctime(将时间和日期以字符串格式表示)<br />相关函数<br /> time,ctime,gmtime,localtime<br />表头文件<br /> #include<time.h><br />定义函数<br /> char * asctime(const struct tm * timeptr);<br />函数说明<br /> asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表原创 2010-10-25 23:07:00 · 1258 阅读 · 0 评论 -
关于函数调用的总结
首先强调的是:C语言中所有函数调用都是传值调用(数组是例外情况。C里数组名就表示了数组的首地址当把数组名当参数传递时,其实也就是传了个地址而已)1、传值调用时是copy一份传给函数,在函数体内对传给函数的变量做修改不会影响原变量。这种方法如果传的对象比较大会增加很多的内存开销。 <br />#include<stdio.h><br />void*fun(char*a)<br />{<br /> a="zerk";<br /> return;<br />}<br />int<br原创 2010-10-25 23:17:00 · 1038 阅读 · 0 评论 -
C 消息连接的一种系统方法
<br /> 用过C 进行过面向对象程序设计的用户都知道,程序中的对象很少单独存在。不考虑对象间的相互作用几乎是不可能的。所以,标识对象间的关系或建立对象间的消息连接是面向对象程序设计的一项重要任务。本文着重从C 程序设计的角度,提出一种建立对象间消息连接的实用方法。如果你想详细了解面向对象程序设计技术,请参阅有关专著。大家都知道对象是数据和方法的封装体。在C 中,它们分别表现为数据成员和成员函数。程序设计者通过执行对象的各种方法,来改变对象的状态(即改变对象的属性数据)。从而使该对象发生某些“事件”。当一原创 2010-10-25 23:24:00 · 1195 阅读 · 0 评论 -
内存调试技巧
<br />C 和 C++ 程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果。来自计算机应急响应小组(请参见参考资料)和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从 70 年代末期以来,C 程序员就一直讨论此类错误,但其影响在 2007 年仍然很大。更糟的是,如果按我的思路考虑,当今的许多 C 和 C++ 程序员可能都会认为内存错误是不可控制而又神秘的顽症,它们只能纠正,无法预防。<br />但事实并非如此。本文将让您在短时间内理解与良好内存相关的编码的所有本质: 正确的内存管理原创 2010-10-25 23:09:00 · 1154 阅读 · 0 评论 -
GDB使用手册
[code]START-INFO-DIR-ENTRY <br />* Gdb: (gdb). The GNU debugger. <br />END-INFO-DIR-ENTRY <br />This file documents the GNU debugger GDB. <br /><br />This is Edition 4.12, January 1994, of `Debugging with GDB: the GNU <br />Source-Level Debugger' for GDB V原创 2010-10-25 23:15:00 · 904 阅读 · 0 评论 -
Linux下syslog日志函数使用
<br />许多应用程序需要记录它们的活动。系统程序经常需要向控制台或日志文件写消息。这些消息可能指示错误、警告或是与系统状态有关的一般信息。例如,su程序会把某个用户尝试得到超级用户权限但失败的事实记录下来。<br />通常这些日志信息被记录在系统文件中,而这些系统文件又被保存在专用于此目的的目录中。它可能是/usr/adm或/var/log目录。对一个典型的Linux安装来说,文件 /var/log/messages包含所有系统信息,/var/log/mail包含来自邮件系统的其他日志信息,/var/l原创 2010-10-25 23:02:00 · 1887 阅读 · 0 评论 -
c的内存分配问题
<br />(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。<br />(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。<br />(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期原创 2010-10-25 23:08:00 · 1077 阅读 · 0 评论 -
gdb使用精粹
<br />一:列文件清单 <br />1. List <br />(gdb) list line1,line2 <br /><br />二:执行程序 <br />要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 <br />如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 <br />利用set args 命令就可以修改发送给程序的参数,而使用show ar原创 2010-10-25 23:12:00 · 903 阅读 · 0 评论 -
使用gdb调试程序
<br /> GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。<br /><br />于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。在这里并不是要和原创 2010-10-25 23:14:00 · 919 阅读 · 0 评论 -
C++ Style Guide
Common Rules<br />The following style guidelines will be followed for both Slice and C++ code:<br />C1. Braces for compound statements will be on their own lines, at the same indentation level as the statement they are part of. Code and declarations in the原创 2010-12-17 00:05:00 · 1214 阅读 · 0 评论 -
Introduction To Unix Signals Programming
<br /> Table Of ContentsWhat Are Signals?What Are Signals Used For?Sending Signals To ProcessesCatching Signals - Signal HandlersInstalling Signal HandlersAvoiding Signal Races - Masking SignalsImplementing Timers Using SignalsSummary - "Do" and "Don't" in原创 2010-11-02 17:32:00 · 1231 阅读 · 0 评论 -
回调函数
<br /> 程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。<br />声明函数指针<br /> 回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非常类似。请看下面的例子:<br />void f();原创 2010-12-28 23:56:00 · 1066 阅读 · 0 评论