自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员沙子的专栏

重来没有这么努力过,因为我知道时间不等人。

  • 博客(36)
  • 资源 (8)
  • 收藏
  • 关注

原创 线程同步与互斥

与多进程交互一样,各个不同的线程之间也会存在资源的共享问题。为了解决多线程之间对资源访问的同步和互斥问题,我们需要了解线程同步机制。第一种机制:互斥锁互斥锁是一种简单的加锁方法,可以使单个线程进行对资源访问的原子操作。互斥锁的基本操作就是加锁和解锁。互斥锁主要包含以下函数:(1) 初始化函数:pthread_mutex_init();#include int pth

2013-09-26 11:02:13 621

原创 C++那些基础性的东西

学过C的同学,下面这些东西,还是比较简单的:1.C++的输入输出:用cout表示输出流必须和“用cin标书输入流,“>>”称为提取运算符,用法与cout一样。2.

2013-09-25 20:10:15 677

原创 C++那些理解性的东西(一)

1.对象:客观世界中的任何一件事物都可以看做一个对象。对象的基本的两个要素为:属性和行为。一个对象往往是由一组属性和一组行为构成的。在C++中,每个对象都是由数据和函数两部分组成,数据体现了对象的“属性”,而函数就相当于

2013-09-25 18:30:02 491

原创 进程间通信(个人总结)

对于进程间通信(interprocess communication )的几种机制,我在前面都是零散的归纳,并且写出了每种机制的使用方法,但是没有系统的进行过归类。最近在一位学长的推荐下,通过阅读外文资料,脑海里对于这方面的知识真是清晰了许多,我觉得有必要跟大家分享一下。1.首先对于进程间通信工具的分类:unix下的通信和同步工具,按照功能上划分,大致分为以下几类:(1)通信类:这些工

2013-09-23 22:23:59 599

原创 生产者/消费者模型

1. 多线程并发应用的经典模型:生产者/消费者模型:系统中,产生消息的是生产者,处理消息的是消费者,消费者和生产者通过一个缓冲区进行消息传递。生产者产生消息后交到缓冲区,然后通知消费者可以从中取出消息进行处理。消费者处理完这些信息,通知消费者可以继续提供消息。要实现这个模型,关键是消费者和生产者两个线程的同步。只有缓冲区有消息时,消费者才能提取消息,只有消息已经被处理,生产者才能产

2013-09-18 19:47:36 531

原创 消息队列(message queue)

/* *Filename: msgsnd.c *Description: 消息队列的发送端 */#include #include #include #include #include #include #define BUFFERSIZE 1024struct message{long int message_type;

2013-09-18 19:28:11 870

原创 linux下消息队列(Message queue)

1.消息队列消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式。就是一个消息的链表,可以把一条消息看做一个记录,用户可以从中读取读取消息或者向其中添加消息。 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列存在于内核中,由“队列ID”来进行标识。消息队列的实现包括创建,添加信息,读取信息和控制信息队列。

2013-09-18 16:47:12 6207

原创 siginalExample.c(使用signal和sigaction函数捕捉和处理信号)

/* *Filename: signalExample.c *Description: 分别使用signal函数,sigaction函数捕捉信号,并执行相应处理 */#include #include #include #include void my_sighandler(int sig_num){if(sig_num == SIG

2013-09-18 15:32:03 900

原创 linux下的信号机制(signal)

1。linux的信号机制信号时内核提供的一种异步消息机制,用于内核对进程发送异步通知事件,可以理解为进程执行的流程中的一个软中断。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以通过它来通知用户空间进程发送了哪些事件。一个完整的信号使用由:(1)内核信号产生(2)用户进程信号注册(3)信号在用户进程进程中注销(4)执行信号处理函数常见的信号:

2013-09-18 10:46:00 768

原创 sharmemory.c(linux下的共享内存使用实例)

