- 博客(43)
- 资源 (1)
- 收藏
- 关注
原创 POSIX协议与ANSIC协议
POSIXPOSIX是IEEE为要在各种UNIX操作系统上运行的软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植
2017-03-31 21:06:13 1604
原创 select函数与poll函数
select函数IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用
2017-03-30 21:08:52 617
原创 I/O模型
进程向内核进行系统调用申请IO,内核将资源从IO调度到内核的buffer中(wait阶段),内核还需将数据从内核buffer中复制(copy阶段)到web服务器进程所在的用户空间,才算完成一次IO调度。这几个阶段都是需要时间的。根据wait和copy阶段的处理等待的机制不同,可将I/O动作分为如下五种模式:Unix下共有五种I/O模型 (1)阻塞I/O (2)非阻塞I/O
2017-03-30 20:59:48 445
原创 消息队列的系统限制
消息队列是System V的IPC对象的一种,用于进程间通信,会受到系统的限制,本文主要描述了三个限制。第一:议个消息的最大长度;第二:消息队列的最大容量;第三:最大消息队列数。一、 一个消息的最大长度示例程序如下:#include #include #include #include #inc
2017-03-28 21:41:46 1521
原创 共享内存(进程通信)
一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到
2017-03-28 21:22:21 354
原创 Linux轮询操作
轮询函数轮询的概念和作用使用非阻塞I/O的应用程序通常会使用select()和poll(),poll和select用于查询设备的状态,以便用户程序获知是否能对设备进行非阻塞的访问,它们都需要设备驱动程序中的poll函数支持。Select()和poll()系统调用最终会引发设备驱动设备中的poll()函数被执行。poll()函数为最终执行体)Linux下select调
2017-03-27 14:28:21 2256
原创 内核链表
在Linux内核中使用了大量的链表结构来组织数据,包括设备列表以及各种功能模块中的数据组织。这些链表大多采用在[include/linux/list.h]实现的一个相当精彩的链表数据结构。很多linux下的源代码都会使用这个头文件,它里面定义了一个结构,以及定义了和其相关的一组函数,初学嵌入式的同学往往会对内核链表感到一头雾水, 本文详细分析了3.14 内核中链表结构的实现,并通过实例
2017-03-26 19:40:40 513
原创 Linux信号量(进程)
信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的函数原型及具体说明。1. semget函数原型semget(得到一个信号量集标识符或创建一个信号量集对象)所需头文件#include #include #include 函数说明得到一个信号量集标
2017-03-25 17:07:09 576
原创 信号通信(进程间通信)
一、什么是信号用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的
2017-03-25 15:11:53 353
原创 C语言实现类
c语言实现类学习嵌入式,C语言是必须学习的一门语言,C语言在设计之初是为了提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言不光提供了许多低级处理的功能,而且保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。掌握了C语言,其他
2017-03-24 19:05:37 30305 1
原创 排序及排序代码
排序一、排序的基本概念与分类1、排序的定义假设含有n个记录的序列为{r1,r2,……rn},其相对应的关键字分别为{k1,k2,……kn},需确定一种序列,使其关键字满足k1=k2>=……>=km(非递增)关系,即使得序列成为一个按关键字有序的序列{r1,r2,……,rm},这样的操作就称为排序。排序的依据是关键字之间的大小关系,那么,对于同一个记录集合,针对不同的关键字进行排序,
2017-03-23 22:20:51 645
原创 查找及查找代码
查找一、查找概论各位都用过搜索引擎。搜索引擎的大概工作原理就是利用网络“爬虫”抓取并复制网页,并且可以通过该网页的链接来抓取更多的网页。那么,搜索引擎的是通过什么来抓取网页的呢?就是通过“关键字”来识别网页并抓取网页的。 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表(Search Table)是由同一类型的
2017-03-23 22:18:31 1591
原创 栈与队列
一、栈的定义定义:栈(stack):栈是限定仅在表的一端进行插入或删除操作的线性表。我们把允许插入和删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。不含任何数据元素的栈称为空栈。栈又称为“后进先出(Last In First Out,简称LIFO)的线性表”,简称为LIFO结构。栈的插入操作,称为进栈/入栈/压栈。栈的删除操作,称为出栈/弹栈。不过要注意的是,
2017-03-23 22:16:01 847 2
原创 树与二叉树及代码
树与二叉树一、树的定义:1、定义:树(Tree)是n(n>=0)个节点的有限集,n=0时称为“空树”。在任意一棵非空树中:⒈有且仅有一个特定的称为根(root)的节点。⒉当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1、T2……Tm,其中每一个集合本身又是一棵树,并且称之为根的子树(SubTree)。注意:⒈n>0时根节点是唯一的,不可能存在多个根节点。
2017-03-23 22:13:16 908
原创 球钟代码
#include#include#define ONEMIN 5#define FIVEMIN 12#define ONEHOUR 12#define BALLQUE 28#define OK 1#define ERROR 0typedef int data_t;typedef struct{data_t *data;int top;//栈顶in
2017-03-23 22:09:35 621 2
原创 链式队列代码
#include #include #define OK 1#define ERROR 0typedef int data_t; typedef struct node_t//普通单链表节点{data_t data;struct node_t *next; } linknode_t, *linklist_t; typedef struct/
2017-03-23 22:08:13 682
原创 栈代码
顺序栈#include #include #define MAXSIZE 20#define OK 1#define ERROR 0 typedef int data_t;typedef struct{data_t data[MAXSIZE];int top;}SqStack; int PushStack(SqStack *s,data_t
2017-03-23 22:06:53 2868
原创 双向链表及约瑟夫环代码
双向链表//注意:该文件操作的链表为带头结点双向链表,头结点数据为-1#include #include #include #define OK 1#define ERROR 0 typedef int data_t;typedef struct DulNode{data_t data;struct DulNode *prior;struct D
2017-03-23 22:04:06 1010
原创 链表及代码
一、线性表的链式存储结构前面所讲的线性表的顺序存储结构是有缺点的,最大的缺点就是插入和删除时需要移动大量的元素,这显然就需要耗费大量时间。仔细考虑一下产生该问题的原因,在于相邻元素的存储位置也具有邻居关系,它们在内存中是紧挨着的,没有空隙,自然也没有空位进行介入,而删除后留下的空隙自然也需要弥补。为了解决上述问题,我们打破常规,不再让相邻元素在内存中紧挨着,而是上一个元素留存下一个元素...
2017-03-23 22:00:57 781
原创 线性表及代码
线性表一、线性表定义:1、线性表的定义定义:线性表(List):零个或多个数据元素的有限序列。注意:1)线性表是一个序列。也就是说,线性表的元素之间是有序的。若元素存在多个,对于其中一个元素来说,它前面的元素叫前驱,后面的元素叫后继。第一个元素无前驱,最后一个元素无后继,中间的元素只有一个前驱,一个后继。2)线性表是有限的。事实上,在计算机科学领域,我们只研究有限的
2017-03-23 21:51:25 1285
原创 Linux网络协议
应用层协议应用层主要包括一下协议: 文件传输类:HTTP、FTP、TFTP; 远程登录类:Telnet; 电子邮件类:SMTP; 网络管理类:SNMP; 域名解析类:DNS; HttpHttp(Hypertext Transfer Protocol,超文本链接协议)是一个应用层的、面向对象的协议,它适
2017-03-22 11:46:07 1345
转载 进程阻塞wait和waitpid
#include /* 提供类型pid_t的定义 */#include pid_t wait(int *status)进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这
2017-03-21 20:59:37 1015
转载 exec函数族
也许有不少读者从本系列文章一推出就开始读,一直到这里还有一个很大的疑惑:既然所有新进程都是由fork产生的,而且由fork产生的子进程和父进程几乎完全一样,那岂不是意味着系统中所有的进程都应该一模一样了吗?而且,就我们的常识来说,当我们执行一个程序的时候,新产生的进程的内容应就是程序的内容才对。是我们理解错了吗?显然不是,要解决这些疑惑,就必须提到我们下面要介绍的exec系统调用。
2017-03-21 20:19:49 393
转载 队列、堆、栈、堆栈的区别
队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。而栈就像一个箱子,后放的在上边,所以后进先出。堆栈进程中每个线程都有自己的堆栈,这是一段线程创建时保留下的地址区域。我们的“栈内存”即在此。至于“堆”内存,我个人认为在未用new定义时,堆应该就是未“保留”未“提交”的自由空间,new的功能是在这些自由空间中保留(并提交)出一个地址范围。栈(St
2017-03-20 22:02:28 352
原创 static,register,volatile
static修饰符 一,static全局变量 我们知道,一个进程在内存中的布局如图1所示: 其中.text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整个生命周期中,.data段和.bss段内的数据时跟整个进程同生共死的,也就
2017-03-20 21:46:41 460
原创 文件属性与库
一、获取文件属性(选讲)我们可以使用stat()/fstat()/lstat()函数来获取某个文件的属性信息。注意:stat既是Linux系统的用于查看文件属性的指令,又是在编程过程中可以使用的一个获取文件属性信息的函数。其中stat()函数可以根据文件名(可带路径)获取文件的属性信息;fstat()函数可以根据已打开文件的文件描述符获得该文件的属性信息;lstat()函数用法
2017-03-20 20:36:38 484
原创 文件I/O
一、Linux文件I/O概述1、POSIX规范POSIX(Portable Operating System Interface,可移植操作系统接口规范)标准最初由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会,是目前最大的全球性非营利性专业技术学会)制定,目的是提高UNIX环境下程序的可移植性。通
2017-03-19 17:01:47 863
原创 标准I/O
一、文件与文件类型1、文件定义定义:文件(File)是一个具有符号名字的一组相关联元素的有序序列。文件可以包含的内容十分广泛,操作系统和用户都可以将具有一定独立功能的一个程序模块、一组数据或一组文字命名为一个文件。文件名:这个数据有序序列集合(文件)的名称。2、文件的分类文件由许多种,运行的方式也各有不同。在Windows中,我们是通过文件的后缀名来对文件分类的
2017-03-19 16:58:05 1262
原创 文件I/O与标准I/O的区别和优缺点
二者的区别 1.文件I/O 又称为低级磁盘I/O,遵循POSIX相关标准。任何兼容POSIX标准的操作系统上都支持文件I/O。标准I/O被称为高级磁盘I/O,遵循ANSI C相关标准。只要开发环境中有标准I/O库,标准I/O就可以使用。(Linux 中使用的是GLIBC,它是标准C库的超集。不仅包含ANSI C中定义的函数,还包括POSIX标准中定义的函数。因此,Li
2017-03-15 21:53:47 2100 1
转载 GDB
GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 命令 解释 示例file 加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。(gdb) file gdb-samplerRun的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个
2017-03-15 19:22:27 507
转载 C和C++中struct的区别
c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始
2017-03-15 10:45:48 1492
转载 网络面试题5
10:epool中et和lt的区别与实现原理11:写一个server程序需要注意哪些问题12:项目中遇到的难题,你是如何解决的 10:epool中et和lt的区别与实现原理LT:水平触发,效率会低于ET触发,尤其在大并发,大流量的情况下。但是LT对代码编写要求比较低,不容易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不断通知你,因此不用担心事件丢失的情况。
2017-03-15 08:56:42 509
转载 网络面试题4
5:进程间通讯的方式有哪些,各有什么优缺点6:tcp连接建立的时候3次握手的具体过程,以及其中的每一步是为什么7:tcp断开连接的具体过程,其中每一步是为什么那么做8:tcp建立连接和断开连接的各种过程中的状态转换细节9:epool与select的区别5:进程间通讯的方式有哪些,各有什么优缺点进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储),
2017-03-15 08:53:09 783
转载 网络面试题3
3:滑动窗口的实现机制4:多线程如何同步。3:滑动窗口的实现机制 TCP的滑动窗口机制 TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。TCP协议里窗口机制有2种一种是固定的窗口大小。一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。 我们可以看下面一张图来分析一下固定窗口大小有什么问题
2017-03-15 08:47:58 656
转载 网络面试题2
1:tcp和udp的区别2:流量控制和拥塞控制的实现机制1.tcp和udp的区别:TCP与UDP区别TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP---用户数据报协议,是
2017-03-15 08:42:23 907
转载 网络面试题
1:tcp和udp的区别2:流量控制和拥塞控制的实现机制3:滑动窗口的实现机制4:多线程如何同步。5:进程间通讯的方式有哪些,各有什么优缺点6:tcp连接建立的时候3次握手的具体过程,以及其中的每一步是为什么7:tcp断开连接的具体过程,其中每一步是为什么那么做8:tcp建立连接和断开连接的各种过程中的状态转换细节9:epool与select的区别10:epoo
2017-03-14 21:58:46 381
原创 ARM串口实验,ADC实验,I2C实验
【1】UART实验实验目的:通过串口进行收发数据 一、看原理图发现UART接在CPU的GPA1_0和GPA1_1引脚二、看芯片手册GPA1CON:GPA1CON[1] [7:4]: 0x2 = UART_2_TXD //UART的发送数据功能GPA1CON[0] [3:0]: 0x2 = UART_2_RXD //UART的接收数据的功能UA
2017-03-14 18:40:49 1558
原创 ARM点灯,PWM,中断实验
点灯实验:实验目的:控制LED2灯闪烁 一、看原理图 找到灯的原理图,分析灯的电气连接关系1. 通过搜索LED2或者目录在设备板原理图上找到LED22. 分析LED2的电气连接关系,发现只要CHG_COK这个引脚输入高电平,LED2就亮了3. CHG_COK是一个网络标号,通过在核心板上搜索这个名字可以找到设备板上的这个引脚接在CPU的哪个引脚上4. 经分析
2017-03-13 19:00:25 1802
原创 ARM指令集2
【1】多寄存器指令语法:{} Rb{!}, //内存块 ==》寄存器列表{} Rb{!}, //寄存器列表 ==》内存块Rb:存放要操作的内存块的首地址{!}:可选后缀,加上!表示更新Rb(将最后操作的内存地址写回到Rb中):寄存器列表 {r1, r2, r3} IA: 先传输数据,后增加地址IB:
2017-03-13 18:55:08 547
原创 ARM的指令集
一个汇编文件中包含以下部分:1, 汇编指令, 被编译成一条一条的汇编指令存放在内存中,2, 伪指令,在编译的时候会被编译器替换成多条可以识别的arm汇编指令3, 伪操作,引导编译器进行相关的编译工作,不会被编译成汇编指令,也不占内存空间4, 标号,起标识某一个地址的作用,不占内存空间 汇编指令:1. 数据处理指令 -- 对数据进行算术运算或者逻辑运算或者其
2017-03-09 18:47:12 1673
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人