10 2012 档案

摘要:restrict:restrict只适用于指针,它声明一个指针是唯一初始化访问一个数据对象。int ar[10];int* restrict restar=(int *)malloc(10*sizeof(int));int* par=ar;for(int n=0; n<10; n++) { par[n]+=5; restar[n]+=5; ar[n]*=2; par[n]+=3; restar[n]+=3;}restar指针是restrict类型,par指针就不是,因为par即没有初始化也不是唯一访问ar数组的变量。那么,上面的程序,因为restar是唯一反问数据块的指针,... 阅读全文
posted @ 2012-10-31 19:03 星语海蓝 阅读(254) 评论(0) 推荐(0) 编辑
摘要:restrict:restrict只适用于指针,它声明一个指针是唯一初始化访问一个数据对象。int ar[10];int* restrict restar=(int *)malloc(10*sizeof(int));int* par=ar;for(int n=0; n<10; n++) { par[n]+=5; restar[n]+=5; ar[n]*=2; par[n]+=3; restar[n]+=3;}restar指针是restrict类型,par指针就不是,因为par即没有初始化也不是唯一访问ar数组的变量。那么,上面的程序,因为restar是唯一反问数据块的指针,... 阅读全文
posted @ 2012-10-31 19:01 星语海蓝 阅读(235) 评论(0) 推荐(0) 编辑
摘要:Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。服务端 和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。 比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过来。互为客户和服务端 实际生活中有些程序是互为服 阅读全文
posted @ 2012-10-27 15:51 星语海蓝 阅读(1488) 评论(0) 推荐(0) 编辑
摘要:Select在Socket编程中还是比较重要的,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。 Select的函数格式(Unix系统下的伯克利socket编程,和windows下的略有区别,体现两个方面:一是select函数的第一个参数,在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里定义不一样):int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); /*参数列表int maxfd. 阅读全文
posted @ 2012-10-22 10:13 星语海蓝 阅读(6830) 评论(0) 推荐(0) 编辑
摘要:一. 共享内存介绍系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面。系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射shm文件系统中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应shm文件系统的一个文件.二、系统V共享内存API对于系统V共享内存,主要有以下几个API:shmget()、shmat()、shmdt()及shmctl()。#include <sys/ipc.h>#includ 阅读全文
posted @ 2012-10-19 18:16 星语海蓝 阅读(878) 评论(0) 推荐(0) 编辑
摘要:daemon进程步骤1. 调用fork产生一个子进程,同时父进程退出,所有后续工作都在子进程中完成。如果我们是从命令行执行的该程序,这可以造成程序执行完毕的假象,shell会回去等待下一条命令;刚刚通过fork产生的新进程一定不会是一个进程组的组长,这为第2步的执行提供了前提保障。由于父进程已经先于子进程退出,会造成子进程没有父进程,变成一个孤儿进程(orphan)。每当系统发现一个孤儿进程,就会自动由1号进程收养它,这样,原先的子进程就会变成1号进程的子进程。2. 调用setsid系统调用。这是整个过程中最重要的一步。它的作用是创建一个新的会话(session),并自任该会话的组长(sess 阅读全文
posted @ 2012-10-19 11:13 星语海蓝 阅读(299) 评论(0) 推荐(0) 编辑
摘要:创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include sys/types.h>#include unistd.h>pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分配内存。fork函数返回后,子进程和父进程都是从fork函数的下一条语句开始执行。由于子进程与父进程的运行是无关的,父进程可 阅读全文
posted @ 2012-10-19 10:09 星语海蓝 阅读(302) 评论(0) 推荐(0) 编辑
摘要:/************pthread_cond_wait()的使用方法**********/ pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock); pthread_mutex_unlock(&qlock);/*****************************************************/The mutex passed to pthread_cond_wait protects the condition.The callerpasses it locked 阅读全文
posted @ 2012-10-18 17:35 星语海蓝 阅读(324) 评论(0) 推荐(0) 编辑
摘要:昨晚被@童老猪问到了两者的区别,我以前觉得自己大概搞懂了,昨晚发现还是没懂。今天查了一下资料,写下自己的理解,以备以后查阅。我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾。具体的说:1。以哪种方式打开一个文件?ANSI C规定了标准输入输出函数库,用fopen()函数打开文件。fopen()函数的调用方式一般为:FILE *fp;fp=fopen(文件名,使用文件方式);使用文件方 阅读全文
posted @ 2012-10-18 09:34 星语海蓝 阅读(3856) 评论(0) 推荐(0) 编辑
摘要:什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿的程序员可能使用类型相当安全的语言写出类型不太安全的程序。绝对类型安全的编程语言暂时还没有。C语言的类型安全C只在局部上下文中表现出类型安全,比如试图从一种结构体的指针转换成另一种结构体的指针时,编译器将 阅读全文
posted @ 2012-10-17 19:47 星语海蓝 阅读(342) 评论(0) 推荐(0) 编辑
摘要:复制构造函数(copy constructor):单个对本类类型引用形参(常用const修饰)。当定义一个新对象并用同一个类型的对象对它进行初始化式,将显式使用复制构造函数,当该类型的对象传递给函数或从函数返回该类类型的对象时,将隐式调用复制构造函数。复制构造函数的形参可以不为const,但必须是一个引用。否则每当以pass-by-value传递参数时,调用一个复制构造函数都会导致无穷递归。如果不定义复制构造函数,编译器将合成一个,因此若要完全禁止复制(iostream类就不允许复制),禁止用户复制该类类型而且连友元和成员函数都不能进行复制:在private中声明但不定义一个复制构造函数。用户 阅读全文
posted @ 2012-10-11 16:35 星语海蓝 阅读(257) 评论(0) 推荐(0) 编辑
摘要:C++中static类数据成员是指以下两种: 类static成员函数 和 类static数据成员一:使用类的static成员的优点 1:static成员的名字是在类的作用域中,因此可以避免与其他类的成员或者全局对象名字的冲突 2:可以实施封装。static成员可以是私有成员,而全局对象不可见 3:通过阅读程序容易看出来static成员与特定类关联的。二:static成员的定义 static成员遵循正常的共有/私有访问规则,不过都可以通过 classname::成员 进行访问,不论成员是私有还是共有三:使用类的static成员 对类的static成员的使用以下几种方式都可以 通过cla... 阅读全文
posted @ 2012-10-10 17:07 星语海蓝 阅读(1753) 评论(0) 推荐(1) 编辑
摘要:来自:http://blog.csdn.net/wbj1234566/article/details/2256642简单的讲:把类外部的类或函数声明为友元类和友元函数,使其能直接访问类中的私有成员。格式: friend 类 或 函数 声明//此语句可以放在类中的任意位置,与访问权限保留字无关。需要注意几个方面:1.友元关系是不可以传递的。比方说你是我的友元而Joe是你的友元,但这并不意味着Joe是我的友元。2.友元关系不能继承。3.友元关系不是互通。把class A设置为class B的友元并不会使得class B成为class A的友元,也许你愿意把你的秘密告诉我,但是,这并不意味着我愿意把 阅读全文
posted @ 2012-10-10 16:44 星语海蓝 阅读(257) 评论(0) 推荐(0) 编辑
摘要:一些成员函数改变对象,一些成员函数不改变对象。例如: int Point::GetY(){return yVal;} 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: void Point:: SetPt (int x, int y){xVal=x;yVal=y;} 为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明: class Point { public:int GetX() const;int GetY() const;void SetPt (int, int);void OffsetPt (int, int);priva. 阅读全文
posted @ 2012-10-10 12:30 星语海蓝 阅读(224) 评论(0) 推荐(0) 编辑
摘要:关联容器与顺序容器的本质区别在于:关联容器是通过键(key)存储和读取元素的,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。 关联容器支持通过键来高效地查找和读取元素,两个基本的关联容器是map和set。map的元素是“键-值”对的二元组形式:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。set和map类型的对象所包含的元素都具有不同的键。如果需要一个键对应多个实例,则需要使用multimap或multiset类型。这两种类型允许多个元素拥有相同的键。map 关联数组:元素通过键来存储和读取 set 大小可变的... 阅读全文
posted @ 2012-10-08 15:07 星语海蓝 阅读(4323) 评论(0) 推荐(0) 编辑
摘要:dynamic_cast <new_type> (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继承关系。 更准确的说,dynamic_cast是用来检查两者是否有继承关系。因此该运算符实际上只接受基于类对象的指针和引用的类转换。从这个方面来看,似乎dynamic_cast又和re 阅读全文
posted @ 2012-10-03 16:47 星语海蓝 阅读(233) 评论(0) 推荐(0) 编辑
摘要:前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。C++提供了四个转换运算符:const_cast <new_type> (expression)static_cast <new_type> (expression)reinterpret_cast <new_typ 阅读全文
posted @ 2012-10-03 16:41 星语海蓝 阅读(209) 评论(0) 推荐(0) 编辑
摘要:C++标准转换运算符static_caststatic_cast <new_type> (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用;在方法中定义一个static变量,该变量在程序开始存在直到程序结束;类中定义一个static成员,该成员随类的第一个对象出现时出现,并且可以被该类的所有对象所使用。对static限定的改变必然会造成 阅读全文
posted @ 2012-10-03 16:40 星语海蓝 阅读(211) 评论(0) 推荐(0) 编辑
摘要:reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast的字面意思:重新解释(类型的比特位)。我们真的可以随意将一个类型值的比特位交给另一个类型作为它的值吗?其实不然。IBM的C++指南里倒是明确告诉了我们reinterpret_cast可以,或者说应该在什么地方用来作为转换运算符:从指针类型到一个足够大的整数类型从整数类型或者枚举类型到指针类型从一个指 阅读全文
posted @ 2012-10-03 16:39 星语海蓝 阅读(290) 评论(0) 推荐(0) 编辑
摘要:再谈为何会有那四个转换运算符看起来,我应该把导师讲过、遗漏的有关C++类型转换方面的内容都总结成文了,主要内容都在以上几篇文章中阐述完毕。上边的每一篇文章,虽然都单独着重强调一种转换方式或运算符,但是也有提到跟其他运算符之间的差异性,以及使用建议,因此基本可以看出各个运算符的使用方式和作用。在文章也看到const_cast, reinterpret_cast, static_cast都可以用传统的转换方式基于指针进行替代。如果结合typeid运算符,那么dynamic_cast其实也可以用传统转换方式实现。因此不免会有疑惑:这四个转换运算符不是很多余。的确,我刚接触这些转换运算符的时候,我也又 阅读全文
posted @ 2012-10-03 15:46 星语海蓝 阅读(2385) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示