/* *Filename: sharmemry.c *Description: 利用fork函数创建子进程后,父进程先等待子进程中用户输入字符串写入共享内存,之后在共享内存尾部写入end。父进程随后将共享内存的信息打印在终端上。 */#include #include #include #include #include #include #in

2013-09-18 09:53:00 884

原创 linux下共享内存小结

1.共享内存的概念:一个进程不能简单的将自己的内存空间地址传递给其他进程使用,因为linux操作系统的内存保护机制或者内存映射机制的限制。在一个进程内,指向一块内存的指针实际上是虚拟地址,而不是真正的物理内存地址,这个地址仅仅在当前进程内才是有效使用的。如果通过某种方式,实现多个进程访问一块物理内存,那么进程之间的数据交换就可以通过读写内存来进行,这样的通信方式具有更高的效率。所以

2013-09-18 08:47:45 1119

原创 semExample.c(linux下信号量使用实例)

/* *Author: *Filename: semExample.h *Description: 提供信号量的函数调用接口 */#ifndef SEMEXAMPLE_H#define SEMEXAMPLE_H#include #include #include union semun {    int              va

2013-09-18 00:11:26 1298

原创 大端序和小端序

1.大端序和小端序的概念:即字节的存储顺序,大端序是指高位字节存放在低的地址单元,地位字节存放在高地址单元。小端序相反,高位字节存在高地址单元,低位地址存在低地址单元。2.编程判断大端序和小端序:#include int main(){union {int a;char b;}Mytest;Mytest.a = 0x00000001;if(Myt

2013-09-17 18:41:06 811

原创 demo4.c(求100以内的素数)

/**功能:求100以内的素数,全部打印出来*目的:练习C语言(一个数不能被2~根号这个数的数整除,则是素数)掌握素数的判断*/#include #include int  prime(int num){int j;int n = 0;int flag = 1;//定义标志n = sqrt(num);//对当前值num开方for(j

2013-09-17 18:28:03 759

原创 demo3.c(输入5个数(含负数小数)按由小到大顺序排列)

//功能:实现自定义个数从小到大的排序#include #define MAXSIZE 100int sequence(float *num_array,int num){int i;int j;float tmp;for(i = 0;i {for(j = i + 1; j {if(*(num_array + i) > *(num_a

2013-09-17 18:25:17 1233

原创 linux下的信号量(semaphore)

1.信号量:(Semaphore)    当有多个进程试图访问同一个文件并要更新这个文件,文件中的数据就会面临被破坏的危险。    不同的进程要求向文件中写入数据,问题在于对文件进行更新的那部分代码,这部分真正执行文件更新的代码需要排他式的执行,他们被称为临界区域,这段代码被称为临界代码。    信号量的出现就是你为了解决访问一个共享资源所引起的的问题。    信号量是一个特殊的变

2013-09-16 15:14:07 1016

原创 copy_process.c(采用进程间管道通信方式实现复制)

/* * *Filename:  copy_process.c *Description: 实现功能主要是,子进程从文件上读取数据, *    采用管道通信机制,传递给父进程,由父进程 *    写入本地另外一个文件中,实现拷贝。 */#include #include #include #include #include #include #i

2013-09-16 13:56:26 784

原创 pipeExample.c(向管道数据的简单读写操作)

/* *Author:  *Function: 利用pipe函数创建管道,并向其中写数据和从中读取数据 */#include #include #include #include #define BUFFERSIZE 1024int main(){ int pipefd[2];    //定义管道的文件描述符 int pipe_ret; ss

2013-09-16 13:39:24 2003

转载 嵌入式软件工程师笔试必看经典题

预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,

2013-09-16 10:42:45 783

原创 demo2_简单的报数游戏

题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到num报数),凡报到num的人退出圈子,问最后最后留下的是原来第几号的那位./* *Filename: count_num_game.h *Author  : *Description:   */#ifndef COUNT_THREE_H#define COUNT_THREE_H#

2013-09-16 09:59:39 688

原创 进程的等待(wait和waitpid)

