UNIX/Linux IPC 接口详解
UNIX/Linux 进程/线程间通信 实例源代码 详解. 即UNIX/Linux IPC 系统接口介绍
yang_yulei
这个作者很懒,什么都没留下…
展开
-
UNIX/Linux进程间通信IPC---管道--全总结(实例入门)
管道一般,进程之间交换信息的方法只能是经由fork或exec传送打开文件,或者通过文件系统。而进程间相互通信还有其他技术——IPC(InterProcessCommunication)(因为不同的进程有不同的进程空间,我们无法自己设定一种数据结构 使不同的进程都可以访问,故需要借助于操作系统,它可以给我们提供这样的机制。IPC) 管道是UNIX系统IPC的最古老的形式,并且所有UN原创 2013-12-18 23:02:23 · 4977 阅读 · 0 评论 -
UNIX/Linux-线程(实例入门篇)
UNIX线程单个控制线程的进程在同一时刻只做一件事情,有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各自独立的任务。 使用多线程的好处:1、 通过为每种事件类型的处理分配单独的线程,能够简化处理异步事件的代码。2、 多个进程必须使用操作系统提供的复杂机制才能实现内存和文件描述符的共享,而多个线程自动地可以访问相同的存储空间原创 2013-12-26 23:22:46 · 2183 阅读 · 0 评论 -
UNIX/Linux-线程控制(实例入门篇)
UNIX线程控制线程属性在创建线程时,可以用pthread_attr_t结构修改线程默认属性,并把这些属性与创建的线程联系起来。可以用pthread_attr_init函数初始化pthread_attr_t结构。#include int pthread_attr_init (pthread_attr_t* attr) ;int pthread_attr_destroy (p原创 2014-01-02 23:53:38 · 6716 阅读 · 0 评论 -
UNIX/Linux-线程同步(实例入门篇)
UNIX线程同步当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图,这就需要对这些线程进行同步。同步就是要保证每次各线程对数据的操作总是以顺序一致的方式出现的。 竞争的原因1、计算机体系结构的因素例如变量的递增操作:① 从内存单元读入寄存器② 在寄存器中进行变量值的增加③ 把新的值写回内存单元如果两个线程试图在几乎同一时间对同一个原创 2014-01-10 12:37:07 · 4308 阅读 · 0 评论 -
UNIX/Linux-进程环境(实例入门篇)
UNIX进程环境当内核执行C程序时,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址(由链接器设置的),启动例程从内核取得命令行参数和环境变量值,为调用main函数做好安排。启动例程的逻辑就是:使得从main返回后立即调用exit函数。即:exit(main(argc, argv)) ;(启动例程的作用就是把命令行参数传给main,在main结束原创 2013-12-23 23:34:21 · 1613 阅读 · 0 评论 -
UNIX/Linux-进程控制(实例入门篇)
UNIX进程 进程标识符要想对进程控制,必须得获取进程的标识。每个进程都有一个非负整数表示的唯一进程ID,虽然是唯一的,但是进程ID可以重用。当一个进程终止后,其进程ID就可以再次使用了。系统中有一些专用的进程。ID为0的进程通常是调度进程(常常被称为交换进程swapper)。该进程是内核的一部分,它不执行任何磁盘上的程序。进程ID1通常是init进程。此进程负原创 2013-12-18 22:38:33 · 9125 阅读 · 0 评论 -
UNIX/Linux进程间通信IPC系列(一)总论
XSI IPC总论 有三种IPC我们称作XSI IPC,即消息队列、信号量、共享存储器。它们之间有很多相似之处。XSI IPC源自systemV的IPC功能,由于XSI IPC不使用文件系统的名字空间,而是构造了它们自己的名字空间,为此常常受到批评。(POSIX IPC 使用的是文件系统的名字空间,但我发现很多Linux发行版都不支持POSIX IPC,而systemV IPC原创 2014-01-14 20:57:07 · 2290 阅读 · 0 评论 -
UNIX/Linux进程间通信IPC系列(二)管道
管道一般,进程之间交换信息的方法只能是经由fork或exec传送打开文件,或者通过文件系统。而进程间相互通信还有其他技术——IPC(InterProcess Communication)(因为不同的进程有不同的进程空间,我们无法自己设定一种数据结构使不同的进程都可以访问,故需要借助于操作系统,它可以给我们提供这样的机制。IPC) 管道是UNIX系统IPC的最古老的形式,并且所有UN原创 2014-01-14 20:57:19 · 2459 阅读 · 0 评论 -
UNIX/Linux进程间通信IPC系列(三)FIFO
FIFOFIFO有时被称为命名管道。管道只能由相关进程使用,但是,通过FIFO,不相关进程也能交换数据。FIFO的路径名存在于文件系统中,一般的文件I/O函数都可用于FIFO。创建FIFO类似于创建文件:#include #include int mkfifo (const char* pathname, mode_t mode) ;其中pathname是一个普通的Un原创 2014-01-21 23:46:00 · 4912 阅读 · 0 评论 -
UNIX/Linux进程间通信IPC系列(四)消息队列
消息队列消息队列是消息的链表,存放在内核中并由消息队列标识符标识。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。这跟管道和FIFO是相反的,对后两者来说,除非读出者已存在,否则先有写入者是没有意义的。 管道和FIFO都是随进程持续的,XSI IPC(消息队列、信号量、共享内存)都是随内核持续的。当一个管道或FIFO的最后一次关闭发生时,仍在该管道或原创 2014-02-23 23:06:34 · 18870 阅读 · 1 评论 -
UNIX/Linux进程间通信IPC系列(五)信号
信号信号是软件中断。它允许进程中断其他进程。信号是异步处理事件的经典实例。产生信号的事件对进程而言是随机出现的。进程不能简单地测试一个变量(例如errno)来判别是否出现了一个信号,而是必须告诉内核“在此信号出现时,请执行下列操作”。一个信号就是一条小消息,它通知进程系统中发生了一个某种类型的事件。每种信号类型都对应于某种系统事件。低层的硬件异常是由内核异常处理程序处理的,正常原创 2014-03-26 23:41:44 · 2852 阅读 · 0 评论 -
UNIX/Linux进程间通信IPC系列(六)信号量
信号量信号量(semaphore)是一个计数器,用于多进程对共享数据的访问。为了获得共享资源,进程需要执行下列操作:⑴ 测试控制资源的信号量。⑵ 若此信号量的值为正,则进程可以使用该资源。进程将信号量值减1,表示它使用了一个资源单位。⑶ 若此信号量的值为0,则进程进入休眠状态,直至信号量值大于0。进程被唤醒后,它返回执行第1步。当进程不再使用此共享资源时,该信号量值原创 2014-02-27 23:48:47 · 5452 阅读 · 0 评论 -
UNIX/Linux进程间通信IPC系列(七)共享内存区
共享存储共享存储允许两个或更多进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核。但往该共享内存区存放信息或从中取走信息的进程间需要某种形式的同步。(通常,信号量、记录锁被用来实现对共享存储访问的同步) shmget函数shmget函数创建一个新的共享内原创 2014-02-28 23:45:27 · 2635 阅读 · 0 评论