自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (6)
  • 收藏
  • 关注

转载 TCP连接过程可能出现的错误

连接过程可能出现的错误情况有:(1) 如果客户机TCP协议没有接收到对它的SYN数据段的确认,函数以错误返回,错误类型为ETIMEOUT。通常TCP协议在发送SYN数据段失败之后,会多次发送SYN数据段,在所有的发送都高中失败之后,函数以错误返回。注:SYN(synchronize)位:请求连接。TCP用这种数据段向对方TCP协议请求建立连接。在这个数据段中,TCP协议将它选择的初始序列号通知对方...

2018-03-30 12:01:51 8945

转载 EAGAIN、EWOULDBLOCK、EINTR与非阻塞

1、EWOULDBLOCK:用于非阻塞模式,不需要重新读或者写。2、EINTR:指操作被中断唤醒,需要重新读/写。3、EAGAIN:在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,...

2018-03-29 15:09:07 4308

转载 阻塞模式和非阻塞模式下send、sendto、recv、recvfrom的表现

首先socket在默认情况下是阻塞状态的(未指异步操作以及其它一些特殊用途下,直接默认为非阻塞),这就使得发送以及接收操作处于阻塞的状态,即调用不会立即返回,而是进入睡眠等待操作完成。下面把讨论点分为发送以及接收。  一.发送选用send(这里特指TCP)以及sendto(这里特指UDP)来描述 首先需要说明的是,不管阻塞还是非阻塞,在发送时都会将数据从应用缓冲区拷贝到内核缓冲区(SO_RCVBU...

2018-03-29 15:01:56 17173

原创 C语言位域

1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如: struct bs{ char a:2; char :0;/*空域*/ char c:1;/*从下一单元开始存放*/} 在这个位域定义中,a占第一字节的2位,后6位填0表示不使用,c从第二字节开始,占用1位。2. 由于位域不允许跨两个字节,...

2018-03-29 14:07:08 429

转载 Linux应用程序地址布局

全局初始化变量:数据段全局未初始化变量:数据段(BSS)全局的、静态的(static)、初始化的变量:数据段全局的、静态的、未初始化变量:数据段全局的常量(const):代码段 局部初始化的变量:栈局部未初始化变量:栈局部的、静态的、初始化变量:数据段局部的、静态的、未初始化变量:数据段局部常量:栈 通

2018-03-26 20:47:23 211

原创 高级TCP/IP编程总结

1、基于连接和无连接协议之间的差异(1)IP层提高了一种高效,不可靠,无连接的服务。TCP和UDP都是基于IP层工作的,那么TCP是如何保证提供一个可靠有连接的呢?TCP基于IP增加了三个服务:第一,TCP提供了校验位,TCP的校验位是强制性字段,基本能保证数据在网络上不会被破坏,实际上UDP(非强制)和IP层(只计算IP头部)都有校验位,链路层以太网还有 CRC32 校验。IP header 和...

2018-02-14 16:01:36 445

原创 syn攻击

1、syn攻击原理在TCP连接的三次握手中第二次握手时,服务器端发送SYN+ACK报文之后,若在规定的超时间之内未收到客户端响应的ACK报文,则服务器端启用重传机制,向客户端重传SYN+ACK报文,直到收到客户端的响应报文或达到服务器端设置的重传次数为止。syn攻击就是利用这种机制,恶意攻击者向被攻击的服务器端在短时间内发送大量仅含有SYN标志的TCP半连接请求报文。一方面,大量的请求报文会使

2017-10-09 14:45:45 863

原创 TCP协议

1、TCP的首部(1)端口号每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。(2)序号序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32bit的无符

2017-09-27 10:06:12 594

原创 IP协议小结

1、TCP/IP分层模型(1)应用层应用层是我们经常接触使用的部分,比如常用的http协议、ftp协议(文件传输协议)、snmp(网络管理协议)、telnet (远程登录协议 )、smtp(简单邮件传输协议)、dns(域名解析),这层主要是面向用户的交互的。这里的应用层集成了osi分层模型中 的应用、会话、表示层三层的功能。(2)传输层传输层的作用就是将应用层的数据

2017-09-26 09:18:04 360

转载 进程间通信方式对比

UNIX 为实现这样的进程间通信 提供了多种技术。一些技术提供同一主机上的进程间通信,其他技术可以实现主机到主机的信息交换。另外,各种技术的速度不同,所以必须选择最合适自己需求的技术。还必须进行协调(实施时间控制和排他控制)。例如,如果一个应用程序产生数据,另一个应用程序消费数据,那么当读完共享池时消费者必须停下来等待生产者。另一方面,如果消费者无法足够快地读取池,生产者必须慢下来或暂停。

2017-09-22 10:31:25 1176

原创 GSettings简介和使用

1、Gsetting介绍GSettings类为应用程序设置存储和检索提供了方便的API。读取和写入可以被认为是非阻塞的。使用GSettings读取设置通常非常快:在大致相同的数量级(但慢于)GHashTable查找。写入设置方面也非常快,但对于其他线程和其他进程来说,写入设置可能非常昂贵。许多设置后端(包括dconf)都有延迟初始化,这意味着在用户使用计算机的常见情况下,无需修改任何设置即

2017-06-03 10:45:47 5074 1

原创 Interface编程实现

Gobject是单根继承的对象系统,但是通过interface也可以实现多继承。interface类似于C++中的抽象类,不能实例化但可以用来继承,类似U盘和移动硬盘,虽然本质上有所区别,但是它们的接口都是USB接口。并且只要它们插到计算机上,主机不关心那个东西是U盘还是移动硬盘,它只需要知道对方是个USB设备就可以了。这样,我们不需要在计算机主机中单独为U盘创造一种U盘接口,也不需要单独为移动硬

2017-05-23 15:28:29 879

翻译 GObject接口定义的先决条件和属性

1、GObject接口定义的先决条件如果要指定接口在实现时需要其他接口的存在,GObject引入了先决条件的概念:可以将一系列先决条件类型与接口相关联。 例如,如果对象A希望实现接口I1,并且如果接口I1有一个先决条件是需要存在接口I2,则A必须实现I1和I2。上述机制在实践中非常类似于Java接口I1扩展接口I2:/* Make the ViewerEditableLossy

2017-05-18 16:57:18 374

翻译 GObject基类

GObject基类前一章讨论了GLib动态类型系统的细节。GObject库还包含一个名为GObject的基本类型的实现。GObject是一个基本的类实例化类型。 它实现:(1)内存管理引用计数(2)实例的构造/析构(3)具有set/get函数对的通用每个对象属性(4)轻松使用信号所有使用GLib类型系统的GNOME库(如GTK +和GStreamer)都继承自GObje

2017-05-15 10:05:30 4092

翻译 如何定义和实现新的GObject之对象方法

Gobject的对象方法有如下几种:(1)非虚拟公共方法(2)虚拟公共方法(3)虚拟私有方法1、非虚拟公共方法这个是最简单的,提供了一种作用于对象的简单方法。 在头文件中提供函数原型,并在源文件中提供该原型的实现。/* declaration in the header. */void viewer_file_open (ViewerFile *

2017-05-12 16:56:55 377

翻译 如何定义和实现新的GObject之对象构造和析构

1、对象构造在尝试构建自己的GObjects时人们常常会感到困惑,因为它们有很多不同的方法来实现对象的构造过程:很难确定哪个是正确的方法。表4中,“g_object_new”显示了在对象实例化过程中调用的用户提供的函数以及它们被调用的顺序。instance_init函数相当于C++中的构造函数。在所有父节点的instance_init函数都被调用后子类的instance_init都将被调用

2017-05-12 16:44:04 1085

翻译 如何定义和实现新的GObject之代码实现

本章重点介绍了GObject子类的实现,例如创建自定义继承类,或者实现GTK +窗口类的子类。在整个章节中,使用文件查看器程序的作为示例,其具有用于表示单个文件查看的ViewerFile类,以及具有特殊功能的不同类型的文件(例如音频文件)的各种派生类。 示例应用程序还支持通过使用ViewerEditable接口编辑文件(例如,调整正在查看的照片)。1、头文件实现编写GObject代

2017-05-12 15:51:21 878

翻译 GObject消息系统之Signals

GObject的信号与标准UNIX信号无关:它们将任意特定于应用程序的事件与任意数量的监听者连接起来。 例如,在GTK +中,从窗口系统接收到每个用户事件(按键或鼠标移动),并在窗口小部件对象实例上以信号发射的形式生成GTK+事件。每个信号在类型系统中与其可以发射的类型一起注册:当用户注册的信号发射时指定的实例类型的闭合被调用。用户还可以自己发射信号,或者从连接到信号的闭合件之一内停止

2017-05-08 16:01:30 1085

翻译 GObject消息系统之Closures

1、闭包闭合是异步信号传输概念的核心,它广泛应用于GTK+和GNOME应用。闭包是抽象概念,是回调的一般表示形式。 它是一个小结构,包含三个对象:(1)一个函数指针(回调本身),其原型如下:return_type function_callback(...,gpointer user_data);(2)在调用闭包时传递给回调的user_data指针(3)一个表示闭包的析构函数的

2017-05-08 15:59:38 679

翻译 GObject接口定义和实现

一、接口定义GObject接口如何工作的理论在“非实例化类类型:接口”一节中给出。 本节介绍如何定义和实现一个接口。第一步是取一个正确的名称。 该接口定义了两种方法:/* * Copyright/Licensing information. */#ifndef __VIEWER_EDITABLE_H__#define __VIEWER_EDITABLE_H__#inc

2017-05-02 16:07:51 1844

翻译 GTK的非实例化类型-interface

本节将介绍接口背后的理论。 如何定义和实现接口详见 How to define and implement interfaces章节。GType的接口非常类似于Java的接口。 它们允许设计一个通用接口,几个类将遵循这个接口。想象一下,高保真设备上的播放,暂停和停止按钮 - 可以看作播放界面。一旦你知道他们做了什么,你可以控制你的CD播放器,MP3播放器或任何使用这些符号的东西。要声明一个

2017-05-02 15:59:52 383

原创 Gobject之signal

GObject 信号(Gignal)主要用于特定事件与响应者之间的连接,它与操作系统级中的信号没有什么关系。一般在class_init时,由g_signal_new生成一个新信号句柄并绑定回调函数,也可以使用g_signal_connect连接对象和处理方式(回调函数),由g_signal_emit发出信号触发。guintg_signal_new (const gcha

2017-04-21 14:01:47 4024

原创 Gobject编程实现

GObject 是一个程序库,它可以帮助我们使用 C 语言编写面向对象程序。Gobject实现有一套固有的格式,可以理解为C++语言的语法一样,如果要使用Gobject就必须按格式实现。Base.h的实现如下:#ifndef _BASE_H_#define _BASE_H_//#include #include #include typedef struct

2017-04-20 14:46:18 785

原创 select、poll和epoll

1、select的描述符大于FD_SETSIZE(1024)时会引起内存越界,poll和epoll不会,虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接2、epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现,所以select支持的系统更多,可移植性更强。3、select有支持处理信号阻塞和更高时间分...

2017-01-31 13:55:53 245

转载 TCP定时器

TCP为每条连接建立七个定时器:1、  连接建立定时器在发送SYN报文段建立一条新连接时启动。如果没有在75秒内收到响 应,连接建立将中止。当TCP实例将其状态从LISTEN更改为SYN_RECV的时侯就会使用这一计时器.服务端的TCP实例最初会等待一个ACK三秒钟.如果在这一段时间没有ACK到达,则认为该连接请求是过期的. 2、  重传定时器在TCP发送数据时设定.如果定时器已超时而对端的确认还...

2017-01-31 13:55:00 242

原创 深入探索C++对象模型

一、C++对象模型中nostatic data member被置于每一个class object中,static data member、static function member和nostatic function member都被存放在所有的class object之外。virtual function则有如下两个特性支持:1、每个class产生一堆指向virtual function的

2016-11-27 15:31:39 358

原创 动态链接

一、静态链接缺陷静态链接需要把数据和代码都连接到自己的可执行文件中,运行时系统中有时会存在多个库文件副本从而容易造成内存和磁盘的空间浪费、其次静态链接模块更新困难。为了解决这两个问题需要把程序的模块分隔开,生成相互独立的文件从而不在将他们链接在一起。对目标文件的链接等到运行时在进行,这就是动态链接。二、动态链接的基本实现Linux下的动态链接文件为.so,Windows下动

2016-11-27 14:29:56 446

原创 装载和动态链接

一、进程虚拟地址空间1、程序是一个静态的概念,他是一些预编译好的指令数据集合的一个文件。进程是一个动态的概念是一个程序运行时的过程。​每个进程都有自己独立的虚拟地址空间,虚拟地址空间的大小有硬件平台决定,具体说是CPU位数决定的,32位的平台具体大小是0-4G。从程序员的角度来讲可以通过判断指针所占用的空间来判断虚拟地址空间,C语言指针大小的位数与虚拟地址空间的位数相同。2、装载程序运行​时所需要...

2016-11-27 14:28:56 586

原创 静态链接

一、在Linux下一个程序的编译过程可分为:预编译、编译、汇编、链接。1、预编译gcc -E hello.c -o hello.i预编译过程注意处理那些源代码文件中的以#开始的预编译指令。比如“#include”“#define”“#ifdef”等。删除注释,​添加行号。2、编译编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析及优化后生产相应的汇编代码文件。gcc -S hel...

2016-11-27 14:27:37 347

原创 System V共享内存

System V 与Posix 共享内存区二者的差别是:(1)Posix共享内存区是先调用shm_open然后再调用mmap,System V 共享内存区是先调用shmget再调用shmat。(2)Posix共享内存区对象的大小可在任何时刻通过ftruncate修改,而System V 共享内存区对象的大小是在调用shmget创建时固定下来的。1、int shmge

2016-11-27 14:26:40 337

原创 Posix共享内存区

Posix提供了两种在无亲缘关系进程间共享内存区的方法:(1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。者两种方法多需要调

2016-11-27 14:25:11 366

原创 信号量

一、信号量分类(1)Posix有名信号量,可用于进程和同一进程不同线程间同步(2)​Posix基于内存的信号量,存放在共享内存区中,可用于进程和同一进程不同线程间同步(3)System V信号量​,在内核中维护,可用于进程和同一进程不同线程间同步。二、信号量、互斥锁、条件变量的差异(1)互斥锁必须总是由给他上锁的线程解锁,信号量的挂出(post)却不必由执行

2016-11-27 14:24:29 470

原创 互斥锁和条件变量

1、互斥锁互斥锁APIpthread_mutex_lock(pthread_mutex_t *mutex); 用此函数加锁时,如果mutex已经被锁住,当前尝试加锁的线程就会阻塞,直到互斥锁被其他线程释放。当此函数返回时,说明互斥锁已经被当前线程成功加锁.pthread_mutex_trylock(pthread_mutex_t *mutex); 用此函数加锁时,如果mutex已经卑琐主,当前尝试...

2016-11-27 14:23:02 444

原创 共享内存

共享内存是IPC最快的方式。一旦这种方式映射到共享它的进程地址空间,这些进程间的数据传递就不在涉及内核。管道、FIFO、System V消息队列的read、msgrcv、write和msgsnd都涉及从进程与内核的数据复制。​共享内存操作函数:1、系统调用mmap()   void* mmap ( void * addr , size_t len , int prot , int flags , ...

2016-11-27 14:22:11 239

原创 消息队列

一、Posix消息队列​1、mq_open,mq_close,mq_unlink #include mqueue.h>mqd_t mq_open(const char *name, int oflag, ...);oflag:O_RDONLY​,O_WRONLY,O_RDWR,O_CREAT,O_EXCL,O_NONBLOCKmq_open的返回值为消息队列

2016-11-27 14:20:51 1093

原创 管道和FIFO

1、概述管道:是最初的Unix IPC形式,但是没有名字只能有亲缘关系的进程使用。FIFO有时称为有名管道,可以在任意进程间使用。2、管道​#includeint pipe(int fd[2]);​返回值:成功,返回0,否则返回-1。参数数组包含pipe使用的两个文件的描述符。fd[0]:读管道,fd[1]:写管道。宏​S_ISFIFO用于确定一个文

2016-11-27 14:18:57 348

原创 C++编写动态库.so或者.dll的陷阱

一、接口不变就可以不需要重新编译?对于很多库的实现者可能会有这样的认识“接口不变就可以不需要重新编译”,其实这句话是有前提的,前提是实现的动态库有足够的兼容性和鲁棒性。尤其是C++实现的动态库,C++只对语言层规则做了规定,没有二进制级别的任何规定。COM本质论里面的例子很好的阐述了这点,简单摘录如下:查找字符串的dll版本1如下class StringFind{char *p

2016-11-27 12:02:46 1601

原创 C++泛型算法

1、泛型算法定义泛型算法:因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型、甚至其他类型的序列上,这些我们将在本章的后续内容中了解。自定义的容器类型只要与标准库兼容,同样可以使用这些泛型算法。泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。算法

2016-11-27 11:37:00 289

原创 C++关联容器

1、关联容器定义关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。关联容器(Associative containers)支持通过键来高效地查找和读取元素。两个基本的关联容器类型是 map set。map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和

2016-11-27 11:34:31 310

原创 C++顺序容器

标准库定义了三种顺序容器类型:verctor、list、deque(双端队列)verctor:支持快速随机访问。list:支持快速插入​删除。deque:双端队列1、容器构造函数容器构造函数将一个容器复制给另一个容器时类型必须匹配,容器类型和元素类型都必须相同。​​(1)跨容器类型初始化容器尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递​一对迭代器(第 3.4 节)间接实现该实...

2016-11-27 10:56:40 305

DSP TMS320C54x 实现 乘法

DSP TMS320C54x 实现 乘法

2011-04-30

DSP TMS320C54x 实现 减法

DSP TMS320C54x 实现 减法 包括向量文件和链接命令文件

2011-04-30

DSPC54x实现加法

DSP TMS320C54x 实现 加法运算 包括向量文件 链接命令文件

2011-04-30

工业机器人 编程及仿真 仿真技术 ppt

工业机器人 编程及仿真 仿真技术 ppt 典型的工业机器人 装配机器人

2011-04-15

1602 显示年月日 时间可以自己设置

1602 显示年月日 时间可以自己设置 向1602写指令 向1602写数据

2011-04-15

1602显示心形单片机控制1602显示

液晶1602显示心形,熟悉1602坐标位置,单片机控制1602显示,单片机与1602的连接,1602的时序控制。

2011-04-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除