2012年7月7日
摘要: 基于嵌入式linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB这几种数据库的特点:•Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等•SQLite关系型数据库,体积小,支持ACID事务•Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中•eXtremeDB是内存数据库,运行效率高SQLite的源代码是C,其源代码完全开放,是一个轻量级的嵌入式数据库。SQLite有以下特性: 零配置一无需安装和管理配置; 储存在单一磁盘文件中的一个完整的数据库; 数据库文件可以在不同字节顺序的机器间自由共享;. 阅读全文
posted @ 2012-07-07 13:21 孟浩依然 阅读(4194) 评论(1) 推荐(1) 编辑
  2012年7月6日
摘要: getsockoptsetsockopt网络超时检测:必要性:避免进程在没有数据时无限制的阻塞 当设置的时间到,进程从原操作返回继续运行3种方式可以:1.设置socket的属性SO_RCVTIMEO 接收超时SO_SNDTIMEO 发送超时struct timeval tv;tv.tv_sec = 5;tv.tv_usec = 0;setsockopt(sockfd, SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv));5秒接收超时检测。2.select也可以超时检测3.设置定时器(timer),捕捉SIGALRM信号#include <stdio.h& 阅读全文
posted @ 2012-07-06 20:32 孟浩依然 阅读(583) 评论(0) 推荐(0) 编辑
摘要: 前面介绍的数据包发送方式只有一个接收方,称为单播如果同时发给局域网中的所有主机,称为广播只有用户数据报(使用UDP)套接字才能广播广播地址:以192.168.1.0网段为例,最大的主机地址 192.168.1.255代表该网段的广播地址发到该地址的数据包被所有的主机接收255.255.255.255在所有网段中都代表广播地址。广播的发送步骤:1.创建用户报套接字2.缺省创建的套接字不允许广播数据包,需要设置属性:setsockopt可以设置套接字属性3.接收放地址指定为广播地址4.指定端口信息5.发送数据包广播发送实例:#include <stdio.h>#include < 阅读全文
posted @ 2012-07-06 20:31 孟浩依然 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 单播方式只能发给一个接收方广播方式发给所有的主机。过度的广播会大量占用网络带宽,造成广播风暴,影响正常通信。组播(又称为多播)是一种折中的方式。只有加入某个多跛足的主机才能收到数据。多播方式既可以发给多个主机,又能避免像广播那样带来过多的负荷(每台主机要到传输层才能判断广播包是否要处理)网络地址:A类地址:第1个字节为网络地址,其他3个字节为主机地址第一个字节的最高位固定为0地址范围 1.0.0.1 - 126.255.255.255B类地址:第一个和第二个字节为网络地址,其他2个字节为主机地址,第一个字节的前两位固定为10地址范围:128.0.0.1 - 191.255.255.255C类. 阅读全文
posted @ 2012-07-06 20:31 孟浩依然 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式。目前最常用的服务器模型:循环服务器:循环服务器在同一时刻只能响应一个客户端的请求。并发服务器:并发服务器在同一时刻可以响应多个客户端的请求。循环服务器模型:TCPsocket(…);bind(…);listen();while(1){ accept(); while(1) { recv(); process(); send();}close();}UDPsocket();bind();while(1){ recvfrom(); process(); sendto();}并发服务器:为了弥 阅读全文
posted @ 2012-07-06 20:30 孟浩依然 阅读(3129) 评论(0) 推荐(0) 编辑
摘要: linux下主要有四种模型阻塞 IO:最常用、简单、效率低read,recv,recvfromwrite,send,sendto,accept,connect非阻塞IO:可防止进程则阻塞在IO操作上,需要轮询当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不停的测试是否一个文件描述符有数据可读。浪费CPU资源。fcntl函数是设置套接字的标志int fcntl(int fd,int cmd ,long arg)例如: int flag; flag = fcntl(sockfd,F_GETFL,0) flag|=O_NONBLOCK; fcntl(sockfd,F_SETFL,fl. 阅读全文
posted @ 2012-07-06 20:29 孟浩依然 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 网络互联促成TCP/IP协议的产生,它包括 用来检测网络传输中差错的传输控制协议TCP,专门负责对不同网络进行互联的互联网协议IPTCP/IP协议成为Internet中的世界语。两类重要的体系结构: OSI与 TCP/IPOSI开放系统互联模型应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,它是个理想化的模型。TCP/IP一共有四层应用层 (Telnet、FTP、HTTP、DNS、SMTP等)传输层 (TCP和UDP)网络层 (IP、ICMP、IGMP)网络接口和物理层 (以太网、令牌环网、FDDI等)TCP与UDP同为传输层协议,TCP有连接,可靠,UDP无连接,不可靠TCP(传 阅读全文
posted @ 2012-07-06 20:28 孟浩依然 阅读(657) 评论(0) 推荐(0) 编辑
  2012年7月5日
摘要: System V IPC :这个东西真的要首先理解,因为好多书或者资料就直接说IPC就是 共享内存、消息队列、信号灯集,其实IPC是一种机制,这种机制提供了进程间通信的通道,那么为什么加个System V呢,那是因为在System V系统的四个版本中提出的进程通信的IPC这种机制。所以叫做System V IPC。目前Linux也支持这三种机制:共享内存、消息队列、信号灯集linux内核中定义了一个结构体:struct ipc_perm{key_t key; 关键字uid_t uid; ... 阅读全文
posted @ 2012-07-05 20:00 孟浩依然 阅读(2158) 评论(0) 推荐(0) 编辑
摘要: linux下进程间的通信方式:传统的进程间通信方式 1.无名管道(pipe) 2.有名管道(fifo) 3.信号(signal)System V IPC 对象 1.共享内存(share memory) 2.消息队列(message queue ) 3.信号灯 (semaphore)BSD套接字(socket)下面进行逐一介绍:无名管道:这里所说的主要只无名管道,它具有如下特点,只能用于具有亲缘关系的进程之间的通信,半双工的通信模式,具有固定的读端和写端,管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO,如read、write函数。管道是基于文件描述符的通信方式,当一个管道建立时,他会 阅读全文
posted @ 2012-07-05 19:56 孟浩依然 阅读(3012) 评论(0) 推荐(0) 编辑
  2012年7月4日
摘要: 多线程共享一个进程的地址空间虽然线程间通信容易进行,但是多线程同时访问共享对象时需要引入同步和互斥机制。同步指的是多个任务按照约定的顺序相互配合完成一件事情,dijkstra基于信号量的概念提出了一种同步机制。由信号量赖决定线程是继续运行还是阻塞等待。信号量代表某一类资源,其值表示系统中该资源的数量信号量是一个受保护的变量,智能通过三种操作来访问:初始化 P操作(申请资源),V操作(释放资源),信号量的值为非负整数P操作的含义: if(信号量的值大于0) { 申请资源的任务继续运行; 信号量的值减去1; } else { 申请资源的任务阻塞; }v操作的含义: if(没有... 阅读全文
posted @ 2012-07-04 21:48 孟浩依然 阅读(9029) 评论(0) 推荐(0) 编辑