随笔分类 -  C/C++

各类链表
System IPC 与Posix IPC(msg消息对列)
摘要:系统消息队列:一、消息队列基本概念 系统V消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除。因此系统中记录消息队列的数据结构(struct ipc_ids msg_ids)位于内核中,系统中的所有消息队列都可以在结构msg_ids中找到访问入口。消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构struct msg_queue来描述(参见 附录 2)。队列头中包含了该消息队列的大量信息,包括消息队列键值、用户ID、组ID、消息队列中消息数目等等,甚至记录了最近对消息队列读写进程的ID。读者可以访问这些信息,... 阅读全文

posted @ 2013-09-16 18:39 凌峰布衣 阅读(1271) 评论(0) 推荐(0) 编辑

System IPC 与Posix IPC(共享内存)
摘要:系统v(共享内存)1.对于系统V共享内存,主要有以下几个API:shmget()、shmat()、shmdt()及shmctl()。2.shmget()用来获得共享内存区域的ID,如果不存在指定的共享区域就创建相应的区域。shmat()把共享内存区域映射到调用进程的地址空间 中去,这样,进程就可以方便地对共享区域进行访问操作。shmdt()调用用来解除进程对共享内存区域的映射。shmctl实现对共享内存区域的控制操 作。这里我们不对这些系统调用作具体的介绍,读者可参考相应的手册页面,后面的范例中将给出它们的调用方法。 注:shmget的内部实现包含了许多重要的系统V共享内存机制;... 阅读全文

posted @ 2013-09-16 14:11 凌峰布衣 阅读(1452) 评论(0) 推荐(0) 编辑

System IPC 与Posix IPC(semaphore信号灯)
摘要:POSIX下IPC主要包括三种: posix message queue posix semaphores posix shared memory sysytem v IPC包括: system v message queue system v semaphores system v shared memory1.Semaphores 在POSIX IPC中,每个IPC对象是有名称的,而且名称是一个很重要的概念,posix ipc使用ipc的名称作为ipc的标识。mq_open sem_open shm_open三个函数的第一个参数就是这个名称,这个名称不一定是在文件... 阅读全文

posted @ 2013-09-12 13:28 凌峰布衣 阅读(3696) 评论(0) 推荐(0) 编辑

posix进程间的通信
摘要:1.无名管道1.1管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而... 阅读全文

posted @ 2013-09-10 15:47 凌峰布衣 阅读(2637) 评论(1) 推荐(0) 编辑

