管道
Linux管道(pipe)提供一种单向(半双工)的进程间通讯机制。管道有一个读端和一个写端。从写端写入的数据可以重读端读出来。函数pipe()创建一个管道,返回两个文件描述符,fd[0]是读端,f[1]是写端。如下图
管道的读写可以使用Linux标准IO操作接口进行,例如read、write等。从图1不难看出,数据一直缓存在内核中直到被读取出来。
单个进程的管道几乎没有任何用处...
分类:
其他好文 时间:
2014-12-02 00:10:17
阅读次数:
301
上篇中的无名管道通信是父子进程之间的通信,限定了进程之间的通信,从而就有了有名管道,它可以使不同进程之间进行通信,有名管道可以通过指定路径名来指出,兵长文件系统中可见。进程通过文件IO来操作有名管道,有名管道遵从先进先出的原则,但是不支持lseek函数。
1)int mkfifo(const char *pthname,mode_t mode)创建有名管道,
2)在内核中创建对象,但没有打开读...
分类:
系统相关 时间:
2014-12-01 22:33:40
阅读次数:
257
Socket API基本编程模型TCP客户/服务器模型 简单echo服务器模型 Socket 基础API实践socket函数#include /* See NOTES */
#include 功能:创建一个套接字用于通信原型int socket(int domain, int type, int protocol);参数 domain:指定通信协议族(proto...
分类:
其他好文 时间:
2014-12-01 22:29:40
阅读次数:
251
Socket Api基本概念什么是socket? socket可以看成是用户进程与内核网络协议栈的编程接口(如下图所示)。 socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。 tcp/ip通信模型 C/S模型 B/S模型 IPv4套接口地址结构 IPv4套接口地址结构通常也称为“网际套接字...
分类:
其他好文 时间:
2014-12-01 14:24:17
阅读次数:
163
信号量API综合实践//实践1:封装PV原语
union mySemUn
{
int val; // Value for SETVAL//
struct semid_ds *buf; // Buffer for IPC_STAT, IPC_SET//
unsigned short *array; // Array for GETAL...
分类:
系统相关 时间:
2014-11-30 12:34:17
阅读次数:
153
进程的同步与互斥 顺序程序与并发程序特征顺序程序并发程序顺序性共享性封闭性:(运行环境的封闭性)并发性确定性随机性可再现性 进程互斥 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥. 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。 在进程中涉及到互斥资源的程序段叫临界区. 互斥示例说...
分类:
系统相关 时间:
2014-11-30 12:33:11
阅读次数:
272
ContentProvider统一了对数据源操作的接口,并支持进程间通信(IPC),应用进程之间可以通过ContentProvider对外暴露接口,来分享数据。作为android中核心组件,不得不深入了解,翻看了android的源码写篇blog与大家分享。1.我画了一个静态类结构图,看下图:上图中已经把ContentP..
分类:
移动开发 时间:
2014-11-30 00:57:19
阅读次数:
269
在android中进程间通信(IPC)的基石是Binder系统,Binder系统的核心Binder驱动是C来实现的,对于应用开发人员来说无疑晦涩难懂,而整个android框架是基于面向对象思想的,对于底层Binder驱动的操作细节全部隐藏,framework层提供了一个牛逼无比的Binder对象,所以我们要实现进程..
分类:
移动开发 时间:
2014-11-30 00:56:11
阅读次数:
161
消息队列函数 #include
#include
#include
int msgget(key_t key, int msgflg);
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);...
分类:
系统相关 时间:
2014-11-29 11:58:26
阅读次数:
302
API综合使用//父进程发送消息,子进程接收消息
struct msgBuf
{
long mtype; /* message type, must be > 0 */
char mtext[104]; /* message data */
};
const int MSGNUMBER = 10;
int main()
{
//获取一个键
key...
分类:
系统相关 时间:
2014-11-29 11:57:20
阅读次数:
295