自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(416)
  • 资源 (10)
  • 收藏
  • 关注

转载 C语言sprintf与sscanf函数[总结]

1、前言    我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结一下。C语言提供了一些列

2015-04-21 15:35:00 604

原创 sprintf和snprintf需要注意的地方

sprintfint sprintf ( char * str, const char * format, ... );Write formatted data to stringComposes a string with the same text that would be printed if format was used on printf, but inste

2015-04-20 23:30:53 1341

转载 write的奥秘

在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢? 这个奥秘就在于设备驱动程序的write实现中,这里我结合一些源代码来解释如何使得一个简简单单的write函数能够完成向设备里面写数据的复杂过程。这里的源代码主要来自两个地方。第

2015-04-15 13:50:59 1236

转载 指针做形参做局部变量以及内存分配

一级指针做形参:首先一定要明白形参和你传递参数的那个实参是两个不同的变量,即使同名也还依然不同。指针传递的是一个变量或者一个值的地址,但是它本身还是采用值传递的方式。即你不能使它指向另外一块地址,但是你可以改变它指向的空间里存的值。二级指针做形参:二级指针也是传值,但是他指向的地址是个一维指针,所以可以改变二维指针指向的地址空间里的内容也就是要申请空间的一维指针,不能改变二维指针本身的值,

2014-11-10 15:33:28 853

转载 C/C++中extern关键字详解

1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。      也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而

2014-11-01 23:34:06 578

转载 c语言中不允许在函数外部给全局变量赋值