1.进程的等待wait函数或waitpid进程可能发生如下情况;(1)如果所有的子进程孩子运行,则阻塞(Block)(2)如果一个子进程已经终止,正等待父进程获取其终止状态,则取得孩子进程的终止状态返回(3)如果她没有任何子进程,则立即出错返回函数的原型:#include pid_t wait(int *status);说明:wait函数会暂时停止目前进

2013-09-15 16:26:58 1085

原创 fork_execExmaple.c

/* *Author: *Function: 1.演示子进程分别调用exec函数族各函数2.使用fork函数创建子进程 */#include #include #include int main(){pid_t pid;int ret;char *argv[] = {"ls","/",(char *)0};char *envp[] =

2013-09-15 16:06:53 593

原创 exec函数族

1.exec函数族linux系统中有一系列的函数可以将一个进程的执行流程从一个可执行程序转移到另一个可执行程序。即装载并运行一个程序。这些函数称为exec函数族:使用exec函数并不是创建新的进程,只是用了一个全新的程序替换了当前进程的正文段,数据,堆和栈。函数原型:#include int execl(const char *path, const c

2013-09-15 14:49:48 805

原创 linux下的多进程学习要点

1.什么是程序:程序是一个预定义的指令序列,用来完成一个特定的任务。当程序被执行时,操作系统将可执行文件复制到内存中,就是程序的映像。2.什么是进程:进程是一个程序正在执行的实例,每个进程都有自己的地址空间和执行状态。进程标识(PID)是用来区分各个不同的进程的标志。3.“并发的概念”: 对于只有一个CPU的系统来讲,在一个时刻只能有一个进程在执

2013-09-15 14:39:58 835

原创 demo1.c(实现1~整数n的求和)

/**功能:实现1~整数n的求和目的:练习C语言*/#include #include int addition(int n);int main(int argc,char *argv[]){if(2!= argc){printf("The correct format is :./test \n");return -1;

2013-09-15 09:20:13 917

原创 段错误和总线错误小结

1.段错误:segmetation fault(core dumped)段错误相信大家都已很熟悉了,今天来对他小结一下。‘个人总结的常见的段错误的出现原因有:(1)使用了非法的内存地址或指针。包括使用了没有初始化的已经释放的指针,不存在的地址和访问受限的地址等。(2)内存的读写越界。比如在一些向内存中的写数据的函数中长度指定不正确就会发生此类错误。(3)函数返回了局部对象的

2013-09-13 20:18:34 882

原创 mmapExample.c--内存映射实现文件的复制

/* *Author: *Function: 使用内存映射的方法实现文件复制 */#include #include #include #include #include #include #include //定义文件的权限///参照/usr/inlcude/sys/stat.h下的宏定义#define F_Mode (S_IR

2013-09-13 20:00:15 865

原创 存储映射I/O

1..存储映射I/O:(Memory-Mapped I/O)是指将一个磁盘文件与内存中的一个缓冲区想映射。使得在不使用read,write函数的情况下执行I/O操作。它是一种基于内存区域的高级I/O操作。2.实现的方法:mmap函数:将给定的一个文件映射到一个存储区域中。#include void *mmap(void *start,size

2013-09-12 22:50:33 831

原创 标准I/O库(对流的操作)

1. I/O缓冲:缓冲机制有三种:(1)全缓冲:一般是缓冲区满了以后才进行实际的I/O操作。全缓冲是尽可能的多读写数据到缓冲区。(2)行缓冲:当遇到换行符时,进行实际的I/O操作一般应用于标准输入输出。(3)无缓冲:一般是应用对象是标准错误输出,对无缓冲的流每次读写操作都会引起flush操作。行缓冲的示意图:printf函数向标准输出写入多个字符,所

2013-09-12 11:01:55 801

原创 fcntlExample.h_获得文件读写标志

