unpipc.h&unpipc.c】的更多相关文章

unpipc.h #ifndef _UNPIPC_H #define _UNPIPC_H #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <limits.h> #include <stdarg.h> #incl…
/* include px_ipc_name */ #include "unpipc.h" char * px_ipc_name(const char *name) { char *dir, *dst, *slash; if ( (dst = malloc(PATH_MAX)) == NULL) return(NULL); /* 4can override default directory with environment variable */ if ( (dir = getenv…
要点 与mmap配合使用 open与shm_open的区别,open打开磁盘上的普通文件,shm_open创建和打开的文件在/dev/shm文件夹下,该文件夹对应的是内存 gcc编译时加参数-lrt shm_open的第一个参数名字的形式: /name, 如"/myshm" 基本函数 #include <sys/mman.h> int shm_open(const char *name, int oflag, mode_t mode); int shm_unlink(con…
信号量对比 二值信号量:其值要么0要么1,比如互斥锁就是这种类型 计数信号量:其值为0或某个正整数,比如POSIX 信号量 计数信号量:一个或多个信号量构成一个集合,每个都是计数信号量,比如System V信号量 shell查看命令:ipcs -s 基本函数 #include <sys/ipc.h> key_t ftok(char *fname,int id); #include <sys/sem.h> int semget(key_t key,int nsems,int ofla…
作用 信号量的值为0或正整数,就像红灯与绿灯,用于指示当前是否可以接受任务. 信号量对进程和线程都适用. gcc编译时需加-lpthread 基本函数 信号量的相关函数与标准文件函数非常相似,可以理解文件的读写,只是读写对象不同而已 #include <semaphore.h> sem_t *sem_open(const char *name,int oflag,... /* mode_t mode,unsigned int value */); int sem_close(sem_t *se…
消息的基本属性 System V的消息属性包含在一个msqid_ds的结构中 struct msqid_ds{ struct ipc_cerm msg_perm; //读取权限, 0644, 0777 struct *msg_first; //消息队列的第一条消息地址 struct *msg_last; //消息队列的最后一条消息地址 msglen_t msg_cbytes; //当前消息的长度 msgnum_t msg_qnum; //消息队列中的消息总数 msglen_t msg_qbyte…
注意 在涉及到posix消息的函数时, gcc 编译时要加-lrt参数, 如 gcc -lrt unpipc.c mqpack.c send.c -o send gcc -lrt unpipc.c mqpack.c receive.c -o receive posix消息的name必须以/开头, 例 ./send /msgname 基本函数 #include <mqueue.h> mqd_t mq_open(const char *name,int oflag, ... /* mode_t m…
管道 提供一个单路(单向)数据流,可以为两个不同进程提供进程间的通信手段 #include <unistd.h> ]); 返回两个文件描述符,fd[0](读) 和 fd[1](写) 管道间的通信通常是使用 read 和 write 函数完成的 管道的典型用法: 首先,由父进程创建一个管道,然后调用fork派生一个自身的副本 接着,父进程关闭管道的读端,子进程关闭管道的写段 这样就在父子进程间提供了一个单向数据流 双管道: 当需要一个双向数据流的时候,我们必须创建两个管道,每个方向一个 ], p…
共享内存区域是被多个进程共享的一部分物理内存.如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中.但是它不需要在所有进程的虚拟内存中都有相同的虚拟地址. 共享内存的实现,分为两个步骤:a. 创建共享内存,使用 shmget 函数.b. 映射…
系统加于管道和FIFO的唯一限制为: OPEN_MAX     一个进程在任意时刻打开的最大描述符数: PIPE_BUF       可原子的写往一个管道或FIFO的最大数据量. OPEN_MAX的值可通过调用sysconf函数查询.它通过可通过执行ulimit命令(Bourne shell或Korn Shell)或limit命令(C shell)从shell中修改.它也可以通过调用setrlimit函数从一个进程中修改. PIPE_BUF的值通常定义在<limits.h>头文件中,但是Pos…