今天,在写条件编译的时候,出现了在函数外部给全局变量赋值的情况,gcc报错,那么c语言为什么不允许在函数外部给变量赋值呢?为什么声明变量的时候可以对变量进行赋值?出错代码: 1 /* 2 * ====================================================================================

2014-10-31 22:30:44 5625

转载 使用指针时的“陷阱”

C语言诡异离奇,陷阱重重,却获得了巨大成功!”——C语言之父Dennis M.Ritchie。Ritchie大师的这句话体现了C语言的灵活性以及广泛的使用,但也揭示了C是一种在应用时要时刻注意自己行为的语言。C的设计哲学还是那句话:使用C的程序员应该知道自己在干什么。有时用C写的程序会出一些莫名其妙的错误,看似根源难寻,但仔细探究会发现很多错误的原因是概念不清。在我们经常掉进去的这些“陷阱”中,围

2014-10-19 12:08:12 725

转载 求教关于被调函数中的malloc与free

问题:在子函数中动态分配内存:p=(int*)malloc(a*sizeof(int)),这个函数的目的是返回p:return(p)我想问问,该在什么地方进行free(p)呢?如果在子函数中的return前free是肯定不行的,在之后free?子函数的return之后,不就结束函数调用了吗?那时候free还会被子函数执行吗?

2014-10-18 21:11:44 4484

转载 C语言数组参数与指针参数

我们都知道参数分为形参和实参。形参是指声明或定义函数时的参数,而实参是在调用函数时主调函数传递过来的实际值。一、一维数组参数1、能否向函数传递一个数组?看例子:void fun(char a[10]){   char c = a[3];}intmain(){   char b[10] = “abcdefg”;   fun(b[10]);   retu

2014-10-14 20:39:33 913

转载 指针参数是如何传递内存的?

如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num){    p = (char *)malloc(sizeof(char) * num);}

2014-10-14 20:24:11 755

转载 C语言回调函数学习

对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。为什么要使用回调函数呢?我们先看一个小例子:        Node * Search_List (Node * node, const i

2014-09-09 23:08:06 619

转载 C++中将构造函数或析构函数定义为private

很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?这意味着什么?      当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私

2014-09-04 10:03:54 819

转载 linux bash shell 中的单引号和双引号

原文地址:http://www.cnblogs.com/fhefh/archive/2011/04/21/2024198.html

2014-08-27 20:04:20 806

转载 vfork 挂掉的一个问题

在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事。我受邀后本来不想回答这个问题的,因为这个问题明显就是RTFM的事,后来,发现这个问题放在那里好长时间,而挂在下面的几个答案又跑偏得比较严重,我觉得可能有些朋友看到那样的答案会被误

2016-05-22 20:12:43 1097

转载 initramfs实作

这个是翻译来的,原文地址:http://www.landley.net/writing/rootfs-howto.html怎样使用initramfs 工作过程简述在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是root filesystem的缩写)。rootfs是一个特殊的tmpfs,这个不能被删除或者是unmou

2016-04-20 19:01:10 1051

转载 Linux 多线程应用中如何编写安全的信号处理函数

关于代码的可重入性,设计开发人员一般只考虑到线程安全,异步信号处理函数的安全却往往被忽略。本文首先介绍如何编写安全的异步信号处理函数;然后举例说明在多线程应用中如何构建模型让异步信号在指定的线程中以同步的方式处理。0 评论周 婷 ([email protected]), 软件工程师, IBM 中国软件开发技术实验室刘 坚 ([email protected]

2016-04-13 16:26:01 919

转载 Linux多线程中使用信号-1

在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter

2016-04-12 17:58:49 726

原创 Linux多线程同步之读写锁

读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,和互斥量不同的是:互斥量会把试图进入已保护的临界区的线程都阻塞;然而读写锁会视当前进入临界区的线程和请求进入临界区的线程的属性来判断是否允许线程进入。相对互斥量只有加锁和不加锁两种状态,读

2016-03-31 14:24:40 2038 1

原创 Linux多线程同步之互斥量和条件变量

1. 什么是互斥量       互斥量从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所以在该互斥锁上的阻塞线程都会变成可进行状态,第一个变成运行状态的线程可以对互斥量加锁,其他线程在次被阻塞,等待下次运行状态。pthr

2016-03-30 23:30:50 1168

转载 使用互斥量控制Linux线程同步

一、什么是互斥量互斥量是另一种用于多线程中的同步访问方法,它允许程序锁住某个对象,使得每次只能有一个线程访问它。为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁。二、互斥量的函数的使用它们的定义与使用信号量的函数非常相似,它们的定义如下:[cpp] view plain c

2016-03-30 14:01:56 583

原创 使用信号量控制Linux线程同步

linux中两种基本的同步方法是信号量和互斥量。这两种方法很相似,而且它们可以相互通过对方来实现。信号量概述下面介绍用信号量进行同步。信号量概念由荷兰科学家Dijkstra首先提出。信号量是一个特殊类型的变量,它可以被增加或者减少。但对其的关键访问被保证是原子操作,即使在一个多线程程序中也是如此。信号量有两种类型:

2016-03-29 13:38:17 833

转载 ARM Linux从Bootloader、kernel到filesystem启动流程

ARM Linux启动流程大致为:bootloader ---->kernel---->root filesystem。bootloader 是一上电就拿到cpu 的控制权的,而bootloader实现了硬件的初始化。bootloader俨然就成了Power on 之后”第一个吃螃蟹”的代码。谈到这就得想到硬件机制是如何满足这个功能的了。CPU内部一般都集成小容量的SRAM (又叫stappi

2016-03-03 13:36:00 1925

原创 僵尸进程的产生和避免

僵尸进程的产生:当一个进程创建了一个子进程时,他们的运行时异步的。即父进程无法预知子进程会在什么时候结束,那么如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,会不会丢失子进程的结束时的状态信息呢?处于这种考虑unix提供了一种机制可以保证只要父进程想知道子进程结束时的信息,它就可以得到。这种机制是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的

2016-03-01 00:22:10 1242

原创 waitpid非阻塞时的用法

我们用这个程序和输出结果分析一下waitpid的用法和特点。我们将waitpid设置成WNOHANG非阻塞父进程状态;#include #include #include #include #include int main(void){ pid_t pid, wpid; int stat; wpid = waitpid(-1, &stat, WNOHANG); pri

2016-02-29 23:26:58 4169

原创 Linux进程间通信(一)管道

一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据。管道包括无名管道和有名管道两种,前者只能用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。管道通信-特点#include #include #include #include #include int main(int argc, char *argv[]){ pid_t pi

2016-01-31 14:25:30 631

原创 Linux进程间通信(二)FIFO

1.从FIFO中读取数据:约定:如果一个进程为了从FIFO中读取数据而阻塞打开了FIFO,那么称该进程内的读操作为设置了阻塞标志的读操作。(1)如果有进程写打开FIFO,且当前FIFO为空,则对于设置了阻塞标志的读操作来说,将一直阻塞下去,直到有数据可以读时才继续执行;对于没有设置阻塞标志的读操作来说,则返回0个字节,当前errno值为EAGAIN,提醒以后再试。(2)对于设置了阻塞标

2016-01-30 17:22:53 985

转载 sync、fsync、fdatasync三个函数以及O_SYNC标志位的区别

在大多数的unix/linux对磁盘io的写操作都是通过缓存来完成的,基本的原理如下:当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。 我们称之为延迟写,极大的减少了写磁盘的次数。但是在没写特殊的应

2016-01-19 19:43:30 1143

转载 c/c++中文件的操作大全,可以了解向文件读取一个结构体

文件的基本概念  所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。  普通文件是指驻留在磁盘或其它外部介质

2016-01-14 23:33:00 3043

转载 文件结构体struct file(Linux 2.6.23内核) (转)

struct file结构体定义在/linux/include/linux/fs.h(Linux 2.6.11内核)中,其原型是:struct file {        /*         * fu_list becomes invalid after file_free is called and queued via         * fu_rcuhead for RCU

2016-01-13 18:04:48 835

转载 Linux 文件操作总结

文件是linux中的一个重要概念。在Linux中,一切(几乎一切)都是文件。简单的说,C中基本的的printf()函数,scanf()函数,其实都属于文件操作。对于文件操作,虽然都是通过函数调用的方式实现,却还是能分为两类:系统调用和库函数。这篇文章将先介绍linux中文件的概念,系统调用和库函数的概念 ,然后具体的讨论两种方式下的文件操作。博文的主要内容如下:Linux 中的

2016-01-12 23:58:28 449

转载 系统调用、POSIX、C库、系统命令和内核函数

第5章 系统调用大部分介绍Linux内核的书籍都没有仔细说明系统调用,这应该算是一个失误。内核发展到现在,我们实际需要的系统调用现在已经十分完美,从这个意义上来说,再耗费宝贵的时间去研究系统调用的实现是毫无意义的事情。然而,对于希望能够对内核有更深理解的我们来说,仔细研究少量系统调用仍是十分值得的。这样就有机会初步了解一些概念,并可以趁机详细了解一下内核编程的特点,就像系统调用本身在应用程

2016-01-12 23:32:42 3489

转载 linux系统调用和库函数调用的区别

Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底

2016-01-12 23:30:54 490

转载 Linux下动态共享库加载时的搜索路径详解

对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的。具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径。这实际上是通过一种不算很常用,却比较实用的

2015-12-30 14:32:37 594

转载 Linux动态库的查找路径

前两天写了一个动态库,然后试图编译到程序里面去运行,结果发现编译的时候通过gcc的-L参数来指定路径仅仅能让编译通过,运行时还是会出问题的。比如下面这个例子:main.c是主程序,sum.c中间含有一个函数add,用来执行加法,代码如下: 1 /* 2 * main.c 3 */ 4 #include 5 6 int add(int a, int