/* *Author:  *Function: 获取文件的读写标志,简单演示fcntl函数用法 */#include #include #include #include int main(int argc,char *argv[]){//需要获取的文件描述符int fd; int val;if(2 != argc)

2013-09-12 10:28:03 479

原创 文件操作的系统调用接口

1.lseek函数:调用lseek函数可以改变文件位置。文件位置:在GNU系统和POSIX.1系统中,文件位置是一个整数,表示距离文件位置起始处的字节数。#include #inlcude off_t lseek(int fildes,off_t offset,int whence);whence取值常量为:SEEK_SET:将文件位置设置在距文件开始处of

2013-09-11 16:59:00 840

原创 mycopyFile_linux下实现简单文件的复制

/**Author:*Function: 实现简单文件的复制拷贝*/#include #include #include #include #include #include #include #define BUFFERSIZE 1024int main(int argc,char *argv[]){int

2013-09-11 16:39:37 1249

原创 linux下的文件概念和操作

1. 文件的概念:文件在linux系统中,是对系统资源的一个抽象,是对系统资源进行访问的通用接口。linux下的系统资源都可表述为文件。这样做可以对这些资源提供接口,供系统编程接口设计。2. 文件的类型:普通文件:存储在系统磁盘上的普通文件,以字节为单位存储。文件系统本身不关心内容,只提供数据存储和访问的通道。文件内容是由应用程序解释的。目录:目录是一种特殊的文件,可以

2013-09-11 14:31:11 1079

原创 linux下的系统调用相关

1.系统调用(system calls):程序借此向内核请求服务。系统调用就是这个借口点。4. Linux系统的软件层次内核代码运行在内核态。内核通过可移植层提供与硬件无关的标准的功能借口给用户态程序。Linux内核提供的服务主要有:进程控制,文件系统控制,内存管理,网络管理,用户管理,进程通信等。应用程序一般

2013-09-11 10:13:37 744

原创 linux下静态库和共享库简介

1. 库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议。2. linux中,库文件的命名:lib开头,随后指明什么库,最后以.开始,表明库的类型,(a表明传统的静态库,so代表共享库)。静态库在程序编译时就会被连接到目标代码中,程序运行时则不需要。动态库在程序编译时并不会被加载连接到目标代码中,在程序运行时才被载入。不需要编译器和链接器负责将程序代码和函数库结合

2013-09-11 09:54:25 644

原创 Failed to execute /linuxrc. Attempting defaults.....解决方法

最近在做文件系统的时候碰到这样一个问题,我的开发环境:mini2440开发板 ubuntu 10.04在linux下做好文件系统后,使用命令mkyaffs2image后生成了.img文件,通过dnw下载进板子后,进行启动,报错了,启动不了Failed to execute /linuxrc.  Attempting defaults...Kernel panic - not syn

2013-09-02 23:25:08 3144

yangrtc从SRS取流分析.pcap

本人在博文中所用的抓包数据文件

2022-04-21

amr-nb格式的使用,非字节对齐转换成字节对齐的源码。

amr-nb格式的使用,非字节对齐转换成字节对齐的源码。基于这份源码,可以理解两者格式的差别,并且实现代码的转换。最终使用opencore-amr库,可以实现解码。

2022-03-31

处理amrnb解码时需要的解码库

处理amrnb解码时需要的解码库

2022-03-31

RTSP说明书以及抓包文件.zip

rtsp说明书以及抓包分析

2021-09-18

MediaInfo音视频信息解析类

有源码和说明,包括一些简单的实例,适合自己二次封装并使用。

2015-11-06

arm-linux-gcc-4.4.3.tar.gz

我在移植Qt4.6.3的时候用到,亲测可用

2013-06-17

Qt从基础入门到精通

初学QT不可多得的入门教程,充分了解QT和学会使用QT

2013-01-30

madplay移植方法及移植好的文件(部分可用)

具体说明了madplay的移植方法,亲测可行,./madplay XXXX.mp3可播放音乐

2012-05-12

空空如也

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

TA关注的人

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