linux进程及进程间通信
文章平均质量分 79
panda19881
这个作者很懒,什么都没留下…
展开
-
linux下编程实现mplayer播放器总结
一:mplayer简介MPlayer是一款开源的多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix作业系统、微软的视窗系统及苹果电脑的Mac OS X系统。MPlayer是建基于命令行界面,在各作业系统可选择安装不同的图形界面。因为linux下都是命令行的操作方式,所以对mplayer的各种操作都是用命令来实现的,这次主要用的是它的slave工作方式slave模式协议1,简介: 默认mplayer是从键盘上获得控制信息 mplayer另外提供原创 2011-01-19 15:07:00 · 8900 阅读 · 2 评论 -
共享内存应用实例
<br />1,功能描述<br /> 此程序实现没有亲缘关系的进程间通过共享内存进行数据通信,同时,使用信号量来保证两进程间的读写同步:及发送方在发送数据时,接收方不能接收数据,反之亦然。<br />2, 基本思路<br /> 首先设置信号量的初始值为0,表示没有写入任何数据,不可以读;<br /> 发送端在信号量的值为0的时候写入数据,写入完成后,设置信号量为1,表示可以读数据,不可以写数据<br /> 接收端在信号量为1时读出数据,并阻塞写入端,读出完成后,设置信号量的值为0,表原创 2011-01-26 16:14:00 · 1386 阅读 · 0 评论 -
管道应用命令
一:管道应用命令利用输入/输出重定向 在Linux命令行模式中,如果命令所需的输出不是来自键盘,而是来自指定的文件,这就是输入重定向。同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。 接下来看看标准输入/输出重定向在构造一条Linux命令中的实际应用。输入重定向和输出重定向# wc home.txt 第一条命令将文件aa.txt作为wc命令的输入,统计出aa.txt的行数、单词数和字符数。第二条命令将ls命令的输出保存在一个名为home.txt的文件中。如果>符号后边的文转载 2011-01-25 16:47:00 · 708 阅读 · 0 评论 -
消息队列应用实例——多人聊天室
根据不同的宏定义,在Makefile中添加不同的编译对象,可以添加更多的人先执行lucy源程序/* ************************************************************************ * Filename: lucy.c * Description: * Version: 1.0 * Created: 2010年12月31日 15时12分41秒 * Rev原创 2011-01-25 21:27:00 · 1689 阅读 · 2 评论 -
linux进程间通信5——信号量
一、什么是信号量信号量(也叫信号量)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。信号量是进程/线程同步的一种方式,有时候我们需要保护一段代码,使它每次只能被一个执行进程/线程运行,这种工作就需要一个二进制开关;有时候需要限制一段代码可以被多少个进程/线程执行,这就需要用到关于计数信号量。信号量开关是二进制信号量的一种逻辑扩展,两者实际调用的函数都是一样的。信号量分为以下三种。1、System V信号量,在内核中维护,可用于进程或线程间的同步,常用于进程的同步。 2、Posix有名信号量原创 2011-01-26 11:01:00 · 2131 阅读 · 0 评论 -
信号量应用实例——生产者和消费者
<br /><br /> 生产者源码:<br />#include<unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <errno.h>void init();//initlization semaphorevoid del();//delete semaphoreint sem_id;原创 2011-01-26 11:20:00 · 847 阅读 · 0 评论 -
linux进程间通信6——共享内存
<br /><br /><br />一、共享内存概述<br /> 共享内存区是最快的可用IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序效率。<br /> 共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段“连接到”它们自己的地址空间原创 2011-01-26 12:29:00 · 1028 阅读 · 0 评论 -
linux进程间通信3——信号
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。 1、基本概念 软中断转载 2011-01-25 17:10:00 · 1170 阅读 · 0 评论 -
linux信号列表
<br /><br />$ kill -l<br />1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGST转载 2011-01-25 17:12:00 · 453 阅读 · 0 评论 -
信号量操作相关知识——PV原语
<br />1962年,狄克斯特拉离开数学中心进入位于荷兰南部的艾恩德霍芬技术大学(Eindhoven Technical University)任数学教授。在这里,他参加了X8计算机的开发,设计与实现了具有多道程序运行能力的操作系统——THE Multiprogramming System。THE是艾恩德霍芬技术大学的荷兰文Tchnische Hoogeschool Eindhov –en的词头缩写。狄克斯特拉在THE这个系统中所提出的一系统方法和技术奠定了计算机现代操作系统的基础,尤其是关于多层体系结构转载 2011-01-26 11:27:00 · 717 阅读 · 0 评论 -
linux进程间通信2——有名管道
mkfifo函数的作用是在文件系统中创建一个文件,该文件用于提供FIFO功能,即命名管道。前边讲的那些管道都没有名字,因此它们被称为匿名管道,或简称管道。对文件系统来说,匿名管道是不可见的,它的作用仅限于在父进程和子进程两个进程间进行通信。而命名管道是一个可见的文件,因此,它可以用于任何两个进程之间的通信,不管这两个进程是不是父子进程,也不管这两个进程之间有没有关系。1、创建有名管道Mkfifo函数的原型如下所示:#include #include int mkfifo( const char *pathn原创 2011-01-25 17:01:00 · 5113 阅读 · 0 评论 -
进程的基本概念
<br />概述:<br />进程是操作系统结构的基础,是一个正在执行的程序,计算机中正在运行的程序实例(QQ 、IE、etc),可以分配给处理器并由处理器执行的一个实体。由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。<br />1.主要阶段<br />进程是由进程控制块、程序段、数据段三部分组成。一个进程可以包含若干线程(Thread),线程可以帮助应用程序同时做几件事(比如一个线程向磁盘写入文件,另一个则接收用户的按键操作并及时做出反应,互相不干扰),在程序被运行后,系统首先要原创 2011-01-21 10:17:00 · 702 阅读 · 0 评论 -
进程间通信1—管道
一、Linux管道的实现机制在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: 限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不象文件那样不加检验地增长。使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的空间供write()调原创 2011-01-25 15:39:00 · 893 阅读 · 0 评论 -
linux进程通信概述
linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。Linux则把两者继承了下来。其中,最初Unix IPC包括:管道、FIFO、信号;System V转载 2011-01-25 15:46:00 · 557 阅读 · 0 评论 -
linux进程的创建
一:linux创建新进程的过程 系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。整个linux系统的所有进程也是一个树形结构。树根是系统自动构造的,即在内核态下执行的0号进程,它是所有进程的祖先。由0号进程创建1号进程(内核态),1号负责执行内核的部分初始化工作及进行系统配置,并创建若干个用于高速缓存和虚拟主存管理的内核线程。随后,1号进程调用execve()运行可执行程序init,并演变成用户态1号进程,即init进程。它按照配置文件/etc/initab原创 2011-01-24 17:27:00 · 608 阅读 · 0 评论 -
exec函数簇和system函数
exec用被执行的程序完全替换调用它的程序的影像。fork创建一个新的进程就产生了一个新的PID,exec启动一个新程序,替换原有的进程,因此这个新的被exec执行的进程的PID不会改变,和调用exec函数的进程一样。int exec…装入和运行其它程序:int execl( char *pathname,char *arg0,char *arg1,...,char *argn,NULL)int execle( char *pathname,char *arg0,char *arg1,...,原创 2011-01-24 18:49:00 · 1649 阅读 · 0 评论 -
exit函数及与return的区别
通常情况:exit(0)表示程序正常, exit(1)/exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件。用Error lookup可以查看exit()结束当前进程/当前程序/,在整个程序中,只要调用exit就结束(当前进程或者在main时候为整个程序)return()是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值,依次类推。exit(1)表示进程非正原创 2011-01-25 11:40:00 · 1118 阅读 · 0 评论 -
进程的基本属性
<br /> <br />一:基本属性<br />1,进程号(PID):是系统维护的唯一标识一个进程的正整数,进程号无法在用户态修改;<br />获取函数:// come from /usr/include/unistd.h extern _pid_t getpid(void);返回PID<br />获取命令:ps aux<br />2,父进程号(PPID):任何进程(除了init进程)都是有另一个进程创建,该进程称为被创建进程的父进程,被创建进程称为子进程<br />获取函数:exte原创 2011-01-24 15:15:00 · 2013 阅读 · 0 评论 -
wait、waitpid函数
有时候我们希望子进程继续执行,而父进程阻塞直到子进程完成任务。这个时候我们可以调用wait或者waitpid系统调用. 当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。父进程可以忽略该信号,或调用信号处理函数。调用wait或waitpid的进程,会发生以下情况:1). 如果其所有子进程都在运行,则该进程阻塞2). 如果一个子进程已经终止,正等待父进程获取其终止状态,则取得该进程的终止状态立即返回3). 如果它没有任何子进程,则立即出错返回。#include #pid_t wait (in原创 2011-01-25 09:58:00 · 717 阅读 · 0 评论 -
linux进程间通信4——消息队列
一.IPC概述系统建立IPC通讯(如消息队列、共享内存时),由于通信双方不在同一进程中,为了找到相同的通信工具,必须指定同一个ID值。通常情况下,该id值通过ftok函数得到。ftok原型如下:key_t ftok( char * fname, int id )fname就时你指定的文件名,id是子序号。在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进制为0x010002,而你指定的ID值为38,换算成16进制为0x26原创 2011-01-25 21:22:00 · 1842 阅读 · 1 评论