- 博客(218)
- 资源 (4)
- 收藏
- 关注
转载 ubuntu14安装TFTP服务器
1安装tftp所需的软件安装tftp-hpa、tftpd-hpa和xinetd: $ sudo apt-get install tftp-hpa tftpd-hpa xinetdtftp-hpa是客户端,tftpd-hpa是服务程序。 2 配置TFTP服务器第1步: 修改/etc/default/tftpd-hpa配置文件。将/etc/default/
2017-11-15 18:44:39
514
转载 对I2C总线时序的一点理解以及ACK和NACK(NAK)
http://www.cnblogs.com/zym0805/archive/2011/07/31/2122890.htmlI2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=
2017-01-10 10:19:49
36072
转载 C# VS2010结合SQL server 2008数据库编程方法
SQL Server 数据库在C#编程中经常用到,如何实现在具体项目中数据库和具体应用的结合是我们经常遇到的问题,我们这次主要针对如何使用SQL Server 数据库展开,下面是具体的操作以及简单的代码实现,希望对大家有帮助 。环境:Windows 7 旗舰版 x86Visual Studio 2010 旗舰版SQL Server 2008数据库.NET Framework 4
2016-10-09 13:31:51
1412
原创 XSI IPC 进程间通讯方式
信号量:1. 通过一个键值得到或者创建信号量,并得到返回的信号量的标识符。int semget(key_t key, int nsems, int semflg)2. 通过得到的标识符来设置或者获得信号量的属性值,信号量的属性值在结构体semid_ds中int semctl(int semid, int semnum, int cmd, ...);3. 通过得到的标识符来对
2016-07-19 09:33:57
552
原创 XSI IPC为什么需要键来标识内核IPC结构
管道文件在进程间通讯,由于管道文件是一个能够由用户看到的实际存在的文件。所以只要在服务器进程和客户端进程各自调用open来打开管道路径就可以得到不同的管道描述符了,这两个不同的管道描述符都指向同一个管道文件。而XSI IPC是一个在内核中维护的数据结构。用户在使用之前无法调用open函数来得到IPC的标识符。所以可以服务器进程和客户端进程可以通过用一个键值相同的值来创建或者获取IPC的
2016-07-18 13:27:23
865
原创 UNIX条件变量
UNIX条件变量是用户线程间同步的一种方法,条件变量用于以下这种情况:需要在一个线程中一直判断等待一个条件的值,并根据这个值做出相应的操作。而恰好这个条件的值可以被另一个线程改变。那么就需要对这个条件用互斥量保护起来。并在这个条件改变的时候通过条件变量来通知另一个线程
2016-07-15 19:37:04
380
转载 pthread_join与pthread_deatch和分离线程的关系
在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用p
2016-07-15 18:58:12
1965
原创 UNIX信号的阻塞概念
当造成信号的事件发生时,为进程产生一个信号(或向进程发送一个信号)。当一个信号产生时,内核通常在进程表中以某种形式设置一个标志。当对信号采取了这种动作时,我们说向进程递送了一个信号。在信号产生和递送之间的时间间隔内,称信号是未决的。进程可以选择“阻塞信号递送”。如果为进程产生了一个阻塞信号,而且对该信号的动作是系统默认动作或捕捉该信号,则为改进程将此信号保持为未决状态(这个时候我认为内核会在进
2016-07-15 18:04:27
727
转载 系统调用、POSIX、C库、系统命令和内核函数
摘要:《Linux内核修炼之道》第5章讲解系统调用,它是应用程序和内核间的桥梁,学习并理解它是我们走向内核的一个很好的过渡。本节为大家介绍系统调用、POSIX、C库、系统命令和内核函数。 5.1.1 系统调用、POSIX、C库、系统命令和内核函数(1)系统调用和POSIX。系统调用虽然是内核和用户应用程序之间的沟通桥梁,是用户应用程序访问内核的入口点,但通常情况下,应用程
2016-06-29 23:36:00
509
转载 C++ 避免隐藏继承而来的名称
关于C++中继承这个概念相比大家都很熟悉,那么子类究竟能从父类继承到哪些东西,哪些东西又是子类继承不到的呢?可能很多人都会觉得父类所有的东西都会被子类继承,包括成员函数和成员变量,否则就违背了“父子关系”这字面上的意思,其实不然,首先我们先看一小段简单的代码,这段代码很容易理解点击(此处)折叠或打开#include iostream>usin
2016-06-28 16:29:28
894
转载 如何理解和使用java package
from:http://blog.csdn.net/zhenyusoso/article/details/6174834 Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。可以使用import关键字来导入一个包。例如使用import java.util.*就可以导入名称空间java.util包里面的所有类。所谓导入这个包里面的所
2016-05-11 08:11:45
307
转载 c++内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到
2016-05-10 17:14:57
306
转载 C语言字符串结束符
'\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是 字符串结束标志。'\0'是转译字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一
2016-04-29 10:05:02
16805
转载 C语言中,为什么字符串可以赋值给字符指针变量
本文是通过几篇转帖的文章整理而成的,内容稍有修改:一、C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a; //显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点! 答:双引号做了
2016-04-23 17:41:28
465
转载 广播地址的计算
广播域首先我们来了解一下广播域的概念。广播域是网络中能接收任一台主机发出的广播帧的所有主机集合。也就是说,如果广播域内的其中一台主机发出一个广播帧,同一广播域内所有的其它主机都可以收到该广播帧。广播域的计算如何知道一台主机是属于哪一个广播域呢?其实计算很简单,只要用主机的IP地址与子网掩码进行与运算即可知道该主机属于哪一个广播域。例如:一台主机的IP地址为192.168.23.15
2016-01-21 14:02:17
6585
转载 C++自定义 operator new
拨开自定义operator new与operator delete的迷雾 C++允许用户通过自定义operator new和operator delete的方式来更改new与delete表达式的某些行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的问题。
2015-09-11 09:44:12
1270
转载 C++构造函数的继承
一、基类没有定义构造函数的情况1、派生类也可以不定义构造函数,全部采用默认的构造函数,此时,派生类新增成员的初始化工作可以用其他公有函数来完成。2、如果只有派生类定义构造函数,只需要构造派生类对象即可,对象的基类部分使用默认构造函数来自动创建二、基类中存在构造函数1、基类中存在不带参数的构造函数。如果基类定义了构造函数,而且该构造函数没有参数,那么它可以隐式的被继承
2015-09-09 14:52:23
552
转载 文章标题
这里写代码片namespace Test1{public class BaseClass{public BaseClass(){Console.WriteLine("基类的构造函数被继承");}}public class ChildClass : BaseClass{}class Program{static void Main(string[] args){Child
2015-09-09 14:51:09
353
转载 C++中虚函数
内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节.不同平台间的处理器架构将直接影响内存模型的结构. 首先介绍一下C++中有继承关系的类对象内存的布局: 在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。
2015-08-28 13:31:11
558
转载 std:map用法
std::map用法 STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用。 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map 等等。本文主要针对map对象,结合自己学习该对象的过程,讲解一下具体用法。本人初学,水平有限,讲解差错之处,请大家多多批评指正。 map对象所实现的功能跟MFC
2015-08-27 15:12:51
481
转载 C++类成员函数
c++的两大特色是多态和模板。其中多态是通过继承和虚函数来实现的,其中虚函数是通过每个对象里面的虚表来实现的。如果这个对象的类有虚函数,那么这个类就有一张虚表,存的是每个虚函数的入口地址,而这个类的每个对象,都会有一个4字节的指针,指向这张虚表,这个就是虚指针。上面一段话很多人都知道,但是如果问普通成员函数,编译器是怎么找到它的入口地址的呢?也就是说,怎么进行调用?为什么A类一个foo函数
2015-08-27 14:21:10
448
转载 C++中的 extern "C"
比如说你用C开发了一个DLL库,为了能够让C++语言也能够调用你的DLL输出(Export)的函数,你需要用extern"C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码:C代码 #ifdef __cplusplus extern "C" { #endif /**** some declaration or so
2015-07-31 10:23:49
474
转载 Makefile进行宏定义
实际上是gcc命令支持-D宏定义,相当于C中的全局#define:gcc -D namegcc -D name=definitionMakefile中可以定义变量(和宏很像),但是是给make解释器用的,对所编译的文件完全没有作用。关键词: Make宏定义 Make传递宏定义 Makefile中添加宏定义 Makefile -D在Makefile中我们可以通过宏定义
2015-07-31 09:57:46
916
原创 动态链接库的装载过程
《程序员的自我修养》动态链接章动态链接程序运行时地址空间分布: 在可执行文件中有各种符合和函数的地址,这个地址实际上是进程的虚拟地址。.so文件中也有各种符号地址以及装载地址等。但是.so文件中的这个地址是不确定的,即是不固定的。只有在这个so文件被装载时才会解析出一个合理的装载地址,从而装载进物理内存。(这里的装载地址和符号地址实际上都是进程的虚拟地址)。那么问题来了,为
2015-04-19 22:45:59
3063
1
转载 Linux进程地址空间-------vma基本操作
在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。在前面介绍的一些分配内存的途径中,无论是伙伴系统中分配页的函数,还是slab分配
2015-04-18 23:00:40
1019
转载 Linux进程间通信----命名管道
在前一篇文章——Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关的的进程之间交换数据带来了不方便。这里将会介绍进程的另一种通信方式——命名管道,来解决不相关进程间的通信问题。一、什么是命名管道命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系
2015-04-03 11:49:33
393
原创 Makefile CFLAGS
CFLAGS的值是在Makfile中是gcc的编译选项,可以再CFLGAS加上想要定义的宏、include的搜索路径、共享库(静态库和动态库)文件搜索路径、生成的动态库文件等信息。Makefile中的变量赋值一般使用 := 的方式,这样变量只在定义的时候将所有变量展开,不会在使用的时候展开,这样避免了递归无休止展开的情况。关于gcc的编译选项参考《嵌入式linux应用手册》
2015-03-29 17:51:35
1441
转载 Linux C编程 信号量
信号量当我们在多用户系统,多进程系统,或是两者混合的系统中使用线程操作编写程序时,我们经常会发现我们有段临界代码,在此处我们需要保证一个进程(或是一个线程的执行)需要排他的访问一个资源。信号量有一个复杂的编程接口。幸运的是,我们可以很容易的为自己提供一个对于大多数的信号量编程问题足够高效的简化接口。为了阻止多个程序同时访问一个共享资源所引起的问题,我们需要一种方法生成并且使用一个标
2015-03-29 14:46:00
630
转载 ASCII(美国信息交换标准编码)表
ASCII(美国信息交换标准编码)表字符ASCII代码字符ASCII代码字符ASCII代码二进制十进制十六进制二进制十进制十六进制二进制十进制十六进制回车ESC空格!"#$
2015-03-27 14:28:30
9787
原创 UNIX sigwait函数的用法
#include int sigwait(const sigset_t *restrict set, int *restrict signop);Returns: 0 if OK, error number on failure在使用sigwait函数之前需要将set信号集中的信号阻塞掉,此时调用sigwai函数会阻塞,当set中的信号发生的的时候,因为该信号时被阻塞的
2015-03-18 14:53:47
850
转载 linux 线程私有数据 (一键多值)
进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有。但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-specific Date)TSD来解决。在线程内部,私有数据可以被各个函数访问,但对其他线程是屏蔽的。一个明显的例子是errno,每个线程都有自己的副本,不然由于线程间的切换,在一个线程里输出的很可能是令一线程的出错信息。 线程私有数据采用了一
2015-03-18 14:00:37
517
转载 linux设备模型的inode,cdev,kobj_map,char_device_struct
Char Device Driver 相关数据结构: struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count;
2015-03-16 13:27:17
1709
转载 Linux信号处理机制
本文简单介绍下Linux信号处理机制,为介绍二进制翻译下信号处理机制做一个铺垫。本文主要参考书目《Linux内核源代码情景分析》《独辟蹊径品内核:Linux内核源代码导读》首先,先说一下什么是信号。信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源:程序错误:除零,非法内存访问…外部信号:终端Ctrl-C产生SGINT信号,定时器到期产生SIGALRM…
2015-03-14 14:27:28
578
原创 UNIX文件系统中各种文件、概念和函数之间的关系
unlink、硬链接、文件描述符、符号链接,文件名真正指向文件内容的是inode结构体(i节点)。文件描述符--------------->打开的文件表--------->v节点表---------------->i节点----------->文件内容
2015-03-12 17:31:43
683
转载 sync、fsync、fdatasync、fflush函数
传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满 或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写 (delayed write)(Ba
2015-03-07 11:26:30
2287
原创 关于字符串指针
1、#include int main(){char *p = "1edr";printf("p = %s\n",p);if(*p == '1') printf("*p = '1'\n");return 1;}运行结果:p = 1edr*p = '1'指针的本质就是一个存储地址的变量,它存储的一定是地址, char *p =
2015-02-05 10:09:49
519
转载 字符串与指针
printf的第二个参数的类型是由第一个参数format决定的。当format为%s时,第二个参数就是一个地址。当format为%d时,第二个参数就是一个int型的变量。1、 字符串的表示形式在C语言中,我们可以用两种方式访问字符串(1) 用字符数组存放一个字符串,然后输出该字符串。main(){ char string[]="I love China!"
2015-02-04 19:52:11
407
转载 gcc加载静态库与动态库
//hello.c#include void print_hello(){ printf("HelloWorld ");}//main.c#include#include "hello.h"int main(){ print_hello(); printf("%d",HELLO); return 0;}//hello.h#define HELL
2015-02-02 15:58:55
738
原创 UNIX中断系统调用和可重入函数
可中断的系统调用指的是进程阻塞在这个系统调用期间接受到一个信号,该系统调用会返回并返回出错信息errno=ENTER(注意:信号都是内核接收,并在系统从内核态返回到用户态的时候执行信号处理程序。信号中断系统调用这个现象是信号促使系统从内核态切换到用户态)。 可重入函数指的是这个系统调用函数在被信号中断后,指令进入信号处理程序后仍然允许调用这个系统调用而不会出错。
2015-02-01 14:15:11
1010
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人