- 浏览: 262660 次
- 性别:
- 来自: 北京
最新评论
-
ab0809:
写的很好,谢谢
c++中的 extern "C" -
eieihihi:
说得太好了,我就喜欢这种很透彻的说法
c++中的 extern "C" -
infollllll:
package com;import java.io.*;im ...
websocket通讯协议(10版本)简介 -
rocksent:
websocket draft10握手成功了,可是传数据一直失 ...
websocket通讯协议(10版本)简介 -
guanbeilang:
通过你的代码,学会了怎么从客户端接收消息,并改造成了nodej ...
websocket通讯协议(10版本)简介
文章列表
c#中的委托:
http://hi.baidu.com/xc1983/blog/item/2ed9fb196b38be7bdab4bdcf.html
c++中的拷贝构造函数
- 博客分类:
- c
int a = 2;
int b = a;
在c++中,上面的代码没有问题,对于int, string,char之类的变量可以直接互相赋值,没问题。但是如果是某个类的对象互相赋值,如:
Example ex1;
Example ex2 = ex1;
这样,一般情况下也是没有问题的,可以认为类中有个函数叫做"默认的拷贝构造函数"(这个名字本人觉得很恶心),这个函数跟什么默认构造函数默认析构函数差不多,最重要的是这个函数不是你写的,你也看不到。这个函数完成的赋值的过程。
调用“默认的拷贝构造函数”完成的赋值叫做“浅拷贝”。
...
简单的tcp通讯例子。
server端
/* tcp_server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MYPORT 8000
...
队列也是一种特殊的线性表,只不过是一头进另一头出罢了。
下面是队列的基本操作。
/* queue.h */
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include <string.h>
using namespace std;
#define TYPE int
typedef struct _Node {
TYPE data;
struct _Node* next;
} Node, *Pnode;
class Qu ...
线性表(不管是顺序存储还是链式存储)的元素之间的逻辑关系是线性的,这有时候并不能满足实际的要求,树形结构是另一种数据结构,它的元素之间的逻辑关系画成图的话形似一颗倒挂的树,故而得名。二叉树是树形结构中的特例,每个结点最多有两个孩子,就好像处于计划生育年代一样。
下面就是二叉树的一些基本操作,程序是用c语言写的。
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node {
int data;
struct _Node *lchild, *rchild; ...
栈是一种特殊的顺序表,只是从一头进出而已。
下面是一些链栈的基本操作。
/* linkstack.h */
#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
#include <iostream>
using namespace std;
#define TYPE int
typedef struct _Node {
TYPE data;
struct _Node* next;
} Node, *Pnode;
class LinkS ...
线性表的链式存储结构
- 博客分类:
- 算法
线性表在我看来就是用一根线把所有数据穿起来,形象吧,他具体的定义自己上网查吧,我是不喜欢背定义的,很难记住。
线性表在内存中有两种存储方式,一种叫顺序存储,另一种叫链式存储,顺序存储说简单点就是在数组里存储,这种需要大量连续的空间,不太实用的。链式存储就不需要连续的空间,下一个结点在哪里都无所谓,反正当前结点中保存着下一个结点的地址,对吧。
下面是自己写的简单的关于链表的程序,写的很简单,就当是做个备份了。
/* linklist.h */
#ifndef LINKLIST_H
#define LINKLIST_H
#include ...
为什么会有内存对齐
:
编译系统为了使程序运行的更快,将数据在内存中的存放结构制定了一定的规则,目的是使程序运行的更快,CPU取数据更方便,但同时也浪费了一定的内存空间,这就是牺牲空间来换取时间!
对齐的规则
:
盒子规则
:最宽数据类型的宽度不超过4字节时,盒子宽度等于最宽数据类型宽度。
最宽数据类型的宽度超过4字节时,盒子宽度为4字节(32位系统下)。
各个数据类型按顺序存放到盒子中,盒子的体积就是占用的内存大小啦!
...
比如说你用C
开发了一个DLL
库,为了能够让C
++语言也能够调用你的DLL
输出(Export)
的函数,你需要用extern
"C"
来强制编译器不要修改你的函数名。
通常,在C
语言的头文件中经常可以看到类似下面这种形式的代 ...
系统:Ubuntu11.04
连接
:
在系统上装好mysql数据库后,打开一个超级终端,输入:
mysql -u root -p
提示输入密码,mysql的root用户密码是在安装mysql时提示你输入的,没忘吧,输入后就出现了 "mysql:>" ,说明你登录了mysql数据库。
创建数据库
:
我们可以输入SQL语句来查看已经存在的数据库:
SHOW DATABASES;
可以看到已经存在了两三个数据库,你可以创建自己的数据 ...
系统:Ubuntu11.04
安装mysql:
命令行下输入
sudo apt-get install mysql-server-5.1
安装apache2:
sudo apt-get install apache2
这样安装完apache2后,默认的html路径是 "/var/www" cgi路径是"/usr/lib/cgi-bin"。
安装php5:
sudo apt-get install php5
安装phpmyadmin:
sudo apt-get ins ...
系统:Ubuntu11.04
1.刚安装完系统是没有mysql数据库的,首先我们要安装mysql数据库:
sudo apt-get install mysql-server-5.1
自动的,mysql就安装好了(包含server和client)。
2.需要用c语言去操作mysql,我们需要安装mysql的c语言开发包:
sudo apt-get install libmysqlclient16-dev
到现在 ...
在使用perl的IO::Socket::INET模块进行网络编程中发现recv()方法如果收不到数据,会一直阻塞地等,永远也不会超时,如果不想如此,可以设置超时时间,如:
$socket->recv($buffer, $len, $timeout);
如果把超时时间设为0 $socket->recv($buffer, $len, 0);
和这样是一样的: $socket->recv($buffer, $len);
有时候需要根据一台主机的ip地址获取其mac地址,这是可以实现的,但这个ip地址必须是同一个以太网内的ip地址。
在perl的模块中Net::ARP可以实现这个功能。但是它的arp_lookup函数只能从本机的arp缓存表中取“被查询ip”的mac,如果恰恰有,能取到,没问题。但是如果arp缓存没有“被查询ip”,那么会得到“unknow”或者“00:00:00:00:00:00”。
解决方法是先ping一下“被查询ip”,然后用arp_lookup函数去arp缓存取其mac。
下面有个例子,是perl写的cgi程序。
#!/usr ...
perl里面也有SystemV的进程间通信/同步机制,和用C语言写的程序类似。 工作中用到了perl的进程间通信机制,其实只用到了二元信号灯而已,实现非常简单。
我用到的模块是: IPC::SysV 和 IPC::Semaphore 首先需要创建信号灯集对象,如下:
$sem=IPC::Semaphore->new(1234,10,S_IRUSR|S_IWUSR|IPC_CREAT);
$sem就是信号灯集对象,new()方法中的S_IRUSR S_IWUSR等标志位是由IPC::SysV模块导出的,如果不导出这些标 ...