Posix多线程编程学习笔记
摘要:Blaise Barney, Lawrence Livermore National Laboratory 目录表 摘要 译者序Pthreads 概述 什么是线程? 什么是Pthreads? 为什么使用Pthreads? 使用线程设计程序 Pthreads API编译多线程程序 线程管理 创建和终止线程 向线程传递参数 连接(Joining)和分离( Detaching)线程 栈管理 其它函数 互斥量(Mutex Variables) 互斥量概述 创建和销毁互斥量 锁定(Locking)和解锁(Unlocking)互斥量 条件变量(Condition Variable... 阅读全文

posted @ 2013-09-09 14:56 凌峰布衣 阅读(6661) 评论(0) 推荐(2) 编辑

C++的四种强制类型转换
摘要:C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢? 新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是 static_cast(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫 一眼这样的代码,就能立即知道一个强制转换的目的。 四种转换的区别: static_cas 阅读全文

posted @ 2013-09-09 14:20 凌峰布衣 阅读(7012) 评论(0) 推荐(0) 编辑

所有时间测试函数
摘要:/**timeTest.c**Createdon:Aug28,2013*Author:zsf*/#include#include#include#includeintmain(intargc,char*argv[]){#if0//获取时间{//取得S级的时间time_ttime_s=0;structtm*nowtm=NULL;charbuf[64]={0};chartmbuf[64]={0};if(-1==time(&time_s)){perror("timeerror");//获取当前时间}printf("timeis[%d]\n",(int) 阅读全文

posted @ 2013-08-28 14:46 凌峰布衣 阅读(497) 评论(0) 推荐(0) 编辑

时间函数应用 time
摘要:表 1. C 时间函数 function 定义 含义 返回值 精度 time() time 函数获得从 1970 年 1 月 1 日 0 点到当前的秒数,存储在time_t结构之中。 time_t 秒 gettimeofday() gettimeofday 函数返回从 1970 年 1 月 1 日 0 点以来,到现在的时间。用 timeval 数据结构表示。 struct timeval { time_t tv_sec; long int tv_usec; }; 微秒 clock_gettime() clock_gettime 函数返回从 1970... 阅读全文

posted @ 2013-08-27 18:14 凌峰布衣 阅读(389) 评论(0) 推荐(0) 编辑

50个c/c++源代码网站
摘要:C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建 议,以进一步加强这方面的清单。 添加:http://www.boost.org/ 1、http://snippets.dzone.com/tag/c/--数以千计的有用的C语言源代码片段 2、http://www.hotscripts.com/category/c-cpp/scripts-programs/Hotscripts --提供数以百计的... 阅读全文

posted @ 2013-08-27 17:56 凌峰布衣 阅读(577) 评论(0) 推荐(0) 编辑

new与malloc的区别
摘要:1、new是c++中的操作符,malloc是c中的库函数。 2、new不止分配内存,而且会调用类的构造函数,同时,析构时会调用析构函数。(申请一个类对象的指针时) malloc只分配内存,不会进行初始化类的工作,同样,free不会调用析构函数。 3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。 4、new 和 malloc效率比较 new 有三个字母, malloc有六个字母 new可以认为是malloc加构造函数的执行。 new出来的指针是直接带类型信息的。 而malloc返回的都是void指针。 一:... 阅读全文

posted @ 2013-08-08 15:01 凌峰布衣 阅读(985) 评论(0) 推荐(0) 编辑

C++虚函数与虚函数表
摘要: 阅读全文

posted @ 2012-11-22 15:00 凌峰布衣 阅读(151) 评论(0) 推荐(0) 编辑

static关键字的使用
摘要:1 一、面向过程设计中的static 2 1、静态全局变量 3 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。 4 静态全局变量有以下特点: 5 该变量在全局数据区分配内存; 6 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 7 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 8 静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图: 9 代码区10 全局数据区11 堆区12 栈区13 一般程序的由ne... 阅读全文

posted @ 2012-11-07 19:03 凌峰布衣 阅读(214) 评论(0) 推荐(0) 编辑

数据转换
摘要:1 #ifndef CONVERTTOOL_H_ 2 #define CONVERTTOOL_H_ 3 #include "isEndian.h" 4 #include <string.h> 5 #include <stdlib.h> 6 int getCharFromInt(int v,char buf[]){ 7 int i=0; 8 if(!isEndian()){ 9 for (int i = 0; i < sizeof(buf); i++){10 buf[i] = (unsigned char) (v & 0x000000ff 阅读全文

posted @ 2012-11-06 15:24 凌峰布衣 阅读(588) 评论(0) 推荐(0) 编辑

const 详解
摘要:const用法详解面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法2. 必须初始化 const int i=5; //合法 const int j; //非法,导致编译错误3. 在另一连接文件中引用const常量 extern const int i; //合法 extern const int j=10; //非法,常... 阅读全文

posted @ 2012-11-02 18:51 凌峰布衣 阅读(272) 评论(0) 推荐(0) 编辑

引用和指针
摘要:1 引用和指针使用原则: 2 1.在可以用引用的情况下,不要用指针; 3 2.引用不允许重新赋值.,当使用一个变量指向不同的对象时,必须用指针; 4 3.引用不允许为空,当存在对象为空时,必须使用指针。 5 引用说明: 6 (1) double & rr=1; 等价与 double temp; temp=double(1); double & rr=temp; 7 (2) int *a; int * & p=a; int b=8; p=&b; //正确,指针变量的引用 8 void & a=3; //不正确,没有变量或对象的类型是void 9 int & 阅读全文

posted @ 2012-11-02 18:45 凌峰布衣 阅读(303) 评论(0) 推荐(0) 编辑

重载、覆盖和覆写的区别
摘要:Overload:1、定义:1)方法名相同;2)参数不同,体现在参数个数和类型上的不同2、范围:发生在同个类中Override:1、定义:1)方法名相同;2)参数相同;3)返回值类型相同2、范围:发生在子类中注意:Override时,方法的访问权限不能更严格 1 方法重载(Overload): 2 方法重载:同一个类中不能有两个标识相同的成员。对于方法来说,方法名和参数列表共同组成了方法的标识,因此在一个类中允许存在两个相同名称的方法, 只要方法的参数列表不完全相同(参数数量或参数类型不同)。这时称该方法具有同名的重载形式,即方法名相同而标识不同。 3 方法名:相同 4 参数列表:必须不同.. 阅读全文