2015-12-30 14:20:02 914

转载 C++命名空间

一、 为什么需要命名空间(问题提出)    命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。   在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。     1、全局变量的作用域是整个程序

2015-12-22 11:13:27 434

转载 C语言全局变量那些事儿

作为一名程序员,如果说沉迷一门编程语言算作一种乐趣的话,那么与此同时反过来去黑一门编程语言就是这种乐趣的升华。今天我们就来黑一把C语言,好好展示一下这门经典语言令人抓狂的一面。我们知道,全局变量是C语言语法和语义中一个很重要的知识点,首先它的存在意义需要从三个不同角度去理解:对于程序员来说,它是一个记录内容的变量(variable);对于编译/链接器来说,它是一个需要解析的符号(symbo

2015-12-22 10:47:16 810

转载 构建ARM Linux交叉编译工具链 详解

本章学习目标:  ● 了解交叉编译工具链  ● 理解分步构建交叉编译工具链的方法  ● 学会使用Crosstool工具构建交叉编译工具链2.1  交叉编译工具链介绍读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程式,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上

2015-12-18 23:12:07 758

转载 Analysis of Linux kernel crashes

From: http://stablebits.blogspot.hk/IntroductionToolsFormat of a crash reportAnalysisSimple case to learn the basicsCrash in a binary kernel moduleSuspected memory corruptionExtra Details

2015-12-06 23:21:50 913

转载 嵌入式寄存器操作-----C语言位操作的学习

原帖地址:http://blog.csdn.net/zeroubuntu/article/details/19617871[cpp] view plaincopya |= 1//第x位写1  a &=~(1//第x位写0  (a &(1//判断1,等号左边括号不能省略  (a& (1//判断0  a>>n              /

2015-12-01 00:03:59 2759

转载 C++ erase的用法

STL中list的erase用法erase的作用是,使作为参数的迭代器失效,并返回指向该迭代器下一参数的迭代器。如下:listParticleSystem;list::iteratorpointer;if(pointer->dead == true){   pointer =ParticleSystem.erase(pointer);} 有一段关于错误使用e

2015-11-09 23:21:38 5368

LTE—UMTS长期演进理论与实践

LTE方面最权威的著作,系统、深入、全面地介绍了LTE的背景、动因和技术内容,涵盖了基本理论基础、物理层技术设计、网络协议架构以及系统部署和性能分析等方方面面。

2011-11-17

M进制的MQAM调制的matlab仿真程序

M进制的MQAM调制的matlab仿真程序,很全,很详细

2011-05-24

ASK BPSK QPSK调制等的matlab仿真程序

ASK BPSK QPSK调制等的matlab仿真程序,很全,运行速度快

2011-05-24

LDPC的matlab 仿真 BP算法 BPSK调制

LDPC仿真,matlab BP算法 LDPC的matlab 仿真 BP算法 BPSK调制

2011-05-24

LDPC编译码 matlab快速仿真,BP算法

LDPC编译码 matlab快速仿真,BP算法

2011-05-08

LDPC编译码 matlab仿真,BP算法

LDPC编译码 matlab仿真,BP算法

2011-05-08

LDPC编译码 matlab仿真,BPSK调制

LDPC编译码,matlab仿真,BPSK调制

2011-05-08

EDA技术实用教程(第三版)答案

用74283 加法器和逻辑门设计实现一位8421BCD 码加法器电路,输入输出均是BCD 码,CI 为 低位的进位信号,CO 为高位的进位信号,输入为两个1 位十进制数A,输出用S 表示。 解:如果二进制的和大于9,需要再加上6 来补成BCD 码

2010-05-24

通信原理笔记卡萨科技

通信原理笔记北邮的发声空间发生会计拉斯加开了卢卡斯的

2010-04-01

空空如也

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

TA关注的人

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