嵌入式Linux应用程序开发
文章平均质量分 73
五个模块文件I/O编程、多任务编程、进程间通信、多线程编程、网络编程,每篇最后都有实验代码加深理解
玖零大壮
这是个还有梦的傻小子
展开
-
Linux多线程编程(三)---线程之间的同步与互斥进阶实验
实验目的 通过编写经典的“生产者-消费者”问题的实验,进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。实验内容 “生产者--消费者”问题描述如下: 有一个有限缓冲区(这里用有名管道实现FI原创 2013-07-21 09:03:50 · 9907 阅读 · 7 评论 -
Linux多线程编程(二)---线程之间的同步与互斥
由于线程共享进程的资源和地址空间,因此在对这些资源进行操作时,必须考虑到线程间资源访问的同步与互斥问题。这里主要介绍Posix中两种线程同步机制,分别为互斥锁和信号量。这两个同步机制可以通过互相调用对方来实现,但互斥锁更适用于同时可用的资源是唯一的情况;信号量更适用于同时可用的资源为多个的情况。原创 2013-07-20 16:15:16 · 12669 阅读 · 7 评论 -
Linux多线程编程(一)---多线程基本编程
线程是指运行中的程序的调度单位。一个线程指的是进程中一个单一顺序的控制流,也被称为轻量级线程。它是系统独立调度和分配的基本单位。同一进程中的多个线程将共享该系统中的全部系统资源,比如文件描述符和信号处理等。一个进程可以有很多线程,每个线程并行执行不同的任务。原创 2013-07-20 10:58:59 · 23937 阅读 · 8 评论 -
Linux进程间通信(十)---综合实验之共享内存实验
/********************************************************************** 2019年6月26日声明:本博客资源下载积分最开始为免费的,我也不知道为什么有的很高了。*如果有问题加我微信:wensong2048,(加我备注来源以及需求,否则不通过,谢谢)**********************************...原创 2013-07-18 20:45:29 · 7406 阅读 · 2 评论 -
Linux进程间通信(九)---综合实验之有名管道通信实验
实验目的 通过编写有名管道多路通信实验,进一步掌握管道的创建、读写等操作,同时复习使用select()函数实现管道的通信。实验内容 这里采用管道函数创建有名管道(不是在控制台下输入命令mknod),而且使用select()函数替代poll()函数实现多路复用。如果对管道通信的知识忘了的话,请看这篇博客:原创 2013-06-28 16:06:03 · 6911 阅读 · 1 评论 -
Linux进程间通信(八)---消息队列之msgget()、msgsnd()、msgrcv()及其基础实验
/********************************************************************** 2019年6月26日声明:本博客资源下载积分最开始为免费的,我也不知道为什么有的很高了。*如果有问题加我微信:wensong2048,(加我备注来源以及需求,否则不通过,谢谢)**********************************...原创 2013-06-27 18:00:14 · 11708 阅读 · 6 评论 -
Linux进程间通信(七)---共享内存之shmget()、shmat()、shmdt()及其基础实验
/********************************************************************** 2019年6月26日声明:本博客资源下载积分最开始为免费的,我也不知道为什么有的很高了。*如果有问题加我微信:wensong2048,(加我备注来源以及需求,否则不通过,谢谢)**********************************...原创 2013-06-27 09:56:36 · 15301 阅读 · 3 评论 -
Linux进程间通信(六)---信号量通信之semget()、semctl()、semop()及其基础实验
这个信号量理解起来是有点不容易啊,我看书看了好几遍才知道怎么回事。在讲这一节信号量之前,我还是想先说几个小知识点,这也是我在学习完后最终理解的“精华”,哈哈!信号量是干啥的? 信号量就是用来解决进程间的同步与互斥问题的一种进程间通信机制。同步与互斥的通俗理解 这两个名词咱们从字面上就能理解。举个例子吧,在创建子进程时,你是怎么保证父子进程执行的先后顺序呢?我在以前的时候是通原创 2013-06-13 16:57:02 · 26471 阅读 · 16 评论 -
Linux进程间通信(五)---信号通信之signal()、信号集函数组及其基础实验
上一节介绍进程间通信方式之一信号通信中的信号产生和捕捉函数,这一节介绍信号处理函数signal()函数和信号集函数组,接上一节http://blog.csdn.net/mybelief321/article/details/9078193强烈建议做最后一个实验!信号处理方法 信号处理的方法主要有以下两种: ① 使用 signal() 函数; ② 使用信号集函数组原创 2013-06-13 10:16:26 · 7875 阅读 · 1 评论 -
Linux进程间通信(四)---信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验
/********************************************************************** 2019年6月26日声明:本博客资源下载积分最开始为免费的,我也不知道为什么有的很高了。*如果有问题加我微信:wensong2048,(加我备注来源以及需求,否则不通过,谢谢)**********************************...原创 2013-06-12 11:17:45 · 11170 阅读 · 2 评论 -
Linux进程间通信(三)---管道通信之有名管道及其基础实验
/********************************************************************** 2019年6月26日声明:本博客资源下载积分最开始为免费的,我也不知道为什么有的很高了。*如果有问题加我微信:wensong2048,(加我备注来源以及需求,否则不通过,谢谢)**********************************...原创 2013-06-11 15:44:50 · 12316 阅读 · 10 评论 -
Linux进程间通信(二)---管道通信之无名管道及其基础实验
管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子)。Linux的管道主要包括两种:无名管道和有名管道。这一节主要讲无名管道,首先介绍一下这两个管道。(特点很重要啊!)1、无名管道 无名管道是Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点: ① 它只能用于具有亲缘原创 2013-06-11 09:59:14 · 11793 阅读 · 5 评论 -
Linux进程间通信(一)---进程间通信概述及其种类
为什么会有进程间通信? 我们应该都知道了,进程是一个程序的一次执行,是系统资源分配的最小单元。这里所说的进程一般是指运行在用户态的进程,而由于处于用户态的不同进程间是彼此隔离的,但是它们很可能需要相互发送一些信息,好让对方知道自己的进度等情况,像这样进程间传递信息就叫进程间通信。进程间通信方式有几种? 就像处于不同城市的人之间的通信方式有手机、电脑等方式一样,进程间通信的方式有几原创 2013-06-10 21:33:36 · 3708 阅读 · 1 评论 -
Linux多任务编程(七)---Linux守护进程及其基础实验
守护进程概述 守护进程,又叫daemon进程(不知怎的,我突然想起来吸血鬼日记中的达蒙了,很好看的美剧),是Linux中的后台服务进程。他是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或者等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止。Linux有很多系统哦服务,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务,例如,作业原创 2013-06-10 16:38:03 · 5889 阅读 · 6 评论 -
Linux多任务编程(六)---编写多进程程序及其代码
实验目的 通过编写多进程程序,熟练掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤。实验内容 该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s后异常退出。父进程先用阻塞方式等待第一个进程的结束,然后用非阻塞方式等待另一个子进程的退原创 2013-06-10 09:19:03 · 15704 阅读 · 10 评论 -
Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
wait()和waitpid()函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若干选项,如可原创 2013-06-09 21:25:27 · 21702 阅读 · 0 评论 -
Linux多任务编程(四)---exit()函数及其基础实验
exit()和_exit()函数函数说明 创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示: 从图1可以看出,_exit()函数的作用原创 2013-06-09 15:42:34 · 3269 阅读 · 0 评论 -
Linux多任务编程(三)---exec函数族及其基础实验
exec函数族函数族说明 fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既原创 2013-06-09 13:55:47 · 15150 阅读 · 4 评论 -
Linux多任务编程(二)---fork()函数及其基础实验
fork()函数 在 Linux 中创建一个新进程的唯一方法是使用fork()函数。fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看。函数说明 fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进原创 2013-06-08 13:47:05 · 4444 阅读 · 1 评论 -
Linux多任务编程(一)---任务、进程、线程
Linux下多任务介绍 首先,先简单的介绍一下什么叫多任务系统?任务、进程、线程分别是什么?它们之间的区别是什么?,从而可以宏观的了解一下这三者,然后再针对每一个仔细的讲解。 什么叫多任务系统?多任务系统指可以同一时间内运行多个应用程序,每个应用程序被称作一个任务。 任务定义:任务是一个逻辑概念,指由一个软件完成的任务,或者是一系列共同达到某一目的的操作。 进程定义:...原创 2013-06-08 11:04:36 · 9411 阅读 · 3 评论 -
Linux系统文件I/O编程(三)---I/O多路复用
多路复用函数说明 我们都知道fcntl()函数解决了文件共享的问题,如果不知道请看:http://blog.csdn.net/mybelief321/article/details/8993138。接下来该处理I/O复用的情况了。那么,什么是I/O复用呢?这个咱得先弄清楚,所谓的I/O复用无非就是多个进程共同使用一个I/O输入输出流。 在经典的《Unix网络编程第1卷》Cha原创 2013-05-31 11:15:30 · 4667 阅读 · 1 评论 -
Linux系统文件I/O编程(二)---文件锁函数
文件锁 上一节:http://blog.csdn.net/mybelief321/article/details/8989755讲述的5个基本函数函数open()、read()、write()、lseek()和close()实现的文件的打开、读/写等操作,本节将讨论在文件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况。这时,Linux通常采用的方法是给文件上锁,来原创 2013-05-30 13:52:57 · 6938 阅读 · 3 评论 -
Linux系统文件I/O编程(一)---open()等基本函数
Linux文件I/O系统概述 虚拟文件系统(VFS) Linux系统成功的关键因素之一就是具有与其他操作系统和谐共存的能力。Linux系统的文件系统由两层结构构建:第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统。 VFS就是把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分,它位于用户程序和具体的文件系统之间。它对用户提供了标原创 2013-05-30 08:55:22 · 31018 阅读 · 5 评论 -
Linux系统调用及用户编程接口(API)学习
Linux系统调用 系统调用指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。 为什么用户程序不能直接访问系统内核提供的服务呢?这是由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为用户空间和内核空间(也就是常称的用户态和内核态),它们分别运行在不同的级别上,逻辑上是相互分离的。因此,用户进程通常情况下不原创 2013-05-29 15:42:54 · 11404 阅读 · 1 评论