posted @ 2012-11-02 17:27 凌峰布衣 阅读(1134) 评论(0) 推荐(0) 编辑

virtual-->纯虚类
摘要:1 1.含有一个纯虚函数的类是纯虚类 2 2.纯虚类可以有成员变量 3 3.纯虚类可以有普通的成员函数(包括普通成员函数和虚拟成员函数) 4 3.纯虚类可不可以又带有参数的构造函数? (可以) 5 4.可不可以在纯虚类的派生类的构造函数中显式调用纯虚类的带参数构造函数(可以)#include <iostream>using namespace std;class A{ public: A(string & name); ~A(); virtual void abmethod(int value) = 0; private: std::string name_;};A::A( 阅读全文

posted @ 2012-11-02 16:02 凌峰布衣 阅读(378) 评论(0) 推荐(0) 编辑

virtual-->Class
摘要:虚基类的特点: 虚基类构造函数的参数必须由最新派生出来的类负责初始化(即使不是直接继承); 虚基类的构造函数先于非虚基类的构造函数执行。如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。C++提供虚基类(virtual base class )的方法,使得在继承间接共同基类时只保留一份成员。为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。否则仍然会出现对基类的多次继承。 1 #include <iostream> 2 using namespace std... 阅读全文

posted @ 2012-11-02 15:17 凌峰布衣 阅读(736) 评论(0) 推荐(0) 编辑

virtual-->function
摘要:如果基类和派生类都定义了"相同名称的成员函数",那么通过对象指针调用成员函数时,到底调用哪个函数,要根据该指针的原始类型而定,而不是视指针实际所指的对象类型而定。 如果用了虚函数,这些情况就不存在了。虚函数的总结: 1.如果想在派生类中重新定义一个成员函数,那么就应该在基类中把该函数设为"virtual"。 2.以单一指令调用不同函数(这句话不好理解,下面会解释),这种性质就是"多态"。 3.虚函数是C++语言的多态性质和动态绑定的关键。 4.既然抽象类中的虚函数不打算被调用,我们就不应该定义它,应该把它设为纯虚函数(在函数声明后加上 阅读全文

posted @ 2012-11-02 14:25 凌峰布衣 阅读(267) 评论(0) 推荐(0) 编辑

指针-->(数组)
摘要:1 #include <iostream> 2 #include <stdlib.h> 3 #include <stdio.h> 4 #include <string.h> 5 6 7 using namespace std; 8 9 int main(){10 cout<<"数组指针测试:--------"<<endl;11 int (*p)[2];12 13 int a[3][2]={{1,2},{3,4},{5,6}};14 15 // p =&a[0];16 p = a;17 18 co 阅读全文

posted @ 2012-11-02 13:23 凌峰布衣 阅读(217) 评论(0) 推荐(0) 编辑

导航