半双工。通常由父进程建立,用于父子进程间、子进程间通讯。匿名,一对一。函数
// fd[0] 只读 // fd[1] 只写 int pipe (int fd[2]);
简单执行命令行,并读写标准输入输出。post
// 若是 modes == "r",返回标准输出 // 若是 modes == "w",返回标准输入 FILE *popen (const char *__command, const char *__modes); int pclose (FILE *__stream);
用法:服务端建立一个 FIFO,其它任何进程均可以向其写入数据,服务端读到数据后处理。能够一读多写。写数据的大小小于 PIPE_BUF 时为原子操做。命令行
相似文件操做,包括用户/组/其它人的读写执行权限,删除须要 unlink。线程
int mkfifo (const char *__path, __mode_t __mode); int mkfifoat (int __fd, const char *__path, __mode_t __mode);
匿名信号量:同一进程不一样线程使用。若是须要跨进程,须要将信号量结构体进行内存映射。rest
命名信号量:能够直接在不一样进程中使用。blog
// 匿名信号量 int sem_init (sem_t *__sem, int __pshared, unsigned int __value) int sem_destroy (sem_t *__sem); // 打开已有信号量,oflag = 0 // 若是须要在信号量不存在时建立,oflag = O_CREAT,且必须指定 mode 的文件访问权限和 value 信号量初始值(0~SEM_VALUE_MAX) sem_t *sem_open (const char *__name, int __oflag, ... /* mode_t mode, unsigned int value */); int sem_close (sem_t *__sem); // 没有人使用信号量后,自动删除 int sem_unlink (const char *__name); // P int sem_wait (sem_t *__sem); int sem_timedwait (sem_t *__restrict __sem, const struct timespec *__restrict __abstime); int sem_trywait (sem_t *__sem); // V int sem_post (sem_t *__sem);
多个进程用相同的 key 使用 sh* 系列函数。进程
/* The following System V style IPC functions implement a shared memory facility. The definition is found in XPG4.2. */ /* Shared memory control operation. */ extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW; /* Get shared memory segment. */ extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW; /* Attach shared memory segment. */ extern void *shmat (int __shmid, const void *__shmaddr, int __shmflg) __THROW; /* Detach shared memory segment. */ extern int shmdt (const void *__shmaddr) __THROW;