
C/C++
不知名小ITer
滴水穿石...
展开
-
经典的C语言面试题目
以前面试遇到的,好像很多面试的人都遇到过这些题目,现在贴出来,并写上答案,找工作的朋友可以参考参考。 1.将字符串“ABCD1234abcd”倒转。 #include #include #include int main(){ char str[] = "ABCD1234abcd"; int length原创 2009-07-31 14:50:00 · 1262 阅读 · 0 评论 -
IP地址格式转换
<br />先来讲一个使用linux接口的将unsigned int型或者unsigned long等类型的数据转化成点分十进制的方法:<br />1.在/usr/include/arpa/inet.h文件中有inet_ntoa()函数的声明:<br />extern char *inet_ntoa(struct in_addr __in) __THROW;<br />__in:是struct in_addr的结构体变量.<br />那么这个结构体变量是个什么东西呢?我们来看看:<br />原创 2010-10-27 09:20:00 · 13242 阅读 · 0 评论 -
pthread线程编程--POSIX的线程机制
<br />在linux下,线程和进程的概念和处理上,并没有象其他的操作系统一样的严格区分.线程在linux中,又会称为轻量级进程.而且和win系统很重要的区别是,在linux下面,新建的线程并不在原进程/线程中,而是通过clone()系统调用,生成了一个和原先的进程/线程完全一样的进程/线程,并在这个线程中执行线程的函数.<br /><br />POSIX线程编程主要涉及的是POSIX的线程接口和一些相关的线程通讯的机制.<br />下面会介绍相关的POSIX线程的接口,和线程通讯机制,以及一些相原创 2010-10-28 16:58:00 · 1858 阅读 · 2 评论 -
strtol()函数解析
<br />strtol()函数的原型:<br />long int strtol ( const char * str, char ** endptr, int base );<br /><br />strtol()函数的reference:http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/<br /><br />然后一篇很详细的介绍strtol()函数的blog...<br /><br /><br />long int strt原创 2010-10-29 13:33:00 · 1785 阅读 · 0 评论 -
关于extern "C"解释
<br />在代码中,头文件里面经常看到<br />#ifndef EXAMPLE_HEAD_INCLUDE<br />#define EXAMPLE_HEAD_INCLUDE<br /><br />#ifdef __cplusplus<br />extern "C" {<br />#endif<br /><br />//code body.<br /><br />#ifdef __cplusplus<br />}<br />#endif<br /><br />#en原创 2010-10-29 17:53:00 · 927 阅读 · 0 评论 -
检测异常并打印堆栈
<br />#include <iostream>#include <signal.h>#include <unistd.h>#include <stdlib.h>#include <execinfo.h>#include <stdio.h>using namespace std;static void print_stack(void){ void *array[10]; char **strings; int arrsize = backtrace (ar原创 2010-12-22 09:28:00 · 1612 阅读 · 0 评论 -
使用异步 I/O 大大提高应用程序的性能
<br />转载的:<br />aio的确能够提高file磁盘的文件读写的性能.更加详细的blog在:<br />http://www.ibm.com/developerworks/cn/linux/l-async/<br /><br /><br />根据同步和异步,阻塞和非阻塞,可以分为四种linux上的I/O模型.<br />1)同步阻塞I/O<br /><br /><br />2)同步非阻塞I/O<br />3)异步阻塞I/O<br />4)异步非阻塞I/O<br /><br /><br />【同步I转载 2010-12-30 13:38:00 · 1226 阅读 · 0 评论 -
linux内核同步方式--自旋锁
<br />自旋锁:是linux内核中最常见的锁,自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图获得一个被持有的自旋锁,那么该线程会一直进行忙循环,旋转,等待锁重新可用.<br /><br />在任何时候,自旋锁都可以防止多于一个的执行线程同时进入临界区,一个被争用的自旋锁会导致请求他的线程在等待锁重新可用时自旋,所以自旋锁不应被长期持有.这也是自旋锁的初衷:在短期内进行轻量级加锁.<br />自旋锁的实现与体系结构密切相关,代码往往通过汇编实现.这些与体系结构相关的代码定义在<asm/s原创 2010-11-13 17:33:00 · 2594 阅读 · 1 评论 -
linux内核同步方式
<br />内核同步通常有三种:原子操作,自旋锁和信号量<br /><br />原子操作:保证指令以原子的方式执行,执行过程不会被打断.两个原子操作绝不可能并发的访问同一变量.<br />内核提供两种原子操作接口:<br />1)一组针对整数进行操作;<br />2)一组针对单独的位进行操作.<br />大多数体系结构本来就支持简单的原子操作,要么就为单步执行提供锁内存总线的指令.<br /><br />针对整数的原子操作只能对atomic_t类型的数据进行处理.<br />使用原创 2010-11-13 15:47:00 · 1325 阅读 · 0 评论 -
C++中的虚函数和纯虚函数用法
<br /> 1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。<br /> 2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)<br />只有声明而没有定义。 <br /> 3. 虚函数和纯虚函数转载 2010-11-25 10:19:00 · 920 阅读 · 0 评论 -
Linux编译链接问题----静态库和动态库
<br /><br />1. Linux静态库和动态库的命名规则:<br />静态函数库:静态库的名字一般是libxxx.a,利用静态库编译生成的文件比较大,因为整个静态库所有的数据都会被整合进目标代码中。<br />a) 优点:编译后,可执行文件不需要外部支持;<br />b) 缺点:生成的可执行程序大;静态库改变了,就需要重新编译可执行程序。<br /> <br />动态函数库:动态库的名字一般是libxxx.so,相对于静态库,动态函数库在编译的时候并没有被编原创 2011-05-10 18:15:00 · 8766 阅读 · 1 评论 -
自增自减运算的原理解析
int a=1;int b=1;a+++++b;a---b;经常有人问到以上的这些表达式的值是什么..?是根据什么原理来分析这样的表达式...?就这个内容,来讨论一下... 这里需要涉及到"贪心法"这个说法了...在>中说明了这样一个规则:每一个符号应该包含尽可能多的字符.意思是:编译器在分析程序的时候,是从左至右的单个字符读入的,那么类似"/*test"这样的字符串,那要怎么解析呢..?根据规则原创 2009-12-08 17:12:00 · 2491 阅读 · 2 评论 -
socket编写流程
<br />socket是一种在Linux或者Unix下非常流行的网络编程方式,这种方式简单有效,可以很灵活的完成各种复杂的协议控制,个人感觉比使用MFC下的网络相关类库要来的更舒服一些,因为所有一切都是自己可控的。<br />但是使用socket编程有一个非常不方便的地方在于,由于在Linux下没有一个像VC这样强大的调试平台,网络通信过程中的错误追踪就会显得稍微复杂一些。无奈,只能尝试在VC下是否可以使用标准的socket函数来完成网络通信,借助VC强大的调试工具来达到高效率的编码目的。<br />在网转载 2010-08-31 16:36:00 · 1054 阅读 · 0 评论 -
STL简介
一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由AlexanderStepanov、Meng Lee和David RMusser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:转载 2010-04-08 12:05:00 · 956 阅读 · 0 评论 -
C语言中数组和指针--数组的退化
前段时间闲来看了下《c专家编程》这本书,总天来说写得不错,就是省略了些东西,当时没搞明白--数组和指针的纠结关系,最近写了几句代码测试了下,顿时豁然开朗... 我写了段测试代码:#includevoid func1(char str[]){ char *ptr = str; char str1[3] = {s,w,v}; printf("***str1原创 2010-04-15 16:08:00 · 1508 阅读 · 0 评论 -
函数指针和指针函数的区别
简单的说,函数指针和指针函数是完全不一样的概念,这里写出来只是说比较容易混淆,函数指针是一个指针,是一个指向函数的指针.指针函数是一个函数,是一个返回值是指针的函数. 1. 函数指针:在程序运行中,函数代码是程序的算法指令部分,他们和数组一样占据存储空间,一样拥有相应的地址。可以使用指针变量指向数组的首地址,也可以用指针变量指向原创 2009-08-03 17:03:00 · 1332 阅读 · 1 评论 -
单链表实现猴子选大王(约瑟夫环问题)
1.经典的约瑟夫环问题:m个猴子围在一起,数到n的退出,最后剩下的一个就是猴子王--猴子选大王 #include #includestruct Node{ int data; struct Node *next;};//建立一个节点结构体 int main(){ struct Node *head,原创 2009-07-31 14:45:00 · 7379 阅读 · 1 评论 -
c语言文件定位:fseek()函数和ftell()函数的使用
fseek函数是用来设定文件的当前读写位置:函数原型:int fseek(FILE *fp,long offset,int origin);函数功能:把fp的文件读写位置指针移到指定的位置. fseek(fp,20,SEEK_SET);//意思是把fp文件读写位置指针从文件开始后移20个字节.ftell函数是用来获取文件的当前读写位置;函数原型: lon转载 2009-09-04 10:30:00 · 33818 阅读 · 4 评论 -
关于++和--运算符
在c/c++论团上总是隔一段时间就会出现问++(自增)--(自减)运算符的,这里做个解释: ++i;//使用i的值之前,先使i的值加1--i;//使用i的值之前,先使i的值减1i++;//使用i的值之后,使i的的值加1i--;//使用i的值之后,使i的的值减1 自增运算符和自减运算符的特殊地方也就在这:既可以做前缀运算符,也可以做后缀运算符,还有不可搞错的一点就是自增和原创 2009-09-08 14:21:00 · 1854 阅读 · 0 评论 -
c/c++的知识点收集
1.动态获得内存的代码: void GetMemory(char **p, int num) { *p = (char *)malloc(sizeof(char) * num); } char* GetMemory2(int num) { char* p = (char *)malloc(sizeof(char) * num); re原创 2009-10-15 10:40:00 · 792 阅读 · 0 评论 -
c++中string类成员函数c_str()
1.string类成员函数c_str()的原型: const char *c_str()const;//返回一个以null终止的c字符串 2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式; 3.操作c_str()函数原创 2009-10-22 10:31:00 · 9300 阅读 · 1 评论 -
linux多进程编程
在linux中,运行的一个进程,会占去linux的三个地方,代码区,堆栈区和数据区.如果同时运行多个相同的程序,他们就会使用相同的代码区,代码区中存放的就程序的代码,但是数据区和堆栈区分别存放的是程序的数据,全局变量和局部变量,因此即使是相同的程序,也不可同时使用相同的数据和堆栈区. #include#includeint main(){ if(fork() ==原创 2009-11-02 11:28:00 · 1536 阅读 · 1 评论 -
Pthread线程库--NPTL
Pthread是一套用户级线程库,但在linux上实现时,却使用了内核级线程来完成,这样提高的线程的并发性.Pthread是由POSIX提供的一套通用的线程库,具有很好的移植性. 用于创建一个新的线程:int pthread_create(pthread_t *THREAD,pthread_attr_t * ATTR,void * (*START_ROUTINE)(void *),v原创 2009-11-02 14:53:00 · 5402 阅读 · 0 评论 -
C的动态内存管理--mallac()和free()
关于c的动态内存管理一直是个经久不衰的话题,面试也是基本上都会考的,本来感觉已经明白了,但是今天使用的时候一不小心导致程序崩溃了,因此深入的去查了下资料,收获不少...贴出来与大家分享... 先贴个错误代码: int * ptr = (int *)malloc(256); ptr = ptr + 3;//对指针进行一个偏移操作 fr原创 2010-01-26 17:03:00 · 1822 阅读 · 0 评论 -
递归和迭代的区别
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.使用递归要注意的有两点:1)递归就是在过程或函数里面调用自身;2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.原创 2010-03-02 10:29:00 · 128598 阅读 · 29 评论 -
理解C语言标准I/O函数
通常在C语言中使用标准I/O函数的第一步就是用fopen()打开一个文件(标准输入输出是自己打开的),fopen()函数在打开一个文件的同时还建立了一个缓冲区,还有一个包含文件和缓冲区相关数据的数据结构,我们熟知的FILE指针类型,FILE类型的指针并不是指向文件本身,而是指向上面所说的包含文件信息的数据结构...不仅如此,fopen()函数的返回值原创 2010-03-15 09:31:00 · 2361 阅读 · 0 评论 -
kernel-2.6.38内核驱动globalmem--添加中断机制和udev机制
//这个驱动网上有例子,但是很多机制在新的内核里面已经过时了,所以我重写了一下,尽量使用了一些最近内核里面的机制。//创建设备节点,使用的udev机制;//注册中断向量的时候使用了新的接口函数,包括了ISR的接口的改变。#include #include #inc原创 2011-07-27 15:57:39 · 1193 阅读 · 0 评论